You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by st...@apache.org on 2016/06/27 14:47:19 UTC

incubator-taverna-workbench git commit: Update myExperiment for Taverna 3 style

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 <st...@apache.org>
Authored: Mon Jun 27 15:45:42 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
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>