package org.jboss.tools.teiid.reddeer.preference;
import org.jboss.reddeer.common.wait.WaitWhile;
import org.jboss.reddeer.core.condition.ShellWithTextIsAvailable;
import org.jboss.reddeer.core.util.Display;
import org.jboss.reddeer.eclipse.datatools.ui.DriverTemplate;
import org.jboss.reddeer.eclipse.datatools.ui.preference.DriverDefinitionPreferencePage;
import org.jboss.reddeer.eclipse.datatools.ui.wizard.DriverDefinitionPage;
import org.jboss.reddeer.eclipse.datatools.ui.wizard.DriverDefinitionWizard;
import org.jboss.reddeer.swt.api.Tree;
import org.jboss.reddeer.swt.api.TreeItem;
import org.jboss.reddeer.swt.impl.button.OkButton;
import org.jboss.reddeer.swt.impl.button.PushButton;
import org.jboss.reddeer.swt.impl.list.DefaultList;
import org.jboss.reddeer.swt.impl.shell.DefaultShell;
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.reddeer.workbench.ui.dialogs.WorkbenchPreferenceDialog;
import org.jboss.tools.teiid.reddeer.extensions.DriverDefinitionExt;
public class DriverDefinitionPreferencePageExt extends DriverDefinitionPreferencePage {
private static final String GENERIC_JDBC = "Generic JDBC";
public static final CharSequence OTHER = "Other";
public void open() {
try {
WorkbenchPreferenceDialog preferences = new WorkbenchPreferenceDialog();
preferences.open();
preferences.select(this);
} catch (Exception e) {
new DefaultTreeItem("Data Management").collapse();
new DefaultTreeItem("Data Management", "Connectivity", "Driver Definitions").expand();
new DefaultTreeItem("Data Management", "Connectivity", "Driver Definitions").select();
}
}
// public void addDriverDefinition(DriverDefinition driverDefinition) {
public void addDriverDefinition(DriverDefinitionExt driverDefinition) {
new PushButton("Add...").click();
new DefaultShell("New Driver Definition");
new DriverDefinitionWizardExt(driverDefinition).execute();
new DefaultShell("New Driver Definition");
new PushButton("OK").click();
}
public void ok() {
String title = new DefaultShell().getText();
new OkButton().click();
new WaitWhile(new ShellWithTextIsAvailable(title));
}
private class DriverDefinitionWizardExt extends DriverDefinitionWizard {
// private DriverDefinition driverDefinition;
private DriverDefinitionExt driverDefinition;
// public DriverDefinitionWizardExt(DriverDefinition driverDefinition) {
public DriverDefinitionWizardExt(DriverDefinitionExt driverDefinition) {
this.driverDefinition = driverDefinition;
}
public void execute() {
DriverTemplate drvTemp = driverDefinition.getDriverTemplate();
if (drvTemp.getType().contains(GENERIC_JDBC)) { // e.g. HSQL with Generic driver and with Generic CP
DriverDefinitionPageExt pageExt = new DriverDefinitionPageExt();
pageExt.selectDriverTemplate(drvTemp.getType(), drvTemp.getVersion());// !!!! if at least database
// matches and others are empty,
// select it
pageExt.setName(driverDefinition.getDriverName());
pageExt.addDriverLibrary(driverDefinition.getDriverLibrary());
pageExt.setDriverClassGeneric(driverDefinition.getDriverClass());
return;
}
if (drvTemp.getType().contains(OTHER)) { // e.g. Sybase jtds
DriverDefinitionPageExt pageExt = new DriverDefinitionPageExt();
pageExt.selectDriverTemplate(drvTemp.getType(), drvTemp.getVersion(),
driverDefinition.getVendorTemplate());
pageExt.setName(driverDefinition.getDriverName());
pageExt.addDriverLibrary(driverDefinition.getDriverLibrary());
pageExt.setDriverClassOther(driverDefinition.getDriverClass());
pageExt.setConnectionUrlOther(driverDefinition.getConnectionUrl());
pageExt.setDatabaseName(driverDefinition.getDatabaseName());
new DefaultShell("New Driver Definition").setFocus();
return;
}
else {
// normal jdbc (e.g. HSQL with HSQL CP, Sybase jconn3)
DriverDefinitionPage page = new DriverDefinitionPage();
page.selectDriverTemplate(drvTemp.getType(), drvTemp.getVersion());
page.setName(driverDefinition.getDriverName());
page.addDriverLibrary(driverDefinition.getDriverLibrary());// firstly clears all suggested jars, but for
// Generic the list is empty
}
}
}
private class DriverDefinitionPageExt extends DriverDefinitionPage {
private static final String DATABASE_NAME = "Database Name";
private static final String CONNECTION_URL = "Connection URL";
private static final String GENERAL = "General";
private static final String DRIVER_CLASS = "Driver Class";
public void setDatabaseName(String databaseName) {
selectTab(TAB_PROPERTIES);
new DefaultTreeItem(new DefaultTree(0), GENERAL, DATABASE_NAME).doubleClick();
new DefaultText().setText(databaseName);
}
public void setConnectionUrlOther(String connectionUrl) {
selectTab(TAB_PROPERTIES);
new DefaultTreeItem(new DefaultTree(0), GENERAL, CONNECTION_URL).doubleClick();
new DefaultText().setText(connectionUrl);
}
public void selectDriverTemplate(String type, String version, String vendorTemplate) {
selectTab(TAB_NAME_TYPE);
Tree tree = new DefaultTree();
// Database
TreeItem root = tree.getItems().get(0);
for (TreeItem item : root.getItems()) {
if (type.equals(item.getCell(0)) && version.equals(item.getCell(2))
&& vendorTemplate.equals(item.getCell(1))) {
item.select();
break;
}
}
}
public void setDriverClassGeneric(String driverClass) {
selectTab(TAB_PROPERTIES);
new DefaultTreeItem(new DefaultTree(0), GENERAL, DRIVER_CLASS).doubleClick();// kepler 0, juno 1
new PushButton("...").click();
new DefaultShell("Available Classes from Jar List");
new DefaultText().setText(driverClass);
new PushButton("OK").click();
}
public void setDriverClassOther(String driverClass) {
selectTab(TAB_PROPERTIES);
new DefaultTreeItem(new DefaultTree(0), GENERAL, DRIVER_CLASS).doubleClick();
new DefaultText().setText(driverClass);
}
@Override
public void addDriverLibrary(String driverLocation) {
selectTab(TAB_JAR_LIST);
addItem(driverLocation);
addItem(driverLocation);
removeDriverLibrary(driverLocation);
}
private void addItem(final String item) {
Display.syncExec(new Runnable() {
@Override
public void run() {
new DefaultList().getSWTWidget().add(item);
}
});
}
@Override
public void selectDriverTemplate(String type, String version) {
selectTab(TAB_NAME_TYPE);
Tree tree = new DefaultTree();
// Database
TreeItem root = tree.getItems().get(0);
for (TreeItem item : root.getItems()) {
if (type.equals(item.getCell(0)) && version.equals(item.getCell(2))) {
item.select();
return;
}
}
for (TreeItem item : root.getItems()) {// if matches at least the type
if (type.equals(item.getCell(0))) {
item.select();
return;
}
}
}
}
}