/**
  * Verifies, whether value exists in row..
  *
  * @param row The row of the cell.
  * @param rowOperator the row header operator
  * @param value The cell text to verify.
  * @param operator The operation used to verify
  * @param searchType Determines where the search begins ("relative" or "absolute")
  * @param exists true if value exists, false otherwise
  * @throws StepExecutionException If the row or the column is invalid, or if the rendered text
  *     cannot be extracted.
  */
 public void rcVerifyValueInRow(
     final String row,
     final String rowOperator,
     final String value,
     final String operator,
     final String searchType,
     boolean exists)
     throws StepExecutionException {
   final TreeTableOperationContext adapter = getContext();
   final int implRow = adapter.getRowFromString(row, rowOperator);
   boolean valueIsExisting = false;
   // if row is header
   if (implRow == -1) {
     for (int i = getStartingColIndex(searchType); i < adapter.getColumnCount(); ++i) {
       if (MatchUtil.getInstance().match(adapter.getColumnHeaderText(i), value, operator)) {
         valueIsExisting = true;
         break;
       }
     }
   } else {
     for (int i = getStartingColIndex(searchType); i < adapter.getColumnCount(); ++i) {
       if (MatchUtil.getInstance().match(getCellText(implRow, i), value, operator)) {
         valueIsExisting = true;
         break;
       }
     }
   }
   Verifier.equals(exists, valueIsExisting);
 }
  /**
   * Action to read the value of the passed cell of the table to store it in a variable in the
   * Client
   *
   * @param variable the name of the variable
   * @param row the row to select
   * @param rowOperator the row header operator
   * @param col the column to select
   * @param colOperator the column header operator
   * @return the text value.
   */
  public String rcReadValue(
      String variable, String row, String rowOperator, String col, String colOperator) {
    TreeTableOperationContext adapter = getContext();
    final int implRow = adapter.getRowFromString(row, rowOperator);
    final int implCol = adapter.getColumnFromString(col, colOperator, implRow != -1);

    // if row is header and column is existing
    if (implRow == -1 && implCol > -1) {
      return adapter.getColumnHeaderText(implCol);
    }
    checkRowColBounds(implRow, implCol);
    adapter.scrollCellToVisible(implRow, implCol);
    return getCellText(implRow, implCol);
  }
 /**
  * Looks if value exists in the Column.
  *
  * @param adapter the table adapter working on.
  * @param implCol the implementation column of the cell.
  * @param value the cell text to verify.
  * @param operator The operation used to verify.
  * @param searchType searchType Determines where the search begins ("relative" or "absolute")
  * @return <code>true</code> it the value exists in the column
  */
 private boolean isValueExisting(
     TreeTableOperationContext adapter,
     int implCol,
     String value,
     String operator,
     final String searchType) {
   final int rowCount = adapter.getRowCount();
   for (int i = getStartingRowIndex(searchType); i < rowCount; ++i) {
     if (MatchUtil.getInstance().match(getCellText(i, implCol), value, operator)) {
       return true;
     }
   }
   if (adapter.isHeaderVisible()) {
     String header = adapter.getColumnHeaderText(implCol);
     if (MatchUtil.getInstance().match(header, value, operator)) {
       return true;
     }
   }
   return false;
 }
  /**
   * Finds the first column which contains the value <code>value</code> in the given row and selects
   * the cell.
   *
   * @param row the row
   * @param rowOperator the row header operator
   * @param value the value
   * @param regex search using regex
   * @param extendSelection Should this selection be part of a multiple selection
   * @param searchType Determines where the search begins ("relative" or "absolute")
   * @param co the click options to use
   */
  protected void selectCellByColValue(
      String row,
      String rowOperator,
      final String value,
      final String regex,
      final String extendSelection,
      final String searchType,
      ClickOptions co) {
    TreeTableOperationContext adapter = getContext();
    final int implRow = adapter.getRowFromString(row, rowOperator);
    int colCount = adapter.getColumnCount();
    Integer implCol = null;
    if (implRow == -1) {

      for (int i = getStartingColIndex(searchType); i < colCount; ++i) {
        if (MatchUtil.getInstance().match(adapter.getColumnHeaderText(i), value, regex)) {
          implCol = new Integer(i);
          break;
        }
      }
    } else {
      for (int i = getStartingColIndex(searchType); i < colCount; ++i) {
        if (MatchUtil.getInstance().match(getCellText(implRow, i), value, regex)) {

          implCol = new Integer(i);
          break;
        }
      }
    }
    if (implCol == null) {
      throw new StepExecutionException(
          "no such cell found",
          EventFactory //$NON-NLS-1$
              .createActionError(TestErrorEvent.NOT_FOUND));
    }

    String usrIdxRowStr = new Integer(IndexConverter.toUserIndex(implRow)).toString();
    String usrIdxColStr = new Integer(IndexConverter.toUserIndex(implCol.intValue())).toString();

    selectCell(usrIdxRowStr, rowOperator, usrIdxColStr, MatchUtil.EQUALS, co, extendSelection);
  }
  /**
   * Finds the first row which contains the value <code>value</code> in column <code>col</code> and
   * selects this row.
   *
   * @param col the column
   * @param colOperator the column header operator
   * @param value the value
   * @param regexOp the regex operator
   * @param extendSelection Should this selection be part of a multiple selection
   * @param searchType Determines where the search begins ("relative" or "absolute")
   * @param co the clickOptions to use
   */
  protected void selectRowByValue(
      String col,
      String colOperator,
      final String value,
      final String regexOp,
      final String extendSelection,
      final String searchType,
      ClickOptions co) {
    TreeTableOperationContext adapter = getContext();
    final int implCol = adapter.getColumnFromString(col, colOperator, true);
    Integer implRow = null;
    final int rowCount = adapter.getRowCount();

    for (int i = getStartingRowIndex(searchType); i < rowCount; ++i) {
      if (MatchUtil.getInstance().match(getCellText(i, implCol), value, regexOp)) {

        implRow = new Integer(i);
        break;
      }
    }
    if (implRow == null) {
      String header = adapter.getColumnHeaderText(implCol);
      if (MatchUtil.getInstance().match(header, value, regexOp)) {
        implRow = new Integer(-1);
      }
    }

    if (implRow == null) {
      throw new StepExecutionException(
          "no such row found", //$NON-NLS-1$
          EventFactory.createActionError(TestErrorEvent.NOT_FOUND));
    }

    String userIdxRow = new Integer(IndexConverter.toUserIndex(implRow.intValue())).toString();
    String userIdxCol = new Integer(IndexConverter.toUserIndex(implCol)).toString();

    selectCell(userIdxRow, MatchUtil.EQUALS, userIdxCol, colOperator, co, extendSelection);
  }
  /**
   * Verifies the rendered text inside the passed cell.
   *
   * @param row The row of the cell.
   * @param rowOperator The row header operator
   * @param col The column of the cell.
   * @param colOperator The column header operator
   * @param text The cell text to verify.
   * @param operator The operation used to verify
   * @throws StepExecutionException If the row or the column is invalid, or if the rendered text
   *     cannot be extracted.
   */
  public void rcVerifyText(
      String text,
      String operator,
      final String row,
      final String rowOperator,
      final String col,
      final String colOperator)
      throws StepExecutionException {
    TreeTableOperationContext adapter = getContext();
    final int implRow = adapter.getRowFromString(row, rowOperator);
    final int implCol = adapter.getColumnFromString(col, colOperator, implRow != -1);
    String current;
    // if row is header and column is existing
    if (implRow == -1 && implCol > -1) {
      current = adapter.getColumnHeaderText(implCol);
    } else {
      checkRowColBounds(implRow, implCol);
      adapter.scrollCellToVisible(implRow, implCol);
      current = getCellText(implRow, implCol);
    }

    Verifier.match(current, text, operator);
  }