package org.jboss.tools.teiid.reddeer.dialog;
import java.util.Arrays;
import org.jboss.reddeer.common.logging.Logger;
import org.jboss.reddeer.common.wait.AbstractWait;
import org.jboss.reddeer.common.wait.TimePeriod;
import org.jboss.reddeer.common.wait.WaitWhile;
import org.jboss.reddeer.core.condition.ShellWithTextIsActive;
import org.jboss.reddeer.core.matcher.WithLabelMatcher;
import org.jboss.reddeer.swt.impl.button.PushButton;
import org.jboss.reddeer.swt.impl.button.RadioButton;
import org.jboss.reddeer.swt.impl.combo.DefaultCombo;
import org.jboss.reddeer.swt.impl.ctab.DefaultCTabItem;
import org.jboss.reddeer.swt.impl.group.DefaultGroup;
import org.jboss.reddeer.swt.impl.styledtext.DefaultStyledText;
import org.jboss.reddeer.swt.impl.text.DefaultText;
import org.jboss.reddeer.swt.impl.tree.DefaultTree;
import org.jboss.reddeer.swt.impl.tree.DefaultTreeItem;
import org.jboss.tools.teiid.reddeer.matcher.ButtonWithToolTipMatcher;
public class CriteriaBuilderDialog extends AbstractDialog {
private static final Logger log = Logger.getLogger(CriteriaBuilderDialog.class);
public static class CriteriaSide {
public static final int LEFT = 0;
public static final int RIGHT = 1;
}
public static class RadioButtonType {
public static final String COLUMN = "Show the Column Editor";
public static final String CONSTANT = "Show the Constant Editor";
public static final String FUNCTION = "Show the Function Display Editor";
}
public static class OperatorType {
public static final int EQUALS = 0;// =
public static final int NOT_EQUAL = 1;// <>
public static final int LT = 2;// <
public static final int GT = 3;// >
public static final int LESS_OR_EQUAL = 4;// <=
public static final int GREATER_OR_EQUAL = 5;// >=
public static final int IS_NULL = 6;// IS NULL
public static final int LIKE = 7;// LIKE
public static final int IN = 8;// IN
public static final String AND = "AND";
public static final String OR = "OR";
public static final String NOT = "NOT";
}
public CriteriaBuilderDialog() {
super("Criteria Builder");
}
@Override
public void finish() {
log.info("Finishing '" + title + "' Dialog");
new PushButton("OK").click();
new WaitWhile(new ShellWithTextIsActive(title), TimePeriod.NORMAL);
}
@Override
public void activate(){
super.activate();
new DefaultCTabItem("Tree View").activate();
}
/**
* Selects specified radio button.
* @param type - CriteriaBuilder.RadioButtonType.COLUMN|CONSTANT|FUNCTION
* @param leftRight - CriteriaBuilder.CriteriaSide.LEFT|RIGHT
*/
public CriteriaBuilderDialog selectRadioButton(String type, int leftRight) {
log.info("Selecting " + type + " radio button (index=" + leftRight + ")");
new RadioButton(leftRight,new ButtonWithToolTipMatcher(type)).click();
return this;
}
/**
* Applies built criteria.
*/
public CriteriaBuilderDialog apply() {
log.info("Applying built criteria");
new PushButton("Apply").click();
return this;
}
/**
* Selects specified operator (combo box)
* @param operatorType - CriteriaBuilder.OperatorType.EQUALS|NOT_EQUAL|LT|GT|...
*/
public CriteriaBuilderDialog selectOperator(int operatorType) {
log.info("Selecting operator (id=" + operatorType + ")");
new DefaultCombo(0).setSelection(operatorType);
return this;
}
/**
* Clicks on specified operator (button)
* @param operatorType - CriteriaBuilder.OperatorType.AND|OR|NOT
*/
public CriteriaBuilderDialog clickOperator(String operatorType) {
log.info("Clicking operator '" + operatorType + "'");
new PushButton(operatorType).click();
AbstractWait.sleep(TimePeriod.SHORT);
return this;
}
/**
* Clears already built criteria
*/
public CriteriaBuilderDialog clearCriteria() {
log.info("Clearing built criteria");
new PushButton("Delete").click();
return this;
}
/**
* Selects item in Tree View
*/
public CriteriaBuilderDialog selectTreeViewItem(String... itemPath) {
log.info("Selecting item " + Arrays.toString(itemPath) + " in 'Tree View'");
new DefaultCTabItem("Tree View").activate();
new DefaultTreeItem(itemPath).select();
return this;
}
/**
* Gets current text from SQL View
*/
public String getCurrentSqlContent() {
log.info("Getting current sql from 'SQL View'");
DefaultCTabItem tab = new DefaultCTabItem("SQL View");
tab.activate();
return new DefaultStyledText().getText();
}
/**
* Selects column attribute
* @param index - if column is selected on both sides, use CriteriaBuilder.CriteriaSide.LEFT|RIGHT
* - if only one side, use 0
*/
public CriteriaBuilderDialog selectAttribute(String table, String attribute, int index) {
log.info("Selecting attribute '"+ attribute + "' in table '" + table + "' (index=" + index + ")");
DefaultTree tree = new DefaultTree(index + 1);
tree.setFocus();
new DefaultTreeItem(tree, table, table + "." + attribute).select();
return this;
}
/**
* Opens function's expression builder
* @param index - if function is selected on both sides, use CriteriaBuilder.CriteriaSide.LEFT|RIGHT
* - if only one side, use 0
*/
public ExpressionBuilderDialog openFunctionBuilder(int index) {
log.info("Opening function's expresion builder (index=" + index + ")");
new PushButton("Edit...").click();
return new ExpressionBuilderDialog();
}
/**
* Sets value in type combo box under constant editor
* @param index - if constant is selected on both sides, use CriteriaBuilder.CriteriaSide.LEFT|RIGHT
* - if only one side, use 0
*/
public CriteriaBuilderDialog selectConstantType(String type, int index){
log.info("Setting constant type to '" + type + "' (index=" + index + ")");
new DefaultCombo(index,new WithLabelMatcher("Type:")).setSelection(type);
return this;
}
/**
* Sets value in value text field under constant editor
* @param index - if constant is selected on both sides, use CriteriaBuilder.CriteriaSide.LEFT|RIGHT
* - if only one side, use 0
*/
public CriteriaBuilderDialog selectConstantValue(String value, int index){
log.info("Setting constant value to '" + value + "' (index=" + index + ")");
new DefaultText(new DefaultGroup("Value"),index).setText(value);
return this;
}
}