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:24:53 UTC

[06/16] incubator-taverna-workbench-common-activities git commit: Revert "Temporarily empty repository"

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-spreadsheet-import-activity-ui/src/main/resources/META-INF/spring/spreadsheet-import-activity-ui-context.xml
----------------------------------------------------------------------
diff --git a/taverna-spreadsheet-import-activity-ui/src/main/resources/META-INF/spring/spreadsheet-import-activity-ui-context.xml b/taverna-spreadsheet-import-activity-ui/src/main/resources/META-INF/spring/spreadsheet-import-activity-ui-context.xml
new file mode 100644
index 0000000..7fdba26
--- /dev/null
+++ b/taverna-spreadsheet-import-activity-ui/src/main/resources/META-INF/spring/spreadsheet-import-activity-ui-context.xml
@@ -0,0 +1,45 @@
+<?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="SpreadsheetImportActivityIcon" class="net.sf.taverna.t2.activities.spreadsheet.servicedescriptions.SpreadsheetImportActivityIcon">
+			<property name="colourManager" ref="colourManager" />
+	</bean>
+
+	<bean id="SpreadsheetImportTemplateService" class="net.sf.taverna.t2.activities.spreadsheet.servicedescriptions.SpreadsheetImportTemplateService" />
+
+	<bean id="SpreadsheetImportAddTemplateAction" class="net.sf.taverna.t2.activities.spreadsheet.menu.SpreadsheetImportAddTemplateAction">
+			<property name="editManager" ref="editManager" />
+			<property name="menuManager" ref="menuManager" />
+			<property name="selectionManager" ref="selectionManager" />
+			<property name="activityIconManager" ref="activityIconManager" />
+			<property name="serviceDescriptionRegistry" ref="serviceDescriptionRegistry" />
+			<property name="serviceRegistry" ref="serviceRegistry" />
+	</bean>
+	<bean id="SpreadsheetImportAddTemplateMenuAction" class="net.sf.taverna.t2.activities.spreadsheet.menu.SpreadsheetImportAddTemplateMenuAction">
+			<property name="editManager" ref="editManager" />
+			<property name="menuManager" ref="menuManager" />
+			<property name="selectionManager" ref="selectionManager" />
+			<property name="activityIconManager" ref="activityIconManager" />
+			<property name="serviceDescriptionRegistry" ref="serviceDescriptionRegistry" />
+			<property name="serviceRegistry" ref="serviceRegistry" />
+	</bean>
+	<bean id="SpreadsheetImportConfigureMenuAction" class="net.sf.taverna.t2.activities.spreadsheet.menu.SpreadsheetImportConfigureMenuAction">
+			<property name="editManager" ref="editManager" />
+			<property name="fileManager" ref="fileManager" />
+			<property name="activityIconManager" ref="activityIconManager" />
+			<property name="serviceDescriptionRegistry" ref="serviceDescriptionRegistry" />
+			<property name="serviceRegistry" ref="serviceRegistry" />
+	</bean>
+
+	<bean id="SpreadsheetImportContextualViewFactory" class="net.sf.taverna.t2.activities.spreadsheet.views.SpreadsheetImportContextualViewFactory">
+			<property name="editManager" ref="editManager" />
+			<property name="fileManager" ref="fileManager" />
+			<property name="activityIconManager" ref="activityIconManager" />
+			<property name="colourManager" ref="colourManager" />
+			<property name="serviceDescriptionRegistry" ref="serviceDescriptionRegistry" />
+			<property name="serviceRegistry" ref="serviceRegistry" />
+	</bean>
+
+</beans>

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-spreadsheet-import-activity-ui/src/main/resources/net/sf/taverna/t2/activities/spreadsheet/iln8/ui-text.properties
----------------------------------------------------------------------
diff --git a/taverna-spreadsheet-import-activity-ui/src/main/resources/net/sf/taverna/t2/activities/spreadsheet/iln8/ui-text.properties b/taverna-spreadsheet-import-activity-ui/src/main/resources/net/sf/taverna/t2/activities/spreadsheet/iln8/ui-text.properties
new file mode 100644
index 0000000..2a4480f
--- /dev/null
+++ b/taverna-spreadsheet-import-activity-ui/src/main/resources/net/sf/taverna/t2/activities/spreadsheet/iln8/ui-text.properties
@@ -0,0 +1,43 @@
+SpreadsheetImportActivityConfigurationAction.canceButton=Cancel
+SpreadsheetImportActivityConfigurationAction.dialogTitle=Spreadsheet Import Configuration
+SpreadsheetImportActivityConfigurationAction.okButton=Finish
+SpreadsheetImportAddTemplateAction.addMenu=Spreadsheet import
+SpreadsheetImportConfigureMenuAction.configureMenu=Configure Spreadsheet Import
+SpreadsheetImportConfigTableModel.column=Column
+SpreadsheetImportConfigTableModel.portName=Port Name
+SpreadsheetImportConfigView.nextButton=Next
+SpreadsheetImportConfigView.backButton=Back
+SpreadsheetImportConfigView.columnMappingSectionLabel=Column to Port Name Mapping
+SpreadsheetImportConfigView.outputFormatSectionLabel=Output Format
+SpreadsheetImportConfigView.columnSectionLabel=Columns
+SpreadsheetImportConfigView.DEFAULT_MESSAGE=Select the data range
+SpreadsheetImportConfigView.DUPLICATE_PORT_NAME_ERROR_MESSAGE=Duplicate activity port name
+SpreadsheetImportConfigView.EMPTY_FROM_COLUMN_ERROR_MESSAGE='From' column must be specified
+SpreadsheetImportConfigView.EMPTY_FROM_ROW_ERROR_MESSAGE='From' row must be specified
+SpreadsheetImportConfigView.EMPTY_TO_COLUMN_ERROR_MESSAGE='To' column must be specified
+SpreadsheetImportConfigView.emptyCellSectionLabel=Empty cells
+SpreadsheetImportConfigView.emptyStringOption=Use an empty string
+SpreadsheetImportConfigView.excludeHeaderRowOption=Exclude header row
+SpreadsheetImportConfigView.from=From
+SpreadsheetImportConfigView.FROM_COLUMN_ERROR_MESSAGE='From' column can only contain characters A-Z
+SpreadsheetImportConfigView.FROM_ROW_ERROR_MESSAGE='From' row must be a number greater than 0
+SpreadsheetImportConfigView.generateErrorOption=Generate an error value
+SpreadsheetImportConfigView.ignoreBlankRowsOption=Ignore blank rows
+SpreadsheetImportConfigView.multiplePortOption=Multiple outputs (one per spreadsheet column)
+SpreadsheetImportConfigView.singlePortOption=A single CSV formatted output
+SpreadsheetImportConfigView.userDefinedCsvDelimiter=Use this value delimiter character:
+SpreadsheetImportConfigView.INCONSISTENT_COLUMN_MESSAGE='To' column must not be less than 'from' column
+SpreadsheetImportConfigView.INCONSISTENT_ROW_MESSAGE='To'row must not be less than 'from' row
+SpreadsheetImportConfigView.panelTitle=Configure spreadsheet file import
+SpreadsheetImportConfigView.rowSectionLabel=Rows
+SpreadsheetImportConfigView.selectAllRowsOption=All rows
+SpreadsheetImportConfigView.to=to
+SpreadsheetImportConfigView.TO_COLUMN_ERROR_MESSAGE='To' column can only contain characters A-Z
+SpreadsheetImportConfigView.TO_ROW_ERROR_MESSAGE='To' row must be a number greater than 0
+SpreadsheetImportConfigView.userDefinedOption=Use this value:
+SpreadsheetImportContextualView.activityName=Spreadsheet Import Activity
+SpreadsheetImportContextualView.depth=Depth
+SpreadsheetImportContextualView.inputPortName=Input Port Name
+SpreadsheetImportContextualView.outputPortName=Output Port Name
+SpreadsheetImportTemplateService.serviceDescription=A service that imports data from spreadsheets
+SpreadsheetImportTemplateService.serviceName=SpreadsheetImport

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-spreadsheet-import-activity-ui/src/main/resources/spreadsheet-import.png
----------------------------------------------------------------------
diff --git a/taverna-spreadsheet-import-activity-ui/src/main/resources/spreadsheet-import.png b/taverna-spreadsheet-import-activity-ui/src/main/resources/spreadsheet-import.png
new file mode 100644
index 0000000..886fac3
Binary files /dev/null and b/taverna-spreadsheet-import-activity-ui/src/main/resources/spreadsheet-import.png differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/pom.xml
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/pom.xml b/taverna-wsdl-activity-ui/pom.xml
new file mode 100644
index 0000000..be2d224
--- /dev/null
+++ b/taverna-wsdl-activity-ui/pom.xml
@@ -0,0 +1,95 @@
+<?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>wsdl-activity-ui</artifactId>
+        <version>2.0-SNAPSHOT</version>
+	<packaging>bundle</packaging>
+	<name>Taverna 2 WSDL Activity UI</name>
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.felix</groupId>
+				<artifactId>maven-bundle-plugin</artifactId>
+				<extensions>true</extensions>
+				<configuration>
+					<instructions>
+						<!-- Use the java version instead of xmlcommons for javax.* packages -->
+						<Import-Package>javax.xml.namespace;version="0.0.0",javax.xml.parsers;version="0.0.0",org.w3c.dom;version="0.0.0",org.xml.sax;version="0.0.0",*</Import-Package>
+					</instructions>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+	<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.activities</groupId>
+			<artifactId>wsdl-activity</artifactId>
+			<version>${t2.activities.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>net.sf.taverna.t2.ui-components</groupId>
+			<artifactId>credential-manager-ui</artifactId>
+			<version>${t2.ui.components.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>
+		<dependency>
+			<groupId>net.sf.taverna.t2.lang</groupId>
+			<artifactId>ui</artifactId>
+			<version>${t2.lang.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>${junit.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-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AbstractAddXMLSplitterAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AbstractAddXMLSplitterAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AbstractAddXMLSplitterAction.java
new file mode 100644
index 0000000..d92dab9
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AbstractAddXMLSplitterAction.java
@@ -0,0 +1,156 @@
+package net.sf.taverna.t2.activities.wsdl.actions;
+/*******************************************************************************
+ * Copyright (C) 2008 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
+ ******************************************************************************/
+
+import java.awt.event.ActionEvent;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import javax.swing.AbstractAction;
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+import javax.wsdl.WSDLException;
+import javax.xml.parsers.ParserConfigurationException;
+
+import net.sf.taverna.t2.workbench.edits.EditException;
+import net.sf.taverna.t2.workbench.edits.EditManager;
+import net.sf.taverna.t2.workbench.selection.SelectionManager;
+import net.sf.taverna.wsdl.parser.ArrayTypeDescriptor;
+import net.sf.taverna.wsdl.parser.ComplexTypeDescriptor;
+import net.sf.taverna.wsdl.parser.TypeDescriptor;
+import net.sf.taverna.wsdl.parser.UnknownOperationException;
+
+import org.apache.log4j.Logger;
+import org.jdom.JDOMException;
+import org.xml.sax.SAXException;
+
+import uk.org.taverna.scufl2.api.activity.Activity;
+import uk.org.taverna.scufl2.api.common.Scufl2Tools;
+import uk.org.taverna.scufl2.api.core.Workflow;
+import uk.org.taverna.scufl2.api.profiles.Profile;
+
+/**
+ * Abstract superclass of {@link AddXMLOutputSplitterAction} and
+ * {@link AddXMLInputSplitterAction}.
+ * <p>
+ * Pops up a {@link JOptionPane} with the names of all the wsdl ports. The one
+ * that is selected is added as an input/output splitter to the currently open
+ * dataflow using the {@link AddXMLSplitterEdit}
+ *
+ * @author Ian Dunlop
+ * @author Stian Soiland-Reyes
+ * @author Stuart Owen
+ *
+ */
+@SuppressWarnings("serial")
+public abstract class AbstractAddXMLSplitterAction extends AbstractAction {
+
+	private static Logger logger = Logger.getLogger(AddXMLOutputSplitterAction.class);
+
+	protected Scufl2Tools scufl2Tools = new Scufl2Tools();
+
+	protected JComponent owner;
+	protected final Activity activity;
+	protected final EditManager editManager;
+	protected final SelectionManager selectionManager;
+
+	public AbstractAddXMLSplitterAction(Activity activity,
+			JComponent owner, EditManager editManager, SelectionManager selectionManager) {
+		this.activity = activity;
+		this.owner = owner;
+		this.editManager = editManager;
+		this.selectionManager = selectionManager;
+	}
+
+	public void actionPerformed(ActionEvent ev) {
+		List<String> possibilities;
+		Map<String, TypeDescriptor> typeDescriptors;
+		try {
+			typeDescriptors = getTypeDescriptors();
+		} catch (UnknownOperationException ex) {
+			logger.error("Can't find operation for activity "
+					+ activity, ex);
+			return;
+		} catch (IOException | ParserConfigurationException | WSDLException | SAXException | JDOMException ex) {
+			logger.error("Can't read definition for activity "
+					+ activity, ex);
+			return;
+		}
+
+		typeDescriptors = filterDescriptors(typeDescriptors);
+
+		possibilities = new ArrayList<String>(typeDescriptors.keySet());
+		if (possibilities.isEmpty()) {
+			logger.warn("No type descriptors found for activity " + activity);
+			return;
+		}
+		Collections.sort(possibilities);
+
+		String portName = (String) JOptionPane.showInputDialog(owner,
+				"Select the port to add the splitter to",
+				"Add output XML splitter", JOptionPane.PLAIN_MESSAGE, null,
+				possibilities.toArray(), possibilities.get(0));
+
+		Workflow workflow = selectionManager.getSelectedWorkflow();
+		Profile profile = selectionManager.getSelectedProfile();
+		TypeDescriptor typeDescriptorForPort = typeDescriptors
+				.get(portName);
+
+		if (typeDescriptorForPort instanceof ArrayTypeDescriptor
+				|| typeDescriptorForPort instanceof ComplexTypeDescriptor) {
+			AddXMLSplitterEdit edit = new AddXMLSplitterEdit(workflow, profile,
+					activity, typeDescriptorForPort, portName, isInput());
+			try {
+				editManager.doDataflowEdit(workflow.getParent(), edit);
+			} catch (EditException ex) {
+				logger.error("Could not perform edit to add " + portName, ex);
+			}
+		} else {
+			logger.warn("Unknown typedescriptor for " + portName);
+		}
+	}
+
+	public static Map<String, TypeDescriptor> filterDescriptors(
+			Map<String, TypeDescriptor> descriptors) {
+		Map<String, TypeDescriptor> filtered = new HashMap<String, TypeDescriptor>();
+		for (Entry<String, TypeDescriptor> entry : descriptors.entrySet()) {
+			TypeDescriptor descriptor = entry.getValue();
+			if (descriptor.getMimeType().contains("'text/xml'")) {
+				filtered.put(entry.getKey(), descriptor);
+			}
+		}
+		return filtered;
+	}
+
+	protected abstract boolean isInput();
+
+	public abstract Map<String, TypeDescriptor> getTypeDescriptors()
+			throws UnknownOperationException, IOException, ParserConfigurationException, WSDLException, SAXException, JDOMException;
+
+	public void setOwner(JComponent owner) {
+		this.owner = owner;
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLInputSplitterAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLInputSplitterAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLInputSplitterAction.java
new file mode 100644
index 0000000..6faee9d
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLInputSplitterAction.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (C) 2008 The University of Manchester
+ *
+ *  Modifications to the initial code base are copyright of their
+ *  respective authors, or their employers as appropriate.
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public License
+ *  as published by the Free Software Foundation; either version 2.1 of
+ *  the License, or (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ ******************************************************************************/
+package net.sf.taverna.t2.activities.wsdl.actions;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+import javax.wsdl.WSDLException;
+import javax.xml.parsers.ParserConfigurationException;
+
+import net.sf.taverna.t2.activities.wsdl.servicedescriptions.WSDLServiceDescription;
+import net.sf.taverna.t2.activities.wsdl.xmlsplitter.AddXMLSplitterEdit;
+import net.sf.taverna.t2.workbench.edits.EditManager;
+import net.sf.taverna.t2.workbench.selection.SelectionManager;
+import net.sf.taverna.wsdl.parser.ArrayTypeDescriptor;
+import net.sf.taverna.wsdl.parser.ComplexTypeDescriptor;
+import net.sf.taverna.wsdl.parser.TypeDescriptor;
+import net.sf.taverna.wsdl.parser.UnknownOperationException;
+import net.sf.taverna.wsdl.parser.WSDLParser;
+import net.sf.taverna.wsdl.xmlsplitter.XMLSplitterSerialisationHelper;
+
+import org.jdom.Element;
+import org.jdom.JDOMException;
+import org.jdom.input.SAXBuilder;
+import org.xml.sax.SAXException;
+
+import uk.org.taverna.scufl2.api.activity.Activity;
+import uk.org.taverna.scufl2.api.configurations.Configuration;
+
+/**
+ * Pops up a {@link JOptionPane} with the names of all the wsdl ports. The one
+ * that is selected is added as an input splitter to the currently open dataflow
+ * using the {@link AddXMLSplitterEdit}
+ *
+ * @author Ian Dunlop
+ * @author Stian Soiland-Reyes
+ */
+@SuppressWarnings("serial")
+public class AddXMLInputSplitterAction extends AbstractAddXMLSplitterAction {
+
+	public AddXMLInputSplitterAction(Activity activity, JComponent owner, EditManager editManager,
+			SelectionManager selectionManager) {
+		super(activity, owner, editManager, selectionManager);
+		putValue(NAME, "Add input XML splitter");
+	}
+
+	@Override
+	public Map<String, TypeDescriptor> getTypeDescriptors() throws UnknownOperationException, IOException, ParserConfigurationException, WSDLException, SAXException, JDOMException {
+		Map<String, TypeDescriptor> descriptors = new HashMap<String, TypeDescriptor>();
+		Configuration configuration = scufl2Tools.configurationFor(activity, selectionManager.getSelectedProfile());
+		if (activity.getType().equals(WSDLServiceDescription.ACTIVITY_TYPE)) {
+			String wsdlLocation = configuration.getJson().get("operation").get("wsdl").textValue();
+			String operationName = configuration.getJson().get("operation").get("name").textValue();
+			List<TypeDescriptor> inputDescriptors = new WSDLParser(wsdlLocation)
+					.getOperationInputParameters(operationName);
+			for (TypeDescriptor descriptor : inputDescriptors) {
+				descriptors.put(descriptor.getName(), descriptor);
+			}
+		} else if (activity.getType().equals(WSDLServiceDescription.INPUT_SPLITTER_TYPE)) {
+			String wrappedType = configuration.getJson().get("wrappedType").textValue();
+			Element element = new SAXBuilder().build(new StringReader(wrappedType)).getRootElement();
+			TypeDescriptor typeDescriptor = XMLSplitterSerialisationHelper.extensionXMLToTypeDescriptor(element);
+			if (typeDescriptor instanceof ComplexTypeDescriptor) {
+				for (TypeDescriptor desc : ((ComplexTypeDescriptor)typeDescriptor).getElements()) {
+					descriptors.put(desc.getName(), desc);
+				}
+			}
+			else if (typeDescriptor instanceof ArrayTypeDescriptor) {
+				TypeDescriptor desc = ((ArrayTypeDescriptor)typeDescriptor).getElementType();
+				descriptors.put(typeDescriptor.getName(), desc);
+			}
+		}
+		return descriptors;
+	}
+
+	@Override
+	protected boolean isInput() {
+		return true;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLOutputSplitterAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLOutputSplitterAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLOutputSplitterAction.java
new file mode 100644
index 0000000..60cba69
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLOutputSplitterAction.java
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * Copyright (C) 2008 The University of Manchester
+ *
+ *  Modifications to the initial code base are copyright of their
+ *  respective authors, or their employers as appropriate.
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public License
+ *  as published by the Free Software Foundation; either version 2.1 of
+ *  the License, or (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ ******************************************************************************/
+package net.sf.taverna.t2.activities.wsdl.actions;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+import javax.wsdl.WSDLException;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.jdom.Element;
+import org.jdom.JDOMException;
+import org.jdom.input.SAXBuilder;
+import org.xml.sax.SAXException;
+
+import net.sf.taverna.t2.activities.wsdl.servicedescriptions.WSDLServiceDescription;
+import net.sf.taverna.t2.activities.wsdl.xmlsplitter.AddXMLSplitterEdit;
+import net.sf.taverna.t2.workbench.edits.EditManager;
+import net.sf.taverna.t2.workbench.selection.SelectionManager;
+import net.sf.taverna.wsdl.parser.ArrayTypeDescriptor;
+import net.sf.taverna.wsdl.parser.ComplexTypeDescriptor;
+import net.sf.taverna.wsdl.parser.TypeDescriptor;
+import net.sf.taverna.wsdl.parser.UnknownOperationException;
+import net.sf.taverna.wsdl.parser.WSDLParser;
+import net.sf.taverna.wsdl.xmlsplitter.XMLSplitterSerialisationHelper;
+import uk.org.taverna.scufl2.api.activity.Activity;
+import uk.org.taverna.scufl2.api.configurations.Configuration;
+
+/**
+ * Pops up a {@link JOptionPane} with the names of all the wsdl ports. The one
+ * that is selected is added as an output splitter to the currently open
+ * dataflow using the {@link AddXMLSplitterEdit}
+ *
+ * @author Ian Dunlop
+ * @author Stian Soiland-Reyes
+ */
+@SuppressWarnings("serial")
+public class AddXMLOutputSplitterAction extends AbstractAddXMLSplitterAction {
+
+	public AddXMLOutputSplitterAction(Activity activity, JComponent owner, EditManager editManager,
+			SelectionManager selectionManager) {
+		super(activity, owner, editManager, selectionManager);
+		putValue(NAME, "Add output XML splitter");
+
+	}
+
+	@Override
+	public Map<String, TypeDescriptor> getTypeDescriptors() throws UnknownOperationException, IOException, ParserConfigurationException, WSDLException, SAXException, JDOMException {
+		Map<String, TypeDescriptor> descriptors = new HashMap<String, TypeDescriptor>();
+		Configuration configuration = scufl2Tools.configurationFor(activity, selectionManager.getSelectedProfile());
+		if (activity.getType().equals(WSDLServiceDescription.ACTIVITY_TYPE)) {
+			String wsdlLocation = configuration.getJson().get("operation").get("wsdl").textValue();
+			String operationName = configuration.getJson().get("operation").get("name").textValue();
+			List<TypeDescriptor> inputDescriptors = new WSDLParser(wsdlLocation)
+					.getOperationOutputParameters(operationName);
+			for (TypeDescriptor descriptor : inputDescriptors) {
+				descriptors.put(descriptor.getName(), descriptor);
+			}
+		} else if (activity.getType().equals(WSDLServiceDescription.OUTPUT_SPLITTER_TYPE)) {
+			String wrappedType = configuration.getJson().get("wrappedType").textValue();
+			Element element = new SAXBuilder().build(new StringReader(wrappedType)).getRootElement();
+			TypeDescriptor typeDescriptor = XMLSplitterSerialisationHelper.extensionXMLToTypeDescriptor(element);
+			if (typeDescriptor instanceof ComplexTypeDescriptor) {
+				for (TypeDescriptor desc : ((ComplexTypeDescriptor) typeDescriptor)
+						.getElements()) {
+					descriptors.put(desc.getName(), desc);
+				}
+			}
+			else if (typeDescriptor instanceof ArrayTypeDescriptor) {
+				TypeDescriptor desc = ((ArrayTypeDescriptor)typeDescriptor).getElementType();
+				descriptors.put(typeDescriptor.getName(), desc);
+			}
+		}
+		return descriptors;
+	}
+
+	@Override
+	protected boolean isInput() {
+		return false;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLSplitterEdit.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLSplitterEdit.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLSplitterEdit.java
new file mode 100644
index 0000000..484feac
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLSplitterEdit.java
@@ -0,0 +1,315 @@
+/*******************************************************************************
+ * 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
+ ******************************************************************************/
+package net.sf.taverna.t2.activities.wsdl.actions;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+
+import net.sf.taverna.t2.activities.wsdl.servicedescriptions.WSDLServiceDescription;
+import net.sf.taverna.t2.activities.wsdl.xmlsplitter.XMLSplitterConfigurationBeanBuilder;
+import net.sf.taverna.t2.workbench.edits.CompoundEdit;
+import net.sf.taverna.t2.workbench.edits.Edit;
+import net.sf.taverna.t2.workbench.edits.EditException;
+import net.sf.taverna.t2.workflow.edits.AddChildEdit;
+import net.sf.taverna.t2.workflow.edits.AddDataLinkEdit;
+import net.sf.taverna.t2.workflow.edits.AddProcessorEdit;
+import net.sf.taverna.wsdl.parser.ArrayTypeDescriptor;
+import net.sf.taverna.wsdl.parser.TypeDescriptor;
+import net.sf.taverna.wsdl.xmlsplitter.XMLSplitterSerialisationHelper;
+
+import org.jdom.Element;
+
+import uk.org.taverna.scufl2.api.activity.Activity;
+import uk.org.taverna.scufl2.api.common.Scufl2Tools;
+import uk.org.taverna.scufl2.api.configurations.Configuration;
+import uk.org.taverna.scufl2.api.core.DataLink;
+import uk.org.taverna.scufl2.api.core.Processor;
+import uk.org.taverna.scufl2.api.core.Workflow;
+import uk.org.taverna.scufl2.api.iterationstrategy.CrossProduct;
+import uk.org.taverna.scufl2.api.port.InputProcessorPort;
+import uk.org.taverna.scufl2.api.port.OutputProcessorPort;
+import uk.org.taverna.scufl2.api.profiles.ProcessorBinding;
+import uk.org.taverna.scufl2.api.profiles.Profile;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+public class AddXMLSplitterEdit implements Edit<Workflow> {
+
+	public static final URI INPUT_SPLITTER_TYPE = URI
+			.create("http://ns.taverna.org.uk/2010/activity/xml-splitter/in");
+	public static final URI OUTPUT_SPLITTER_TYPE = URI
+			.create("http://ns.taverna.org.uk/2010/activity/xml-splitter/out");
+	public static final URI SPLITTER_CONFIG_TYPE = URI
+			.create("http://ns.taverna.org.uk/2010/activity/xml-splitter#Config");
+
+	private Scufl2Tools scufl2Tools = new Scufl2Tools();
+
+	private final Workflow workflow;
+	private final Profile profile;
+	private final Activity activity;
+	private TypeDescriptor typeDescriptor;
+	private final String portName;
+	private final boolean isInput;
+
+	private CompoundEdit compoundEdit1 = null;
+	private Edit<?> linkUpEdit;
+	private boolean applied = false;
+
+	public AddXMLSplitterEdit(Workflow workflow, Profile profile, Activity activity,
+			TypeDescriptor typeDescriptor, String portName, boolean isInput) {
+		this.workflow = workflow;
+		this.profile = profile;
+		this.activity = activity;
+		this.typeDescriptor = typeDescriptor;
+		this.portName = portName;
+		this.isInput = isInput;
+	}
+
+	@Override
+	public Workflow doEdit() throws EditException {
+		if (applied) {
+			throw new EditException("Edit has already been applied!");
+		}
+
+		Activity splitter = null;
+		Configuration splitterConfiguration = null;
+		String sourcePortName = "";
+		Processor sourceProcessor = null;
+
+		String sinkPortName = "";
+		Processor sinkProcessor = null;
+
+		Processor activityProcessor = null;
+		List<ProcessorBinding> processorBindingsToActivity = scufl2Tools
+				.processorBindingsToActivity(activity);
+		for (ProcessorBinding processorBinding : processorBindingsToActivity) {
+			activityProcessor = processorBinding.getBoundProcessor();
+			break;
+		}
+		if (activityProcessor == null) {
+			throw new EditException("Cannot find the processor that the activity belongs to");
+		}
+
+		String displayName = portName;
+		if (portName.equals("parameters")) {
+			displayName = isInput ? "input" : "output";
+		}
+		String processorName = activityProcessor.getName();
+		String candidateName;
+		if (displayName.startsWith(processorName)) {
+			// No need to make GetRequest_GetRequestResponse
+			candidateName = displayName;
+		} else {
+			// Combine with processor name
+			String displayProcessorName;
+			if (activity.getType().equals(INPUT_SPLITTER_TYPE)
+					|| activity.getType().equals(OUTPUT_SPLITTER_TYPE)) {
+				// For splitters on splitters - avoid adding up blah_bluh_blih_more_stuff
+				String[] processorNameSplit = processorName.replace("_input", "")
+						.replace("_output", "").split("_");
+				displayProcessorName = processorNameSplit[processorNameSplit.length - 1];
+			} else {
+				displayProcessorName = activityProcessor.getName();
+			}
+			candidateName = displayProcessorName + "_" + displayName;
+		}
+
+		Processor splitterProcessor = new Processor();
+		splitterProcessor.setName(candidateName);
+
+		CrossProduct crossProduct = new CrossProduct();
+		crossProduct.setParent(splitterProcessor.getIterationStrategyStack());
+
+		ProcessorBinding processorBinding = new ProcessorBinding();
+		processorBinding.setBoundProcessor(splitterProcessor);
+
+		try {
+			if (activity.getType().equals(INPUT_SPLITTER_TYPE)) {
+				if (!isInput) {
+					throw new EditException(
+							"Can only add an input splitter to another input splitter");
+				}
+				if (typeDescriptor instanceof ArrayTypeDescriptor
+						&& !((ArrayTypeDescriptor) typeDescriptor).isWrapped()) {
+					typeDescriptor = ((ArrayTypeDescriptor) typeDescriptor).getElementType();
+				}
+
+				Element element = XMLSplitterSerialisationHelper
+						.typeDescriptorToExtensionXML(typeDescriptor);
+//				String wrappedType = new XMLOutputter().outputString(element);
+
+				splitter = new Activity();
+				splitter.setType(INPUT_SPLITTER_TYPE);
+				splitterConfiguration = new Configuration();
+				splitterConfiguration.setType(SPLITTER_CONFIG_TYPE);
+				splitterConfiguration.setConfigures(splitter);
+//				((ObjectNode) splitterConfiguration.getJson()).put("wrappedType", wrappedType);
+
+				JsonNode bean = XMLSplitterConfigurationBeanBuilder.buildBeanForInput(element);
+				splitterConfiguration.setJson(bean);
+
+				XMLSplitterPortBuilder.addPortsForInput(element, splitter, splitterProcessor,
+						processorBinding);
+
+			} else if (activity.getType().equals(OUTPUT_SPLITTER_TYPE)) {
+				if (isInput) {
+					throw new EditException(
+							"Can only add an output splitter to another output splitter");
+				}
+				if (typeDescriptor instanceof ArrayTypeDescriptor
+						&& !((ArrayTypeDescriptor) typeDescriptor).isWrapped()) {
+					typeDescriptor = ((ArrayTypeDescriptor) typeDescriptor).getElementType();
+				}
+
+				Element element = XMLSplitterSerialisationHelper
+						.typeDescriptorToExtensionXML(typeDescriptor);
+//				String wrappedType = new XMLOutputter().outputString(element);
+
+				splitter = new Activity();
+				splitter.setType(OUTPUT_SPLITTER_TYPE);
+				splitterConfiguration = new Configuration();
+				splitterConfiguration.setType(SPLITTER_CONFIG_TYPE);
+				splitterConfiguration.setConfigures(splitter);
+//				((ObjectNode) splitterConfiguration.getJson()).put("wrappedType", wrappedType);
+
+				JsonNode bean = XMLSplitterConfigurationBeanBuilder.buildBeanForOutput(element);
+				splitterConfiguration.setJson(bean);
+
+				XMLSplitterPortBuilder.addPortsForOutput(element, splitter, splitterProcessor,
+						processorBinding);
+
+			} else if (activity.getType().equals(WSDLServiceDescription.ACTIVITY_TYPE)) {
+				if (isInput) {
+					Element element = XMLSplitterSerialisationHelper
+							.typeDescriptorToExtensionXML(typeDescriptor);
+//					String wrappedType = new XMLOutputter().outputString(element);
+
+					splitter = new Activity();
+					splitter.setType(WSDLServiceDescription.INPUT_SPLITTER_TYPE);
+					splitterConfiguration = new Configuration();
+					splitterConfiguration.setType(SPLITTER_CONFIG_TYPE);
+					splitterConfiguration.setConfigures(splitter);
+//					((ObjectNode) splitterConfiguration.getJson()).put("wrappedType", wrappedType);
+
+					JsonNode bean = XMLSplitterConfigurationBeanBuilder.buildBeanForInput(element);
+					splitterConfiguration.setJson(bean);
+
+					XMLSplitterPortBuilder.addPortsForInput(element, splitter, splitterProcessor,
+							processorBinding);
+
+				} else {
+					Element element = XMLSplitterSerialisationHelper
+							.typeDescriptorToExtensionXML(typeDescriptor);
+//					String wrappedType = new XMLOutputter().outputString(element);
+
+					splitter = new Activity();
+					splitter.setType(WSDLServiceDescription.OUTPUT_SPLITTER_TYPE);
+					splitterConfiguration = new Configuration();
+					splitterConfiguration.setType(SPLITTER_CONFIG_TYPE);
+					splitterConfiguration.setConfigures(splitter);
+//					((ObjectNode) splitterConfiguration.getJson()).put("wrappedType", wrappedType);
+
+					JsonNode bean = XMLSplitterConfigurationBeanBuilder.buildBeanForOutput(element);
+					splitterConfiguration.setJson(bean);
+
+					XMLSplitterPortBuilder.addPortsForOutput(element, splitter, splitterProcessor,
+							processorBinding);
+				}
+			} else {
+				throw new EditException(
+						"The activity type is not suitable for adding xml processing processors");
+			}
+		} catch (Exception e) {
+			throw new EditException(
+					"An error occured whilst tyring to add an XMLSplitter to the activity:"
+							+ activity, e);
+		}
+
+		if (isInput) {
+			sourcePortName = "output";
+			sinkPortName = portName;
+			sinkProcessor = activityProcessor;
+			sourceProcessor = splitterProcessor;
+		} else {
+			sourcePortName = portName;
+			sinkPortName = "input";
+			sinkProcessor = splitterProcessor;
+			sourceProcessor = activityProcessor;
+		}
+
+		processorBinding.setBoundActivity(splitter);
+
+		List<Edit<?>> editList = new ArrayList<Edit<?>>();
+		editList.add(new AddChildEdit<Profile>(profile, splitter));
+		editList.add(new AddChildEdit<Profile>(profile, splitterConfiguration));
+		editList.add(new AddChildEdit<Profile>(profile, processorBinding));
+		editList.add(new AddProcessorEdit(workflow, splitterProcessor));
+
+		compoundEdit1 = new CompoundEdit(editList);
+		compoundEdit1.doEdit();
+
+		List<Edit<?>> linkUpEditList = new ArrayList<Edit<?>>();
+
+		OutputProcessorPort source = sourceProcessor.getOutputPorts().getByName(sourcePortName);
+		InputProcessorPort sink = sinkProcessor.getInputPorts().getByName(sinkPortName);
+
+		if (source == null)
+			throw new EditException("Unable to find the source port when linking up "
+					+ sourcePortName + " to " + sinkPortName);
+		if (sink == null)
+			throw new EditException("Unable to find the sink port when linking up "
+					+ sourcePortName + " to " + sinkPortName);
+
+		DataLink dataLink = new DataLink();
+		dataLink.setReceivesFrom(source);
+		dataLink.setSendsTo(sink);
+		linkUpEditList.add(new AddDataLinkEdit(workflow, dataLink));
+
+		linkUpEdit = new CompoundEdit(linkUpEditList);
+		linkUpEdit.doEdit();
+		applied = true;
+		return workflow;
+	}
+
+	@Override
+	public void undo() {
+		if (!applied) {
+			throw new RuntimeException("Attempt to undo edit that was never applied");
+		}
+		if (linkUpEdit.isApplied())
+			linkUpEdit.undo();
+		if (compoundEdit1.isApplied())
+			compoundEdit1.undo();
+		applied = false;
+	}
+
+	@Override
+	public boolean isApplied() {
+		return applied;
+	}
+
+	@Override
+	public Object getSubject() {
+		return workflow;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/WSDLActivityConfigureAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/WSDLActivityConfigureAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/WSDLActivityConfigureAction.java
new file mode 100644
index 0000000..92a8fb6
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/WSDLActivityConfigureAction.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (C) 2007-2008 The University of Manchester
+ *
+ *  Modifications to the initial code base are copyright of their
+ *  respective authors, or their employers as appropriate.
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public License
+ *  as published by the Free Software Foundation; either version 2.1 of
+ *  the License, or (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ ******************************************************************************/
+package net.sf.taverna.t2.activities.wsdl.actions;
+
+import java.awt.Frame;
+import java.awt.event.ActionEvent;
+
+import javax.swing.Action;
+import javax.swing.JDialog;
+
+import net.sf.taverna.t2.activities.wsdl.views.WSDLActivityConfigurationView;
+import net.sf.taverna.t2.security.credentialmanager.CredentialManager;
+import net.sf.taverna.t2.servicedescriptions.ServiceDescriptionRegistry;
+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 net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ActivityConfigurationPanel;
+import uk.org.taverna.scufl2.api.activity.Activity;
+
+@SuppressWarnings("serial")
+public class WSDLActivityConfigureAction extends ActivityConfigurationAction {
+
+	private final EditManager editManager;
+	private final FileManager fileManager;
+	private final CredentialManager credentialManager;
+
+	public WSDLActivityConfigureAction(Activity activity, Frame owner, EditManager editManager,
+			FileManager fileManager, ActivityIconManager activityIconManager,
+			ServiceDescriptionRegistry serviceDescriptionRegistry, CredentialManager credentialManager) {
+		super(activity, activityIconManager, serviceDescriptionRegistry);
+		this.editManager = editManager;
+		this.fileManager = fileManager;
+		this.credentialManager = credentialManager;
+		putValue(Action.NAME, "Configure security");
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		JDialog currentDialog = ActivityConfigurationAction.getDialog(getActivity());
+		if (currentDialog != null) {
+			currentDialog.toFront();
+			return;
+		}
+		final ActivityConfigurationPanel rshellConfigView = new WSDLActivityConfigurationView(
+				getActivity(), credentialManager);
+		final ActivityConfigurationDialog dialog = new ActivityConfigurationDialog(getActivity(),
+				rshellConfigView, editManager);
+
+		ActivityConfigurationAction.setDialog(getActivity(), dialog, fileManager);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/XMLSplitterPortBuilder.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/XMLSplitterPortBuilder.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/XMLSplitterPortBuilder.java
new file mode 100644
index 0000000..f41f298
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/XMLSplitterPortBuilder.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * 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
+ ******************************************************************************/
+package net.sf.taverna.t2.activities.wsdl.actions;
+
+import net.sf.taverna.wsdl.parser.ArrayTypeDescriptor;
+import net.sf.taverna.wsdl.parser.BaseTypeDescriptor;
+import net.sf.taverna.wsdl.parser.ComplexTypeDescriptor;
+import net.sf.taverna.wsdl.parser.TypeDescriptor;
+import net.sf.taverna.wsdl.xmlsplitter.XMLSplitterSerialisationHelper;
+
+import org.jdom.Element;
+
+import uk.org.taverna.scufl2.api.activity.Activity;
+import uk.org.taverna.scufl2.api.common.NamedSet;
+import uk.org.taverna.scufl2.api.core.Processor;
+import uk.org.taverna.scufl2.api.port.InputActivityPort;
+import uk.org.taverna.scufl2.api.port.InputProcessorPort;
+import uk.org.taverna.scufl2.api.port.OutputActivityPort;
+import uk.org.taverna.scufl2.api.port.OutputProcessorPort;
+import uk.org.taverna.scufl2.api.profiles.ProcessorBinding;
+import uk.org.taverna.scufl2.api.profiles.ProcessorInputPortBinding;
+import uk.org.taverna.scufl2.api.profiles.ProcessorOutputPortBinding;
+
+/**
+ * A helper class to facilitate in building XMLSplitter ports
+ * from the type descriptor XML.
+ *
+ * @author Stuart Owen
+ * @author David Withers
+ */
+public class XMLSplitterPortBuilder {
+
+	public static void addPortsForInput(Element element, Activity activity, Processor processor,
+			ProcessorBinding binding) {
+		TypeDescriptor descriptor = XMLSplitterSerialisationHelper.extensionXMLToTypeDescriptor(element);
+		addOutputPort("output", 0, activity, processor, binding);
+
+		if (descriptor instanceof ComplexTypeDescriptor) {
+			for (TypeDescriptor typeDescriptor : ((ComplexTypeDescriptor) descriptor).getElements()) {
+				addInputPort(typeDescriptor.getName(), depthForDescriptor(typeDescriptor), activity, processor,
+						binding);
+			}
+			NamedSet<InputActivityPort> inputPorts = activity.getInputPorts();
+			for (TypeDescriptor typeDescriptor : ((ComplexTypeDescriptor) descriptor).getAttributes()) {
+				String name = typeDescriptor.getName();
+				if (inputPorts.containsName(name)) {
+					name = "1" + name;
+				}
+				addInputPort(name, depthForDescriptor(typeDescriptor), activity, processor, binding);
+			}
+		} else if (descriptor instanceof ArrayTypeDescriptor) {
+			addInputPort(descriptor.getName(), 1, activity, processor, binding);
+		}
+	}
+
+	public static void addPortsForOutput(Element element, Activity activity, Processor processor,
+			ProcessorBinding binding) {
+		TypeDescriptor descriptor = XMLSplitterSerialisationHelper.extensionXMLToTypeDescriptor(element);
+		addInputPort("input", 0, activity, processor, binding);
+
+		if (descriptor instanceof ComplexTypeDescriptor) {
+			for (TypeDescriptor typeDescriptor : ((ComplexTypeDescriptor) descriptor).getElements()) {
+				addOutputPort(typeDescriptor.getName(), depthForDescriptor(typeDescriptor), activity, processor,
+						binding);
+			}
+			NamedSet<OutputActivityPort> outputPorts = activity.getOutputPorts();
+			for (TypeDescriptor typeDescriptor : ((ComplexTypeDescriptor) descriptor).getAttributes()) {
+				String name = typeDescriptor.getName();
+				if (outputPorts.containsName(name)) {
+					name = "1" + name;
+				}
+				addOutputPort(name, depthForDescriptor(typeDescriptor), activity, processor, binding);
+			}
+		} else if (descriptor instanceof ArrayTypeDescriptor) {
+			addOutputPort(descriptor.getName(), 1, activity, processor, binding);
+		}
+	}
+
+	private static int depthForDescriptor(TypeDescriptor desc) {
+		if (desc instanceof ArrayTypeDescriptor
+				&& (!((ArrayTypeDescriptor) desc).isWrapped() || ((ArrayTypeDescriptor) desc)
+						.getElementType() instanceof BaseTypeDescriptor)) {
+			return 1;
+		} else {
+			return 0;
+		}
+	}
+
+	private static void addOutputPort(String name, int depth, Activity activity,
+			Processor processor, ProcessorBinding binding) {
+		OutputActivityPort activityPort = new OutputActivityPort(activity, name);
+		activityPort.setDepth(depth);
+		activityPort.setGranularDepth(depth);
+		OutputProcessorPort processorPort = new OutputProcessorPort(processor, name);
+		processorPort.setDepth(depth);
+		processorPort.setGranularDepth(depth);
+		new ProcessorOutputPortBinding(binding, activityPort, processorPort);
+	}
+
+	private static void addInputPort(String name, int depth, Activity activity,
+			Processor processor, ProcessorBinding binding) {
+		InputActivityPort activityPort = new InputActivityPort(activity, name);
+		activityPort.setDepth(depth);
+		InputProcessorPort processorPort = new InputProcessorPort(processor, name);
+		processorPort.setDepth(depth);
+		new ProcessorInputPortBinding(binding, processorPort, activityPort);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterForWSDLActivityMenuAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterForWSDLActivityMenuAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterForWSDLActivityMenuAction.java
new file mode 100644
index 0000000..a2935e6
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterForWSDLActivityMenuAction.java
@@ -0,0 +1,11 @@
+package net.sf.taverna.t2.activities.wsdl.menu;
+
+import net.sf.taverna.t2.activities.wsdl.servicedescriptions.WSDLServiceDescription;
+
+public class AddXMLInputSplitterForWSDLActivityMenuAction extends AddXMLInputSplitterMenuAction {
+
+	public AddXMLInputSplitterForWSDLActivityMenuAction() {
+		super(WSDLServiceDescription.ACTIVITY_TYPE);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterForXMLInputSplitterMenuAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterForXMLInputSplitterMenuAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterForXMLInputSplitterMenuAction.java
new file mode 100644
index 0000000..070c006
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterForXMLInputSplitterMenuAction.java
@@ -0,0 +1,11 @@
+package net.sf.taverna.t2.activities.wsdl.menu;
+
+import net.sf.taverna.t2.activities.wsdl.servicedescriptions.WSDLServiceDescription;
+
+public class AddXMLInputSplitterForXMLInputSplitterMenuAction extends AddXMLInputSplitterMenuAction {
+
+	public AddXMLInputSplitterForXMLInputSplitterMenuAction() {
+		super(WSDLServiceDescription.INPUT_SPLITTER_TYPE);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterMenuAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterMenuAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterMenuAction.java
new file mode 100644
index 0000000..60ef904
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterMenuAction.java
@@ -0,0 +1,70 @@
+/**
+ *
+ */
+package net.sf.taverna.t2.activities.wsdl.menu;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.Map;
+
+import javax.swing.Action;
+import javax.wsdl.WSDLException;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.jdom.JDOMException;
+import org.xml.sax.SAXException;
+
+import net.sf.taverna.t2.activities.wsdl.InputPortTypeDescriptorActivity;
+import net.sf.taverna.t2.activities.wsdl.actions.AbstractAddXMLSplitterAction;
+import net.sf.taverna.t2.activities.wsdl.actions.AddXMLInputSplitterAction;
+import net.sf.taverna.t2.ui.menu.ContextualMenuComponent;
+import net.sf.taverna.t2.ui.menu.MenuComponent;
+import net.sf.taverna.t2.workbench.activitytools.AbstractConfigureActivityMenuAction;
+import net.sf.taverna.t2.workbench.edits.EditManager;
+import net.sf.taverna.t2.workbench.selection.SelectionManager;
+import net.sf.taverna.wsdl.parser.TypeDescriptor;
+import net.sf.taverna.wsdl.parser.UnknownOperationException;
+
+/**
+ * @author alanrw
+ */
+public abstract class AddXMLInputSplitterMenuAction extends AbstractConfigureActivityMenuAction
+		implements MenuComponent, ContextualMenuComponent {
+
+	private static final String ADD_XML_INPUT_SPLITTER = "Add XML Input Splitter";
+	private EditManager editManager;
+	private SelectionManager selectionManager;
+
+	public AddXMLInputSplitterMenuAction(URI activityType) {
+		super(activityType);
+	}
+
+	@Override
+	protected Action createAction() {
+		AddXMLInputSplitterAction configAction = new AddXMLInputSplitterAction(findActivity(),
+				null, editManager, selectionManager);
+		Map<String, TypeDescriptor> descriptors;
+		try {
+			descriptors = configAction.getTypeDescriptors();
+		} catch (UnknownOperationException | IOException | ParserConfigurationException
+				| WSDLException | SAXException | JDOMException e) {
+			return null;
+		}
+		if (!AbstractAddXMLSplitterAction.filterDescriptors(descriptors).isEmpty()) {
+			configAction.putValue(Action.NAME, ADD_XML_INPUT_SPLITTER);
+			addMenuDots(configAction);
+			return configAction;
+		} else {
+			return null;
+		}
+	}
+
+	public void setEditManager(EditManager editManager) {
+		this.editManager = editManager;
+	}
+
+	public void setSelectionManager(SelectionManager selectionManager) {
+		this.selectionManager = selectionManager;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterForWSDLActivityMenuAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterForWSDLActivityMenuAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterForWSDLActivityMenuAction.java
new file mode 100644
index 0000000..58b3724
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterForWSDLActivityMenuAction.java
@@ -0,0 +1,11 @@
+package net.sf.taverna.t2.activities.wsdl.menu;
+
+import net.sf.taverna.t2.activities.wsdl.servicedescriptions.WSDLServiceDescription;
+
+public class AddXMLOutputSplitterForWSDLActivityMenuAction extends AddXMLOutputSplitterMenuAction {
+
+	public AddXMLOutputSplitterForWSDLActivityMenuAction() {
+		super(WSDLServiceDescription.ACTIVITY_TYPE);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterForXMLOutputSplitterMenuAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterForXMLOutputSplitterMenuAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterForXMLOutputSplitterMenuAction.java
new file mode 100644
index 0000000..129c996
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterForXMLOutputSplitterMenuAction.java
@@ -0,0 +1,11 @@
+package net.sf.taverna.t2.activities.wsdl.menu;
+
+import net.sf.taverna.t2.activities.wsdl.servicedescriptions.WSDLServiceDescription;
+
+public class AddXMLOutputSplitterForXMLOutputSplitterMenuAction extends AddXMLOutputSplitterMenuAction {
+
+	public AddXMLOutputSplitterForXMLOutputSplitterMenuAction() {
+		super(WSDLServiceDescription.OUTPUT_SPLITTER_TYPE);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterMenuAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterMenuAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterMenuAction.java
new file mode 100644
index 0000000..33541e6
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterMenuAction.java
@@ -0,0 +1,66 @@
+/**
+ *
+ */
+package net.sf.taverna.t2.activities.wsdl.menu;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.Map;
+
+import javax.swing.Action;
+import javax.wsdl.WSDLException;
+import javax.xml.parsers.ParserConfigurationException;
+
+import net.sf.taverna.t2.activities.wsdl.actions.AbstractAddXMLSplitterAction;
+import net.sf.taverna.t2.activities.wsdl.actions.AddXMLOutputSplitterAction;
+import net.sf.taverna.t2.workbench.activitytools.AbstractConfigureActivityMenuAction;
+import net.sf.taverna.t2.workbench.edits.EditManager;
+import net.sf.taverna.t2.workbench.selection.SelectionManager;
+import net.sf.taverna.wsdl.parser.TypeDescriptor;
+import net.sf.taverna.wsdl.parser.UnknownOperationException;
+
+import org.jdom.JDOMException;
+import org.xml.sax.SAXException;
+
+/**
+ * @author alanrw
+ */
+public abstract class AddXMLOutputSplitterMenuAction extends AbstractConfigureActivityMenuAction {
+
+	private static final String ADD_XML_OUTPUT_SPLITTER = "Add XML Output Splitter";
+	private EditManager editManager;
+	private SelectionManager selectionManager;
+
+	public AddXMLOutputSplitterMenuAction(URI activityType) {
+		super(activityType);
+	}
+
+	@Override
+	protected Action createAction() {
+		AddXMLOutputSplitterAction configAction = new AddXMLOutputSplitterAction(
+				findActivity(), null, editManager, selectionManager);
+		Map<String, TypeDescriptor> descriptors;
+		try {
+			descriptors = configAction.getTypeDescriptors();
+		} catch (UnknownOperationException | IOException | ParserConfigurationException
+				| WSDLException | SAXException | JDOMException e) {
+			return null;
+		}
+		if (!AbstractAddXMLSplitterAction.filterDescriptors(descriptors).isEmpty()) {
+			configAction.putValue(Action.NAME, ADD_XML_OUTPUT_SPLITTER);
+			addMenuDots(configAction);
+			return configAction;
+		} else {
+			return null;
+		}
+	}
+
+	public void setEditManager(EditManager editManager) {
+		this.editManager = editManager;
+	}
+
+	public void setSelectionManager(SelectionManager selectionManager) {
+		this.selectionManager = selectionManager;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/ConfigureWSDLMenuAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/ConfigureWSDLMenuAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/ConfigureWSDLMenuAction.java
new file mode 100644
index 0000000..87e7d0f
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/ConfigureWSDLMenuAction.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (C) 2007-2009 The University of Manchester
+ *
+ *  Modifications to the initial code base are copyright of their
+ *  respective authors, or their employers as appropriate.
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public License
+ *  as published by the Free Software Foundation; either version 2.1 of
+ *  the License, or (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ ******************************************************************************/
+package net.sf.taverna.t2.activities.wsdl.menu;
+
+import javax.swing.Action;
+
+import net.sf.taverna.t2.activities.wsdl.actions.WSDLActivityConfigureAction;
+import net.sf.taverna.t2.activities.wsdl.servicedescriptions.WSDLServiceDescription;
+import net.sf.taverna.t2.security.credentialmanager.CredentialManager;
+import net.sf.taverna.t2.servicedescriptions.ServiceDescriptionRegistry;
+import net.sf.taverna.t2.ui.menu.ContextualMenuComponent;
+import net.sf.taverna.t2.ui.menu.MenuComponent;
+import net.sf.taverna.t2.workbench.activityicons.ActivityIconManager;
+import net.sf.taverna.t2.workbench.activitytools.AbstractConfigureActivityMenuAction;
+import net.sf.taverna.t2.workbench.edits.EditManager;
+import net.sf.taverna.t2.workbench.file.FileManager;
+
+public class ConfigureWSDLMenuAction extends AbstractConfigureActivityMenuAction implements
+		MenuComponent, ContextualMenuComponent {
+
+	private EditManager editManager;
+	private ActivityIconManager activityIconManager;
+	private ServiceDescriptionRegistry serviceDescriptionRegistry;
+	private CredentialManager credentialManager;
+	private FileManager fileManager;
+
+	public ConfigureWSDLMenuAction() {
+		super(WSDLServiceDescription.ACTIVITY_TYPE);
+	}
+
+	@Override
+	protected Action createAction() {
+		WSDLActivityConfigureAction configAction = new WSDLActivityConfigureAction(findActivity(),
+				getParentFrame(), editManager, fileManager, activityIconManager,
+				serviceDescriptionRegistry, credentialManager);
+		addMenuDots(configAction);
+		return configAction;
+	}
+
+	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 setServiceDescriptionRegistry(ServiceDescriptionRegistry serviceDescriptionRegistry) {
+		this.serviceDescriptionRegistry = serviceDescriptionRegistry;
+	}
+
+	public void setCredentialManager(CredentialManager credentialManager) {
+		this.credentialManager = credentialManager;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/servicedescriptions/AddWSDLServiceDialog.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/servicedescriptions/AddWSDLServiceDialog.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/servicedescriptions/AddWSDLServiceDialog.java
new file mode 100644
index 0000000..b2b31ae
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/servicedescriptions/AddWSDLServiceDialog.java
@@ -0,0 +1,303 @@
+/*******************************************************************************
+ * 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
+ ******************************************************************************/
+package net.sf.taverna.t2.activities.wsdl.servicedescriptions;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLConnection;
+
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.border.EmptyBorder;
+
+import net.sf.taverna.t2.workbench.MainWindow;
+import net.sf.taverna.t2.workbench.helper.HelpEnabledDialog;
+
+import org.apache.log4j.Logger;
+
+/**
+ * Dialog that lets user specify a URL of a WSDL service they want
+ * to add to the Service Panel. In the case the WSDL URL is behind
+ * HTTPS or service's endpoints require HTTPS it will ask user to confirm
+ * if they want to trust it.
+ *
+ * @author Alex Nenadic
+ *
+ */
+@SuppressWarnings("serial")
+public abstract class AddWSDLServiceDialog extends HelpEnabledDialog {
+
+	private JTextField wsdlLocationField;
+	private Logger logger = Logger.getLogger(AddWSDLServiceDialog.class);
+
+	public AddWSDLServiceDialog()  {
+		super(MainWindow.getMainWindow(), "Add WSDL service", true, null); // create a non-modal dialog
+		initComponents();
+		setLocationRelativeTo(getParent());
+	}
+
+	private void initComponents() {
+		JPanel mainPanel = new JPanel(new GridBagLayout());
+		mainPanel.setBorder(new EmptyBorder(10,10,10,10));
+
+		JLabel wsdlLocatitionLabel = new JLabel("WSDL location",WSDLActivityIcon.getWSDLIcon(), JLabel.LEFT);
+		GridBagConstraints gbc = new GridBagConstraints();
+		gbc.weighty = 0.0;
+
+		gbc.weightx = 0.0;
+		gbc.gridx = 0;
+		gbc.gridy = 0;
+		gbc.fill = GridBagConstraints.NONE;
+		gbc.anchor = GridBagConstraints.WEST;
+		gbc.insets = new Insets(5, 10, 0, 0);
+		mainPanel.add(wsdlLocatitionLabel, gbc);
+
+		wsdlLocationField = new JTextField("http://somehost/service?wsdl");
+		gbc.weightx = 1.0;
+		gbc.gridx = 1;
+		gbc.gridy = 0;
+		gbc.fill = GridBagConstraints.HORIZONTAL;
+		gbc.anchor = GridBagConstraints.WEST;
+		gbc.insets = new Insets(5, 10, 0, 5);
+		mainPanel.add(wsdlLocationField, gbc);
+
+	    final JButton addServiceButton = new JButton("Add");
+	    addServiceButton.addActionListener(new ActionListener()
+	        {
+	            public void actionPerformed(ActionEvent evt)
+	            {
+	                addPressed();
+	            }
+	        });
+
+	    // When user presses "Return" key fire the action on the "Add" button
+	    addServiceButton.addKeyListener(new java.awt.event.KeyAdapter() {
+			public void keyPressed(java.awt.event.KeyEvent evt) {
+				if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
+					addPressed();
+				}
+			}
+		});
+		getRootPane().setDefaultButton(addServiceButton);
+
+        JPanel buttonsPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
+        buttonsPanel.add(addServiceButton);
+
+        getContentPane().setLayout(new BorderLayout());
+        getContentPane().add(mainPanel, BorderLayout.CENTER);
+        getContentPane().add(buttonsPanel, BorderLayout.SOUTH);
+
+		setSize(getPreferredSize());
+        pack();
+	}
+
+    /**
+     * 'Add service' button pressed or otherwise activated.
+     */
+    private void addPressed()
+    {
+		final String wsdlURLString = wsdlLocationField.getText().trim();
+		new Thread("Adding WSDL " + wsdlURLString) {
+			public void run() {
+				// Only add the service provider for this service if service URL
+				// starts with 'http'
+				// or if it starts with 'https' and user explicitly said they
+				// wanted to trust this service.
+				/*
+				 * if (shouldTrust(wsdlURLString)){ addRegistry(wsdlURLString);
+				 * }
+				 */
+				try {
+					URL url = new URL(wsdlURLString);
+					URLConnection connection = url.openConnection();
+					try {
+						// If the url starts with 'https' - security hook for
+						// https connection's trust manager
+						// will be engaged and user will be asked automatically
+						// if they want
+						// to trust the connection (if it is not already
+						// trusted). If the urls starts with 'http' -
+						// this will not have any effect apart from checking if
+						// we can open a connection.
+						connection.connect(); // if this does not fail - add the
+						// WSDL
+						// service provider for this service to
+						// the registry
+					} finally {
+						try {
+							connection.getInputStream().close();
+						} catch (IOException ex) {
+						}
+					}
+					addRegistry(wsdlURLString);
+				} catch (Exception ex) { // anything failed
+					JOptionPane.showMessageDialog(null,
+							"Could not read the WSDL definition from "
+									+ wsdlURLString + ":\n" + ex,
+							"Could not add WSDL service",
+							JOptionPane.ERROR_MESSAGE);
+
+					logger.error(
+							"Failed to add WSDL service provider for service: "
+									+ wsdlURLString, ex);
+
+				}
+			};
+		}.start();
+		closeDialog();
+    }
+
+    /**
+     * If WSDL service's URL starts with 'https' - asks user
+     * whether to trust it or not. If it starts with 'http' -
+     * does not ask anything as the service is implicitly trusted (weird but true).
+     */
+	protected abstract void addRegistry(String wsdl);
+
+	/**
+	 * Checks if a service is trusted and if not - asks user if they want to trust it.
+	 */
+//	public boolean shouldTrust(String wsdlURLString){
+//		try {
+//			URI wsdlURI = new URI(wsdlURLString);
+//			URL wsdlURL = wsdlURI.toURL();
+//			String protocol = wsdlURL.getProtocol();
+//			if (protocol.toLowerCase().startsWith("https")){
+//				logger.info("Checking if service " + wsdlURLString + " is already trusted.");
+//				// Check if opening an HTTPS connection will cause a SSLHandshakeException.
+//				// This is most probably due to the fact that we do not have this service's
+//				// certificate in Credential Manager's truststore
+//				try {
+//					HttpsURLConnection httpsConnection;
+//					httpsConnection = (HttpsURLConnection) wsdlURL.openConnection();
+//					httpsConnection.connect();
+//					logger.info("HTTPS works out of the box for service " + wsdlURLString);
+//					return true; // Opening HTTPS connection worked - so we trust this service already
+//				}
+//				catch (SSLException sslex) { // most probably due to the fact that service is not trusted, i.e. its certificate is not in Credential Manager's Truststore
+//					logger.info("Service " + wsdlURLString + " is not trusted out of the box. Trying to fetch its certificate.");
+//					logger.info("The SSLException was caused by: " + sslex.getCause());
+//						// Handshake most probably failed as we do not already trust this service -
+//						// fetch its certificate and ask user if they want to add this service as trusted
+//					try {
+//
+//						// This controls SSL socket creation for HTTPS connections
+//						// per thread so the damage of switching off certificates
+//						// verification is limited
+//						ThreadLocalSSLSocketFactory.install();
+//						// switch certificate checking off for a moment so we can fetch
+//						// service's certificate
+//						ThreadLocalSSLSocketFactory.startTrustingEverything();
+//
+//						HttpsURLConnection httpsConnection;
+//						httpsConnection = (HttpsURLConnection) wsdlURL
+//								.openConnection();
+//						httpsConnection.connect();
+//						// Stop being overly trusting
+//						ThreadLocalSSLSocketFactory.stopTrustingEverything();
+//						Certificate[] certificates = httpsConnection
+//								.getServerCertificates();
+//						logger.info("Need to ask user if they want to trust service " + wsdlURLString);
+//						// Ask user if they want to trust this service
+//						ConfirmTrustedCertificateDialog confirmCertTrustDialog = new ConfirmTrustedCertificateDialog(
+//								this, "Untrusted HTTPS connection", true,
+//								(X509Certificate) certificates[0]);
+//						confirmCertTrustDialog.setLocationRelativeTo(null);
+//						confirmCertTrustDialog.setVisible(true);
+//						boolean shouldTrust = confirmCertTrustDialog
+//								.shouldTrust();
+//						if (shouldTrust) {
+//							try {
+//								CredentialManager credManager = CredentialManager
+//										.getInstance();
+//								credManager
+//										.saveTrustedCertificate((X509Certificate) certificates[0]);
+//								return true;
+//							} catch (CMException cme) {
+//								logger
+//										.error(
+//												"Failed to add WSDL service provider for service: "
+//														+ wsdlURLString
+//														+ " . Credential Manager failed to "
+//														+ "save trusted certificate.",
+//												cme);
+//								return false;
+//							}
+//						} else {
+//							// Do not even add a WSDL service provider for this
+//							// service and tell user the service will not be
+//							// added to Service Panel
+//							JOptionPane
+//									.showMessageDialog(
+//											this,
+//											"As you refused to trust it, the service will not be added to Service Panel.",
+//											"Add WSDL service",
+//											JOptionPane.INFORMATION_MESSAGE);
+//							return false;
+//						}
+//					} catch (Exception e1) {
+//						logger
+//								.error(
+//										"Failed to add WSDL service provider for service: "
+//												+ wsdlURLString
+//												+ ". 'Trust everyone' HTTPS connection failed.",
+//										e1);
+//						return false;
+//					} finally {// switch it off here as well if some unexpected exception occurred
+//						ThreadLocalSSLSocketFactory.stopTrustingEverything();
+//					}
+//
+//				} catch (Exception e2) {
+//					logger.error("Failed to add WSDL service provider for service: "+ wsdlURLString+". Connecting to service failed.", e2);
+//					return false;
+//				}
+//			}
+//			else{ // protocol starts with 'http'
+//				return true;
+//			}
+//		} catch (MalformedURLException e3) {
+//			logger.error("Failed to add WSDL service provider: URL "+ wsdlURLString+" was malformed.", e3);
+//			return false;
+//		} catch (URISyntaxException e4) {
+//			logger.error("Failed to add WSDL service provider: URI "+ wsdlURLString+" could not be parsed.", e4);
+//			return false;
+//		}
+//	}
+
+	/**
+	 * Closes the dialog.
+	 */
+	private void closeDialog() {
+		setVisible(false);
+		dispose();
+	}
+}