package org.jboss.tools.teiid.reddeer.view; import java.util.Arrays; import org.jboss.reddeer.common.logging.Logger; import org.jboss.reddeer.common.matcher.RegexMatcher; import org.jboss.reddeer.common.wait.AbstractWait; import org.jboss.reddeer.common.wait.TimePeriod; import org.jboss.reddeer.common.wait.WaitUntil; import org.jboss.reddeer.core.condition.ShellWithTextIsActive; import org.jboss.reddeer.core.exception.CoreLayerException; import org.jboss.reddeer.eclipse.condition.ConsoleHasText; import org.jboss.reddeer.eclipse.wst.server.ui.view.Server; import org.jboss.reddeer.eclipse.wst.server.ui.view.ServersView; import org.jboss.reddeer.swt.api.TreeItem; 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.list.DefaultList; import org.jboss.reddeer.swt.impl.menu.ContextMenu; import org.jboss.reddeer.swt.impl.shell.DefaultShell; import org.jboss.reddeer.swt.impl.text.DefaultText; import org.jboss.reddeer.swt.impl.toolbar.DefaultToolItem; import org.jboss.reddeer.swt.impl.tree.DefaultTreeItem; import org.jboss.tools.teiid.reddeer.condition.ServerHasState; public class ServersViewExt extends ServersView { private static final Logger log = Logger.getLogger(ServersView.class); public static final String DV6_PREFIX_URL = "mm://localhost:9999"; public static final String EDS5_PREFIX_URL = "mms://localhost:31443"; private static final String REFRESH = "Refresh / Reconnect Teiid Instance Connection"; private static final String TEIID_INSTANCE_CONFIG = "Teiid Instance Configuration"; private static final String DISCONNECT = "Disconnect"; private static final String DATA_SOURCES = "Data Sources"; private static final String VDBS = "VDBs"; public enum ServerType { EAP6, EDS5, AS5, DV6 } public ServersViewExt() { super(); } public static ServersViewExt getInstance(){ ServersViewExt serversViewExt = new ServersViewExt(); serversViewExt.open(); return serversViewExt; } public boolean isVDBDeployed(String serverName, ServerType serverType, String vdbName) { boolean result = false; String url = getServerURLPrefix(serverType); String[] path = new String[5]; new ServersView().getServer(serverName); /* * String state = server.getLabel().getState().getText(); String publishState = * server.getLabel().getPublishState().getText(); */ // path[0] = serverName + " [Started, Synchronized]";//or serverName+" [Started]" ---> z LABEL // path[0] = serverName + " [" + state + ", " + publishState + "]"; path[0] = getServerLabel(serverName); path[1] = TEIID_INSTANCE_CONFIG;// constant path[2] = url + " [default]";// or url --> redo ala label path[3] = "VDBs"; if (vdbName.contains(".")) { path[4] = vdbName.substring(0, vdbName.indexOf(".")); } else { path[4] = vdbName; } try { new DefaultTreeItem(path).select(); result = true; } catch (Exception e) { log.error("Couldn't find VDB on path " + path[0] + "/" + path[1] + "/" + path[2] + "/" + path[3] + "/" + path[4]); System.err.println(e.getMessage()); } try { path[2] = url; new DefaultTreeItem(path).select(); result = true; } catch (Exception e) { log.error("Couldn't find VDB on path " + path[0] + "/" + path[1] + "/" + path[2] + "/" + path[3] + "/" + path[4]); System.err.println(e.getMessage()); } return result; } public static String getServerURLPrefix(ServerType type) { String url = null; if (type.equals(ServerType.EAP6) || type.equals(ServerType.DV6)) { url = DV6_PREFIX_URL; } if (type.equals(ServerType.EDS5) || type.equals(ServerType.AS5)) { url = EDS5_PREFIX_URL; } return url; } public static ServerType determineServerType(String serverName) {// move to serversview ext if ((serverName.contains("EAP") || serverName.contains("DV")) && serverName.contains("6")) { return ServerType.DV6; } else if ((serverName.contains("EAP") || serverName.contains("EDS") || serverName.contains("AS") || serverName.contains("SOA")) && serverName.contains("5")) { return ServerType.EDS5;// smazat eap } return ServerType.DV6; } public void startServer(String serverName) { ServerType type = determineServerType(serverName); Server server = new ServersView().getServer(serverName); server.start(); new WaitUntil(new ServerHasState(serverName), TimePeriod.LONG); new WaitUntil(new ConsoleHasText("- Started"), TimePeriod.LONG); // additional steps if (type.equals(ServerType.EDS5)) { connectTeiidInstance(serverName); } new GuidesView().chooseAction("Teiid", "Refresh "); if (new ShellWithTextIsActive("Server Selection").test()) { // if you want to disconnect old instance before // switching new DefaultCombo().setSelection(serverName); new PushButton("OK").click(); } new DefaultShell("Notification"); new PushButton("OK").click(); AbstractWait.sleep(TimePeriod.SHORT); new DefaultShell(); } public void restartServer(String serverName) { ServerType type = determineServerType(serverName); Server server = new ServersView().getServer(serverName); server.restart(); new WaitUntil(new ServerHasState(serverName), TimePeriod.LONG); new WaitUntil(new ConsoleHasText("- Started"), TimePeriod.LONG); // additional steps if (type.equals(ServerType.EDS5)) { connectTeiidInstance(serverName); } new GuidesView().chooseAction("Teiid", "Refresh "); if (new ShellWithTextIsActive("Server Selection").test()) { // if you want to disconnect old instance before // switching new DefaultCombo().setSelection(serverName); new PushButton("OK").click(); } new DefaultShell("Notification"); new PushButton("OK").click(); AbstractWait.sleep(TimePeriod.SHORT); new DefaultShell(); } public String getServerLabel(String serverName) {// TEST!!! Server server = new ServersView().getServer(serverName); String state = server.getLabel().getState().getText(); String publishState = server.getLabel().getPublishState().getText(); if (publishState != null && publishState.length() > 0) { return serverName + " [" + state + ", " + publishState + "]"; } return serverName + " [" + state + "]"; } public void stopServer(String serverName) {// server.stop? Server server = new ServersView().getServer(serverName); server.stop(); log.info("Stopping server " + server.getLabel().getName()); } public void disconnectTeiidInstance(String serverName) { String label = getServerLabel(serverName); // refresh String url = getServerURLPrefix(determineServerType(serverName));// new DefaultTreeItem(label, // TEIID_INSTANCE_CONFIG, url).expand(); new DefaultTreeItem(label, TEIID_INSTANCE_CONFIG, url).select(); refreshServer(serverName); new DefaultTreeItem(label, TEIID_INSTANCE_CONFIG, url).select(); new ContextMenu(DISCONNECT).select(); } public void setDefaultTeiidInstance(String serverName) { new GuidesView().setDefaultTeiidInstance(serverName); } public void connectTeiidInstance(String serverName) { String label = getServerLabel(serverName); // refresh new DefaultTreeItem(label, TEIID_INSTANCE_CONFIG).select(); refreshServer(serverName); } public void refreshServer(String serverName) { String label = getServerLabel(serverName); // refresh new DefaultTreeItem(label).select(); activate(); new DefaultToolItem(REFRESH).click(); // server was refreshed new DefaultShell("Notification"); new PushButton("OK").click(); AbstractWait.sleep(TimePeriod.SHORT); new DefaultShell(); } public void createDatasource(String serverName, String connectionProfile, String datasourceName) { new ServersView().getServer(serverName); new DefaultTreeItem(getServerLabel(serverName), TEIID_INSTANCE_CONFIG, DV6_PREFIX_URL, DATA_SOURCES).select(); new ContextMenu("Create Data Source").select(); new DefaultShell(""); new DefaultText().setText(datasourceName); new RadioButton("Use Connection Profile Info").click(); new DefaultCombo(1).setSelection(connectionProfile); if (!new PushButton("OK").isEnabled()) { System.err.println("Datasource " + connectionProfile + "exists!"); new PushButton("Cancel").click(); } else { new PushButton("OK").click(); } } public void restartWar(String serverName, String warName){ new ServersView().getServer(serverName).getModule(new RegexMatcher(".*" + warName + ".*")); new ContextMenu("Restart").select(); } public void createDatasource(String serverName, String connectionProfile) { createDatasource(serverName, connectionProfile, connectionProfile); } public void deleteDatasource(String serverName, String dsName) { new ServersView().getServer(serverName); try { DefaultTreeItem dataSources = new DefaultTreeItem(getServerLabel(serverName), TEIID_INSTANCE_CONFIG, DV6_PREFIX_URL, DATA_SOURCES); for (TreeItem treeItem : dataSources.getItems()) { if (treeItem.getText().startsWith(dsName)) { treeItem.select(); new ContextMenu("Delete Data Source").select(); break; } } } catch (Exception ex) { // ds not on server, ok ex.printStackTrace(); } } public void undeployVdb(String serverName, String vdbName) { new ServersView().getServer(serverName); try { DefaultTreeItem vdbs = new DefaultTreeItem(getServerLabel(serverName), TEIID_INSTANCE_CONFIG, DV6_PREFIX_URL, VDBS); for (TreeItem treeItem : vdbs.getItems()) { if (treeItem.getText().startsWith(vdbName)) { treeItem.select(); new ContextMenu("Undeploy VDB").select(); break; } } } catch (Exception ex) { // vdb not in server ex.printStackTrace(); } } public String getVdbStatus(String serverName, String vdbName) { new ServersView().getServer(serverName); DefaultTreeItem vdbs = new DefaultTreeItem(getServerLabel(serverName), TEIID_INSTANCE_CONFIG, DV6_PREFIX_URL, VDBS); for (TreeItem treeItem : vdbs.getItems()) { if (treeItem.getText().startsWith(vdbName)) { treeItem.select(); try { new ContextMenu("Show VDB Errors").select(); String[] errors = new DefaultList(0).getListItems(); new PushButton("OK").click(); return "ERROR: " + Arrays.toString(errors); } catch (CoreLayerException ex) { return "ACTIVE"; } } } return "ERROR"; } }