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>


Reply via email to