test-class to start workbench outside osgi
Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/commit/d234ff10 Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/tree/d234ff10 Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/diff/d234ff10 Branch: refs/heads/master Commit: d234ff10b8d2406bcbdf7efb328840fa576a2aef Parents: 5877a03 Author: Stian Soiland-Reyes <[email protected]> Authored: Thu Aug 18 15:04:26 2016 +0100 Committer: Stian Soiland-Reyes <[email protected]> Committed: Fri Oct 21 09:16:26 2016 +0200 ---------------------------------------------------------------------- taverna-workbench-impl/pom.xml | 162 +++++++--- .../ui/impl/SetConsoleLoggerStartup.java | 11 +- .../workbench/ui/impl/WorkbenchImpl.java | 2 +- .../org.apache.taverna.ui.menu.MenuComponent | 5 +- .../workbench/ui/impl/WorkbenchLauncher.java | 23 ++ .../workbench/ui/impl/WorkbenchTest.java | 318 +++++++++++++++++++ 6 files changed, 474 insertions(+), 47 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/d234ff10/taverna-workbench-impl/pom.xml ---------------------------------------------------------------------- diff --git a/taverna-workbench-impl/pom.xml b/taverna-workbench-impl/pom.xml index 0db5d13..8a97e2e 100644 --- a/taverna-workbench-impl/pom.xml +++ b/taverna-workbench-impl/pom.xml @@ -47,12 +47,12 @@ <artifactId>taverna-scufl2-api</artifactId> <version>${taverna.language.version}</version> </dependency> - - <dependency> - <groupId>${project.parent.groupId}</groupId> - <artifactId>taverna-selection-api</artifactId> - <version>${project.parent.version}</version> - </dependency> + + <dependency> + <groupId>${project.parent.groupId}</groupId> + <artifactId>taverna-selection-api</artifactId> + <version>${project.parent.version}</version> + </dependency> <dependency> <groupId>org.apache.taverna.engine</groupId> <artifactId>taverna-observer</artifactId> @@ -75,56 +75,70 @@ <version>${taverna.osgi.version}</version> </dependency> <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-test</artifactId> + <version>1.3.6.RELEASE</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-beans</artifactId> + <version>4.3.1.RELEASE</version> + </dependency> + + <dependency> <groupId>org.apache.taverna.osgi</groupId> <artifactId>taverna-app-configuration-api</artifactId> <version>${taverna.osgi.version}</version> </dependency> - <dependency> - <groupId>${project.parent.groupId}</groupId> - <artifactId>taverna-file-api</artifactId> - <version>${project.parent.version}</version> - </dependency> - - <dependency> - <groupId>${project.parent.groupId}</groupId> - <artifactId>taverna-menu-api</artifactId> - <version>${project.parent.version}</version> - </dependency> - - <dependency> - <groupId>${project.parent.groupId}</groupId> - <artifactId>taverna-configuration-ui-api</artifactId> - <version>${project.parent.version}</version> - </dependency> - - <dependency> - <groupId>${project.parent.groupId}</groupId> - <artifactId>taverna-helper-api</artifactId> - <version>${project.parent.version}</version> - </dependency> - - <dependency> - <groupId>${project.parent.groupId}</groupId> - <artifactId>taverna-ui</artifactId> - <version>${project.parent.version}</version> - </dependency> - + <dependency> + <groupId>${project.parent.groupId}</groupId> + <artifactId>taverna-file-api</artifactId> + <version>${project.parent.version}</version> + </dependency> + + <dependency> + <groupId>${project.parent.groupId}</groupId> + <artifactId>taverna-menu-api</artifactId> + <version>${project.parent.version}</version> + </dependency> + + <dependency> + <groupId>${project.parent.groupId}</groupId> + <artifactId>taverna-configuration-ui-api</artifactId> + <version>${project.parent.version}</version> + </dependency> + + <dependency> + <groupId>${project.parent.groupId}</groupId> + <artifactId>taverna-helper-api</artifactId> + <version>${project.parent.version}</version> + </dependency> + + <dependency> + <groupId>${project.parent.groupId}</groupId> + <artifactId>taverna-ui</artifactId> + <version>${project.parent.version}</version> + </dependency> + + + <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> - <version>${commons.io.version}</version> + <version>${commons.io.version}</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> - <version>${log4j.version}</version> + <version>${log4j.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> - <version>${junit.version}</version> + <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> @@ -133,5 +147,75 @@ <version>${macify.version}</version> </dependency> + <!-- Implementation, used by WorkbenchTest directly rather than through + Spring --> + + <dependency> + <groupId>${project.parent.groupId}</groupId> + <artifactId>taverna-credential-manager-ui</artifactId> + <version>${project.parent.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>${project.parent.groupId}</groupId> + <artifactId>taverna-credential-manager-ui</artifactId> + <version>${project.parent.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>${project.parent.groupId}</groupId> + <artifactId>taverna-perspective-design</artifactId> + <version>${project.parent.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>${project.parent.groupId}</groupId> + <artifactId>taverna-perspective-results</artifactId> + <version>${project.parent.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>${project.parent.groupId}</groupId> + <artifactId>taverna-edits-impl</artifactId> + <version>${project.parent.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>${project.parent.groupId}</groupId> + <artifactId>taverna-file-impl</artifactId> + <version>${project.parent.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>${project.parent.groupId}</groupId> + <artifactId>taverna-menu-impl</artifactId> + <version>${project.parent.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>${project.parent.groupId}</groupId> + <artifactId>taverna-selection-impl</artifactId> + <version>${project.parent.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.taverna.engine</groupId> + <artifactId>taverna-credential-manager-impl</artifactId> + <version>${taverna.engine.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.taverna.osgi</groupId> + <artifactId>taverna-app-configuration-impl</artifactId> + <version>${taverna.osgi.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>commons-beanutils</groupId> + <artifactId>commons-beanutils</artifactId> + <version>1.9.2</version> + <scope>test</scope> + </dependency> + </dependencies> </project> http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/d234ff10/taverna-workbench-impl/src/main/java/org/apache/taverna/workbench/ui/impl/SetConsoleLoggerStartup.java ---------------------------------------------------------------------- diff --git a/taverna-workbench-impl/src/main/java/org/apache/taverna/workbench/ui/impl/SetConsoleLoggerStartup.java b/taverna-workbench-impl/src/main/java/org/apache/taverna/workbench/ui/impl/SetConsoleLoggerStartup.java index 6ba2250..ae33000 100644 --- a/taverna-workbench-impl/src/main/java/org/apache/taverna/workbench/ui/impl/SetConsoleLoggerStartup.java +++ b/taverna-workbench-impl/src/main/java/org/apache/taverna/workbench/ui/impl/SetConsoleLoggerStartup.java @@ -23,11 +23,10 @@ import static org.apache.log4j.Level.WARN; import java.io.PrintStream; -import org.apache.taverna.workbench.StartupSPI; -import org.apache.taverna.workbench.configuration.workbench.WorkbenchConfiguration; - import org.apache.log4j.ConsoleAppender; import org.apache.log4j.Logger; +import org.apache.taverna.workbench.StartupSPI; +import org.apache.taverna.workbench.configuration.workbench.WorkbenchConfiguration; public class SetConsoleLoggerStartup implements StartupSPI { private static final PrintStream originalErr = System.err; @@ -35,6 +34,10 @@ public class SetConsoleLoggerStartup implements StartupSPI { private final WorkbenchConfiguration workbenchConfiguration; + public SetConsoleLoggerStartup() { + this.workbenchConfiguration = null; + } + public SetConsoleLoggerStartup(WorkbenchConfiguration workbenchConfiguration) { this.workbenchConfiguration = workbenchConfiguration; } @@ -55,7 +58,7 @@ public class SetConsoleLoggerStartup implements StartupSPI { } public void setSystemOutCapture() { - if (!workbenchConfiguration.getCaptureConsole()) { + if (workbenchConfiguration == null || !workbenchConfiguration.getCaptureConsole()) { System.setOut(originalOut); System.setErr(originalErr); return; http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/d234ff10/taverna-workbench-impl/src/main/java/org/apache/taverna/workbench/ui/impl/WorkbenchImpl.java ---------------------------------------------------------------------- diff --git a/taverna-workbench-impl/src/main/java/org/apache/taverna/workbench/ui/impl/WorkbenchImpl.java b/taverna-workbench-impl/src/main/java/org/apache/taverna/workbench/ui/impl/WorkbenchImpl.java index 471f5aa..62e3cf1 100644 --- a/taverna-workbench-impl/src/main/java/org/apache/taverna/workbench/ui/impl/WorkbenchImpl.java +++ b/taverna-workbench-impl/src/main/java/org/apache/taverna/workbench/ui/impl/WorkbenchImpl.java @@ -501,7 +501,7 @@ public class WorkbenchImpl extends JFrame implements Workbench { } } - private class OSXAppListener extends ApplicationAdapter { + public class OSXAppListener extends ApplicationAdapter { @Override public void handleAbout(ApplicationEvent e) { showAboutDialog(); http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/d234ff10/taverna-workbench-impl/src/main/resources/META-INF/services/org.apache.taverna.ui.menu.MenuComponent ---------------------------------------------------------------------- diff --git a/taverna-workbench-impl/src/main/resources/META-INF/services/org.apache.taverna.ui.menu.MenuComponent b/taverna-workbench-impl/src/main/resources/META-INF/services/org.apache.taverna.ui.menu.MenuComponent index 5183705..49cd0ff 100644 --- a/taverna-workbench-impl/src/main/resources/META-INF/services/org.apache.taverna.ui.menu.MenuComponent +++ b/taverna-workbench-impl/src/main/resources/META-INF/services/org.apache.taverna.ui.menu.MenuComponent @@ -4,8 +4,7 @@ org.apache.taverna.workbench.ui.impl.menu.ExitAction org.apache.taverna.workbench.ui.impl.menu.EditMenu org.apache.taverna.workbench.ui.impl.menu.AdvancedMenu -org.apache.taverna.workbench.ui.impl.menu.DisplayPerspectivesMenu -org.apache.taverna.workbench.ui.impl.menu.EditPerspectivesMenu +#org.apache.taverna.workbench.ui.impl.menu.EditPerspectivesMenu org.apache.taverna.workbench.ui.impl.menu.HelpMenu org.apache.taverna.workbench.ui.impl.menu.OnlineHelpMenuAction @@ -14,4 +13,4 @@ org.apache.taverna.workbench.ui.impl.menu.FeedbackMenuAction #org.apache.taverna.workbench.ui.impl.menu.ViewShowMenuSection #org.apache.taverna.workbench.ui.impl.menu.ChangePerspectiveMenuAction -org.apache.taverna.workbench.ui.impl.menu.ShowLogsAndDataMenuAction \ No newline at end of file +org.apache.taverna.workbench.ui.impl.menu.ShowLogsAndDataMenuAction http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/d234ff10/taverna-workbench-impl/src/test/java/org/apache/taverna/workbench/ui/impl/WorkbenchLauncher.java ---------------------------------------------------------------------- diff --git a/taverna-workbench-impl/src/test/java/org/apache/taverna/workbench/ui/impl/WorkbenchLauncher.java b/taverna-workbench-impl/src/test/java/org/apache/taverna/workbench/ui/impl/WorkbenchLauncher.java new file mode 100644 index 0000000..02e3d49 --- /dev/null +++ b/taverna-workbench-impl/src/test/java/org/apache/taverna/workbench/ui/impl/WorkbenchLauncher.java @@ -0,0 +1,23 @@ +package org.apache.taverna.workbench.ui.impl; + +import org.apache.taverna.workbench.ui.Workbench; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.ContextHierarchy; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +public class WorkbenchLauncher { + + @Autowired + Workbench workbench; + + @Test + public void testName() throws Exception { + Thread.sleep(1000); + System.out.println(workbench.toString()); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/d234ff10/taverna-workbench-impl/src/test/java/org/apache/taverna/workbench/ui/impl/WorkbenchTest.java ---------------------------------------------------------------------- diff --git a/taverna-workbench-impl/src/test/java/org/apache/taverna/workbench/ui/impl/WorkbenchTest.java b/taverna-workbench-impl/src/test/java/org/apache/taverna/workbench/ui/impl/WorkbenchTest.java new file mode 100644 index 0000000..43eee47 --- /dev/null +++ b/taverna-workbench-impl/src/test/java/org/apache/taverna/workbench/ui/impl/WorkbenchTest.java @@ -0,0 +1,318 @@ +package org.apache.taverna.workbench.ui.impl; + +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.taverna.configuration.app.ApplicationConfiguration; +import org.apache.taverna.configuration.app.impl.ApplicationConfigurationImpl; +import org.apache.taverna.plugin.Plugin; +import org.apache.taverna.plugin.PluginException; +import org.apache.taverna.plugin.PluginManager; +import org.apache.taverna.plugin.xml.jaxb.PluginVersions; +import org.apache.taverna.security.credentialmanager.CMException; +import org.apache.taverna.security.credentialmanager.CredentialManager; +import org.apache.taverna.security.credentialmanager.impl.CredentialManagerImpl; +import org.apache.taverna.ui.menu.MenuComponent; +import org.apache.taverna.ui.menu.MenuManager; +import org.apache.taverna.ui.menu.impl.MenuManagerImpl; +import org.apache.taverna.ui.perspectives.design.DesignPerspective; +import org.apache.taverna.ui.perspectives.results.ResultsPerspective; +import org.apache.taverna.workbench.ShutdownSPI; +import org.apache.taverna.workbench.StartupSPI; +import org.apache.taverna.workbench.configuration.workbench.WorkbenchConfiguration; +import org.apache.taverna.workbench.edits.EditManager; +import org.apache.taverna.workbench.edits.impl.EditManagerImpl; +import org.apache.taverna.workbench.file.FileManager; +import org.apache.taverna.workbench.file.impl.FileManagerImpl; +import org.apache.taverna.workbench.selection.SelectionManager; +import org.apache.taverna.workbench.selection.impl.SelectionManagerImpl; +import org.apache.taverna.workbench.ui.credentialmanager.startup.InitialiseSSLStartupHook; +import org.apache.taverna.workbench.ui.credentialmanager.startup.SetCredManAuthenticatorStartupHook; +import org.apache.taverna.workbench.ui.zaria.PerspectiveSPI; + +public class WorkbenchTest { + + public static void main(String[] args) throws InterruptedException { + System.setProperty("taverna.app.startup", Paths.get("target").toAbsolutePath().toString()); + + WorkbenchImpl w = new WorkbenchTest().getWorkbench(); + w.initialize(); + synchronized(w) { + // It won't actually get interrupted, but it means we persist + // as long as w rather than exiting + w.wait(); + } + } + + private EditManagerImpl editManagerImpl; + private FileManagerImpl fileManager; + private WorkbenchImpl workbench; + private MenuManagerImpl menuManager; + private SelectionManagerImpl selectionManager; + private List<MenuComponent> menuComponents; + private CredentialManagerImpl credentialManager; + + public FileManager getFileManager() { + if (fileManager == null) { + fileManager = new FileManagerImpl(getEditManager()); + } + return fileManager; + } + + public EditManager getEditManager() { + if (editManagerImpl == null) { + editManagerImpl = new EditManagerImpl(); + } + return editManagerImpl; + } + + public MenuManager getMenuManager() { + if (menuManager == null) { + menuManager = new MenuManagerImpl(); + menuManager.setSelectionManager(getSelectionManager()); + + menuManager.setMenuComponents(getMenuComponents()); + + } + return menuManager; + } + + public List<MenuComponent> getMenuComponents() { + if (menuComponents == null) { + menuComponents = new ArrayList<>(); +// for (MenuComponent mc : ServiceLoader.load(MenuComponent.class)) { +// try { +// BeanUtils.copyProperties(this, mc); +// // This does not work as many of the actions are set in constructor + // rather than with setters +// } catch (IllegalAccessException | InvocationTargetException e) { +// e.printStackTrace(); +// } +// menuComponents.add(mc); +// } + } + // FIXME: Should not be an empty list + return menuComponents; + } + + public SelectionManager getSelectionManager() { + if (selectionManager == null) { + selectionManager = new SelectionManagerImpl(); + selectionManager.setEditManager(getEditManager()); + selectionManager.setFileManager(getFileManager()); + selectionManager.setPerspectives(getPerspectives()); + } + return selectionManager; + } + + public ResultsPerspective getResultsPerspective() { + ResultsPerspective perspective = new ResultsPerspective(); + // TODO: Various setters + return perspective; + } + + public DesignPerspective getDesignPerspective() { + DesignPerspective p = new DesignPerspective(); + p.setEditManager(getEditManager()); + p.setFileManager(getFileManager()); + p.setMenuManager(getMenuManager()); + // TODO: More setters + return p; + } + + public List<PerspectiveSPI> getPerspectives() { + return Arrays.asList(getDesignPerspective(), getResultsPerspective()); + } + + public WorkbenchImpl getWorkbench() { + if (workbench == null) { + workbench = new WorkbenchImpl(getStartupHooks(), getShutdownHooks(), getPerspectives()); + workbench.setApplicationConfiguration(getApplicationConfiguration()); + workbench.setEditManager(getEditManager()); + workbench.setFileManager(getFileManager()); + workbench.setMenuManager(getMenuManager()); + workbench.setSelectionManager(getSelectionManager()); + workbench.setPluginManager(getPluginManager()); + workbench.setWorkbenchConfiguration(getWorkbenchConfiguration()); + } + return workbench; + } + + private WorkbenchConfiguration getWorkbenchConfiguration() { + return new WorkbenchConfiguration() { + @Override + public Map<String, String> getDefaultPropertyMap() { + return Collections.emptyMap(); + } + @Override + public String getUUID() { + return "5c51f0d0-91b7-4d90-92e4-4416c61f6442"; + } + @Override + public String getDisplayName() { + return "Taverna Test"; + } + @Override + public String getFilePrefix() { + return "taverna-test"; + } + @Override + public String getCategory() { + return "test"; + } + @Override + public void restoreDefaults() { + } + + @Override + public String getDefaultProperty(String key) { + return null; + } + + @Override + public Set<String> getKeys() { + return Collections.emptySet(); + } + + @Override + public void clear() { + } + + @Override + public Map<String, String> getInternalPropertyMap() { + return Collections.emptyMap(); + } + + @Override + public String getProperty(String key) { + return null; + } + + @Override + public void setProperty(String key, String value) { + // We'll just forget it anyway.. + } + + @Override + public void deleteProperty(String key) { + } + + @Override + public List<String> getPropertyStringList(String key) { + return Collections.emptyList(); + } + + @Override + public void setPropertyStringList(String key, List<String> value) { + } + + @Override + public boolean getCaptureConsole() { + return false; + } + + @Override + public void setCaptureConsole(boolean captureConsole) { + } + + @Override + public boolean getWarnInternalErrors() { + return false; + } + + @Override + public void setWarnInternalErrors(boolean warnInternalErrors) { + } + + @Override + public int getMaxMenuItems() { + return 1024; + } + + @Override + public void setMaxMenuItems(int maxMenuItems) { + } + + @Override + public String getDotLocation() { + // Assume graphviz' dot is on PATH + return "dot"; + } + + @Override + public void setDotLocation(String dotLocation) { + } + + }; + } + + private PluginManager getPluginManager() { + // Can't install plugins while outside OSGi + return new PluginManager() { + @Override + public Plugin updatePlugin(PluginVersions pluginVersions) throws PluginException { + throw new PluginException("Can't install plugins when running outside OSGi"); + } + @Override + public void loadPlugins() throws PluginException { + } + @Override + public Plugin installPlugin(String pluginSiteURL, String pluginFile) throws PluginException { + throw new PluginException("Can't install plugins when running outside OSGi"); + } + @Override + public Plugin installPlugin(Path pluginFile) throws PluginException { + throw new PluginException("Can't install plugins when running outside OSGi"); } + + @Override + public List<PluginVersions> getPluginUpdates() throws PluginException { + return Collections.emptyList(); + } + @Override + public List<Plugin> getInstalledPlugins() throws PluginException { + return Collections.emptyList(); + } + @Override + public List<PluginVersions> getAvailablePlugins() throws PluginException { + return Collections.emptyList(); + } + @Override + public void checkForUpdates() throws PluginException { + } + }; + } + + public List<StartupSPI> getStartupHooks() { + SetCredManAuthenticatorStartupHook credManAuthenticatorStartupHook = new SetCredManAuthenticatorStartupHook(); + credManAuthenticatorStartupHook.setCredentialManager(getCredentialManager()); + InitialiseSSLStartupHook initialiseSSLStartupHook = new InitialiseSSLStartupHook(); + initialiseSSLStartupHook.setCredentialManager(getCredentialManager()); + return Arrays.asList(initialiseSSLStartupHook, credManAuthenticatorStartupHook); + } + + public CredentialManager getCredentialManager() { + if (credentialManager == null) { + try { + credentialManager = new CredentialManagerImpl(); + } catch (CMException e) { + e.printStackTrace(); + } + } + return credentialManager; + } + + public List<ShutdownSPI> getShutdownHooks() { + return Arrays.asList(); + } + + public ApplicationConfiguration getApplicationConfiguration() { + return new ApplicationConfigurationImpl(); + } + +}
