Repository: incubator-taverna-workbench Updated Branches: refs/heads/master f229d5ea8 -> 67d42d302
Update myExperiment for Taverna 3 style ... but I think the spring config might be incomplete. This code needs a good clean-up as it has horrible things like multiple places that construct a shared static field for the MainComponent JPanel just to be able to access some of its internals. 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/67d42d30 Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/tree/67d42d30 Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/diff/67d42d30 Branch: refs/heads/master Commit: 67d42d302c67e771e25aaecec9946846af715469 Parents: f229d5e Author: Stian Soiland-Reyes <[email protected]> Authored: Mon Jun 27 15:45:42 2016 +0100 Committer: Stian Soiland-Reyes <[email protected]> Committed: Mon Jun 27 15:45:42 2016 +0100 ---------------------------------------------------------------------- .../myexperiment/MainComponent.java | 88 +++++++++++--------- .../myexperiment/MainComponentFactory.java | 32 ++++++- .../myexperiment/MainComponentShutdownHook.java | 84 ------------------- .../myexperiment/MyExperimentPerspective.java | 22 ++--- .../myexperiment/TestJFrameForLocalLaunch.java | 48 ----------- .../myexperiment/UploadWorkflowDialog.java | 25 +++--- .../myexperiment/model/MyExperimentClient.java | 47 ++++------- .../model/MyExperimentClientShutdownHook.java | 75 +++++++++++++++++ .../perspectives/myexperiment/model/Util.java | 18 +--- .../config/MyExperimentConfiguration.java | 20 ++--- .../MyExperimentConfigurationUIFactory.java | 39 ++++----- .../perspective-myexperiment-context-osgi.xml | 14 +++- .../spring/perspective-myexperiment-context.xml | 18 +++- 13 files changed, 252 insertions(+), 278 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/67d42d30/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/MainComponent.java ---------------------------------------------------------------------- diff --git a/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/MainComponent.java b/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/MainComponent.java index 41acdbc..6b8ba1c 100644 --- a/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/MainComponent.java +++ b/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/MainComponent.java @@ -40,21 +40,25 @@ import javax.swing.text.html.HTMLEditorKit; import javax.swing.text.html.StyleSheet; import org.apache.taverna.lang.ui.ShadedLabel; -import org.apache.taverna.ui.perspectives.PerspectiveRegistry; +import org.apache.taverna.scufl2.api.container.WorkflowBundle; +import org.apache.taverna.ui.menu.MenuManager; import org.apache.taverna.ui.perspectives.myexperiment.model.MyExperimentClient; import org.apache.taverna.ui.perspectives.myexperiment.model.Resource; import org.apache.taverna.ui.perspectives.myexperiment.model.Util; import org.apache.taverna.ui.perspectives.myexperiment.model.Workflow; +import org.apache.taverna.workbench.configuration.colour.ColourManager; +import org.apache.taverna.workbench.configuration.workbench.WorkbenchConfiguration; import org.apache.taverna.workbench.edits.EditManager; import org.apache.taverna.workbench.file.FileManager; import org.apache.taverna.workbench.file.FileType; import org.apache.taverna.workbench.file.exceptions.OpenException; import org.apache.taverna.workbench.file.importworkflow.gui.ImportWorkflowWizard; import org.apache.taverna.workbench.icons.WorkbenchIcons; +import org.apache.taverna.workbench.selection.SelectionManager; import org.apache.taverna.workbench.ui.zaria.PerspectiveSPI; import org.apache.taverna.workbench.ui.zaria.UIComponentSPI; -import org.apache.taverna.workflowmodel.Dataflow; -import org.apache.taverna.workflowmodel.serialization.xml.impl.XMLSerializationConstants; +import org.apache.taverna.workbench.ui.Workbench; + import org.apache.log4j.Logger; @@ -64,7 +68,8 @@ import org.apache.log4j.Logger; public final class MainComponent extends JPanel implements UIComponentSPI, ChangeListener { // myExperiment client, logger and the stylesheet will be made available // throughout the whole perspective - private MyExperimentClient myExperimentClient; + + private final Logger logger = Logger.getLogger(MainComponent.class); private final StyleSheet css; private final ResourcePreviewFactory previewFactory; @@ -85,23 +90,26 @@ public final class MainComponent extends JPanel implements UIComponentSPI, Chang public static Logger LOGGER; private final EditManager editManager; private final FileManager fileManager; - - public MainComponent(EditManager editManager, FileManager fileManager) { - super(); + private final MyExperimentClient myExperimentClient; + private final MenuManager menuManager; + private final ColourManager colourManager; + private final WorkbenchConfiguration workbenchConfiguration; + private final SelectionManager selectionManager; + + public MainComponent(EditManager editManager, FileManager fileManager, MyExperimentClient myExperimentClient, + MenuManager menuManager, ColourManager colourManager, + WorkbenchConfiguration workbenchConfiguration, SelectionManager selectionManager) { this.editManager = editManager; this.fileManager = fileManager; - - // create and initialise myExperiment client - try { - this.myExperimentClient = new MyExperimentClient(logger); - } catch (Exception e) { - this.logger.error("Couldn't initialise myExperiment client"); - } + this.myExperimentClient = myExperimentClient; + this.menuManager = menuManager; + this.colourManager = colourManager; + this.workbenchConfiguration = workbenchConfiguration; + this.selectionManager = selectionManager; // x, y, z ARE NOT USED ANYWHERE ELSE // HACK TO BE ABLE TO GET THE REFS FROM TAVERNA'S PREFERENCE PANEL - // TODO: refactor code for all the other classes to utilise the class - // vars + // FIXME: Avoid all these global class variables! MainComponent x = this; MAIN_COMPONENT = x; @@ -136,22 +144,6 @@ public final class MainComponent extends JPanel implements UIComponentSPI, Chang // prevent bad layout in them HTMLEditorKit kit = new StyledHTMLEditorKit(this.css); - // determine which shutdown operations to use - if (Util.isRunningInTaverna()) { - // register the current instance of main component with the - // myExperiment - // perspective; this will be used later on when shutdown operation - // needs - // to be performed - e.g. this aids ShutdownSPI to find the running - // instance of the plugin - for (PerspectiveSPI perspective : PerspectiveRegistry.getInstance().getPerspectives()) { - if (perspective.getText().equals(MyExperimentPerspective.PERSPECTIVE_NAME)) { - ((MyExperimentPerspective) perspective).setMainComponent(this); - break; - } - } - } - // Do the rest in a separate thread to avoid hanging the GUI. // Remember to use SwingUtilities.invokeLater to update the GUI // directly. @@ -291,7 +283,7 @@ public final class MainComponent extends JPanel implements UIComponentSPI, Chang if (oAutoLogin != null && oAutoLogin.equals("true")) { this.getStatusBar().setStatus(this.getMyStuffTab().getClass().getName(), "Performing autologin"); - this.myExperimentClient.doLoginFromStoredCredentials(); + this.myExperimentClient.doLogin(); this.getStatusBar().setStatus(this.getMyStuffTab().getClass().getName(), "Autologin finished. Fetching user data"); } @@ -475,7 +467,7 @@ public final class MainComponent extends JPanel implements UIComponentSPI, Chang FileType fileTypeType = (w.isTaverna1Workflow() ? new ScuflFileType() : new T2FlowFileType()); - Dataflow openDataflow = fileManager.openDataflow(fileTypeType, + WorkflowBundle openDataflow = fileManager.openDataflow(fileTypeType, workflowDataInputStream); } catch (Exception e) { javax.swing.JOptionPane.showMessageDialog(null, @@ -553,7 +545,10 @@ public final class MainComponent extends JPanel implements UIComponentSPI, Chang getPreviewBrowser().toBack(); ImportWorkflowWizard importWorkflowDialog = new ImportWorkflowWizard( - getPreviewBrowser(), editManager, fileManager); + getPreviewBrowser(), editManager, fileManager, + menuManager, colourManager, + workbenchConfiguration, selectionManager + ); Workflow w; try { @@ -569,7 +564,7 @@ public final class MainComponent extends JPanel implements UIComponentSPI, Chang ByteArrayInputStream workflowDataInputStream = new ByteArrayInputStream(w.getContent()); FileType fileTypeType = (w.isTaverna1Workflow() ? new MainComponent.ScuflFileType() : new MainComponent.T2FlowFileType()); - Dataflow toBeImported; + WorkflowBundle toBeImported; try { toBeImported = fileManager.openDataflowSilently(fileTypeType, workflowDataInputStream).getDataflow(); @@ -638,8 +633,25 @@ public final class MainComponent extends JPanel implements UIComponentSPI, Chang @Override public String getMimeType() { - // "application/vnd.taverna.t2flow+xml"; - return XMLSerializationConstants.WORKFLOW_DOCUMENT_MIMETYPE; + return "application/vnd.taverna.t2flow+xml"; + } + } + + public static class WorkflowBundleFileType extends FileType { + @Override + public String getDescription() { + return "Taverna 3 workflow bundle"; + } + + @Override + public String getExtension() { + return "wfbundle"; + } + + @Override + public String getMimeType() { + return "application/vnd.taverna.scufl2.workflow-bundle"; } } + } http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/67d42d30/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/MainComponentFactory.java ---------------------------------------------------------------------- diff --git a/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/MainComponentFactory.java b/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/MainComponentFactory.java index 4fe0027..5110949 100644 --- a/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/MainComponentFactory.java +++ b/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/MainComponentFactory.java @@ -26,9 +26,14 @@ package org.apache.taverna.ui.perspectives.myexperiment; import javax.swing.ImageIcon; +import org.apache.taverna.ui.menu.MenuManager; +import org.apache.taverna.ui.perspectives.myexperiment.model.MyExperimentClient; +import org.apache.taverna.workbench.configuration.colour.ColourManager; +import org.apache.taverna.workbench.configuration.workbench.WorkbenchConfiguration; import org.apache.taverna.workbench.edits.EditManager; import org.apache.taverna.workbench.file.FileManager; import org.apache.taverna.workbench.icons.WorkbenchIcons; +import org.apache.taverna.workbench.selection.SelectionManager; import org.apache.taverna.workbench.ui.zaria.UIComponentFactorySPI; import org.apache.taverna.workbench.ui.zaria.UIComponentSPI; @@ -36,9 +41,14 @@ public class MainComponentFactory implements UIComponentFactorySPI { private EditManager editManager; private FileManager fileManager; + private MyExperimentClient myExperimentClient; + private MenuManager menuManager; + private ColourManager colourManager; + private WorkbenchConfiguration workbenchConfiguration; + private SelectionManager selectionManager; public UIComponentSPI getComponent() { - return new MainComponent(editManager, fileManager); + return new MainComponent(editManager, fileManager, myExperimentClient, menuManager, colourManager, workbenchConfiguration, selectionManager); } public ImageIcon getIcon() { @@ -57,4 +67,24 @@ public class MainComponentFactory implements UIComponentFactorySPI { this.fileManager = fileManager; } + public void setMyExperimentClient(MyExperimentClient myExperimentClient) { + this.myExperimentClient = myExperimentClient; + } + + public void setMenuManager(MenuManager menuManager) { + this.menuManager = menuManager; + } + + public void setColourManager(ColourManager colourManager) { + this.colourManager = colourManager; + } + + public void setWorkbenchConfiguration(WorkbenchConfiguration workbenchConfiguration) { + this.workbenchConfiguration = workbenchConfiguration; + } + + public void setSelectionManager(SelectionManager selectionManager) { + this.selectionManager = selectionManager; + } + } http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/67d42d30/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/MainComponentShutdownHook.java ---------------------------------------------------------------------- diff --git a/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/MainComponentShutdownHook.java b/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/MainComponentShutdownHook.java deleted file mode 100644 index 83a4431..0000000 --- a/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/MainComponentShutdownHook.java +++ /dev/null @@ -1,84 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2009 The University of Manchester - * - * Modifications to the initial code base are copyright of their respective - * authors, or their employers as appropriate. - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 - ******************************************************************************/ -package org.apache.taverna.ui.perspectives.myexperiment; - -import org.apache.taverna.ui.perspectives.PerspectiveRegistry; -import org.apache.taverna.ui.perspectives.myexperiment.model.MyExperimentClient; -import org.apache.taverna.workbench.ShutdownSPI; -import org.apache.taverna.workbench.ui.zaria.PerspectiveSPI; - -import org.apache.log4j.Logger; - -/** - * @author Sergejs Aleksejevs, Jiten Bhagat - */ - -public class MainComponentShutdownHook implements ShutdownSPI { - private MainComponent pluginMainComponent; - private MyExperimentClient myExperimentClient; - private Logger logger; - - public int positionHint() { - // all custom plugins are suggested to return a value of > 100; - // this affects when in the termination process will this plugin - // be shutdown; - return 100; - } - - public boolean shutdown() { - // find instance of main component of the running myExperiment perspective - MainComponent mainComponent = null; - for (PerspectiveSPI perspective : PerspectiveRegistry.getInstance().getPerspectives()) { - if (perspective instanceof MyExperimentPerspective) { - mainComponent = ((MyExperimentPerspective) perspective).getMainComponent(); - break; - } - } - - // if myExperiment perspective wasn't initialised, no shutdown operations are required / possible - if (mainComponent != null) { - this.setLinks(mainComponent, mainComponent.getMyExperimentClient(), mainComponent.getLogger()); - logger.debug("Starting shutdown operations for myExperiment plugin"); - - try { - myExperimentClient.storeHistoryAndSettings(); - } catch (Exception e) { - logger.error("Failed while serializing myExperiment plugin settings:\n" - + e); - } - - logger.debug("myExperiment plugin shutdown is completed; terminated..."); - } - - // "true" means that shutdown operations are complete and Taverna can terminate - return true; - } - - /** - * Sets up links of this class with the rest of the plugin. - */ - public void setLinks(MainComponent component, MyExperimentClient client, Logger logger) { - this.pluginMainComponent = component; - this.myExperimentClient = client; - this.logger = logger; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/67d42d30/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/MyExperimentPerspective.java ---------------------------------------------------------------------- diff --git a/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/MyExperimentPerspective.java b/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/MyExperimentPerspective.java index 27202e5..caf93d7 100644 --- a/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/MyExperimentPerspective.java +++ b/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/MyExperimentPerspective.java @@ -21,16 +21,14 @@ package org.apache.taverna.ui.perspectives.myexperiment; -import java.io.InputStream; import java.net.URL; import javax.swing.ImageIcon; +import javax.swing.JComponent; import org.apache.taverna.ui.perspectives.myexperiment.model.Resource; import org.apache.taverna.workbench.ui.zaria.PerspectiveSPI; -import org.jdom.Element; - /** * @author Sergejs Aleksejevs, Jiten Bhagat */ @@ -54,10 +52,6 @@ public class MyExperimentPerspective implements PerspectiveSPI { } } - public InputStream getLayoutInputStream() { - return getClass().getResourceAsStream("myexperiment-perspective.xml"); - } - public String getText() { return PERSPECTIVE_NAME; } @@ -78,10 +72,6 @@ public class MyExperimentPerspective implements PerspectiveSPI { } - public void update(Element layoutElement) { - // Not sure what to do here - } - public void setMainComponent(MainComponent component) { this.perspectiveMainComponent = component; } @@ -187,4 +177,14 @@ public class MyExperimentPerspective implements PerspectiveSPI { return (MyExperimentPerspective.class.getResource(strResourcePath)); } + @Override + public String getID() { + return "myExperiment"; + } + + @Override + public JComponent getPanel() { + return getMainComponent(); + } + } http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/67d42d30/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/TestJFrameForLocalLaunch.java ---------------------------------------------------------------------- diff --git a/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/TestJFrameForLocalLaunch.java b/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/TestJFrameForLocalLaunch.java deleted file mode 100644 index 294765b..0000000 --- a/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/TestJFrameForLocalLaunch.java +++ /dev/null @@ -1,48 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2009 The University of Manchester - * - * Modifications to the initial code base are copyright of their respective - * authors, or their employers as appropriate. - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 - ******************************************************************************/ -package org.apache.taverna.ui.perspectives.myexperiment; - -import java.awt.Dimension; -import javax.swing.JFrame; - -public class TestJFrameForLocalLaunch { - - /** - * This is a simple test class for launching myExperiment perspective - * from outside Taverna. At some point it will be not usable anymore, - * when proper integration of myExperiment plugin is made. - * - * @author Sergejs Aleksejevs - */ - public static void main(String[] args) - { - JFrame frame = new JFrame("myExperiment Perspective Test"); - frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - - frame.setMinimumSize(new Dimension(1000, 700)); - frame.setLocation(300, 150); - frame.getContentPane().add(new org.apache.taverna.ui.perspectives.myexperiment.MainComponent(null, null)); - - frame.pack(); - frame.setVisible(true); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/67d42d30/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/UploadWorkflowDialog.java ---------------------------------------------------------------------- diff --git a/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/UploadWorkflowDialog.java b/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/UploadWorkflowDialog.java index 022a22e..06cd504 100644 --- a/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/UploadWorkflowDialog.java +++ b/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/UploadWorkflowDialog.java @@ -63,6 +63,7 @@ import javax.swing.SwingUtilities; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; +import org.apache.taverna.scufl2.api.container.WorkflowBundle; import org.apache.taverna.ui.perspectives.myexperiment.model.License; import org.apache.taverna.ui.perspectives.myexperiment.model.MyExperimentClient; import org.apache.taverna.ui.perspectives.myexperiment.model.Resource; @@ -201,25 +202,25 @@ public class UploadWorkflowDialog extends HelpEnabledDialog implements ActionLis } private void createDropdown() { - List<DataflowSelection> openDataflows = new ArrayList<DataflowSelection>(); + List<WorkflowBundleSelection> openDataflows = new ArrayList<WorkflowBundleSelection>(); int currentlyOpenedIndex = 0; boolean foundIndex = false; - for (Dataflow df : fileManager.getOpenDataflows()) { + for (WorkflowBundle df : fileManager.getOpenDataflows()) { Object source = fileManager.getDataflowSource(df); String name = ""; boolean getLocalName = source instanceof InputStream; if (source != null) - name = (getLocalName ? df.getLocalName() : source.toString()); + name = (getLocalName ? df.getName() : source.toString()); if (df.equals(fileManager.getCurrentDataflow())) { name = "<html><body>" + name + " - " + " <i>(current)</i></body></html>"; foundIndex = true; } - openDataflows.add(new DataflowSelection(df, name)); + openDataflows.add(new WorkflowBundleSelection(df, name)); if (!foundIndex) currentlyOpenedIndex++; } @@ -424,8 +425,8 @@ public class UploadWorkflowDialog extends HelpEnabledDialog implements ActionLis if (rbSelectOpenWorkflow.isSelected()) { // user requested to use a flow // currently open in t2 - Dataflow dataflowToUpload = ((DataflowSelection) jcbOpenWorkflows.getSelectedItem()) - .getDataflow(); + WorkflowBundle dataflowToUpload = ((WorkflowBundleSelection) jcbOpenWorkflows.getSelectedItem()) + .getWorkflowBundle(); SaveWorkflowAsAction saveAction = new SaveWorkflowAsAction(fileManager); boolean skipPrompt = false; @@ -823,17 +824,17 @@ public class UploadWorkflowDialog extends HelpEnabledDialog implements ActionLis // not in use } - private class DataflowSelection { - private final Dataflow dataflow; + private class WorkflowBundleSelection { + private final WorkflowBundle workflowBundle; private final String name; - public DataflowSelection(Dataflow dataflow, String name) { - this.dataflow = dataflow; + public WorkflowBundleSelection(WorkflowBundle df, String name) { + this.workflowBundle = df; this.name = name; } - public Dataflow getDataflow() { - return dataflow; + public WorkflowBundle getWorkflowBundle() { + return workflowBundle; } public String getName() { http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/67d42d30/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/model/MyExperimentClient.java ---------------------------------------------------------------------- diff --git a/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/model/MyExperimentClient.java b/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/model/MyExperimentClient.java index 1772886..b393de9 100644 --- a/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/model/MyExperimentClient.java +++ b/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/model/MyExperimentClient.java @@ -44,24 +44,22 @@ import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Properties; -import java.util.Set; import javax.swing.ImageIcon; import javax.swing.JOptionPane; -import net.sf.taverna.raven.appconfig.ApplicationRuntime; +import org.apache.log4j.Logger; import org.apache.taverna.security.credentialmanager.CMException; import org.apache.taverna.security.credentialmanager.CredentialManager; import org.apache.taverna.security.credentialmanager.UsernamePassword; import org.apache.taverna.ui.perspectives.myexperiment.MainComponent; import org.apache.taverna.ui.perspectives.myexperiment.MyExperimentPerspective; import org.apache.taverna.ui.perspectives.myexperiment.model.SearchEngine.QuerySearchInstance; - -import org.apache.log4j.Logger; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; import org.xml.sax.InputSource; +import org.apache.taverna.configuration.app.ApplicationConfiguration; /** * @author Sergejs Aleksejevs, Emmanuel Tagarira, Jiten Bhagat @@ -115,35 +113,24 @@ public class MyExperimentClient { // file // the logger - private Logger logger; + private Logger logger = Logger.getLogger(MyExperimentClient.class); // authentication settings (and the current user) private boolean LOGGED_IN = false; private String AUTH_STRING = ""; private User current_user = null; +private CredentialManager credentialManager; // default constructor - public MyExperimentClient() { - } - - public MyExperimentClient(Logger logger) { - this(); - - this.logger = logger; + public MyExperimentClient(CredentialManager credentialManager, ApplicationConfiguration applicationConfig) { + - // === Load INI settings === + this.credentialManager = credentialManager; + // === Load INI settings === // but loading settings from INI file, determine what folder is to be used // for INI file - if (Util.isRunningInTaverna()) { - // running inside Taverna - use its folder to place the config file - this.fIniFileDir = new java.io.File(ApplicationRuntime.getInstance() - .getApplicationHomeDir(), "conf"); - } else { - // running outside Taverna, place config file into the user's home - // directory - this.fIniFileDir = new java.io.File(System.getProperty("user.home"), - ".Taverna2-myExperiment Plugin"); - } + this.fIniFileDir = new java.io.File(applicationConfig + .getApplicationHomeDir().toFile(), "conf"); // load preferences if the INI file exists this.iniSettings = new Properties(); @@ -255,7 +242,7 @@ public class MyExperimentClient { private UsernamePassword getUserPass(String urlString) { try { URI userpassUrl = URI.create(urlString); - final UsernamePassword userAndPass = CredentialManager.getInstance().getUsernameAndPasswordForService(userpassUrl, true, null); + final UsernamePassword userAndPass = credentialManager.getUsernameAndPasswordForService(userpassUrl, true, null); return userAndPass; } catch (CMException e) { throw new RuntimeException("Error in Taverna Credential Manager", e); @@ -268,7 +255,7 @@ public class MyExperimentClient { ServerResponse response = null; Document doc = null; try { -// CredentialManager.getInstance().getUsernameAndPasswordForService(new URI(this.BASE_URL), true, null); +// credentialManager.getUsernameAndPasswordForService(new URI(this.BASE_URL), true, null); response = this.doMyExperimentGET(this.BASE_URL + "/whoami.xml"); } catch (Exception e) { this.logger @@ -279,13 +266,13 @@ public class MyExperimentClient { if (response.getResponseCode() == HttpURLConnection.HTTP_UNAUTHORIZED) { try { - List<String> toDelete = CredentialManager.getInstance().getServiceURLsforAllUsernameAndPasswordPairs(); - for (String uri : toDelete) { - if (uri.startsWith(BASE_URL)) { - CredentialManager.getInstance().deleteUsernameAndPasswordForService(uri); + List<URI> toDelete = credentialManager.getServiceURIsForAllUsernameAndPasswordPairs(); + for (URI uri : toDelete) { + if (uri.toASCIIString().startsWith(BASE_URL)) { + credentialManager.deleteUsernameAndPasswordForService(uri); } } -// CredentialManager.getInstance().resetAuthCache(); +// credentialManager.resetAuthCache(); doc = null; } catch (Exception e) { logger.error(e); http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/67d42d30/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/model/MyExperimentClientShutdownHook.java ---------------------------------------------------------------------- diff --git a/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/model/MyExperimentClientShutdownHook.java b/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/model/MyExperimentClientShutdownHook.java new file mode 100644 index 0000000..695f54f --- /dev/null +++ b/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/model/MyExperimentClientShutdownHook.java @@ -0,0 +1,75 @@ +/******************************************************************************* + * Copyright (C) 2009 The University of Manchester + * + * Modifications to the initial code base are copyright of their respective + * authors, or their employers as appropriate. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 + ******************************************************************************/ +package org.apache.taverna.ui.perspectives.myexperiment.model; + +import org.apache.log4j.Logger; +import org.apache.taverna.ui.perspectives.myexperiment.model.MyExperimentClient; +import org.apache.taverna.workbench.ShutdownSPI; + +/** + * @author Sergejs Aleksejevs, Jiten Bhagat + */ + +public class MyExperimentClientShutdownHook implements ShutdownSPI { + + + private MyExperimentClient myExperimentClient; + private Logger logger = Logger.getLogger(MyExperimentClientShutdownHook.class); + + public int positionHint() { + // all custom plugins are suggested to return a value of > 100; + // this affects when in the termination process will this plugin + // be shutdown; + return 100; + } + + public boolean shutdown() { + if (myExperimentClient == null) { + // no myExperimentClient yet, all done + return true; + } + // find instance of main component of the running myExperiment perspective + logger.debug("Starting shutdown operations for myExperiment plugin"); + + try { + myExperimentClient.storeHistoryAndSettings(); + } catch (Exception e) { + logger.error("Failed while serializing myExperiment plugin settings:\n" + + e); + } + + logger.debug("myExperiment plugin shutdown is completed; terminated..."); + + // "true" means that shutdown operations are complete and Taverna can terminate + return true; + } + + + public void setMyExperimentClient(MyExperimentClient myExperimentClient) { + this.myExperimentClient = myExperimentClient; + } + + public MyExperimentClient getMyExperimentClient() { + return myExperimentClient; + } + + +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/67d42d30/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/model/Util.java ---------------------------------------------------------------------- diff --git a/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/model/Util.java b/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/model/Util.java index 3e055a7..811201b 100644 --- a/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/model/Util.java +++ b/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/model/Util.java @@ -50,12 +50,10 @@ import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.SwingConstants; -import net.sf.taverna.raven.appconfig.ApplicationRuntime; +import org.apache.log4j.Logger; import org.apache.taverna.ui.perspectives.myexperiment.JClickableLabel; import org.apache.taverna.ui.perspectives.myexperiment.MyExperimentPerspective; import org.apache.taverna.ui.perspectives.myexperiment.model.SearchEngine.QuerySearchInstance; - -import org.apache.log4j.Logger; import org.jdom.Document; import org.jdom.Element; @@ -607,18 +605,4 @@ public class Util { return (strResult); } - /** - * Determines whether the plugin is running as a standalone JFrame or inside - * Taverna Workbench. - */ - public static boolean isRunningInTaverna() { - try { - // ApplicationRuntime class is defined within Taverna API. If this is available, - // it should mean that the plugin runs within Taverna. - ApplicationRuntime.getInstance(); - return true; - } catch (NoClassDefFoundError e) { - return false; - } - } } http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/67d42d30/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/workbench/myexperiment/config/MyExperimentConfiguration.java ---------------------------------------------------------------------- diff --git a/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/workbench/myexperiment/config/MyExperimentConfiguration.java b/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/workbench/myexperiment/config/MyExperimentConfiguration.java index bdae90f..0d36113 100644 --- a/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/workbench/myexperiment/config/MyExperimentConfiguration.java +++ b/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/workbench/myexperiment/config/MyExperimentConfiguration.java @@ -23,21 +23,23 @@ package org.apache.taverna.workbench.myexperiment.config; import java.util.HashMap; import java.util.Map; -import uk.org.taverna.configuration.AbstractConfigurable; -//import org.apache.log4j.Logger; -import uk.org.taverna.configuration.Configurable; +import org.apache.taverna.configuration.AbstractConfigurable; +import org.apache.taverna.configuration.Configurable; +import org.apache.taverna.configuration.ConfigurationManager; + /** * @author Emmanuel Tagarira, Alan Williams */ public class MyExperimentConfiguration extends AbstractConfigurable { - private static class Singleton { - private static MyExperimentConfiguration instance = new MyExperimentConfiguration(); - } //private static Logger logger = Logger.getLogger(MyExperimentConfiguration.class); - private Map<String, String> defaultPropertyMap; + public MyExperimentConfiguration(ConfigurationManager configurationManager) { + super(configurationManager); + } + +private Map<String, String> defaultPropertyMap; public String getCategory() { return "general"; @@ -61,8 +63,4 @@ public class MyExperimentConfiguration extends AbstractConfigurable { public String getUUID() { return "d25867g1-6078-22ee-bf27-1911311d0b77"; } - - public static Configurable getInstance() { - return Singleton.instance; - } } http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/67d42d30/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/workbench/myexperiment/config/MyExperimentConfigurationUIFactory.java ---------------------------------------------------------------------- diff --git a/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/workbench/myexperiment/config/MyExperimentConfigurationUIFactory.java b/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/workbench/myexperiment/config/MyExperimentConfigurationUIFactory.java index 683011c..a5a5400 100644 --- a/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/workbench/myexperiment/config/MyExperimentConfigurationUIFactory.java +++ b/taverna-perspective-myexperiment/src/main/java/org/apache/taverna/workbench/myexperiment/config/MyExperimentConfigurationUIFactory.java @@ -22,10 +22,9 @@ package org.apache.taverna.workbench.myexperiment.config; import javax.swing.JPanel; -import uk.org.taverna.configuration.Configurable; -import uk.org.taverna.configuration.ConfigurationUIFactory; - -import org.apache.taverna.ui.perspectives.myexperiment.MainComponent; +import org.apache.taverna.configuration.Configurable; +import org.apache.taverna.configuration.ConfigurationManager; +import org.apache.taverna.configuration.ConfigurationUIFactory; import org.apache.taverna.workbench.edits.EditManager; import org.apache.taverna.workbench.file.FileManager; @@ -34,29 +33,25 @@ import org.apache.taverna.workbench.file.FileManager; */ public class MyExperimentConfigurationUIFactory implements ConfigurationUIFactory { - private EditManager editManager; -private FileManager fileManager; - -public boolean canHandle(String uuid) { - return uuid.equals(getConfigurable().getUUID()); - } + private ConfigurationManager configurationManager; - public JPanel getConfigurationPanel() { - if (MainComponent.MAIN_COMPONENT == null) - MainComponent.MAIN_COMPONENT = new MainComponent(editManager, fileManager); - return new MyExperimentConfigurationPanel(); - } + public boolean canHandle(String uuid) { + return uuid.equals(getConfigurable().getUUID()); + } - public Configurable getConfigurable() { - return MyExperimentConfiguration.getInstance(); - } + public JPanel getConfigurationPanel() { + // FIXME: This is insane.. why would we initialize the UI from here? + // if (MainComponent.MAIN_COMPONENT == null) + // MainComponent.MAIN_COMPONENT = new MainComponent(editManager, fileManager); + return new MyExperimentConfigurationPanel(); + } - public void setEditManager(EditManager editManager) { - this.editManager = editManager; + public Configurable getConfigurable() { + return new MyExperimentConfiguration(configurationManager); } - public void setFileManager(FileManager fileManager) { - this.fileManager = fileManager; + public void setConfigurationManager(ConfigurationManager configurationManager) { + this.configurationManager = configurationManager; } } http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/67d42d30/taverna-perspective-myexperiment/src/main/resources/META-INF/spring/perspective-myexperiment-context-osgi.xml ---------------------------------------------------------------------- diff --git a/taverna-perspective-myexperiment/src/main/resources/META-INF/spring/perspective-myexperiment-context-osgi.xml b/taverna-perspective-myexperiment/src/main/resources/META-INF/spring/perspective-myexperiment-context-osgi.xml index 5389b4a..bce9e01 100644 --- a/taverna-perspective-myexperiment/src/main/resources/META-INF/spring/perspective-myexperiment-context-osgi.xml +++ b/taverna-perspective-myexperiment/src/main/resources/META-INF/spring/perspective-myexperiment-context-osgi.xml @@ -28,11 +28,23 @@ <service ref="MainComponentFactory" interface="org.apache.taverna.workbench.ui.zaria.UIComponentFactorySPI" /> + <service ref="MyExperimentConfiguration" interface="org.apache.taverna.configuration.Configurable" /> + <service ref="MyExperimentPerspective" interface="org.apache.taverna.workbench.ui.zaria.PerspectiveSPI" /> - <service ref="MainComponentShutdownHook" interface="org.apache.taverna.workbench.ShutdownSPI" /> + <service ref="MyExperimentClientShutdownHook" interface="org.apache.taverna.workbench.ShutdownSPI" /> <reference id="editManager" interface="org.apache.taverna.workbench.edits.EditManager" /> <reference id="fileManager" interface="org.apache.taverna.workbench.file.FileManager" /> + <reference id="credentialManager" interface="org.apache.taverna.security.credentialmanager.CredentialManager" /> + <reference id="appConfig" interface="org.apache.taverna.configuration.app.ApplicationConfiguration" /> + <reference id="menuManager" interface="org.apache.taverna.ui.menu.MenuManager" /> + <reference id="edits" interface="org.apache.taverna.workflowmodel.Edits" /> + <reference id="activityIconManager" interface="org.apache.taverna.workbench.activityicons.ActivityIconManager" /> + <reference id="colourManager" interface="org.apache.taverna.workbench.configuration.colour.ColourManager" /> + <reference id="serviceDescriptionRegistry" interface="org.apache.taverna.servicedescriptions.ServiceDescriptionRegistry" /> + <reference id="workbenchConfiguration" interface="org.apache.taverna.workbench.configuration.workbench.WorkbenchConfiguration" /> + <reference id="selectionManager" interface="org.apache.taverna.workbench.selection.SelectionManager" /> + <reference id="configurationManager" interface="org.apache.taverna.configuration.ConfigurationManager" /> </beans:beans> http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/67d42d30/taverna-perspective-myexperiment/src/main/resources/META-INF/spring/perspective-myexperiment-context.xml ---------------------------------------------------------------------- diff --git a/taverna-perspective-myexperiment/src/main/resources/META-INF/spring/perspective-myexperiment-context.xml b/taverna-perspective-myexperiment/src/main/resources/META-INF/spring/perspective-myexperiment-context.xml index b174103..f86cb56 100644 --- a/taverna-perspective-myexperiment/src/main/resources/META-INF/spring/perspective-myexperiment-context.xml +++ b/taverna-perspective-myexperiment/src/main/resources/META-INF/spring/perspective-myexperiment-context.xml @@ -22,17 +22,29 @@ http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="MyExperimentConfigurationUIFactory" class="org.apache.taverna.workbench.myexperiment.config.MyExperimentConfigurationUIFactory"> - <property name="editManager" ref="editManager" /> - <property name="fileManager" ref="fileManager" /> + <property name="configurationManager" ref="configurationManager" /> + </bean> + + <bean id="MyExperimentClient" class="org.apache.taverna.ui.perspectives.myexperiment.model.MyExperimentClient"> + <constructor-arg ref="credentialManager" /> + <constructor-arg ref="appConfig" /> </bean> <bean id="MainComponentFactory" class="org.apache.taverna.ui.perspectives.myexperiment.MainComponentFactory"> <property name="editManager" ref="editManager" /> <property name="fileManager" ref="fileManager" /> + <property name="myExperimentClient" ref="MyExperimentClient" /> + <property name="menuManager" ref="menuManager" /> + <property name="colourManager" ref="colourManager" /> + <property name="workbenchConfiguration" ref="workbenchConfiguration" /> + <property name="selectionManager" ref="selectionManager" /> </bean> <bean id="MyExperimentPerspective" class="org.apache.taverna.ui.perspectives.myexperiment.MyExperimentPerspective" /> - <bean id="MainComponentShutdownHook" class="org.apache.taverna.ui.perspectives.myexperiment.MainComponentShutdownHook" /> + <bean id="MyExperimentClientShutdownHook" class="org.apache.taverna.ui.perspectives.myexperiment.model.MyExperimentClientShutdownHook"> + <property name="myexperimentClient" ref="MyExperimentClient" /> + </bean> + </beans>
