package org.jboss.tools.switchyard.reddeer.project; import java.io.File; import javax.xml.transform.stream.StreamResult; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.jboss.reddeer.common.exception.RedDeerException; 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.common.wait.WaitWhile; import org.jboss.reddeer.core.condition.JobIsRunning; import org.jboss.reddeer.core.condition.ProgressInformationShellIsActive; import org.jboss.reddeer.core.condition.ShellWithTextIsActive; import org.jboss.reddeer.direct.preferences.PreferencesUtil; import org.jboss.reddeer.eclipse.core.resources.Project; import org.jboss.reddeer.eclipse.core.resources.ProjectItem; import org.jboss.reddeer.eclipse.jdt.ui.ProjectExplorer; import org.jboss.reddeer.swt.api.Menu; import org.jboss.reddeer.swt.api.TreeItem; import org.jboss.reddeer.swt.impl.button.CheckBox; import org.jboss.reddeer.swt.impl.button.PushButton; import org.jboss.reddeer.swt.impl.menu.ContextMenu; import org.jboss.reddeer.swt.impl.menu.ShellMenu; import org.jboss.reddeer.swt.impl.shell.DefaultShell; import org.jboss.reddeer.swt.impl.text.LabeledText; import org.jboss.reddeer.swt.impl.tree.DefaultTreeItem; import org.jboss.reddeer.workbench.impl.editor.TextEditor; import org.jboss.reddeer.workbench.impl.shell.WorkbenchShell; import org.jboss.tools.switchyard.reddeer.editor.SwitchYardEditor; import org.jboss.tools.switchyard.reddeer.editor.XPathEvaluator; import org.jboss.tools.switchyard.reddeer.properties.ProjectProperties; import org.jboss.tools.switchyard.reddeer.shell.ProjectCapabilitiesShell; import org.w3c.dom.Node; public class SwitchYardProject extends Project { public static final String MAIN_JAVA = "src/main/java"; public static final String MAIN_RESOURCE = "src/main/resources"; public static final String TEST_JAVA = "src/test/java"; public static final String TEST_RESOURCE = "src/test/resources"; public SwitchYardProject(String projectName) { super(findTreeItem(projectName)); } protected static TreeItem findTreeItem(String projectName) { new WorkbenchShell().setFocus(); ProjectExplorer projectExplorer = new ProjectExplorer(); projectExplorer.open(); return projectExplorer.getProject(projectName).getTreeItem(); } public SwitchYardEditor openSwitchYardFile() { getProjectItem("SwitchYard").open(); new WaitWhile(new JobIsRunning(), TimePeriod.LONG); new WaitUntil(new ProgressInformationShellIsActive(), TimePeriod.SHORT, false); new WaitWhile(new ProgressInformationShellIsActive()); return new SwitchYardEditor(); } public TextEditor createJavaInterface(String pkg, String name) { getProjectItem(MAIN_JAVA).select(); select(); new ShellMenu("File", "New", "Other...").select(); new DefaultShell("New"); new DefaultTreeItem("Java", "Interface").select(); new PushButton("Next >").click(); new DefaultShell("New Java Interface"); new LabeledText("Name:").setText(name); new LabeledText("Package:").setText(pkg); new PushButton("Finish").click(); new WaitWhile(new ShellWithTextIsActive("New Java Interface")); new WaitWhile(new JobIsRunning(), TimePeriod.LONG); getProjectItem(MAIN_JAVA, pkg, name + ".java").open(); return new TextEditor(name + ".java"); } public ProjectItemExt getClass(String... path) { return getProjectItemExt(MAIN_JAVA, path); } public ProjectItemExt getTestClass(String... path) { return getProjectItemExt(TEST_JAVA, path); } public ProjectItemExt getResource(String... path) { return getProjectItemExt(MAIN_RESOURCE, path); } public ProjectItemExt getTestResource(String... path) { return getProjectItemExt(TEST_RESOURCE, path); } public ProjectItemExt getProjectItemExt(String category, String... path) { String[] newPath = new String[path.length + 1]; newPath[0] = category; for (int i = 0; i < path.length; i++) { newPath[i + 1] = path[i]; } ProjectItem projectItem = getProjectItem(newPath); return new ProjectItemExt(projectItem); } public void update() { try { File pomFile = new File(getFile(), "pom.xml"); XPathEvaluator xpath = new XPathEvaluator(pomFile); // fix kie version if needed due to SWITCHYARD-2834 Node node = xpath.evaluateNode( "/project/build/plugins/plugin/executions/execution/configuration/versions/switchyard.osgi.version"); if (node != null) { node.setTextContent("${switchyard.version}"); } // fix bpm and rules groupId String kieVersion = xpath.evaluateString("/project/properties/kie.version"); if (kieVersion != null && kieVersion.startsWith("6.4.0")) { node = xpath.evaluateNode( "/project/dependencies/dependency[artifactId='switchyard-component-bpm']/groupId"); if (node != null) { node.setTextContent("org.jboss.integration.fuse"); } node = xpath.evaluateNode( "/project/dependencies/dependency[artifactId='switchyard-component-rules']/groupId"); if (node != null) { node.setTextContent("org.jboss.integration.fuse"); } } // fix order of boms node = xpath .evaluateNode("/project/dependencyManagement/dependencies/dependency[artifactId='switchyard-bom']"); if (node != null) { Node parentNode = node.getParentNode(); parentNode.removeChild(node); parentNode.appendChild(node); } // save the changes xpath.printDocument(new StreamResult(pomFile)); } catch (Throwable e) { throw new RuntimeException(e); } select(); new ContextMenu("Maven", "Update Project...").select(); new DefaultShell("Update Maven Project"); new CheckBox("Force Update of Snapshots/Releases").toggle(true); new PushButton("OK").click(); AbstractWait.sleep(TimePeriod.NORMAL); new WaitWhile(new JobIsRunning(), TimePeriod.VERY_LONG); } public void enableFuseCamelNature() { select(); new ContextMenu("Enable Fuse Camel Nature").select(); AbstractWait.sleep(TimePeriod.NORMAL); new WaitWhile(new JobIsRunning(), TimePeriod.VERY_LONG); } public File getFile() { IWorkspace workspace = ResourcesPlugin.getWorkspace(); IWorkspaceRoot root = workspace.getRoot(); return new File(new File(root.getLocationURI().getPath()), getName()); } public ProjectCapabilitiesShell configureCapabilities() { AbstractWait.sleep(TimePeriod.SHORT); new WaitWhile(new JobIsRunning(), TimePeriod.LONG); select(); new ContextMenu("SwitchYard", "Configure Capabilities...").select(); return new ProjectCapabilitiesShell("Properties for " + getName()); } public ProjectProperties openProperties() { select(); new ContextMenu("Properties").select(); return new ProjectProperties(); } public void build() { if (PreferencesUtil.isAutoBuildingOn()) { throw new RedDeerException("Cannot builld a project if projects are built automatically"); } select(); Menu menu = new ShellMenu("Project", "Build Project"); if (menu.isEnabled()) { menu.select(); } new WaitWhile(new JobIsRunning(), TimePeriod.LONG); } }