package org.jboss.tools.switchyard.reddeer.binding;
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.JobIsRunning;
import org.jboss.reddeer.core.condition.ShellWithTextIsAvailable;
import org.jboss.reddeer.jface.wizard.WizardDialog;
import org.jboss.reddeer.swt.api.Combo;
import org.jboss.reddeer.swt.api.Text;
import org.jboss.reddeer.swt.impl.button.PushButton;
import org.jboss.reddeer.swt.impl.combo.DefaultCombo;
import org.jboss.reddeer.swt.impl.combo.LabeledCombo;
import org.jboss.reddeer.swt.impl.group.DefaultGroup;
import org.jboss.reddeer.swt.impl.shell.DefaultShell;
import org.jboss.reddeer.swt.impl.tab.DefaultTabItem;
import org.jboss.reddeer.swt.impl.text.DefaultText;
import org.jboss.tools.switchyard.reddeer.widget.LabeledText;
public abstract class OperationOptionsPage<T> extends WizardDialog {
public static final String NAME = "Name";
public static final String OPERATION_NAME = "Operation Name";
public static final String OPERATION_SELECTOR = "Operation Selector";
public static final String XPATH = "XPath";
public static final String REGEX = "Regex";
public static final String JAVA_CLASS = "Java Class";
@SuppressWarnings("unchecked")
public T setName(String name) {
new LabeledText(NAME).setFocus();
// a workaround to activate typing listener
new LabeledText(NAME).typeText("aa");
new LabeledText(NAME).setText(name);
new LabeledText(NAME).setFocusOut();
return (T) this;
}
public String getName() {
return new LabeledText(NAME).getText();
}
@SuppressWarnings("unchecked")
public T setOperationSelector(String selector, String value) {
setOperationSelector(selector);
setOperationValue(value);
return (T) this;
}
@SuppressWarnings("unchecked")
public T setOperationSelector(String selector) {
new DefaultCombo(new DefaultGroup(OPERATION_SELECTOR), 0).setSelection(selector);
return (T) this;
}
@SuppressWarnings("unchecked")
public T setOperationValue(String value) {
String selector = getOperationSelector();
if (OPERATION_NAME.equals(selector)) {
new DefaultCombo(new DefaultGroup(OPERATION_SELECTOR), 1).setSelection(value);
} else {
new DefaultText(new DefaultGroup(OPERATION_SELECTOR), 0).setText(value);
}
return (T) this;
}
public String getOperationSelector() {
DefaultGroup group = new DefaultGroup(OPERATION_SELECTOR);
return new DefaultCombo(group).getText();
}
public String getOperationSelectorValue() {
DefaultGroup group = new DefaultGroup(OPERATION_SELECTOR);
return new DefaultCombo(group, 1).getText();
}
@Override
public void finish() {
AbstractWait.sleep(TimePeriod.SHORT);
super.finish();
}
public void ok() {
AbstractWait.sleep(TimePeriod.SHORT);
String shellText = new DefaultShell().getText();
new PushButton("OK").click();
new WaitWhile(new ShellWithTextIsAvailable(shellText), TimePeriod.LONG);
new WaitWhile(new JobIsRunning(), TimePeriod.LONG);
}
/* Only on properties */
public void selectAuthenticationDetails() {
new DefaultTabItem("Authentication Details").activate();
}
public void selectProxySettings() {
new DefaultTabItem("Proxy settings").activate();
}
/* Only on reference binding */
public Combo getAuthenticationType() {
return new LabeledCombo("Authentication Type");
}
public Text getDomain() {
return new LabeledText("Domain");
}
public Text getPort() {
return new LabeledText("Port");
}
public Text getHost() {
return new LabeledText("Host");
}
public Text getRealm() {
return new LabeledText("Realm");
}
public Text getPassword() {
return new LabeledText("Password");
}
public Text getUser() {
return new LabeledText("User");
}
public Text getUserName() {
return new LabeledText("User Name");
}
}