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:14 UTC

[06/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-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/ui/BiomobyObjectTree.java
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/ui/BiomobyObjectTree.java b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/ui/BiomobyObjectTree.java
new file mode 100644
index 0000000..7ca2578
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/ui/BiomobyObjectTree.java
@@ -0,0 +1,635 @@
+/*
+ * 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.ui;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import javax.swing.ImageIcon;
+import javax.swing.JFrame;
+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.JTextField;
+import javax.swing.JTree;
+import javax.swing.ToolTipManager;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
+
+import net.sf.taverna.t2.activities.biomoby.BiomobyObjectActivity;
+import net.sf.taverna.t2.activities.biomoby.BiomobyObjectActivityConfigurationBean;
+import net.sf.taverna.t2.activities.biomoby.actions.MobyPanel;
+import net.sf.taverna.t2.activities.biomoby.datatypedescriptions.BiomobyDatatypeDescription;
+import net.sf.taverna.t2.activities.biomoby.edits.AddUpstreamObjectEdit;
+import net.sf.taverna.t2.activities.biomoby.query.BiomobyObjectActivityItem;
+import net.sf.taverna.t2.activities.biomoby.query.BiomobyQueryHelper;
+import net.sf.taverna.t2.workbench.edits.EditManager;
+import net.sf.taverna.t2.workbench.file.FileManager;
+import net.sf.taverna.t2.workflowmodel.CompoundEdit;
+import net.sf.taverna.t2.workflowmodel.Dataflow;
+import net.sf.taverna.t2.workflowmodel.Edit;
+import net.sf.taverna.t2.workflowmodel.Edits;
+import net.sf.taverna.t2.workflowmodel.utils.Tools;
+
+import org.apache.log4j.Logger;
+import org.biomoby.client.CentralImpl;
+import org.biomoby.shared.MobyException;
+
+/**
+ * Creates a Datatype tree for any BioMOBY registry. The tree allows the user to
+ * add nodes to the workflow. Includes the ability to search for datatypes too.
+ *
+ * @author Eddie Kawas, The BioMoby Project
+ *
+ */
+public class BiomobyObjectTree {
+
+	private static Logger logger = Logger
+	.getLogger(BiomobyObjectTree.class);
+
+	private JTree tree;
+	private String registryEndpoint = "";
+	private String registryNamespace = "";
+	private static String SEARCH_DATATYPE_TEXT = "Type to search!";
+	private FilterTreeModel model;
+	private final EditManager editManager;
+	private final FileManager fileManager;
+
+	/**
+	 * Default constructor. Creates a BiomobyObjectTree for the default Biomoby
+	 * registry
+	 */
+	public BiomobyObjectTree(EditManager editManager, FileManager fileManager) {
+		this(CentralImpl.DEFAULT_ENDPOINT, CentralImpl.DEFAULT_NAMESPACE, editManager, fileManager);
+	}
+
+	/**
+	 *
+	 * @param url
+	 *            the Biomoby registry endpoint URL to build a tree for
+	 * @param uri
+	 *            the Biomoby registry namespace URI to build a tree for
+	 */
+	public BiomobyObjectTree(String url, String uri, EditManager editManager, FileManager fileManager) {
+		this.registryEndpoint = url;
+		this.registryNamespace = uri;
+		this.editManager = editManager;
+		this.fileManager = fileManager;
+	}
+
+	/*
+	 * method that inserts our BiomobyDatatypeDescription object into our tree
+	 */
+	private void insertDescriptionIntoTree(
+			BiomobyDatatypeDescription description,
+			HashMap<String, FilterTreeNode> nodeMap,
+			HashMap<String, BiomobyDatatypeDescription> descriptionMap) {
+		FilterTreeNode node = nodeMap.containsKey(description.getName()) ? nodeMap
+				.get(description.getName())
+				: new FilterTreeNode(description);
+
+		String parent = description.getParent();
+		if (parent.equals(""))
+			parent = "Object";
+		FilterTreeNode pNode = nodeMap.containsKey(parent) ? nodeMap
+				.get(parent) : new FilterTreeNode(descriptionMap.get(parent));
+		pNode.add(node);
+		nodeMap.put(description.getName(), node);
+		nodeMap.put(parent, pNode);
+	}
+
+	/**
+	 *
+	 * @return a Tree containing the datatype ontology for the specified biomoby
+	 *         registry
+	 * @throws MobyException
+	 *             if there is a problem comunicating with the specified biomoby
+	 *             registry
+	 */
+	public Component getDatatypeTree() throws MobyException {
+		BiomobyQueryHelper bqh = new BiomobyQueryHelper(getRegistryEndpoint(),
+				getRegistryNamespace());
+		List<BiomobyDatatypeDescription> descriptions = bqh
+				.findDatatypeDescriptions();
+
+		// create a tree from all of the nodes
+		HashMap<String, BiomobyDatatypeDescription> descriptionMap = new HashMap<String, BiomobyDatatypeDescription>();
+		HashMap<String, FilterTreeNode> nodeMap = new HashMap<String, FilterTreeNode>();
+		for (BiomobyDatatypeDescription d : descriptions) {
+			// PRECONDITION: datatype names are unique across the ontology
+			descriptionMap.put(d.getDatatypeName(), d);
+		}
+
+		nodeMap.put("Object", new FilterTreeNode(descriptionMap.get("Object")));
+		for (BiomobyDatatypeDescription d : descriptions) {
+			if (!d.getName().equals("Object"))
+				insertDescriptionIntoTree(d, nodeMap, descriptionMap);
+		}
+		// construct a new tree with our root node
+		tree = new JTree(nodeMap.get("Object"));
+
+		// only allow one node to be selected at once
+		tree.getSelectionModel().setSelectionMode(
+				TreeSelectionModel.SINGLE_TREE_SELECTION);
+		model = new FilterTreeModel((FilterTreeNode) tree.getModel().getRoot());
+		tree.setModel(model);
+
+		// set up the icon and tooltips for the nodes in the tree
+		ImageIcon icon = new ImageIcon(BiomobyObjectActivityItem.class
+				.getResource("/biomoby_object.png"));
+		if (icon != null) {
+			DefaultTreeCellRenderer renderer = new DatatypeTreeRenderer();
+			renderer.setLeafIcon(icon);
+			renderer.setOpenIcon(icon);
+			renderer.setClosedIcon(icon);
+			renderer.setIcon(icon);
+			tree.setCellRenderer(renderer);
+		}
+
+		// add a mouse listener to catch context clicks
+		// the listener adds the selected datatype to the workflow
+		// it also adds the datatype's container relationships
+		tree.addMouseListener(new BiomobyObjectTreeMouseListener());
+		// clear the hashmaps to clear some memory
+		nodeMap.clear();
+		descriptionMap.clear();
+		// register our tree for tool tips
+		ToolTipManager.sharedInstance().registerComponent(tree);
+		// insert the tree into a scrollpane
+		JScrollPane treeView = new JScrollPane(tree);
+		treeView.setSize(getFrameSize());
+
+		// create a new panel to hold the scrollpane and a search box
+		JPanel panel = new JPanel(new BorderLayout());
+		panel.add(treeView, BorderLayout.CENTER);
+		JTextField search = new JTextField(SEARCH_DATATYPE_TEXT);
+		panel.add(search, BorderLayout.PAGE_END);
+		search.addKeyListener(new KeyListener() {
+			public void keyPressed(KeyEvent e) {
+				if (e.getSource() instanceof JTextField) {
+					JTextField field = (JTextField) e.getSource();
+					if (field.getText().trim().equals(
+							BiomobyObjectTree.SEARCH_DATATYPE_TEXT)) {
+						field.setText("");
+					}
+				}
+			}
+
+			public void keyReleased(KeyEvent e) {
+				if (e.getSource() instanceof JTextField) {
+					JTextField field = (JTextField) e.getSource();
+					if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
+						field.setText(SEARCH_DATATYPE_TEXT);
+						model.setFilter(null);
+						return;
+					}
+					// filter our tree
+					if (!field.getText().trim().equals(
+							BiomobyObjectTree.SEARCH_DATATYPE_TEXT)) {
+						// does our filter tree model exist yet?
+						model.setFilter(field.getText().trim());
+					}
+				}
+			}
+
+			public void keyTyped(KeyEvent e) {
+
+			}
+		});
+		search.addFocusListener(new FocusListener() {
+
+			public void focusGained(FocusEvent e) {
+				if (e.getSource() instanceof JTextField) {
+					JTextField field = (JTextField) e.getSource();
+					if (field.getText().trim().equals(
+							BiomobyObjectTree.SEARCH_DATATYPE_TEXT)) {
+						field.setText("");
+					}
+				}
+			}
+
+			public void focusLost(FocusEvent e) {
+				if (e.getSource() instanceof JTextField) {
+					JTextField field = (JTextField) e.getSource();
+					if (field.getText().trim().equals("")) {
+						field.setText(SEARCH_DATATYPE_TEXT);
+					}
+				}
+			}
+		});
+		// done
+		panel.setToolTipText("Datatype Viewer for " + getRegistryEndpoint().toString());
+		return panel;
+	}
+
+	/**
+	 *
+	 * @param registryEndpoint
+	 *            the endpoint to set
+	 */
+	public void setRegistryEndpoint(String registryEndpoint) {
+		this.registryEndpoint = registryEndpoint;
+	}
+
+	/**
+	 *
+	 * @param registryNamespace
+	 *            the namespace to set
+	 */
+	public void setRegistryNamespace(String registryNamespace) {
+		this.registryNamespace = registryNamespace;
+	}
+
+	/**
+	 *
+	 * @return the registry endpoint that this tree is using
+	 */
+	public String getRegistryEndpoint() {
+		return registryEndpoint;
+	}
+
+	/**
+	 *
+	 * @return the registry namespace that this tree is using
+	 */
+	public String getRegistryNamespace() {
+		return registryNamespace;
+	}
+
+	/**
+	 * returns the frame size as a dimension for the content pane housing this
+	 * action
+	 */
+	public Dimension getFrameSize() {
+		return new Dimension(550, 450);
+	}
+
+	/*
+	 * A mouse listener for our datatype tree
+	 */
+	private class BiomobyObjectTreeMouseListener implements 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;
+
+				DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
+						.getLastSelectedPathComponent();
+				if (node == null)
+					return;
+
+				final String selectedObject = node.toString();
+				final BiomobyDatatypeDescription bdd = (BiomobyDatatypeDescription) node
+						.getUserObject();
+				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.addActionListener(new ActionListener() {
+
+					public void actionPerformed(ActionEvent ae) {
+
+						try {
+							Dataflow dataflow = fileManager.getCurrentDataflow();
+							List<Edit<?>> compoundEdits = new ArrayList<Edit<?>>();
+							List<Edit<?>> editList = new ArrayList<Edit<?>>();
+
+							String name = Tools.uniqueProcessorName(
+									selectedObject, dataflow);
+
+							BiomobyObjectActivityConfigurationBean configBean = new BiomobyObjectActivityConfigurationBean();
+							configBean.setMobyEndpoint(bdd
+									.getActivityConfiguration()
+									.getMobyEndpoint());
+							configBean.setAuthorityName("");
+							configBean.setServiceName(selectedObject);
+
+							Edits edits = editManager.getEdits();
+							net.sf.taverna.t2.workflowmodel.Processor sourceProcessor = edits
+									.createProcessor(name);
+							BiomobyObjectActivity boActivity = new BiomobyObjectActivity();
+							Edit<?> configureActivityEdit = edits
+									.getConfigureActivityEdit(boActivity,
+											configBean);
+							editList.add(configureActivityEdit);
+
+							editList
+									.add(edits
+											.getDefaultDispatchStackEdit(sourceProcessor));
+
+							Edit<?> addActivityToProcessorEdit = edits
+									.getAddActivityEdit(sourceProcessor,
+											boActivity);
+							editList.add(addActivityToProcessorEdit);
+
+							editList.add(edits.getAddProcessorEdit(dataflow,
+									sourceProcessor));
+
+							CompoundEdit compoundEdit = new CompoundEdit(
+									editList);
+							compoundEdits.add(compoundEdit);
+							compoundEdit.doEdit();
+
+							// process relationships
+							Edit<?> edit = new AddUpstreamObjectEdit(dataflow,
+									sourceProcessor, boActivity, edits);
+							editManager.doDataflowEdit(dataflow, edit);
+
+						} catch (Exception e) {
+							logger.error("Could not add datatype", e);
+						}
+					}
+				});
+				item.setIcon(MobyPanel.getIcon("/Add24.gif"));
+
+				// add the components to the menus
+				menu.add(new JLabel("Add to workflow ... ", JLabel.CENTER));
+				menu.add(new JSeparator());
+				menu.add(item);
+				// show the window
+				menu.show(me.getComponent(), me.getX(), me.getY());
+			}
+		}
+
+		public void mouseEntered(MouseEvent me) {
+		}
+
+		public void mouseExited(MouseEvent me) {
+		}
+	}
+
+	private static class DatatypeTreeRenderer extends DefaultTreeCellRenderer {
+
+		private static final long serialVersionUID = 7287097980554656834L;
+
+		// the max tool tip length
+		private static int MAX_TOOLTIP_LENGTH = 300;
+
+		@Override
+		public Component getTreeCellRendererComponent(JTree tree, Object value,
+				boolean sel, boolean expanded, boolean leaf, int row,
+				boolean hasFocus) {
+			if (value instanceof DefaultMutableTreeNode) {
+				if (((DefaultMutableTreeNode) value).getUserObject() instanceof BiomobyDatatypeDescription) {
+					BiomobyDatatypeDescription desc = (BiomobyDatatypeDescription) ((DefaultMutableTreeNode) value)
+							.getUserObject();
+					String d = desc.getDescription().trim();
+					// we only keep MAX_TOOLTIP_LENGTH characters of the string
+					if (d.length() > MAX_TOOLTIP_LENGTH)
+						d = d.substring(0, MAX_TOOLTIP_LENGTH) + "...";
+					setToolTipText("<html><body><div style='width:200px;'><span>"
+							+ d + "</span></div></body></html>");
+
+					ToolTipManager.sharedInstance().setDismissDelay(
+							Integer.MAX_VALUE);
+				}
+			}
+			return super.getTreeCellRendererComponent(tree, value, sel,
+					expanded, leaf, row, hasFocus);
+		}
+	}
+
+	/*
+	 * Shamelessly stolen from t2. Made the Filter a simple string filter and
+	 * modified the code a bit to make it relevant to my tree
+	 */
+	private final class FilterTreeModel extends DefaultTreeModel {
+
+		private static final long serialVersionUID = 8446366558654481274L;
+		String currentFilter;
+
+		/**
+		 *
+		 * @param node
+		 *            the node to apply filtering to
+		 */
+		public FilterTreeModel(FilterTreeNode node) {
+			this(node, null);
+		}
+
+		/**
+		 *
+		 * @param node
+		 *            the node to apply filtering to
+		 * @param filter
+		 *            the actual filter we will apply
+		 */
+		public FilterTreeModel(FilterTreeNode node, String filter) {
+			super(node);
+			currentFilter = filter;
+			node.setFilter(filter);
+		}
+
+		/**
+		 *
+		 * @param filter
+		 *            the filter to set and apply to our node
+		 */
+		public void setFilter(String filter) {
+			if (root != null) {
+				currentFilter = filter;
+				((FilterTreeNode) root).setFilter(filter);
+				Object[] path = { root };
+				fireTreeStructureChanged(this, path, null, null);
+			}
+		}
+
+		/*
+		 * (non-Javadoc)
+		 *
+		 * @see
+		 * javax.swing.tree.DefaultTreeModel#getChildCount(java.lang.Object)
+		 */
+		public int getChildCount(Object parent) {
+			if (parent instanceof FilterTreeNode) {
+				return (((FilterTreeNode) parent).getChildCount());
+			}
+			return 0;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 *
+		 * @see javax.swing.tree.DefaultTreeModel#getChild(java.lang.Object,
+		 * int)
+		 */
+		public Object getChild(Object parent, int index) {
+			if (parent instanceof FilterTreeNode) {
+				return (((FilterTreeNode) parent).getChildAt(index));
+			}
+			return null;
+		}
+
+		/**
+		 * Getter
+		 *
+		 * @return the filter that we are currently using
+		 */
+		public String getCurrentFilter() {
+			return currentFilter;
+		}
+	}
+
+	private class FilterTreeNode extends DefaultMutableTreeNode {
+
+		private static final long serialVersionUID = -5269485070471940445L;
+		private String filter;
+		private boolean passed = true;
+		private List<FilterTreeNode> filteredChildren = new ArrayList<FilterTreeNode>();
+
+		public FilterTreeNode(Object userObject) {
+			super(userObject);
+		}
+
+		public String getFilter() {
+			return filter;
+		}
+
+		public void setFilter(String filter) {
+			this.filter = filter == null ? "" : filter;
+			passed = false;
+			filteredChildren.clear();
+			if (filter == null) {
+				passed = true;
+				passFilterDown(null);
+			} else if (pass(this)) {
+				passed = true;
+				passFilterDown(filter);
+			} else {
+				passFilterDown(filter);
+				passed = filteredChildren.size() != 0;
+			}
+		}
+
+		private boolean pass(FilterTreeNode node) {
+			if (getFilter().trim().equals("")) {
+				return true;
+			}
+			return node.getUserObject().toString().toLowerCase().trim()
+					.contains(getFilter().toLowerCase().trim());
+		}
+
+		private void passFilterDown(String filter) {
+			int realChildCount = super.getChildCount();
+			for (int i = 0; i < realChildCount; i++) {
+				FilterTreeNode realChild = (FilterTreeNode) super.getChildAt(i);
+				realChild.setFilter(filter);
+				if (realChild.isPassed()) {
+					filteredChildren.add(realChild);
+				}
+			}
+		}
+
+		public void add(FilterTreeNode node) {
+			super.add(node);
+			node.setFilter(filter);
+			if (node.isPassed()) {
+				filteredChildren.add(node);
+			}
+		}
+
+		/*
+		 * (non-Javadoc)
+		 *
+		 * @see javax.swing.tree.DefaultMutableTreeNode#remove(int)
+		 */
+		public void remove(int childIndex) {
+			if (filter != null) {
+				// as child indexes might be inconsistent..
+				throw new IllegalStateException(
+						"Can't remove while the filter is active");
+			}
+			super.remove(childIndex);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 *
+		 * @see javax.swing.tree.DefaultMutableTreeNode#getChildCount()
+		 */
+		public int getChildCount() {
+			if (filter == null) {
+				return super.getChildCount();
+			}
+			return (filteredChildren.size());
+		}
+
+		/*
+		 * (non-Javadoc)
+		 *
+		 * @see javax.swing.tree.DefaultMutableTreeNode#getChildAt(int)
+		 */
+		public FilterTreeNode getChildAt(int index) {
+			if (filter == null) {
+				return (FilterTreeNode) super.getChildAt(index);
+			}
+			return filteredChildren.get(index);
+		}
+
+		/**
+		 *
+		 * @return
+		 */
+		public boolean isPassed() {
+			return passed;
+		}
+	}
+
+	public static void main(String[] args) throws Exception {
+		// Create a frame
+		String title = "TeST";
+		JFrame frame = new JFrame(title);
+
+		// Create a component to add to the frame
+/*		Component comp = new BiomobyObjectTree(CentralImpl.DEFAULT_ENDPOINT,
+				CentralImpl.DEFAULT_NAMESPACE).getDatatypeTree();*/
+
+		Component comp = new BiomobyObjectTree("http://cropwiki.irri.org/cgi-bin/MOBY-Central.pl",
+				CentralImpl.DEFAULT_NAMESPACE, null, null).getDatatypeTree();
+
+		// Add the component to the frame's content pane;
+		// by default, the content pane has a border layout
+		frame.getContentPane().add(comp, BorderLayout.CENTER);
+
+		// Show the frame
+		int width = 300;
+		int height = 300;
+		frame.setSize(width, height);
+		frame.setVisible(true);
+
+		// Set to exit on close
+		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+	}
+}

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/ui/DatatypeMenuItem.java
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/ui/DatatypeMenuItem.java b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/ui/DatatypeMenuItem.java
new file mode 100644
index 0000000..c5a7468
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/ui/DatatypeMenuItem.java
@@ -0,0 +1,196 @@
+/*
+ * 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.ui;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Frame;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JMenuItem;
+import javax.swing.JPanel;
+import javax.swing.JProgressBar;
+
+import net.sf.taverna.t2.activities.biomoby.actions.MobyPanel;
+import net.sf.taverna.t2.activities.biomoby.query.BiomobyObjectActivityItem;
+import net.sf.taverna.t2.workbench.MainWindow;
+import net.sf.taverna.t2.workbench.edits.EditManager;
+import net.sf.taverna.t2.workbench.file.FileManager;
+import net.sf.taverna.t2.workbench.helper.HelpEnabledDialog;
+
+import org.apache.log4j.Logger;
+import org.biomoby.client.CentralImpl;
+import org.biomoby.shared.MobyException;
+
+import com.sun.java.help.impl.SwingWorker;
+
+/**
+ * DatatypeMenuItem is a JMenuItem that onClick produces a biomoby datatype tree
+ * that workbench users can utilize to add datatypes to any workflow.
+ *
+ * @author Edward Kawas
+ *
+ */
+public class DatatypeMenuItem extends JMenuItem {
+
+	private static Logger logger = Logger.getLogger(DatatypeMenuItem.class);
+	private static final long serialVersionUID = -1010828167358361441L;
+
+	private String endpoint;
+	private String namespace;
+
+	private final EditManager editManager;
+	private final FileManager fileManager;
+
+	/**
+	 * Default constructor; Creates a menu item for the default registry
+	 */
+	public DatatypeMenuItem(EditManager editManager, FileManager fileManager) {
+		this(CentralImpl.DEFAULT_ENDPOINT, CentralImpl.DEFAULT_NAMESPACE, editManager, fileManager);
+	}
+
+	/**
+	 * Create a Datatype menu item for a biomoby registry given a specific
+	 * endpoint and namespace
+	 *
+	 * @param endpoint
+	 *            the registry endpoint
+	 * @param namespace
+	 *            the registry namespace
+	 */
+	public DatatypeMenuItem(String endpoint, String namespace, EditManager editManager, FileManager fileManager) {
+		this(endpoint, namespace, endpoint, editManager, fileManager);
+	}
+
+	/*
+	 * A private constructor. Every constructor ends up here
+	 */
+	private DatatypeMenuItem(String endpoint, String namespace, String label, EditManager editManager, FileManager fileManager) {
+		// set up some specifics
+		this.endpoint = endpoint;
+		this.namespace = namespace;
+		this.editManager = editManager;
+		this.fileManager = fileManager;
+		// set up the name, label and icon for this menu item
+		setName(label);
+		setText(label);
+		setIcon(new ImageIcon(BiomobyObjectActivityItem.class
+				.getResource("/biomoby_object.png")));
+		// enable the item
+		setEnabled(true);
+		// create an action listener to catch clicks
+		addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				if (e.getSource() instanceof DatatypeMenuItem) {
+					final DatatypeMenuItem item = (DatatypeMenuItem) e
+							.getSource();
+					// create a swing worker that creates our tree
+					SwingWorker worker = new SwingWorker() {
+						@Override
+						public Object construct() {
+							// create a progress bar ...
+							JProgressBar bar = new JProgressBar();
+							bar.setIndeterminate(true);
+							bar.setString("Creating datatype tree ...");
+							bar.setStringPainted(true);
+							// a dialog frame hold the bar
+							String title = "Datatype Tree Builder";
+							JDialog frame = new HelpEnabledDialog(MainWindow.getMainWindow(), title, false, null);
+							JLabel label = new JLabel(
+									"Constructing tree for:\n\t"
+											+ item.getEndpoint());
+							JPanel panel = new JPanel();
+							panel.add(bar);
+							// the panel that holds the label and bar
+							JPanel panel1 = new JPanel();
+							panel1.setLayout(new BorderLayout());
+							panel1.add(panel, BorderLayout.NORTH);
+							panel1.add(label, BorderLayout.CENTER);
+							panel1.setBorder(BorderFactory.createEmptyBorder(
+									20, 20, 20, 20));
+							frame.setContentPane(panel1);
+							frame.setResizable(false);
+							frame.pack();
+							frame.setVisible(true);
+							// do our task
+							getTreeForRegistry(item.getEndpoint(), item
+									.getNamespace());
+							// hide the progress bar ...
+							frame.setVisible(false);
+							frame.removeAll();
+							frame = null;
+							return null;
+						}
+					};
+					worker.start();
+				}
+			}
+		});
+	}
+
+	/**
+	 * Set the registry namespace
+	 *
+	 * @param namespace
+	 *            the registry namespace that this menu item will use
+	 */
+	public void setNamespace(String namespace) {
+		this.namespace = namespace;
+	}
+
+	/**
+	 * Set the registry endpoint
+	 *
+	 * @param endpoint
+	 *            the registry endpoint that this menu item will use
+	 */
+	public void setEndpoint(String endpoint) {
+		this.endpoint = endpoint;
+	}
+
+	/**
+	 * Get the registry endpoint
+	 *
+	 * @return the registry endpoint that this menu item is using
+	 */
+	public String getEndpoint() {
+		return endpoint;
+	}
+
+	/**
+	 * Get the registry namespace
+	 *
+	 * @return the registry namespace that this menu item is using
+	 */
+	public String getNamespace() {
+		return namespace;
+	}
+
+	/*
+	 * Creates a tree for a given registry
+	 */
+	private void getTreeForRegistry(String endpoint, String namespace) {
+		Frame f = MobyPanel.CreateFrame("Datatype Viewer for " + endpoint);
+		try {
+			Component c = new BiomobyObjectTree(endpoint, namespace, editManager, fileManager)
+					.getDatatypeTree();
+			f.add(c);
+			f.setPreferredSize(c.getPreferredSize());
+			f.setMinimumSize(c.getPreferredSize());
+			f.pack();
+		} catch (MobyException e) {
+			logger.error(
+					"Error encountered while constructing datatype viewer:\n",
+					e);
+		}
+		f.setVisible(true);
+	}
+}

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/view/BiomobyActivityContextualView.java
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/view/BiomobyActivityContextualView.java b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/view/BiomobyActivityContextualView.java
new file mode 100644
index 0000000..4911721
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/view/BiomobyActivityContextualView.java
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * 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.view;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.Frame;
+import java.util.Map.Entry;
+
+import javax.swing.Action;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+
+import net.sf.taverna.t2.activities.biomoby.BiomobyActivity;
+import net.sf.taverna.t2.activities.biomoby.BiomobyActivityConfigurationBean;
+import net.sf.taverna.t2.activities.biomoby.actions.BiomobyActivityConfigurationAction;
+import net.sf.taverna.t2.activities.biomoby.actions.MobyParserAction;
+import net.sf.taverna.t2.activities.biomoby.actions.MobyServiceDetailsAction;
+import net.sf.taverna.t2.workbench.activityicons.ActivityIconManager;
+import net.sf.taverna.t2.workbench.configuration.colour.ColourManager;
+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.HTMLBasedActivityContextualView;
+import net.sf.taverna.t2.workflowmodel.processor.activity.Activity;
+
+@SuppressWarnings("serial")
+public class BiomobyActivityContextualView extends
+		HTMLBasedActivityContextualView<BiomobyActivityConfigurationBean> {
+
+	private EditManager editManager;
+	private final FileManager fileManager;
+	private final ActivityIconManager activityIconManager;
+
+	@Override
+	public Action getConfigureAction(Frame owner) {
+		BiomobyActivity activity = (BiomobyActivity) getActivity();
+		if (activity.getMobyService() != null && activity.containsSecondaries()) {
+			return new BiomobyActivityConfigurationAction((BiomobyActivity) getActivity(), owner,
+					editManager, fileManager, activityIconManager);
+		} else {
+			return null;
+		}
+	}
+
+	public BiomobyActivityContextualView(Activity<?> activity, EditManager editManager,
+			FileManager fileManager, ActivityIconManager activityIconManager,
+			ColourManager colourManager) {
+		super(activity, colourManager);
+		this.editManager = editManager;
+		this.editManager = editManager;
+		this.fileManager = fileManager;
+		this.activityIconManager = activityIconManager;
+	}
+
+	@Override
+	protected String getRawTableRowsHtml() {
+		String html = "<tr><td>Endpoint</td><td>" + getConfigBean().getMobyEndpoint()
+				+ "</td></tr>";
+		html += "<tr><td>Authority</td><td>" + getConfigBean().getAuthorityName() + "</td></tr>";
+		html += "<tr><td>Service</td><td>" + getConfigBean().getServiceName() + "</td></tr>";
+		if (getConfigBean().getSecondaries().size() > 0) {
+			html += "<tr><th colspan='2' align='left'>Secondaries</th></tr>";
+			for (Entry<String, String> entry : getConfigBean().getSecondaries().entrySet()) {
+				html += "<tr><td>" + entry.getKey() + "</td><td>" + entry.getValue() + "</td></tr>";
+			}
+		}
+		return html;
+	}
+
+	@Override
+	public String getViewTitle() {
+		return "Biomoby service";
+	}
+
+	/**
+	 * Gets the component from the {@link HTMLBasedActivityContextualView} and adds buttons to it
+	 * allowing Moby service details
+	 */
+	@Override
+	public JComponent getMainFrame() {
+		final JComponent mainFrame = super.getMainFrame();
+		JPanel flowPanel = new JPanel(new FlowLayout());
+
+		BiomobyActivity activity = (BiomobyActivity) getActivity();
+
+		JButton button = new JButton(new MobyServiceDetailsAction(activity, null, editManager,
+				fileManager));
+		flowPanel.add(button);
+		if (activity.getMobyService() != null) {
+			JButton button2 = new JButton(new MobyParserAction(activity, null, editManager,
+					fileManager));
+			flowPanel.add(button2);
+		}
+		mainFrame.add(flowPanel, BorderLayout.SOUTH);
+		return mainFrame;
+	}
+
+	@Override
+	public int getPreferredPosition() {
+		return 100;
+	}
+
+}

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/view/BiomobyActivityContextualViewFactory.java
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/view/BiomobyActivityContextualViewFactory.java b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/view/BiomobyActivityContextualViewFactory.java
new file mode 100644
index 0000000..942e52c
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/view/BiomobyActivityContextualViewFactory.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * 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.view;
+
+import java.util.Arrays;
+import java.util.List;
+
+import net.sf.taverna.t2.activities.biomoby.BiomobyActivity;
+import net.sf.taverna.t2.workbench.activityicons.ActivityIconManager;
+import net.sf.taverna.t2.workbench.configuration.colour.ColourManager;
+import net.sf.taverna.t2.workbench.edits.EditManager;
+import net.sf.taverna.t2.workbench.file.FileManager;
+import net.sf.taverna.t2.workbench.ui.views.contextualviews.ContextualView;
+import net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory;
+
+public class BiomobyActivityContextualViewFactory implements ContextualViewFactory<BiomobyActivity> {
+
+	private EditManager editManager;
+	private FileManager fileManager;
+	private ActivityIconManager activityIconManager;
+	private ColourManager colourManager;
+
+	public boolean canHandle(Object activity) {
+		return activity instanceof BiomobyActivity;
+	}
+
+	public List<ContextualView> getViews(BiomobyActivity activity) {
+		return Arrays.asList(new ContextualView[] { new BiomobyActivityContextualView(activity,
+				editManager, fileManager, activityIconManager, colourManager) });
+	}
+
+	public void setEditManager(EditManager editManager) {
+		this.editManager = editManager;
+	}
+
+	public void setFileManager(FileManager fileManager) {
+		this.fileManager = fileManager;
+	}
+
+	public void setActivityIconManager(ActivityIconManager activityIconManager) {
+		this.activityIconManager = activityIconManager;
+	}
+
+	public void setColourManager(ColourManager colourManager) {
+		this.colourManager = colourManager;
+	}
+
+}

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/view/BiomobyConfigView.java
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/view/BiomobyConfigView.java b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/view/BiomobyConfigView.java
new file mode 100644
index 0000000..0e08e0b
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/view/BiomobyConfigView.java
@@ -0,0 +1,108 @@
+/**
+ *
+ */
+package net.sf.taverna.t2.activities.biomoby.view;
+
+import java.awt.BorderLayout;
+import java.util.Map;
+
+import javax.swing.JComponent;
+
+import net.sf.taverna.t2.activities.biomoby.BiomobyActivity;
+import net.sf.taverna.t2.activities.biomoby.BiomobyActivityConfigurationBean;
+import net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ActivityConfigurationPanel;
+
+import org.apache.log4j.Logger;
+import org.biomoby.service.dashboard.data.ParametersTable;
+
+/**
+ * @author alanrw
+ *
+ */
+public class BiomobyConfigView extends ActivityConfigurationPanel<BiomobyActivity, BiomobyActivityConfigurationBean> {
+
+	private BiomobyActivity activity;
+	private BiomobyActivityConfigurationBean configuration;
+	private boolean changed = false;
+
+	private static Logger logger = Logger
+	.getLogger(BiomobyConfigView.class);
+	private ParametersTable parameterTable;
+
+	public BiomobyConfigView(BiomobyActivity activity) {
+		this.activity = activity;
+		initialise();
+	}
+
+	private void initialise() {
+		configuration = activity.getConfiguration();
+		this.setLayout(new BorderLayout());
+		parameterTable = activity.getParameterTable();
+		JComponent component = parameterTable.scrollable();
+		this.add(component, BorderLayout.NORTH);
+		validate();
+	}
+
+	/* (non-Javadoc)
+	 * @see net.sf.taverna.t2.workbench.ui.views.contextualviews.ActivityConfigurationPanel#getConfiguration()
+	 */
+	@Override
+	public BiomobyActivityConfigurationBean getConfiguration() {
+		return configuration;
+	}
+
+	/* (non-Javadoc)
+	 * @see net.sf.taverna.t2.workbench.ui.views.contextualviews.ActivityConfigurationPanel#isConfigurationChanged()
+	 */
+	@Override
+	public boolean isConfigurationChanged() {
+		Map<String,String> secondaries = configuration.getSecondaries();
+		int rows = parameterTable.getModel().getRowCount();
+		for (int i = 0; i < rows; i++) {
+			String key = (String)parameterTable.getModel().getValueAt(i,0);
+			String newValue = parameterTable.getModel().getValueAt(i,1).toString();
+			String currentValue = secondaries.get(key);
+			if (!currentValue.equals(newValue)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/* (non-Javadoc)
+	 * @see net.sf.taverna.t2.workbench.ui.views.contextualviews.ActivityConfigurationPanel#noteConfiguration()
+	 */
+	@Override
+	public void noteConfiguration() {
+		BiomobyActivityConfigurationBean newConfiguration =
+			(BiomobyActivityConfigurationBean) cloneBean(configuration);
+		Map<String,String> secondaries = newConfiguration.getSecondaries();
+		int rows = parameterTable.getModel().getRowCount();
+		for (int i = 0; i < rows; i++) {
+			String key = (String)parameterTable.getModel().getValueAt(i,0);
+			String value = parameterTable.getModel().getValueAt(i,1).toString();
+			secondaries.put(key, value);
+		}
+//		logger.info(convertBeanToString(configuration));
+//		logger.info("COnfiguration was " + configuration.hashCode());
+//		logger.info(convertBeanToString(newConfiguration));
+//		logger.info("New configuration is " + newConfiguration.hashCode());
+		configuration = newConfiguration;
+	}
+
+	@Override
+	public void refreshConfiguration() {
+		logger.info(convertBeanToString(activity.getConfiguration()));
+		removeAll();
+		initialise();
+	}
+
+	@Override
+	public boolean checkValues() {
+		// TODO Not yet implemented
+		return true;
+	}
+
+
+
+}

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/view/BiomobyObjectActivityContextualView.java
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/view/BiomobyObjectActivityContextualView.java b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/view/BiomobyObjectActivityContextualView.java
new file mode 100644
index 0000000..4ceed9b
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/view/BiomobyObjectActivityContextualView.java
@@ -0,0 +1,95 @@
+/**
+ * Copyright (C) 2007 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
+ * USA.
+ *
+ */
+package net.sf.taverna.t2.activities.biomoby.view;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+
+import net.sf.taverna.t2.activities.biomoby.BiomobyObjectActivity;
+import net.sf.taverna.t2.activities.biomoby.BiomobyObjectActivityConfigurationBean;
+import net.sf.taverna.t2.activities.biomoby.actions.MobyObjectDetailsAction;
+import net.sf.taverna.t2.workbench.configuration.colour.ColourManager;
+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.HTMLBasedActivityContextualView;
+import net.sf.taverna.t2.workflowmodel.processor.activity.Activity;
+
+/**
+ * @author Stuart Owen
+ *
+ */
+@SuppressWarnings("serial")
+public class BiomobyObjectActivityContextualView extends
+		HTMLBasedActivityContextualView<BiomobyObjectActivityConfigurationBean> {
+
+	private EditManager editManager;
+	private final FileManager fileManager;
+
+	public BiomobyObjectActivityContextualView(Activity<?> activity, EditManager editManager,
+			FileManager fileManager, ColourManager colourManager) {
+		super(activity, colourManager);
+		this.editManager = editManager;
+		this.fileManager = fileManager;
+	}
+
+	@Override
+	protected String getRawTableRowsHtml() {
+		String html = "<tr><td>Endpoint</td><td>" + getConfigBean().getMobyEndpoint()
+				+ "</td></tr>";
+		html += "<tr><td>Authority</td><td>" + getConfigBean().getAuthorityName() + "</td></tr>";
+		html += "<tr><td>Datatype</td><td>" + getConfigBean().getServiceName() + "</td></tr>";
+		return html;
+	}
+
+	@Override
+	public String getViewTitle() {
+		return "Biomoby Object service";
+	}
+
+	/**
+	 * Gets the component from the {@link HTMLBasedActivityContextualView} and adds buttons to it
+	 * allowing Moby object details
+	 */
+	@Override
+	public JComponent getMainFrame() {
+		final JComponent mainFrame = super.getMainFrame();
+		BiomobyObjectActivity activity = (BiomobyObjectActivity) getActivity();
+		if (activity.getMobyObject() != null) {
+			JPanel flowPanel = new JPanel(new FlowLayout());
+			JButton button = new JButton(new MobyObjectDetailsAction(activity, null, editManager,
+					fileManager));
+			flowPanel.add(button);
+			mainFrame.add(flowPanel, BorderLayout.SOUTH);
+		}
+		return mainFrame;
+	}
+
+	@Override
+	public int getPreferredPosition() {
+		return 100;
+	}
+}

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/view/BiomobyObjectActivityContextualViewFactory.java
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/view/BiomobyObjectActivityContextualViewFactory.java b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/view/BiomobyObjectActivityContextualViewFactory.java
new file mode 100644
index 0000000..0e6ea55
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/view/BiomobyObjectActivityContextualViewFactory.java
@@ -0,0 +1,67 @@
+/**
+ * Copyright (C) 2007 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
+ * USA.
+ *
+ */
+package net.sf.taverna.t2.activities.biomoby.view;
+
+import java.util.Arrays;
+import java.util.List;
+
+import net.sf.taverna.t2.activities.biomoby.BiomobyObjectActivity;
+import net.sf.taverna.t2.workbench.configuration.colour.ColourManager;
+import net.sf.taverna.t2.workbench.edits.EditManager;
+import net.sf.taverna.t2.workbench.file.FileManager;
+import net.sf.taverna.t2.workbench.ui.views.contextualviews.ContextualView;
+import net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory;
+
+/**
+ * @author Stuart Owen
+ *
+ */
+public class BiomobyObjectActivityContextualViewFactory implements
+		ContextualViewFactory<BiomobyObjectActivity> {
+
+	private EditManager editManager;
+	private FileManager fileManager;
+	private ColourManager colourManager;
+
+	public boolean canHandle(Object activity) {
+		return activity instanceof BiomobyObjectActivity;
+	}
+
+	public List<ContextualView> getViews(BiomobyObjectActivity activity) {
+		return Arrays.asList(new ContextualView[] { new BiomobyObjectActivityContextualView(
+				activity, editManager, fileManager, colourManager) });
+	}
+
+	public void setEditManager(EditManager editManager) {
+		this.editManager = editManager;
+	}
+
+	public void setFileManager(FileManager fileManager) {
+		this.fileManager = fileManager;
+	}
+
+	public void setColourManager(ColourManager colourManager) {
+		this.colourManager = colourManager;
+	}
+
+}

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/view/MobyParseDatatypeContextualView.java
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/view/MobyParseDatatypeContextualView.java b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/view/MobyParseDatatypeContextualView.java
new file mode 100644
index 0000000..91d4cd6
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/view/MobyParseDatatypeContextualView.java
@@ -0,0 +1,62 @@
+/**
+ * Copyright (C) 2007 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
+ * USA.
+ *
+ */
+package net.sf.taverna.t2.activities.biomoby.view;
+
+import net.sf.taverna.t2.activities.biomoby.MobyParseDatatypeActivityConfigurationBean;
+import net.sf.taverna.t2.workbench.configuration.colour.ColourManager;
+import net.sf.taverna.t2.workbench.ui.actions.activity.HTMLBasedActivityContextualView;
+import net.sf.taverna.t2.workflowmodel.processor.activity.Activity;
+
+/**
+ * @author Stuart Owen
+ *
+ */
+@SuppressWarnings("serial")
+public class MobyParseDatatypeContextualView extends
+		HTMLBasedActivityContextualView<MobyParseDatatypeActivityConfigurationBean> {
+
+	public MobyParseDatatypeContextualView(Activity<?> activity, ColourManager colourManager) {
+		super(activity, colourManager);
+	}
+
+	@Override
+	protected String getRawTableRowsHtml() {
+		String html = "<tr><td>Article name used by service</td><td>"
+				+ getConfigBean().getArticleNameUsedByService() + "</td></tr>";
+		html += "<tr><td>Datatype</td><td>" + getConfigBean().getDatatypeName() + "</td></tr>";
+		html += "<tr><td>Registry endpoint</td><td>" + getConfigBean().getRegistryEndpoint()
+				+ "</td></tr>";
+		return html;
+	}
+
+	@Override
+	public String getViewTitle() {
+		return "Moby parse datatype service";
+	}
+
+	@Override
+	public int getPreferredPosition() {
+		return 100;
+	}
+
+}

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/view/MobyParseDatatypeContextualViewFactory.java
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/view/MobyParseDatatypeContextualViewFactory.java b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/view/MobyParseDatatypeContextualViewFactory.java
new file mode 100644
index 0000000..5179642
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/java/net/sf/taverna/t2/activities/biomoby/view/MobyParseDatatypeContextualViewFactory.java
@@ -0,0 +1,69 @@
+/**
+ * Copyright (C) 2007 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
+ * USA.
+ *
+ */
+package net.sf.taverna.t2.activities.biomoby.view;
+
+import java.util.Arrays;
+import java.util.List;
+
+import net.sf.taverna.t2.activities.biomoby.MobyParseDatatypeActivity;
+import net.sf.taverna.t2.workbench.configuration.colour.ColourManager;
+import net.sf.taverna.t2.workbench.ui.views.contextualviews.ContextualView;
+import net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory;
+
+/**
+ * @author Stuart Owen
+ *
+ */
+public class MobyParseDatatypeContextualViewFactory implements
+		ContextualViewFactory<MobyParseDatatypeActivity> {
+
+	private ColourManager colourManager;
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see
+	 * net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory#canHandle
+	 * (java.lang.Object)
+	 */
+	public boolean canHandle(Object activity) {
+		return activity instanceof MobyParseDatatypeActivity;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see
+	 * net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory#getView
+	 * (java.lang.Object)
+	 */
+	public List<ContextualView> getViews(MobyParseDatatypeActivity activity) {
+		return Arrays.asList(new ContextualView[] { new MobyParseDatatypeContextualView(activity,
+				colourManager) });
+	}
+
+	public void setColourManager(ColourManager colourManager) {
+		this.colourManager = colourManager;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/resources/Add24.gif
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/Add24.gif b/taverna-biomoby-activity-ui/src/main/resources/Add24.gif
new file mode 100644
index 0000000..fecc7a8
Binary files /dev/null and b/taverna-biomoby-activity-ui/src/main/resources/Add24.gif differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/resources/Cut24.gif
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/Cut24.gif b/taverna-biomoby-activity-ui/src/main/resources/Cut24.gif
new file mode 100644
index 0000000..5c37d3a
Binary files /dev/null and b/taverna-biomoby-activity-ui/src/main/resources/Cut24.gif differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/resources/Information24.gif
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/Information24.gif b/taverna-biomoby-activity-ui/src/main/resources/Information24.gif
new file mode 100644
index 0000000..16cb3de
Binary files /dev/null and b/taverna-biomoby-activity-ui/src/main/resources/Information24.gif differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.partition.PartitionAlgorithmSetSPI
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.partition.PartitionAlgorithmSetSPI b/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.partition.PartitionAlgorithmSetSPI
new file mode 100644
index 0000000..926b5e3
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.partition.PartitionAlgorithmSetSPI
@@ -0,0 +1 @@
+net.sf.taverna.t2.activities.biomoby.partition.BiomobyPartitionAlgorithmSetSPI
\ 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/resources/META-INF/services/net.sf.taverna.t2.partition.PropertyExtractorSPI
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.partition.PropertyExtractorSPI b/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.partition.PropertyExtractorSPI
new file mode 100644
index 0000000..afaed0e
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.partition.PropertyExtractorSPI
@@ -0,0 +1 @@
+net.sf.taverna.t2.activities.biomoby.partition.BiomobyPropertyExtractor
\ 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/resources/META-INF/services/net.sf.taverna.t2.partition.QueryFactory
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.partition.QueryFactory b/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.partition.QueryFactory
new file mode 100644
index 0000000..12241b2
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.partition.QueryFactory
@@ -0,0 +1 @@
+net.sf.taverna.t2.activities.biomoby.query.BiomobyQueryFactory
\ 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/resources/META-INF/services/net.sf.taverna.t2.servicedescriptions.ServiceDescriptionProvider
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.servicedescriptions.ServiceDescriptionProvider b/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.servicedescriptions.ServiceDescriptionProvider
new file mode 100644
index 0000000..604022f
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.servicedescriptions.ServiceDescriptionProvider
@@ -0,0 +1 @@
+net.sf.taverna.t2.activities.biomoby.servicedescriptions.BiomobyServiceProvider

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.ui.menu.MenuComponent
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.ui.menu.MenuComponent b/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.ui.menu.MenuComponent
new file mode 100644
index 0000000..312b88c
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.ui.menu.MenuComponent
@@ -0,0 +1,5 @@
+net.sf.taverna.t2.activities.biomoby.menu.BiomobyActivityDetailsMenuAction
+net.sf.taverna.t2.activities.biomoby.menu.BiomobyActivityParserMenuAction
+#net.sf.taverna.t2.activities.biomoby.actions.BiomobyAdvancedMenuAction
+net.sf.taverna.t2.activities.biomoby.menu.ConfigureBiomobyMenuAction
+

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.activityicons.ActivityIconSPI
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.activityicons.ActivityIconSPI b/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.activityicons.ActivityIconSPI
new file mode 100644
index 0000000..cca5a06
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.activityicons.ActivityIconSPI
@@ -0,0 +1,2 @@
+net.sf.taverna.t2.activities.biomoby.query.BiomobyActivityIcon
+net.sf.taverna.t2.activities.biomoby.query.BiomobyObjectActivityIcon
\ 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/resources/META-INF/services/net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory b/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory
new file mode 100644
index 0000000..43017c3
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory
@@ -0,0 +1,3 @@
+net.sf.taverna.t2.activities.biomoby.view.BiomobyActivityContextualViewFactory
+net.sf.taverna.t2.activities.biomoby.view.BiomobyObjectActivityContextualViewFactory
+net.sf.taverna.t2.activities.biomoby.view.MobyParseDatatypeContextualViewFactory
\ 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/resources/META-INF/spring/biomoby-activity-ui-context-osgi.xml
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/META-INF/spring/biomoby-activity-ui-context-osgi.xml b/taverna-biomoby-activity-ui/src/main/resources/META-INF/spring/biomoby-activity-ui-context-osgi.xml
new file mode 100644
index 0000000..c67a55b
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/resources/META-INF/spring/biomoby-activity-ui-context-osgi.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans:beans xmlns="http://www.springframework.org/schema/osgi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:beans="http://www.springframework.org/schema/beans"
+	xsi:schemaLocation="http://www.springframework.org/schema/beans
+                      http://www.springframework.org/schema/beans/spring-beans.xsd
+                      http://www.springframework.org/schema/osgi
+                      http://www.springframework.org/schema/osgi/spring-osgi.xsd">
+
+	<service ref="BiomobyActivityIcon" interface="net.sf.taverna.t2.workbench.activityicons.ActivityIconSPI" />
+	<service ref="BiomobyObjectActivityIcon" interface="net.sf.taverna.t2.workbench.activityicons.ActivityIconSPI" />
+
+	<service ref="BiomobyServiceProvider" interface="net.sf.taverna.t2.servicedescriptions.ServiceDescriptionProvider" />
+
+	<service ref="BiomobyActivityDetailsMenuAction" auto-export="interfaces" />
+	<service ref="BiomobyActivityParserMenuAction" auto-export="interfaces" />
+	<service ref="ConfigureBiomobyMenuAction" auto-export="interfaces" />
+
+	<service ref="BiomobyActivityContextualViewFactory" interface="net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory" />
+	<service ref="BiomobyObjectActivityContextualViewFactory" interface="net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory" />
+	<service ref="MobyParseDatatypeContextualViewFactory" interface="net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory" />
+
+	<reference id="editManager" interface="net.sf.taverna.t2.workbench.edits.EditManager" />
+	<reference id="fileManager" interface="net.sf.taverna.t2.workbench.file.FileManager" />
+	<reference id="activityIconManager" interface="net.sf.taverna.t2.workbench.activityicons.ActivityIconManager" />
+	<reference id="colourManager" interface="net.sf.taverna.t2.workbench.configuration.colour.ColourManager" />
+	<reference id="serviceDescriptionRegistry" interface="net.sf.taverna.t2.servicedescriptions.ServiceDescriptionRegistry" />
+
+</beans:beans>

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/resources/META-INF/spring/biomoby-activity-ui-context.xml
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/META-INF/spring/biomoby-activity-ui-context.xml b/taverna-biomoby-activity-ui/src/main/resources/META-INF/spring/biomoby-activity-ui-context.xml
new file mode 100644
index 0000000..87c832a
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/main/resources/META-INF/spring/biomoby-activity-ui-context.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://www.springframework.org/schema/beans
+                      http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+	<bean id="BiomobyActivityIcon" class="net.sf.taverna.t2.activities.biomoby.query.BiomobyActivityIcon" />
+	<bean id="BiomobyObjectActivityIcon" class="net.sf.taverna.t2.activities.biomoby.query.BiomobyObjectActivityIcon" />
+
+	<bean id="BiomobyServiceProvider" class="net.sf.taverna.t2.activities.biomoby.servicedescriptions.BiomobyServiceProvider">
+			<property name="serviceDescriptionRegistry" ref="serviceDescriptionRegistry" />
+	</bean>
+
+	<bean id="BiomobyActivityDetailsMenuAction" class="net.sf.taverna.t2.activities.biomoby.menu.BiomobyActivityDetailsMenuAction">
+			<property name="editManager" ref="editManager" />
+			<property name="fileManager" ref="fileManager" />
+	</bean>
+	<bean id="BiomobyActivityParserMenuAction" class="net.sf.taverna.t2.activities.biomoby.menu.BiomobyActivityParserMenuAction">
+			<property name="editManager" ref="editManager" />
+			<property name="fileManager" ref="fileManager" />
+	</bean>
+	<bean id="ConfigureBiomobyMenuAction" class="net.sf.taverna.t2.activities.biomoby.menu.ConfigureBiomobyMenuAction">
+			<property name="editManager" ref="editManager" />
+			<property name="fileManager" ref="fileManager" />
+			<property name="activityIconManager" ref="activityIconManager" />
+	</bean>
+
+	<bean id="BiomobyActivityContextualViewFactory" class="net.sf.taverna.t2.activities.biomoby.view.BiomobyActivityContextualViewFactory">
+			<property name="editManager" ref="editManager" />
+			<property name="fileManager" ref="fileManager" />
+			<property name="activityIconManager" ref="activityIconManager" />
+			<property name="colourManager" ref="colourManager" />
+	</bean>
+	<bean id="BiomobyObjectActivityContextualViewFactory" class="net.sf.taverna.t2.activities.biomoby.view.BiomobyObjectActivityContextualViewFactory">
+			<property name="editManager" ref="editManager" />
+			<property name="fileManager" ref="fileManager" />
+			<property name="colourManager" ref="colourManager" />
+	</bean>
+	<bean id="MobyParseDatatypeContextualViewFactory" class="net.sf.taverna.t2.activities.biomoby.view.MobyParseDatatypeContextualViewFactory">
+			<property name="colourManager" ref="colourManager" />
+	</bean>
+
+</beans>

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/resources/Search24.gif
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/Search24.gif b/taverna-biomoby-activity-ui/src/main/resources/Search24.gif
new file mode 100644
index 0000000..24fc7c1
Binary files /dev/null and b/taverna-biomoby-activity-ui/src/main/resources/Search24.gif differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/resources/authority.png
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/authority.png b/taverna-biomoby-activity-ui/src/main/resources/authority.png
new file mode 100644
index 0000000..33e239a
Binary files /dev/null and b/taverna-biomoby-activity-ui/src/main/resources/authority.png differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/resources/biomoby_object.png
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/biomoby_object.png b/taverna-biomoby-activity-ui/src/main/resources/biomoby_object.png
new file mode 100644
index 0000000..73175f8
Binary files /dev/null and b/taverna-biomoby-activity-ui/src/main/resources/biomoby_object.png differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/resources/collection.png
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/collection.png b/taverna-biomoby-activity-ui/src/main/resources/collection.png
new file mode 100644
index 0000000..feab424
Binary files /dev/null and b/taverna-biomoby-activity-ui/src/main/resources/collection.png differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/resources/input.png
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/input.png b/taverna-biomoby-activity-ui/src/main/resources/input.png
new file mode 100644
index 0000000..d162a72
Binary files /dev/null and b/taverna-biomoby-activity-ui/src/main/resources/input.png differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/resources/moby.png
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/moby.png b/taverna-biomoby-activity-ui/src/main/resources/moby.png
new file mode 100644
index 0000000..73175f8
Binary files /dev/null and b/taverna-biomoby-activity-ui/src/main/resources/moby.png differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/resources/moby_small.gif
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/moby_small.gif b/taverna-biomoby-activity-ui/src/main/resources/moby_small.gif
new file mode 100644
index 0000000..0fd0366
Binary files /dev/null and b/taverna-biomoby-activity-ui/src/main/resources/moby_small.gif differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/resources/output.png
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/output.png b/taverna-biomoby-activity-ui/src/main/resources/output.png
new file mode 100644
index 0000000..bd9cc94
Binary files /dev/null and b/taverna-biomoby-activity-ui/src/main/resources/output.png differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/resources/parse.png
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/parse.png b/taverna-biomoby-activity-ui/src/main/resources/parse.png
new file mode 100644
index 0000000..49e2828
Binary files /dev/null and b/taverna-biomoby-activity-ui/src/main/resources/parse.png differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/resources/registry.gif
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/registry.gif b/taverna-biomoby-activity-ui/src/main/resources/registry.gif
new file mode 100644
index 0000000..404b126
Binary files /dev/null and b/taverna-biomoby-activity-ui/src/main/resources/registry.gif differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/main/resources/service.png
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/main/resources/service.png b/taverna-biomoby-activity-ui/src/main/resources/service.png
new file mode 100644
index 0000000..912efb2
Binary files /dev/null and b/taverna-biomoby-activity-ui/src/main/resources/service.png differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity-ui/src/test/java/net/sf/taverna/t2/activities/biomoby/view/BiomobyContextualViewFactoryTest.java
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity-ui/src/test/java/net/sf/taverna/t2/activities/biomoby/view/BiomobyContextualViewFactoryTest.java b/taverna-biomoby-activity-ui/src/test/java/net/sf/taverna/t2/activities/biomoby/view/BiomobyContextualViewFactoryTest.java
new file mode 100644
index 0000000..a9c51c6
--- /dev/null
+++ b/taverna-biomoby-activity-ui/src/test/java/net/sf/taverna/t2/activities/biomoby/view/BiomobyContextualViewFactoryTest.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * 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.view;
+
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.List;
+
+import net.sf.taverna.t2.activities.biomoby.BiomobyActivity;
+import net.sf.taverna.t2.activities.biomoby.BiomobyActivityConfigurationBean;
+import net.sf.taverna.t2.workbench.ui.views.contextualviews.ContextualView;
+import net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory;
+import net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactoryRegistry;
+import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityConfigurationException;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class BiomobyContextualViewFactoryTest {
+	BiomobyActivity activity;
+	@Before
+	public void setup() throws ActivityConfigurationException {
+		activity=new BiomobyActivity() { //need to prevent the activity trying to configure itself, but store a copy of the config bean
+
+			@Override
+			public void configure(
+					BiomobyActivityConfigurationBean configurationBean)
+					throws ActivityConfigurationException {
+				this.configurationBean=configurationBean;
+			}
+
+		};
+		BiomobyActivityConfigurationBean b = new BiomobyActivityConfigurationBean();
+		b.setAuthorityName("a");
+		b.setMobyEndpoint("e");
+		b.setServiceName("s");
+		activity.configure(b);
+	}
+
+	@Test
+	public void testGetConfigureAction() throws Exception {
+		ContextualView view = new BiomobyActivityContextualView(activity, null, null, null, null);
+		//will be null because its not a valid activity so therefore has no secondaries
+		assertNull("The action should be null",view.getConfigureAction(null));
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/a87b4151/taverna-biomoby-activity/pom.xml
----------------------------------------------------------------------
diff --git a/taverna-biomoby-activity/pom.xml b/taverna-biomoby-activity/pom.xml
new file mode 100644
index 0000000..21f220e
--- /dev/null
+++ b/taverna-biomoby-activity/pom.xml
@@ -0,0 +1,142 @@
+<?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.activities</groupId>
+	<artifactId>biomoby-activity</artifactId>
+  <version>2.0.1-SNAPSHOT</version>
+	<packaging>bundle</packaging>
+	<name>Taverna 2 Biomoby Activity</name>
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.felix</groupId>
+				<artifactId>maven-bundle-plugin</artifactId>
+				<configuration>
+					<instructions>
+						<Embed-Transitive>true</Embed-Transitive>
+						<Embed-Dependency>jmoby;jmoby-dashboard</Embed-Dependency>
+					</instructions>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+	<dependencies>
+		<dependency>
+			<groupId>net.sf.taverna.t2.core</groupId>
+			<artifactId>workflowmodel-api</artifactId>
+			<version>${t2.core.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>net.sf.taverna.t2.core</groupId>
+			<artifactId>reference-api</artifactId>
+			<version>${t2.core.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.biomoby</groupId>
+			<artifactId>jmoby</artifactId>
+			<version>${jmoby.version}</version>
+			<exclusions>
+				<exclusion>
+					<groupId>org.biomoby</groupId>
+					<artifactId>taverna-for-moby</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>log4j</groupId>
+					<artifactId>log4j</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>xml-apis</groupId>
+					<artifactId>xml-apis</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>stax</groupId>
+					<artifactId>stax-api</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>xerces</groupId>
+					<artifactId>xmlParserAPIs</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>javax.xml.ws</groupId>
+					<artifactId>jaxws-api</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>javax.xml.soap</groupId>
+					<artifactId>saaj-api</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		<dependency>
+			<groupId>org.biomoby</groupId>
+			<artifactId>jmoby-dashboard</artifactId>
+			<version>${jmoby.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.jdom</groupId>
+			<artifactId>com.springsource.org.jdom</artifactId>
+			<version>${jdom.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>com.springsource.org.apache.commons.httpclient</artifactId>
+			<version>${commons.httpclient.version}</version>
+		</dependency>
+		<!--<dependency> <groupId>org.apache.xmlcommons</groupId> <artifactId>com.springsource.org.apache.xmlcommons</artifactId>
+			<version>1.3.4</version> </dependency> -->
+		<!--<dependency> <groupId>javax.xml.ws</groupId> <artifactId>jaxws-api</artifactId>
+			<version>2.1</version> </dependency> -->
+		<!--<dependency> <groupId>com.sun.org.apache</groupId> <artifactId>jaxp-ri</artifactId>
+			<version>1.4</version> </dependency> -->
+		<dependency>
+			<groupId>org.apache.log4j</groupId>
+			<artifactId>com.springsource.org.apache.log4j</artifactId>
+      <version>${log4j.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+      <version>${junit.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>net.sf.taverna.t2.activities</groupId>
+			<artifactId>activity-test-utils</artifactId>
+			<version>${t2.activities.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>
+        <scm>
+                <connection>scm:git:https://github.com/taverna/taverna-biomoby-activity.git</connection>
+                <developerConnection>scm:git:ssh://git@github.com/taverna/taverna-biomoby-activity.git</developerConnection>
+                <url>https://github.com/taverna/taverna-biomoby-activity/</url>
+                <tag>HEAD</tag>
+        </scm>
+	
+</project>