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 2015/02/23 11:38:17 UTC

[09/17] incubator-taverna-plugin-bioinformatics git commit: Revert "temporarily empty repository"

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomart-martservice/src/test/java/org/biomart/martservice/query/QueryTest.java
----------------------------------------------------------------------
diff --git a/taverna-biomart-martservice/src/test/java/org/biomart/martservice/query/QueryTest.java b/taverna-biomart-martservice/src/test/java/org/biomart/martservice/query/QueryTest.java
new file mode 100644
index 0000000..b2b93cc
--- /dev/null
+++ b/taverna-biomart-martservice/src/test/java/org/biomart/martservice/query/QueryTest.java
@@ -0,0 +1,303 @@
+/*
+ * Copyright (C) 2003 The University of Manchester 
+ *
+ * Modifications to the initial code base are copyright of their
+ * respective authors, or their employers as appropriate.  Authorship
+ * of the modifications may be determined from the ChangeLog placed at
+ * the end of this file.
+ *
+ * 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
+ * USA.
+ *
+ ****************************************************************
+ * Source code information
+ * -----------------------
+ * Filename           $RCSfile: QueryTest.java,v $
+ * Revision           $Revision: 1.3 $
+ * Release status     $State: Exp $
+ * Last modified on   $Date: 2007/10/01 12:11:30 $
+ *               by   $Author: davidwithers $
+ * Created on 03-May-2006
+ *****************************************************************/
+package org.biomart.martservice.query;
+
+import junit.framework.TestCase;
+
+/**
+ * 
+ * @author David Withers
+ */
+public class QueryTest extends TestCase {
+	private String attributeName;
+
+	private Attribute attribute;
+
+	private String filterName;
+
+	private String filterValue;
+
+	private Filter filter;
+
+	private Link link;
+
+	private String datasetName;
+
+	private Dataset dataset;
+
+	private String virtualSchemaName;
+	
+	private String softwareVersion;
+	
+	private String formatter;
+
+	private Query query;
+	
+	/*
+	 * @see TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+		attributeName = "attribute name";
+		attribute = new Attribute(attributeName);
+
+		filterName = "filter name";
+		filterValue = "filter value";
+		filter = new Filter(filterName, filterValue);
+
+		link = new Link("source", "target", "id");
+
+		datasetName = "dataset name";
+		dataset = new Dataset(datasetName);
+
+		dataset.addAttribute(attribute);
+		dataset.addFilter(filter);
+
+		virtualSchemaName = "default";
+		
+		softwareVersion = "software version";
+		
+		formatter = "page formatter";
+		
+		query = new Query(virtualSchemaName);
+	}
+
+	/*
+	 * Test method for 'org.biomart.martservice.query.Query.Query(String)'
+	 */
+	public final void testQueryString() {
+		Query query = new Query(virtualSchemaName);
+		assertEquals("virtualSchemaName should be '" + virtualSchemaName + "'",
+				query.getVirtualSchemaName(), virtualSchemaName);
+		assertEquals("count should be '0'", query.getCount(), 0);
+	}
+
+	/*
+	 * Test method for 'org.biomart.martservice.query.Query.Query(String, int)'
+	 */
+	public final void testQueryStringInt() {
+		Query query = new Query(virtualSchemaName, 1);
+		assertEquals("virtualSchemaName should be '" + virtualSchemaName + "'",
+				query.getVirtualSchemaName(), virtualSchemaName);
+		assertEquals("count should be '1'", query.getCount(), 1);
+	}
+
+	/*
+	 * Test method for 'org.biomart.martservice.query.Query.Query(Query)'
+	 */
+	public final void testQueryQuery() {
+		query.addDataset(dataset);
+		query.addLink(link);
+		query.setCount(1);
+		query.setUniqueRows(1);
+		query.setSoftwareVersion(softwareVersion);
+		query.setFormatter(formatter);
+		Query copy = new Query(query);
+		assertEquals(copy.getDatasets().size(), 1);
+		assertEquals(copy.getAttributes().size(), 1);
+		assertEquals(copy.getFilters().size(), 1);
+		assertEquals(copy.getLinks().size(), 1);
+		assertEquals(copy.getCount(), 1);
+		assertEquals(copy.getUniqueRows(), 1);
+		assertEquals(copy.getSoftwareVersion(), softwareVersion);
+		assertEquals(copy.getFormatter(), formatter);
+	}
+
+	/*
+	 * Test method for
+	 * 'org.biomart.martservice.query.Query.getVirtualSchemaName()'
+	 */
+	public final void testGetVirtualSchemaName() {
+		assertEquals("virtualSchemaName should be '" + virtualSchemaName + "'",
+				query.getVirtualSchemaName(), virtualSchemaName);
+	}
+
+	/*
+	 * Test method for
+	 * 'org.biomart.martservice.query.Query.setVirtualSchemaName(String)'
+	 */
+	public final void testSetVirtualSchemaName() {
+		String newVirtualSchemaName = "new virtual schema name";
+		query.setVirtualSchemaName(newVirtualSchemaName);
+		assertEquals("virtualSchemaName should be '" + newVirtualSchemaName
+				+ "'", query.getVirtualSchemaName(), newVirtualSchemaName);
+	}
+
+	/*
+	 * Test method for 'org.biomart.martservice.query.Query.getCount()'
+	 */
+	public final void testGetCount() {
+		assertEquals("count should be '0'", query.getCount(), 0);
+	}
+
+	/*
+	 * Test method for 'org.biomart.martservice.query.Query.setCount(int)'
+	 */
+	public final void testSetCount() {
+		query.setCount(1);
+		assertEquals("count should be '1'", query.getCount(), 1);
+	}
+
+	/*
+	 * Test method for 'org.biomart.martservice.query.Query.getUniqueRows()'
+	 */
+	public final void testGetUniqueRows() {
+		assertEquals("uniqueRows should be '0'", query.getUniqueRows(), 0);
+	}
+
+	/*
+	 * Test method for 'org.biomart.martservice.query.Query.setUniqueRows(int)'
+	 */
+	public final void testSetUniqueRows() {
+		query.setUniqueRows(1);
+		assertEquals("uniqueRows should be '1'", query.getUniqueRows(), 1);
+	}
+
+	/*
+	 * Test method for 'org.biomart.martservice.query.Query.getSoftwareVersion()'
+	 */
+	public final void testGetSoftwareVersion() {
+		assertNull("softwareVersion should be null", query.getSoftwareVersion());
+	}
+
+	/*
+	 * Test method for 'org.biomart.martservice.query.Query.setSoftwareVersion(String)'
+	 */
+	public final void testSetSoftwareVersion() {
+		String newSoftwareVersion = "new software version";
+		query.setSoftwareVersion(newSoftwareVersion);
+		assertEquals("softwareVersion should be '" + newSoftwareVersion + "'", query.getSoftwareVersion(), newSoftwareVersion);
+	}
+
+	/*
+	 * Test method for 'org.biomart.martservice.query.Query.getFormatter()'
+	 */
+	public final void testGetFormatter() {
+		assertNull("formatter should be null", query.getFormatter());
+	}
+
+	/*
+	 * Test method for 'org.biomart.martservice.query.Query.setFormatter(String)'
+	 */
+	public final void testSetFormatter() {
+		String newFormatter = "new formatter";
+		query.setFormatter(newFormatter);
+		assertEquals("formatter should be '" + newFormatter + "'", query.getFormatter(), newFormatter);
+	}
+
+	/*
+	 * Test method for 'org.biomart.martservice.query.Query.getRequestId()'
+	 */
+	public final void testGetRequestId() {
+		assertNull("requestId should be null", query.getRequestId());
+	}
+
+	/*
+	 * Test method for 'org.biomart.martservice.query.Query.setnewRequestId(String)'
+	 */
+	public final void testSetRequestId() {
+		String newRequestId = "new RequestId";
+		query.setRequestId(newRequestId);
+		assertEquals("requestId should be '" + newRequestId + "'", query.getRequestId(), newRequestId);
+	}
+
+	/*
+	 * Test method for 'org.biomart.martservice.query.Query.addDataset(Dataset)'
+	 */
+	public final void testAddDataset() {
+		query.addDataset(dataset);
+		assertEquals(query.getDatasets().size(), 1);
+		assertSame(query.getDatasets().get(0), dataset);
+	}
+
+	/*
+	 * Test method for
+	 * 'org.biomart.martservice.query.Query.removeDataset(Dataset)'
+	 */
+	public final void testRemoveDataset() {
+		query.addDataset(dataset);
+		query.removeDataset(dataset);
+		assertEquals(query.getDatasets().size(), 0);
+	}
+
+	/*
+	 * Test method for 'org.biomart.martservice.query.Query.getDatasets()'
+	 */
+	public final void testGetDatasets() {
+		query.addDataset(dataset);
+		assertEquals(query.getDatasets().size(), 1);
+		assertSame(query.getDatasets().get(0), dataset);
+	}
+
+	/*
+	 * Test method for 'org.biomart.martservice.query.Query.getDataset(String)'
+	 */
+	public final void testGetDataset() {
+		query.addDataset(dataset);
+		assertSame(query.getDataset(dataset.getName()), dataset);
+	}
+
+	/*
+	 * Test method for 'org.biomart.martservice.query.Query.getAttributes()'
+	 */
+	public final void testGetAttributes() {
+		query.addDataset(dataset);
+		assertEquals(query.getAttributes().size(), 1);
+		assertSame(query.getAttributes().get(0), attribute);
+	}
+
+	/*
+	 * Test method for 'org.biomart.martservice.query.Query.getFilters()'
+	 */
+	public final void testGetFilters() {
+		query.addDataset(dataset);
+		assertEquals(query.getFilters().size(), 1);
+		assertSame(query.getFilters().get(0), filter);
+	}
+
+	/*
+	 * Test method for
+	 * 'org.biomart.martservice.query.Query.addQueryListener(QueryListener)'
+	 */
+	public final void testAddQueryListener() {
+	}
+
+	/*
+	 * Test method for
+	 * 'org.biomart.martservice.query.Query.removeQueryListener(QueryListener)'
+	 */
+	public final void testRemoveQueryListener() {
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/pom.xml
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/pom.xml b/taverna-biomoby-activity-ui/pom.xml
new file mode 100644
index 0000000..8f92c83
--- /dev/null
+++ b/taverna-biomoby-activity-ui/pom.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+    <groupId>net.sf.taverna</groupId>
+    <artifactId>taverna-parent</artifactId>
+    <version>3.0.1-SNAPSHOT</version>
+	</parent>
+	<groupId>net.sf.taverna.t2.ui-activities</groupId>
+	<artifactId>biomoby-activity-ui</artifactId>
+  <version>2.0.1-SNAPSHOT</version>
+	<name>Taverna 2 Biomoby Activity UI</name>
+	<dependencies>
+		<dependency>
+			<groupId>net.sf.taverna.t2.ui-api</groupId>
+			<artifactId>activity-icons-api</artifactId>
+			<version>${t2.ui.api.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>net.sf.taverna.t2.ui-api</groupId>
+			<artifactId>activity-palette-api</artifactId>
+			<version>${t2.ui.api.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>net.sf.taverna.t2.ui-impl</groupId>
+			<artifactId>activity-palette-impl</artifactId>
+			<version>${t2.ui.impl.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>net.sf.taverna.t2.activities</groupId>
+			<artifactId>biomoby-activity</artifactId>
+			<version>${t2.activities.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>net.sf.taverna.t2.ui-impl</groupId>
+			<artifactId>contextual-views-impl</artifactId>
+			<version>${t2.ui.impl.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>net.sf.taverna.t2.ui-api</groupId>
+			<artifactId>contextual-views-api</artifactId>
+			<version>${t2.ui.api.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>net.sf.taverna.t2.ui-api</groupId>
+			<artifactId>activity-tools</artifactId>
+			<version>${t2.ui.api.version}</version>
+		</dependency>
+
+		<!--  testing dependencies -->
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+      <version>${junit.version}</version>
+			<scope>test</scope>
+		</dependency>
+<!--	<dependency>
+			<groupId>net.sf.taverna.t2.ui-impl</groupId>
+			<artifactId>activity-palette-impl</artifactId>
+			<version>${t2.ui.impl.version}</version>
+			<scope>test</scope>
+		</dependency>  -->
+	</dependencies>
+	<repositories>
+		<repository>
+			<releases />
+			<snapshots>
+				<enabled>false</enabled>
+			</snapshots>
+			<id>mygrid-repository</id>
+			<name>myGrid Repository</name>
+			<url>http://www.mygrid.org.uk/maven/repository
+			</url>
+		</repository>
+		<repository>
+			<releases>
+				<enabled>false</enabled>
+			</releases>
+			<snapshots />
+			<id>mygrid-snapshot-repository</id>
+			<name>myGrid Snapshot Repository</name>
+			<url>http://www.mygrid.org.uk/maven/snapshot-repository</url>
+		</repository>
+	</repositories>
+</project>
+

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/actions/AddParserActionHelper.java
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/actions/AddParserActionHelper.java b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/actions/AddParserActionHelper.java
new file mode 100644
index 0000000..b03b98c
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/actions/AddParserActionHelper.java
@@ -0,0 +1,280 @@
+/*
+ * This file is a component of the Taverna project, and is licensed under the
+ * GNU LGPL. Copyright Edward Kawas, The BioMoby Project
+ */
+package net.sf.taverna.t2.activities.biomoby.actions;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JMenuItem;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.JSeparator;
+import javax.swing.JTree;
+import javax.swing.ToolTipManager;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
+
+import net.sf.taverna.t2.activities.biomoby.BiomobyActivity;
+import net.sf.taverna.t2.activities.biomoby.edits.AddMobyParseDatatypeEdit;
+import net.sf.taverna.t2.workbench.edits.EditManager;
+import net.sf.taverna.t2.workbench.file.FileManager;
+import net.sf.taverna.t2.workflowmodel.Dataflow;
+import net.sf.taverna.t2.workflowmodel.Edit;
+
+import org.apache.log4j.Logger;
+import org.biomoby.shared.MobyData;
+import org.biomoby.shared.MobyNamespace;
+import org.biomoby.shared.MobyPrimaryDataSet;
+import org.biomoby.shared.MobyPrimaryDataSimple;
+
+/**
+ * An action to add a parser from within the Workflow editor
+ *
+ * @author Eddie Kawas
+ * @author Stuart Owen - adapted for Taverna 2
+ */
+public class AddParserActionHelper  {
+    private static Logger logger = Logger.getLogger(AddParserActionHelper.class);
+
+    private EditManager editManager;
+
+	private final FileManager fileManager;
+
+    public AddParserActionHelper(EditManager editManager, FileManager fileManager) {
+		this.editManager = editManager;
+		this.fileManager = fileManager;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.embl.ebi.escience.scuflui.processoractions.AbstractProcessorAction#getComponent(org.embl.ebi.escience.scufl.Processor)
+	 */
+    public JComponent getComponent(final BiomobyActivity activity) {
+
+
+	// set up the root node
+	String serviceName = activity.getMobyService().getName();
+	String description = activity.getMobyService().getDescription();
+	MobyServiceTreeNode service = new MobyServiceTreeNode(serviceName,
+		description);
+	DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(service);
+
+	// now add the child nodes containing useful information about the
+	// service
+	DefaultMutableTreeNode output = new DefaultMutableTreeNode("Parse:");
+	rootNode.add(output);
+	// process outputs
+	MobyData[] outputs = activity.getMobyService().getPrimaryOutputs();
+	for (int i = 0; i < outputs.length; i++) {
+	    if (outputs[i] instanceof MobyPrimaryDataSimple) {
+		MobyPrimaryDataSimple simple = (MobyPrimaryDataSimple) outputs[i];
+		StringBuffer sb = new StringBuffer(
+			"Namespaces used by this object: ");
+		MobyNamespace[] namespaces = simple.getNamespaces();
+		for (int j = 0; j < namespaces.length; j++) {
+		    sb.append(namespaces[j].getName() + " ");
+		}
+		if (namespaces.length == 0)
+		    sb.append(" ANY ");
+		MobyObjectTreeNode mobyObjectTreeNode = new MobyObjectTreeNode(
+			simple.getDataType().getName() + "('"
+				+ simple.getName() + "')", sb.toString());
+		mobyObjectTreeNode.setNamespaces(simple.getNamespaces());
+		output.insert(new DefaultMutableTreeNode(mobyObjectTreeNode),
+			output.getChildCount());
+	    } else {
+		// we have a collection
+		MobyPrimaryDataSet collection = (MobyPrimaryDataSet) outputs[i];
+		DefaultMutableTreeNode collectionNode = new DefaultMutableTreeNode(
+			"Collection('" + collection.getName() + "')");
+		output.insert(collectionNode, output.getChildCount());
+		MobyPrimaryDataSimple[] simples = collection.getElements();
+		for (int j = 0; j < simples.length; j++) {
+		    MobyPrimaryDataSimple simple = simples[j];
+		    StringBuffer sb = new StringBuffer(
+			    "Namespaces used by this object: ");
+		    MobyNamespace[] namespaces = simple.getNamespaces();
+		    for (int k = 0; k < namespaces.length; k++) {
+			sb.append(namespaces[k].getName() + " ");
+		    }
+		    if (namespaces.length == 0)
+			sb.append("ANY ");
+		    MobyObjectTreeNode mobyObjectTreeNode = new MobyObjectTreeNode(
+			    simple.getDataType().getName() + "('"
+				    + simple.getName() + "')", sb.toString());
+		    mobyObjectTreeNode.setNamespaces(simple.getNamespaces());
+		    collectionNode
+			    .insert(new DefaultMutableTreeNode(
+				    mobyObjectTreeNode), collectionNode
+				    .getChildCount());
+		}
+
+	    }
+	}
+	if (outputs.length == 0) {
+	    output.add(new DefaultMutableTreeNode(" None "));
+	}
+
+	// finally return a tree describing the object
+	final JTree tree = new JTree(rootNode);
+	tree.setCellRenderer(new BioMobyServiceTreeCustomRenderer());
+	ToolTipManager.sharedInstance().registerComponent(tree);
+	tree.addMouseListener(new MouseListener() {
+	    public void mouseClicked(MouseEvent me) {
+	    }
+
+	    public void mousePressed(MouseEvent me) {
+		mouseReleased(me);
+	    }
+
+	    public void mouseReleased(MouseEvent me) {
+		if (me.isPopupTrigger()) // right click, show popup menu
+		{
+		    TreePath path = tree.getPathForLocation(me.getX(), me
+			    .getY());
+		    if (path == null)
+			return;
+		    if (path.getPathCount() >= 3) {
+			if (path.getParentPath().toString().indexOf("Parse:") >= 0
+				&& path.getLastPathComponent().toString()
+					.indexOf(" None ") == -1) {
+			    DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
+				    .getLastSelectedPathComponent();
+			    if (node == null)
+				return;
+			    final String selectedObject = node.toString();
+			    if (!selectedObject.equals(path
+				    .getLastPathComponent().toString()))
+				return;
+
+			    logger.debug("TreePath " + path.toString());
+			    if (
+			    // path has a collection in it
+			    (path.getPathCount() == 4
+				    && path.getParentPath()
+					    .getLastPathComponent().toString()
+					    .startsWith("Collection(") && (path
+				    .getParentPath().toString())
+				    .indexOf("Parse:") > 0)
+				    // or path is just a simple
+				    || (path.toString().indexOf("Collection(") < 0)) {
+
+				final JPopupMenu menu = new JPopupMenu();
+
+				final String potentialCollectionString = path
+					.getParentPath().getLastPathComponent()
+					.toString();
+				final boolean isCollection = potentialCollectionString
+					.indexOf("Collection('") >= 0;
+				JMenuItem item3 = new JMenuItem(
+					"Add parser for " + selectedObject
+						+ " to the workflow");
+				item3
+					.setIcon(getIcon("/Cut24.gif"));
+				item3.addActionListener(new ActionListener() {
+
+				    public void actionPerformed(ActionEvent ae) {
+					// you would like to search for
+					// selectedObject
+					try {
+						try {
+							Dataflow currentDataflow = fileManager.getCurrentDataflow();
+							Edit<?> edit = new AddMobyParseDatatypeEdit(
+									currentDataflow, activity,
+									selectedObject,isCollection, potentialCollectionString, editManager.getEdits());
+							editManager.doDataflowEdit(
+									currentDataflow, edit);
+
+						} catch (Exception e) {
+							logger.error("", e);
+						}
+
+					} catch (Exception e) {
+					    logger.error("", e);
+					}
+
+				    }
+				});
+
+				menu.add(new JSeparator());
+				menu.add(new JLabel("Parse Moby Data ... ",
+					JLabel.CENTER));
+				menu.add(new JSeparator());
+				menu.add(item3);
+				menu.show(me.getComponent(), me.getX(), me
+					.getY());
+			    } else {
+				logger
+					.debug("unexpected situation occured; '"
+						+ selectedObject
+						+ "' was the object selected and the path is: "
+						+ path.toString());
+			    }
+			}
+		    }
+		}
+	    }
+
+	    public void mouseEntered(MouseEvent me) {
+	    }
+
+	    public void mouseExited(MouseEvent me) {
+	    }
+	});
+
+	tree.getSelectionModel().setSelectionMode(
+		TreeSelectionModel.SINGLE_TREE_SELECTION);
+	JScrollPane jsp = new JScrollPane(tree);
+	JPanel thePanel = new JPanel(new BorderLayout());
+	thePanel.add(jsp, BorderLayout.CENTER);
+	return thePanel;
+    }
+
+    /*
+         * (non-Javadoc)
+         *
+         * @see org.embl.ebi.escience.scuflui.processoractions.ProcessorActionSPI#getDescription()
+         */
+    public String getDescription() {
+	return "Add BioMOBY Parser ...";
+    }
+
+    /*
+         * (non-Javadoc)
+         *
+         * @see org.embl.ebi.escience.scuflui.processoractions.ProcessorActionSPI#getIcon()
+         */
+    public ImageIcon getIcon() {
+    	return MobyPanel.getIcon("/Cut24.gif");
+    }
+
+    /**
+         * returns the frame size as a dimension for the content pane housing
+         * this action
+         */
+    public Dimension getFrameSize() {
+	return new Dimension(450, 450);
+    }
+
+    /**
+         * Return an Icon to represent this action
+         *
+         * @param loc
+         *                the location of the image to use as an icon
+         */
+    private ImageIcon getIcon(String loc) {
+    	return MobyPanel.getIcon(loc);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/actions/BioMobyObjectTreeCustomRenderer.java
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/actions/BioMobyObjectTreeCustomRenderer.java b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/actions/BioMobyObjectTreeCustomRenderer.java
new file mode 100644
index 0000000..46b4d5a
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/actions/BioMobyObjectTreeCustomRenderer.java
@@ -0,0 +1,97 @@
+/*
+ * This file is a component of the Taverna project,
+ * and is licensed under the GNU LGPL.
+ * Copyright Edward Kawas, The BioMoby Project
+ */
+package net.sf.taverna.t2.activities.biomoby.actions;
+
+import java.awt.Color;
+import java.awt.Component;
+
+import javax.swing.JComponent;
+import javax.swing.JTree;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeCellRenderer;
+
+public class BioMobyObjectTreeCustomRenderer extends DefaultTreeCellRenderer {
+
+    private static final long serialVersionUID = 1L;
+
+    private Color leafForeground = Color.blue;
+
+    private Color rootColor = Color.black;
+
+    @SuppressWarnings("unused")
+	private Color feedsIntoColor = Color.gray;
+
+    @SuppressWarnings("unused")
+	private Color producedColor = Color.lightGray;
+
+    @SuppressWarnings("unused")
+	private Color authorityColor = Color.orange;
+
+    private Color serviceColor = Color.magenta;
+
+    private Color objectColor = Color.green;
+
+    public Component getTreeCellRendererComponent(JTree tree, Object value,
+            boolean selected, boolean expanded, boolean leaf, int row,
+            boolean hasFocus) {
+        // Allow the original renderer to set up the label
+        Component c = super.getTreeCellRendererComponent(tree, value, selected,
+                expanded, leaf, row, hasFocus);
+
+        if (value instanceof DefaultMutableTreeNode) {
+            DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
+            if (node.getUserObject() instanceof MobyServiceTreeNode) {
+                // service node
+                c.setForeground(serviceColor);
+                ((JComponent) c).setToolTipText(((MobyServiceTreeNode) node
+                        .getUserObject()).getDescription());
+                setIcon(MobyPanel.getIcon("/service.png"));
+            } else if (node.getUserObject() instanceof MobyObjectTreeNode) {
+                // object node
+                c.setForeground(objectColor);
+                ((JComponent) c).setToolTipText(((MobyObjectTreeNode) node
+                        .getUserObject()).getDescription());
+            } else if (node.isRoot()) {
+                // root node
+                setIcon(MobyPanel.getIcon("/moby.png"));
+                ((JComponent) c).setToolTipText(" Description of "
+                        + node.getUserObject());
+                c.setForeground(rootColor);
+            } else if (node.getUserObject() instanceof String) {
+                // check for feeds into and produced by nodes
+                String string = (String) node.getUserObject();
+                if (string.equalsIgnoreCase("feeds into")) {
+                    setIcon(MobyPanel.getIcon("/input.png"));
+                    ((JComponent) c).setToolTipText(null);
+                } else if (string.equalsIgnoreCase("produced by")) {
+                    setIcon(MobyPanel.getIcon("/output.png"));
+                    ((JComponent) c).setToolTipText(null);
+                } else if (string.equalsIgnoreCase("produces")) {
+                    ((JComponent) c).setToolTipText(null);
+                } else {
+
+                    ((JComponent) c).setToolTipText(null);
+
+                    if (!leaf) {
+                        if (string.startsWith("Collection('")) {
+                            setIcon(MobyPanel.getIcon("/collection.png"));
+                        } else {
+                            setIcon(MobyPanel.getIcon("/authority.png"));
+                        }
+                    }
+                }
+
+            } else {
+                ((JComponent) c).setToolTipText("nothing node");
+            }
+        }
+        if (selected)
+            c.setBackground(Color.lightGray);
+        if (leaf)
+            c.setForeground(this.leafForeground);
+        return c;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/actions/BioMobyServiceTreeCustomRenderer.java
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/actions/BioMobyServiceTreeCustomRenderer.java b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/actions/BioMobyServiceTreeCustomRenderer.java
new file mode 100644
index 0000000..ecce3ca
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/actions/BioMobyServiceTreeCustomRenderer.java
@@ -0,0 +1,86 @@
+/*
+ * This file is a component of the Taverna project,
+ * and is licensed under the GNU LGPL.
+ * Copyright Edward Kawas, The BioMoby Project
+ */
+package net.sf.taverna.t2.activities.biomoby.actions;
+
+import java.awt.Color;
+import java.awt.Component;
+
+import javax.swing.JComponent;
+import javax.swing.JTree;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeCellRenderer;
+
+public class BioMobyServiceTreeCustomRenderer extends DefaultTreeCellRenderer {
+
+    private static final long serialVersionUID = 1L;
+
+    private Color leafForeground = Color.blue;
+
+    @SuppressWarnings("unused")
+	private Color rootColor = Color.black;
+
+    @SuppressWarnings("unused")
+	private Color feedsIntoColor = Color.gray;
+
+    @SuppressWarnings("unused")
+	private Color producedColor = Color.lightGray;
+
+    @SuppressWarnings("unused")
+	private Color authorityColor = Color.orange;
+
+    private Color serviceColor = Color.magenta;
+
+    private Color objectColor = Color.green;
+
+    public Component getTreeCellRendererComponent(JTree tree, Object value,
+            boolean selected, boolean expanded, boolean leaf, int row,
+            boolean hasFocus) {
+        // Allow the original renderer to set up the label
+        Component c = super.getTreeCellRendererComponent(tree, value, selected,
+                expanded, leaf, row, hasFocus);
+
+        if (value instanceof DefaultMutableTreeNode) {
+            DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
+            if (node.getUserObject() instanceof MobyServiceTreeNode) {
+                // service node
+                c.setForeground(serviceColor);
+                ((JComponent) c).setToolTipText(((MobyServiceTreeNode) node
+                        .getUserObject()).getDescription());
+                setIcon(MobyPanel.getIcon("/service.png"));
+            } else if (node.getUserObject() instanceof MobyObjectTreeNode) {
+                // object node
+                c.setForeground(objectColor);
+                ((JComponent) c).setToolTipText(((MobyObjectTreeNode) node
+                        .getUserObject()).getDescription());
+            } else if (node.getUserObject() instanceof String) {
+                // check for feeds into and produced by nodes
+                String string = (String) node.getUserObject();
+                if (string.equalsIgnoreCase("inputs")) {
+                    setIcon(MobyPanel.getIcon("/input.png"));
+                    ((JComponent) c).setToolTipText(null);
+                } else if (string.equalsIgnoreCase("outputs")) {
+                    setIcon(MobyPanel.getIcon("/output.png"));
+                    ((JComponent) c).setToolTipText(null);
+                } else {
+
+                    ((JComponent) c).setToolTipText(null);
+
+                    if (!leaf) {
+                        if (string.startsWith("Collection('")) {
+                            setIcon(MobyPanel.getIcon("/collection.png"));
+                        }
+                    }
+                }
+
+            } else {
+                ((JComponent) c).setToolTipText("nothing node");
+            }
+        }
+        if (leaf)
+            c.setForeground(this.leafForeground);
+        return c;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/actions/BiomobyActionHelper.java
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/actions/BiomobyActionHelper.java b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/actions/BiomobyActionHelper.java
new file mode 100644
index 0000000..9579627
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/actions/BiomobyActionHelper.java
@@ -0,0 +1,852 @@
+/*
+ * This file is a component of the Taverna project, and is licensed under the
+ * GNU LGPL. Copyright Edward Kawas, The BioMoby Project
+ */
+package net.sf.taverna.t2.activities.biomoby.actions;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JMenuItem;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JProgressBar;
+import javax.swing.JScrollPane;
+import javax.swing.JSeparator;
+import javax.swing.JTree;
+import javax.swing.ToolTipManager;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
+
+import net.sf.taverna.t2.activities.biomoby.BiomobyActivity;
+import net.sf.taverna.t2.activities.biomoby.BiomobyObjectActivity;
+import net.sf.taverna.t2.activities.biomoby.BiomobyObjectActivityConfigurationBean;
+import net.sf.taverna.t2.activities.biomoby.edits.AddBiomobyCollectionDataTypeEdit;
+import net.sf.taverna.t2.activities.biomoby.edits.AddBiomobyDataTypeEdit;
+import net.sf.taverna.t2.activities.biomoby.edits.AddMobyParseDatatypeEdit;
+import net.sf.taverna.t2.workbench.edits.EditManager;
+import net.sf.taverna.t2.workbench.file.FileManager;
+import net.sf.taverna.t2.workflowmodel.Dataflow;
+import net.sf.taverna.t2.workflowmodel.Edit;
+import net.sf.taverna.t2.workflowmodel.OutputPort;
+import net.sf.taverna.t2.workflowmodel.utils.Tools;
+
+import org.apache.log4j.Logger;
+import org.biomoby.client.CentralImpl;
+import org.biomoby.shared.Central;
+import org.biomoby.shared.MobyData;
+import org.biomoby.shared.MobyDataType;
+import org.biomoby.shared.MobyException;
+import org.biomoby.shared.MobyNamespace;
+import org.biomoby.shared.MobyPrimaryDataSet;
+import org.biomoby.shared.MobyPrimaryDataSimple;
+import org.biomoby.shared.NoSuccessException;
+
+
+/**
+ *
+ * @author Eddie An action that for BioMobyProcessors
+ * @auther Stuart Owen - helped port to T2 - but with the minimum code changes possible!
+ */
+public class BiomobyActionHelper {
+
+	private static Logger logger = Logger
+	.getLogger(BiomobyActionHelper.class);
+
+	JProgressBar progressBar = new JProgressBar();
+
+    private EditManager editManager;
+
+	private final FileManager fileManager;
+
+    public BiomobyActionHelper(EditManager editManager, FileManager fileManager) {
+		this.editManager = editManager;
+		this.fileManager = fileManager;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see
+	 * org.embl.ebi.escience.scuflui.processoractions.AbstractProcessorAction
+	 * #getComponent(org.embl.ebi.escience.scufl.Processor)
+	 */
+
+	public JComponent getComponent(final BiomobyActivity activity) {
+		// variables i need
+
+		final String endpoint = activity.getConfiguration().getMobyEndpoint();
+		// set up the root node
+		String serviceName = activity.getMobyService().getName();
+		String description = activity.getMobyService().getDescription();
+
+		MobyServiceTreeNode service = new MobyServiceTreeNode(serviceName,
+				description);
+		DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(service);
+
+		// now add the child nodes containing useful information about the
+		// service
+		DefaultMutableTreeNode input = new DefaultMutableTreeNode("Inputs");
+		DefaultMutableTreeNode output = new DefaultMutableTreeNode("Outputs");
+		rootNode.add(input);
+		rootNode.add(output);
+
+		// process inputs
+		MobyData[] inputs = activity.getMobyService().getPrimaryInputs();
+		for (int i = 0; i < inputs.length; i++) {
+			if (inputs[i] instanceof MobyPrimaryDataSimple) {
+				MobyPrimaryDataSimple simple = (MobyPrimaryDataSimple) inputs[i];
+				StringBuffer sb = new StringBuffer(
+						"Namespaces used by this object: ");
+				MobyNamespace[] namespaces = simple.getNamespaces();
+				for (int j = 0; j < namespaces.length; j++) {
+					sb.append(namespaces[j].getName() + " ");
+				}
+				if (namespaces.length == 0)
+					sb.append(" ANY ");
+				MobyObjectTreeNode mobyObjectTreeNode = new MobyObjectTreeNode(
+						simple.getDataType().getName() + "('"
+								+ simple.getName() + "')", sb.toString());
+				input.insert(new DefaultMutableTreeNode(mobyObjectTreeNode),
+						input.getChildCount());
+			} else {
+				// we have a collection
+				MobyPrimaryDataSet collection = (MobyPrimaryDataSet) inputs[i];
+				DefaultMutableTreeNode collectionNode = new DefaultMutableTreeNode(
+						"Collection('" + collection.getName() + "')");
+				input.insert(collectionNode, input.getChildCount());
+				MobyPrimaryDataSimple[] simples = collection.getElements();
+				for (int j = 0; j < simples.length; j++) {
+					MobyPrimaryDataSimple simple = simples[j];
+					StringBuffer sb = new StringBuffer(
+							"Namespaces used by this object: ");
+					MobyNamespace[] namespaces = simple.getNamespaces();
+					for (int k = 0; k < namespaces.length; k++) {
+						sb.append(namespaces[k].getName() + " ");
+					}
+					if (namespaces.length == 0)
+						sb.append(" ANY ");
+					MobyObjectTreeNode mobyObjectTreeNode = new MobyObjectTreeNode(
+							simple.getDataType().getName() + "('"
+									+ simple.getName() + "')", sb.toString());
+					collectionNode
+							.insert(new DefaultMutableTreeNode(
+									mobyObjectTreeNode), collectionNode
+									.getChildCount());
+				}
+
+			}
+		}
+		if (inputs.length == 0) {
+			input.add(new DefaultMutableTreeNode(" None "));
+		}
+
+		// process outputs
+		MobyData[] outputs = activity.getMobyService().getPrimaryOutputs();
+		for (int i = 0; i < outputs.length; i++) {
+			if (outputs[i] instanceof MobyPrimaryDataSimple) {
+				MobyPrimaryDataSimple simple = (MobyPrimaryDataSimple) outputs[i];
+				StringBuffer sb = new StringBuffer(
+						"Namespaces used by this object: ");
+				MobyNamespace[] namespaces = simple.getNamespaces();
+				for (int j = 0; j < namespaces.length; j++) {
+					sb.append(namespaces[j].getName() + " ");
+				}
+				if (namespaces.length == 0)
+					sb.append(" ANY ");
+				MobyObjectTreeNode mobyObjectTreeNode = new MobyObjectTreeNode(
+						simple.getDataType().getName() + "('"
+								+ simple.getName() + "')", sb.toString());
+				mobyObjectTreeNode.setNamespaces(simple.getNamespaces());
+				output.insert(new DefaultMutableTreeNode(mobyObjectTreeNode),
+						output.getChildCount());
+			} else {
+				// we have a collection
+				MobyPrimaryDataSet collection = (MobyPrimaryDataSet) outputs[i];
+				DefaultMutableTreeNode collectionNode = new DefaultMutableTreeNode(
+						"Collection('" + collection.getName() + "')");
+				output.insert(collectionNode, output.getChildCount());
+				MobyPrimaryDataSimple[] simples = collection.getElements();
+				for (int j = 0; j < simples.length; j++) {
+					MobyPrimaryDataSimple simple = simples[j];
+					StringBuffer sb = new StringBuffer(
+							"Namespaces used by this object: ");
+					MobyNamespace[] namespaces = simple.getNamespaces();
+					for (int k = 0; k < namespaces.length; k++) {
+						sb.append(namespaces[k].getName() + " ");
+					}
+					if (namespaces.length == 0)
+						sb.append("ANY ");
+					MobyObjectTreeNode mobyObjectTreeNode = new MobyObjectTreeNode(
+							simple.getDataType().getName() + "('"
+									+ simple.getName() + "')", sb.toString());
+					mobyObjectTreeNode.setNamespaces(simple.getNamespaces());
+					collectionNode
+							.insert(new DefaultMutableTreeNode(
+									mobyObjectTreeNode), collectionNode
+									.getChildCount());
+				}
+
+			}
+		}
+		if (outputs.length == 0) {
+			output.add(new DefaultMutableTreeNode(" None "));
+		}
+
+		// finally return a tree describing the object
+		final JTree tree = new JTree(rootNode);
+		tree.setCellRenderer(new BioMobyServiceTreeCustomRenderer());
+		ToolTipManager.sharedInstance().registerComponent(tree);
+		tree.addMouseListener(new MouseListener() {
+			public void mouseClicked(MouseEvent me) {
+			}
+
+			public void mousePressed(MouseEvent me) {
+				mouseReleased(me);
+			}
+
+			public void mouseReleased(MouseEvent me) {
+				if (me.isPopupTrigger()) // right click, show popup menu
+				{
+					TreePath path = tree.getPathForLocation(me.getX(), me
+							.getY());
+					if (path == null)
+						return;
+					if (path.getPathCount() >= 3) {
+						if (path.getPathCount() == 4
+								&& path.getParentPath().getLastPathComponent()
+										.toString().startsWith("Collection(")
+								&& (path.getParentPath().toString())
+										.indexOf("Inputs") > 0) {
+							// we have a collection input
+							DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
+									.getLastSelectedPathComponent();
+							final String selectedObject = node.toString();
+							// ensure that the last selected item is an object!
+							if (!selectedObject.equals(path
+									.getLastPathComponent().toString()))
+								return;
+							String collectionName = "";
+							if (path.getParentPath().getLastPathComponent()
+									.toString().indexOf("('") > 0
+									&& path.getParentPath()
+											.getLastPathComponent().toString()
+											.indexOf("')") > 0) {
+								collectionName = path.getParentPath()
+										.getLastPathComponent().toString()
+										.substring(
+												path.getParentPath()
+														.getLastPathComponent()
+														.toString().indexOf(
+																"('") + 2,
+												path.getParentPath()
+														.getLastPathComponent()
+														.toString().indexOf(
+																"')"));
+							}
+							final String theCollectionName = collectionName;
+							final JPopupMenu menu = new JPopupMenu();
+							// Create and add a menu item for adding to the item
+							// to the workflow
+							JMenuItem item = new JMenuItem("Add Datatype - "
+									+ selectedObject + " to the workflow?");
+							item
+									.setIcon(MobyPanel.getIcon("/Add24.gif"));
+							item.addActionListener(new ActionListener() {
+								// private boolean added = false;
+
+								public void actionPerformed(ActionEvent ae) {
+
+									try {
+										Dataflow currentDataflow = fileManager.getCurrentDataflow();
+										Edit<?> edit = new AddBiomobyCollectionDataTypeEdit(
+												currentDataflow, activity,
+												selectedObject,
+												theCollectionName, editManager.getEdits());
+										editManager.doDataflowEdit(
+												currentDataflow, edit);
+
+									} catch (Exception e) {
+										logger.error("", e);
+									}
+								}
+							});
+							// Create and add a menu item for service details
+							JMenuItem details = new JMenuItem("Find out about "
+									+ selectedObject);
+							details
+									.setIcon(MobyPanel.getIcon("/Information24.gif"));
+							details.addActionListener(new ActionListener() {
+								public void actionPerformed(ActionEvent ae) {
+
+									// TODO Create a frame
+	    						    Frame frame = MobyPanel.CreateFrame("A BioMoby Object Description");
+									JPanel panel = new MobyPanel(
+											selectedObject,
+											"A BioMoby Object Description", "");
+
+									frame.add(panel);
+									frame.setSize(getFrameSize());
+	    							frame.pack();
+	    							frame.setVisible(true);
+								}
+							});
+							// add the components to the menu
+							menu.add(new JLabel("Add to workflow ... ",
+									JLabel.CENTER));
+							menu.add(new JSeparator());
+							menu.add(item);
+							menu.add(new JSeparator());
+							menu.add(new JLabel("Datatype Details ... ",
+									JLabel.CENTER));
+							menu.add(new JSeparator());
+							menu.add(details);
+							// show the window
+							menu.show(me.getComponent(), me.getX(), me.getY());
+						} else if (path.getPathCount() == 3
+								&& path.getParentPath().getLastPathComponent()
+										.toString().startsWith("Inputs")
+								&& !path.getLastPathComponent().toString()
+										.startsWith("Collection(")
+								&& !path.getLastPathComponent().toString()
+										.equals(" None ")) {
+							// we have a simple input
+							DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
+									.getLastSelectedPathComponent();
+							if (node == null)
+								return;
+							final String selectedObject = node.toString();
+							// ensure that the last selected item is an object!
+							if (!selectedObject.equals(path
+									.getLastPathComponent().toString()))
+								return;
+
+							final JPopupMenu menu = new JPopupMenu();
+							// Create and add a menu item for adding to the item
+							// to the workflow
+							JMenuItem item = new JMenuItem("Add Datatype - "
+									+ selectedObject + " to the workflow?");
+							item
+									.setIcon(MobyPanel.getIcon("/Add24.gif"));
+							item.addActionListener(new ActionListener() {
+								// private boolean added = false;
+
+								public void actionPerformed(ActionEvent ae) {
+
+									try {
+										Dataflow currentDataflow = fileManager.getCurrentDataflow();
+										Edit<?> edit = new AddBiomobyDataTypeEdit(
+												currentDataflow, activity,
+												selectedObject, editManager.getEdits());
+										editManager.doDataflowEdit(
+												currentDataflow, edit);
+
+									} catch (Exception e) {
+										logger.error("Could not perform action", e);
+									}
+								}
+							});
+
+							// Create and add a menu item for service details
+							JMenuItem details = new JMenuItem(
+									"Find out about 1 " + selectedObject);
+							details
+									.setIcon(MobyPanel.getIcon("/Information24.gif"));
+							details.addActionListener(new ActionListener() {
+								public void actionPerformed(ActionEvent ae) {
+									// TODO Create a frame
+	    						    Frame frame = MobyPanel.CreateFrame("A BioMoby Object Description");
+									JPanel panel = new MobyPanel(
+											// TODO create a valid description
+											selectedObject,
+											"A BioMoby Object Description",
+											createDataDescription(
+													selectedObject.split("\\(")[0],
+													activity.getConfiguration()
+															.getMobyEndpoint()));
+									frame.add(panel);
+									frame.setSize(getFrameSize());
+	    							frame.pack();
+	    							frame.setVisible(true);
+								}
+
+								private String createDataDescription(
+										String dataName, String mobyEndpoint) {
+									MobyDataType data;
+									try {
+										Central central = new CentralImpl(
+												mobyEndpoint);
+										data = central.getDataType(dataName);
+
+									} catch (MobyException e) {
+										return "Couldn't retrieve a description on the BioMoby service '"
+												+ dataName + "'";
+									} catch (NoSuccessException e) {
+										return "Couldn't retrieve a description on the BioMoby service '"
+												+ dataName + "'";
+									}
+									return data.toString();
+								}
+							});
+							// add the components to the menu
+							menu.add(new JLabel("Add to workflow ... ",
+									JLabel.CENTER));
+							menu.add(new JSeparator());
+							menu.add(item);
+							menu.add(new JSeparator());
+							menu.add(new JLabel("Datatype Details ... ",
+									JLabel.CENTER));
+							menu.add(new JSeparator());
+							menu.add(details);
+							// show the window
+							menu.show(me.getComponent(), me.getX(), me.getY());
+
+						} else if (path.getParentPath().toString().indexOf(
+								"Outputs") >= 0
+								&& path.getLastPathComponent().toString()
+										.indexOf(" None ") == -1) {
+							DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
+									.getLastSelectedPathComponent();
+							if (node == null)
+								return;
+							final String selectedObject = node.toString();
+							if (!selectedObject.equals(path
+									.getLastPathComponent().toString()))
+								return;
+
+							if ((path.getPathCount() == 4
+									&& path.getParentPath()
+											.getLastPathComponent().toString()
+											.startsWith("Collection(") && (path
+									.getParentPath().toString())
+									.indexOf("Outputs") > 0)
+									|| (path.toString().indexOf("Collection(") < 0)) {
+								final JPopupMenu menu = new JPopupMenu();
+								JMenuItem item = new JMenuItem(
+										"Find Services that Consume "
+												+ selectedObject
+												+ " - brief search");
+								item
+										.setIcon(MobyPanel.getIcon("/Information24.gif"));
+								final String potentialCollectionString = path
+										.getParentPath().getLastPathComponent()
+										.toString();
+								final boolean isCollection = potentialCollectionString
+										.indexOf("Collection('") >= 0;
+								final Object selectedMobyObjectTreeNodeHolder = (DefaultMutableTreeNode) tree
+										.getLastSelectedPathComponent();
+								item.addActionListener(new ActionListener() {
+
+									public void actionPerformed(ActionEvent ae) {
+										// you would like to search for
+										// selectedObject
+										new Thread("Finding biomoby services") {
+											public void run() {
+												try {
+													// FIXME: ignored for now -
+													// Stuart
+													String name = selectedObject;
+													if (name.indexOf("(") > 0)
+														name = name
+																.substring(
+																		0,
+																		name
+																				.indexOf("("));
+													String articlename = "";
+													if (isCollection) {
+														articlename = potentialCollectionString
+																.substring(
+																		potentialCollectionString
+																				.indexOf("('") + 2,
+																		potentialCollectionString
+																				.lastIndexOf("'"));
+													} else {
+														articlename = selectedObject
+																.substring(
+																		selectedObject
+																				.indexOf("'") + 1,
+																		selectedObject
+																				.lastIndexOf("'"));
+													}
+
+													BiomobyObjectActivity boAct = new BiomobyObjectActivity();
+													BiomobyObjectActivityConfigurationBean bean = new BiomobyObjectActivityConfigurationBean();
+													MobyDataType dataType = new MobyDataType(
+															name);
+													bean
+															.setAuthorityName(dataType
+																	.getAuthority());
+													bean
+															.setServiceName(dataType
+																	.getName());
+													bean
+															.setMobyEndpoint(endpoint);
+													boAct.configure(bean);
+
+													OutputPort theServiceport = null;
+
+													try {
+														if (isCollection)
+															theServiceport = Tools
+																	.getActivityOutputPort(
+																			activity,
+																			name
+																					+ "(Collection - '"
+																					+ (articlename
+																							.equals("") ? "MobyCollection"
+																							: articlename)
+																					+ "' As Simples)");
+
+														else
+															theServiceport = Tools
+																	.getActivityOutputPort(
+																			activity,
+																			name
+																					+ "("
+																					+ articlename
+																					+ ")");
+													} catch (Exception except) {
+													}
+													BiomobyObjectActionHelper boa = null;
+
+													if (theServiceport == null) {
+														boa = new BiomobyObjectActionHelper(
+																false, editManager, fileManager);
+													} else {
+														boa = new BiomobyObjectActionHelper(
+																theServiceport,
+																false, editManager, fileManager);
+													}
+
+													if (selectedMobyObjectTreeNodeHolder instanceof DefaultMutableTreeNode
+															&& ((DefaultMutableTreeNode) selectedMobyObjectTreeNodeHolder)
+																	.getUserObject() instanceof MobyObjectTreeNode) {
+														DefaultMutableTreeNode dmtn = (DefaultMutableTreeNode) selectedMobyObjectTreeNodeHolder;
+														MobyObjectTreeNode motn = (MobyObjectTreeNode) dmtn
+																.getUserObject();
+														boa
+																.setNamespaces(motn
+																		.getNamespaces());
+													}
+													PopupThread popupthread = new PopupThread(
+															boAct, boa);
+													progressBar
+															.setStringPainted(true);
+													progressBar
+															.setVisible(true);
+													popupthread.start();
+
+													while (popupthread
+															.isAlive()) {
+														Thread.sleep(4000);
+													}
+
+													progressBar
+															.setVisible(false);
+													Component c = popupthread
+															.getComponent();
+													Dimension loc = getFrameLocation();
+													Dimension size = getFrameSize();
+													JPanel frame = new SimpleActionFrame(
+															c,
+															"Moby Object Details");
+													createFrame(
+															frame,
+															(int) loc
+																	.getWidth(),
+															(int) loc
+																	.getHeight(),
+															(int) size
+																	.getWidth(),
+															(int) size
+																	.getHeight());
+												} catch (Exception e) {
+												}
+											}
+										}.start();
+
+									}
+								});
+
+								JMenuItem item2 = new JMenuItem(
+										"Find Services that Consume "
+												+ selectedObject
+												+ " - semantic search");
+								item2
+										.setIcon(MobyPanel.getIcon("/Search24.gif"));
+								item2.addActionListener(new ActionListener() {
+									public void actionPerformed(ActionEvent ae) {
+										// you would like to search for
+										// selectedObject
+										new Thread("Finding BioMoby services") {
+
+											public void run() {
+												try {
+													String name = selectedObject;
+													if (name.indexOf("(") > 0)
+														name = name
+																.substring(
+																		0,
+																		name
+																				.indexOf("("));
+													String articlename = "";
+													if (isCollection) {
+														articlename = potentialCollectionString
+																.substring(
+																		potentialCollectionString
+																				.indexOf("('") + 2,
+																		potentialCollectionString
+																				.lastIndexOf("'"));
+													} else {
+														articlename = selectedObject
+																.substring(
+																		selectedObject
+																				.indexOf("'") + 1,
+																		selectedObject
+																				.lastIndexOf("'"));
+													}
+													BiomobyObjectActivity boAct = new BiomobyObjectActivity();
+													BiomobyObjectActivityConfigurationBean bean = new BiomobyObjectActivityConfigurationBean();
+													MobyDataType dataType = new MobyDataType(
+															name);
+													bean
+															.setAuthorityName(dataType
+																	.getAuthority());
+													bean
+															.setServiceName(dataType
+																	.getName());
+													bean
+															.setMobyEndpoint(endpoint);
+													boAct.configure(bean);
+
+													OutputPort theServiceport = null;
+
+													try {
+
+														if (isCollection)
+															theServiceport = Tools
+																	.getActivityOutputPort(
+																			activity,
+																			name
+																					+ "(Collection - '"
+																					+ (articlename
+																							.equals("") ? "MobyCollection"
+																							: articlename)
+																					+ "' As Simples)");
+
+														else
+															theServiceport = Tools
+																	.getActivityOutputPort(
+																			activity,
+																			name
+																					+ "("
+																					+ articlename
+																					+ ")");
+													} catch (Exception except) {
+													}
+													BiomobyObjectActionHelper boa = null;
+
+													if (theServiceport == null)
+														boa = new BiomobyObjectActionHelper(
+																true, editManager, fileManager);
+													else
+														boa = new BiomobyObjectActionHelper(
+																theServiceport,
+																true, editManager, fileManager);
+													if (selectedMobyObjectTreeNodeHolder instanceof DefaultMutableTreeNode
+															&& ((DefaultMutableTreeNode) selectedMobyObjectTreeNodeHolder)
+																	.getUserObject() instanceof MobyObjectTreeNode) {
+														DefaultMutableTreeNode dmtn = (DefaultMutableTreeNode) selectedMobyObjectTreeNodeHolder;
+														MobyObjectTreeNode motn = (MobyObjectTreeNode) dmtn
+																.getUserObject();
+														boa
+																.setNamespaces(motn
+																		.getNamespaces());
+													}
+
+													PopupThread popupthread = new PopupThread(
+															boAct, boa);
+													progressBar
+															.setStringPainted(true);
+													progressBar
+															.setVisible(true);
+													popupthread.start();
+
+													while (popupthread
+															.isAlive()) {
+														Thread.sleep(4000);
+													}
+
+													progressBar
+															.setVisible(false);
+													Component c = popupthread
+															.getComponent();
+													Dimension loc = getFrameLocation();
+													Dimension size = getFrameSize();
+													JPanel frame = new SimpleActionFrame(
+															c,
+															"Moby Object Details");
+													createFrame(
+															frame,
+															(int) loc
+																	.getWidth(),
+															(int) loc
+																	.getHeight(),
+															(int) size
+																	.getWidth(),
+															(int) size
+																	.getHeight());
+												} catch (Exception e) {
+												}
+											}
+										}.start();
+									}
+								});
+
+								// string may be needed to extract the
+								// collection article name
+								// final String potentialCollectionString =
+								// path.getParentPath()
+								// .getLastPathComponent().toString();
+								// final boolean isCollection =
+								// potentialCollectionString
+								// .indexOf("Collection('") >= 0;
+
+								JMenuItem item3 = new JMenuItem(
+										"Add parser for " + selectedObject
+												+ " to the workflow");
+								item3
+										.setIcon(MobyPanel.getIcon("/Cut24.gif"));
+								item3.addActionListener(new ActionListener() {
+
+									public void actionPerformed(ActionEvent ae) {
+
+										try {
+											Dataflow currentDataflow = fileManager.getCurrentDataflow();
+											Edit<?> edit = new AddMobyParseDatatypeEdit(
+													currentDataflow, activity,
+													selectedObject,isCollection, potentialCollectionString, editManager.getEdits());
+											editManager.doDataflowEdit(
+													currentDataflow, edit);
+
+										} catch (Exception e) {
+											logger.error("Could not perform action", e);
+										}
+
+									}
+								});
+
+								menu.add(new JLabel(
+										"Moby Service Discovery ... ",
+										JLabel.CENTER));
+								menu.add(new JSeparator());
+								menu.add(item);
+								menu.add(new JSeparator());
+								menu.add(item2);
+								menu.add(new JLabel("Parse Moby Data ... ",
+										JLabel.CENTER));
+								menu.add(new JSeparator());
+								menu.add(item3);
+
+								menu.show(me.getComponent(), me.getX(), me
+										.getY());
+							}
+						}
+					}
+				}
+			}
+
+			public void mouseEntered(MouseEvent me) {
+			}
+
+			public void mouseExited(MouseEvent me) {
+			}
+		});
+
+		tree.getSelectionModel().setSelectionMode(
+				TreeSelectionModel.SINGLE_TREE_SELECTION);
+		JScrollPane jsp = new JScrollPane(tree);
+		JPanel thePanel = new JPanel(new BorderLayout());
+		thePanel.add(jsp, BorderLayout.CENTER);
+		progressBar = new JProgressBar();
+		progressBar.setValue(0);
+		progressBar.setString("Finding Services ... ");
+		progressBar.setStringPainted(true);
+		progressBar.setIndeterminate(true);
+		progressBar.setVisible(false);
+		thePanel.add(progressBar, BorderLayout.PAGE_END);
+		return thePanel;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @seeorg.embl.ebi.escience.scuflui.processoractions.ProcessorActionSPI#
+	 * getDescription()
+	 */
+	public String getDescription() {
+		return "Moby Service Details";
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see
+	 * org.embl.ebi.escience.scuflui.processoractions.ProcessorActionSPI#getIcon
+	 * ()
+	 */
+	public ImageIcon getIcon() {
+		return MobyPanel.getIcon("/moby_small.gif");
+	}
+
+	/**
+	 * returns the frame size as a dimension for the content pane housing this
+	 * action
+	 */
+	public Dimension getFrameSize() {
+		return new Dimension(450, 450);
+	}
+
+	/**
+	 * Return an Icon to represent this action
+	 *
+	 * @param loc
+	 *            the location of the image to use as an icon
+	 */
+	public ImageIcon getIcon(String loc) {
+		return MobyPanel.getIcon(loc);
+	}
+
+	/**
+	 * Where should the frame open?
+	 */
+	public Dimension getFrameLocation() {
+		return new Dimension(100, 100);
+	}
+
+	public void createFrame(JPanel targetComponent,
+			int posX, int posY, int sizeX, int sizeY) {
+		final JPanel component = targetComponent;
+		JFrame newFrame = new JFrame(component.getName());
+		newFrame.getContentPane().setLayout(new BorderLayout());
+		newFrame.getContentPane().add(
+				new JScrollPane((JComponent) targetComponent),
+				BorderLayout.CENTER);
+		newFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+		newFrame.setSize(sizeX, sizeY);
+		newFrame.setLocation(posX, posY);
+		newFrame.setVisible(true);
+	}
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/actions/BiomobyActivityConfigurationAction.java
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/actions/BiomobyActivityConfigurationAction.java b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/actions/BiomobyActivityConfigurationAction.java
new file mode 100644
index 0000000..f74c76a
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/actions/BiomobyActivityConfigurationAction.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * This file is a component of the Taverna project, and is licensed  under the
+ *  GNU LGPL. Copyright Edward Kawas, The BioMoby Project
+ ******************************************************************************/
+package net.sf.taverna.t2.activities.biomoby.actions;
+
+import java.awt.Frame;
+import java.awt.event.ActionEvent;
+
+import net.sf.taverna.t2.activities.biomoby.BiomobyActivity;
+import net.sf.taverna.t2.activities.biomoby.BiomobyActivityConfigurationBean;
+import net.sf.taverna.t2.activities.biomoby.view.BiomobyConfigView;
+import net.sf.taverna.t2.workbench.activityicons.ActivityIconManager;
+import net.sf.taverna.t2.workbench.edits.EditManager;
+import net.sf.taverna.t2.workbench.file.FileManager;
+import net.sf.taverna.t2.workbench.ui.actions.activity.ActivityConfigurationAction;
+import net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ActivityConfigurationDialog;
+
+import org.apache.log4j.Logger;
+
+@SuppressWarnings("serial")
+public class BiomobyActivityConfigurationAction extends
+		ActivityConfigurationAction<BiomobyActivity, BiomobyActivityConfigurationBean> {
+
+	private final Frame owner;
+	private static Logger logger = Logger.getLogger(BiomobyActivityConfigurationAction.class);
+	private final EditManager editManager;
+	private final FileManager fileManager;
+
+	public BiomobyActivityConfigurationAction(BiomobyActivity activity, Frame owner,
+			EditManager editManager, FileManager fileManager,
+			ActivityIconManager activityIconManager) {
+		super(activity, activityIconManager);
+		this.owner = owner;
+		this.editManager = editManager;
+		this.fileManager = fileManager;
+	}
+
+	public void actionPerformed(ActionEvent arg0) {
+		ActivityConfigurationDialog<BiomobyActivity, BiomobyActivityConfigurationBean> currentDialog = ActivityConfigurationAction
+				.getDialog(getActivity());
+		if (currentDialog != null) {
+			currentDialog.toFront();
+			return;
+		}
+
+		final BiomobyConfigView biomobyConfigView = new BiomobyConfigView(
+				(BiomobyActivity) getActivity());
+		final ActivityConfigurationDialog<BiomobyActivity, BiomobyActivityConfigurationBean> dialog = new ActivityConfigurationDialog<BiomobyActivity, BiomobyActivityConfigurationBean>(
+				getActivity(), biomobyConfigView, editManager, fileManager);
+
+		ActivityConfigurationAction.setDialog(getActivity(), dialog, fileManager);
+	}
+
+	public boolean isEnabled() {
+		BiomobyActivity activity = (BiomobyActivity) getActivity();
+		return (activity.getMobyService() != null && activity.containsSecondaries());
+	}
+
+}