package org.robotframework.swing.table; import java.awt.Point; import java.util.Enumeration; import javax.swing.table.TableColumn; import org.netbeans.jemmy.operators.JTableHeaderOperator; import org.robotframework.swing.common.IdentifierSupport; import org.robotframework.swing.util.ObjectUtils; public class TableHeaderOperator extends IdentifierSupport { private final JTableHeaderOperator headerOperator; public TableHeaderOperator(JTableHeaderOperator jTableHeaderOperator) { headerOperator = jTableHeaderOperator; } public void clickColumn(String identifier) { click(coordinatesOfTableHeaderWith(identifier)); } private Point coordinatesOfTableHeaderWith(String identifier) { return headerOperator.getPointToClick(columnIndex(identifier)); } private void click(Point point) { headerOperator.clickMouse(point.x, point.y, 1); } private int columnIndex(String identifier) { if (isIndex(identifier) && validIndex(asIndex(identifier))) return asIndex(identifier); return indexOfColumnLabel(identifier); } public int indexOfColumnLabel(String label) { Enumeration<TableColumn> columns = columns(); for (int i = 0; columns.hasMoreElements(); i++) if (ObjectUtils.nullSafeEquals(nextHeaderValue(columns), label)) return i; throw new RuntimeException("The specified column identifier '" + label + "' is invalid."); } public Object nextHeaderValue(Enumeration<TableColumn> columns) { return columns.nextElement().getHeaderValue(); } public Enumeration<TableColumn> columns() { return headerOperator.getColumnModel().getColumns(); } private boolean validIndex(int index) { return index >= 0 && index < headerOperator.getColumnModel().getColumnCount(); } }