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/17 21:40:06 UTC

[15/51] [partial] incubator-taverna-language git commit: temporarily empty repository

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2FlowParser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2FlowParser.java b/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2FlowParser.java
deleted file mode 100644
index f103281..0000000
--- a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2FlowParser.java
+++ /dev/null
@@ -1,1214 +0,0 @@
-package org.apache.taverna.scufl2.translator.t2flow;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-
-import static java.util.Locale.ENGLISH;
-import static java.util.TimeZone.getTimeZone;
-import static java.util.UUID.randomUUID;
-import static java.util.logging.Level.SEVERE;
-import static java.util.logging.Level.WARNING;
-import static javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI;
-import static org.apache.taverna.scufl2.api.container.WorkflowBundle.WORKFLOW_BUNDLE_ROOT;
-import static org.apache.taverna.scufl2.api.core.Workflow.WORKFLOW_ROOT;
-import static org.apache.taverna.scufl2.xml.t2flow.jaxb.LinkType.DATAFLOW;
-import static org.apache.taverna.scufl2.xml.t2flow.jaxb.LinkType.MERGE;
-import static org.apache.taverna.scufl2.xml.t2flow.jaxb.LinkType.PROCESSOR;
-import static org.apache.taverna.scufl2.xml.t2flow.jaxb.Role.TOP;
-
-import java.io.CharArrayWriter;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.ServiceLoader;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.TreeMap;
-import java.util.UUID;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.logging.Logger;
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
-
-import org.w3c.dom.Element;
-import org.xml.sax.SAXException;
-
-import org.apache.taverna.scufl2.api.annotation.Annotation;
-import org.apache.taverna.scufl2.api.annotation.Revision;
-import org.apache.taverna.scufl2.api.common.Named;
-import org.apache.taverna.scufl2.api.common.NamedSet;
-import org.apache.taverna.scufl2.api.common.Scufl2Tools;
-import org.apache.taverna.scufl2.api.common.URITools;
-import org.apache.taverna.scufl2.api.common.WorkflowBean;
-import org.apache.taverna.scufl2.api.configurations.Configuration;
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.core.BlockingControlLink;
-import org.apache.taverna.scufl2.api.core.ControlLink;
-import org.apache.taverna.scufl2.api.core.DataLink;
-import org.apache.taverna.scufl2.api.core.Processor;
-import org.apache.taverna.scufl2.api.core.Workflow;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.api.iterationstrategy.IterationStrategyNode;
-import org.apache.taverna.scufl2.api.iterationstrategy.IterationStrategyStack;
-import org.apache.taverna.scufl2.api.iterationstrategy.IterationStrategyTopNode;
-import org.apache.taverna.scufl2.api.iterationstrategy.PortNode;
-import org.apache.taverna.scufl2.api.port.InputActivityPort;
-import org.apache.taverna.scufl2.api.port.InputProcessorPort;
-import org.apache.taverna.scufl2.api.port.InputWorkflowPort;
-import org.apache.taverna.scufl2.api.port.OutputActivityPort;
-import org.apache.taverna.scufl2.api.port.OutputProcessorPort;
-import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
-import org.apache.taverna.scufl2.api.port.ReceiverPort;
-import org.apache.taverna.scufl2.api.port.SenderPort;
-import org.apache.taverna.scufl2.api.profiles.ProcessorBinding;
-import org.apache.taverna.scufl2.api.profiles.ProcessorInputPortBinding;
-import org.apache.taverna.scufl2.api.profiles.ProcessorOutputPortBinding;
-import org.apache.taverna.scufl2.api.profiles.Profile;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.Activity;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.AnnotatedGranularDepthPort;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.AnnotatedGranularDepthPorts;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.AnnotatedPort;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.AnnotatedPorts;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.AnnotationAssertionImpl.NetSfTavernaT2AnnotationAnnotationAssertionImpl;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.AnnotationChain;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.Annotations;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.Condition;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.Conditions;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ConfigBean;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.CrossProduct;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.Dataflow;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.Datalinks;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.DepthPort;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.DepthPorts;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.DispatchLayer;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.DispatchStack;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.DotProduct;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.GranularDepthPort;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.GranularDepthPorts;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.IterationNode;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.IterationNodeParent;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.Link;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.Mapping;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ObjectFactory;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.PortProduct;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.Processors;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.Raven;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.TopIterationNode;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-public class T2FlowParser {
-	private static final URI INTERNAL_DISPATCH_PREFIX = URI.create("http://ns.taverna.org.uk/2010/scufl2/taverna/dispatchlayer/");
-    private static final String TEXT_TURTLE = "text/turtle";
-	private static final String SEMANTIC_ANNOTATION = "net.sf.taverna.t2.annotation.annotationbeans.SemanticAnnotation";
-	private static final String IDENTIFICATION_ASSERTION = "net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion";
-	private static final String T2FLOW_EXTENDED_XSD = "xsd/t2flow-extended.xsd";
-	@SuppressWarnings("unused")
-	private static final String T2FLOW_XSD = "xsd/t2flow.xsd";
-	private static final Logger logger = Logger.getLogger(T2FlowParser.class
-			.getCanonicalName());
-	public static final URI ravenURI = URI
-			.create("http://ns.taverna.org.uk/2010/xml/t2flow/raven/");
-	public static final URI configBeanURI = URI
-			.create("http://ns.taverna.org.uk/2010/xml/t2flow/configbean/");
-	public static final URI t2flowParserURI = URI
-			.create("http://ns.taverna.org.uk/2012/scufl2/t2flowParser");
-	// TODO: Find better example predicate
-	public static final URI exampleDataURI = URI
-			.create("http://biocatalogue.org/attribute/exampleData");
-	public static final String DEFAULT_PRODUCED_BY = "unspecified";
-
-	public static <T extends Named> T findNamed(Collection<T> namedObjects,
-			String name) {
-		for (T named : namedObjects)
-			if (named.getName().equals(name))
-				return named;
-		return null;
-	}
-
-	protected ThreadLocal<ParserState> parserState = new ThreadLocalParserState();
-
-	/**
-	 * A static class for the thread-local parser state.
-	 */
-	private static class ThreadLocalParserState extends ThreadLocal<ParserState> {
-		@Override
-		protected ParserState initialValue() {
-			return new ParserState();
-		};
-	}
-
-	private static Scufl2Tools scufl2Tools = new Scufl2Tools();
-	private static URITools uriTools = new URITools();
-    private static TransformerFactory transformerFactory;
-
-	protected Set<T2Parser> t2Parsers = null;
-	protected final JAXBContext jaxbContext;
-	private boolean strict = false;
-	private boolean validating = false;
-
-	public final boolean isValidating() {
-		return validating;
-	}
-
-	public final void setValidating(boolean validating) {
-		this.validating = validating;
-	}
-
-	protected ServiceLoader<T2Parser> discoveredT2Parsers;
-	protected final ThreadLocal<Unmarshaller> unmarshaller;
-	private Map<String, URI> predicates;
-
-	public T2FlowParser() throws JAXBException {
-		jaxbContext = JAXBContext.newInstance(ObjectFactory.class);
-		unmarshaller = new ThreadLocalUnmarshaller(jaxbContext);
-	}
-
-	/**
-	 * A static class for the thread-local unmarshaller.
-	 */
-	private static class ThreadLocalUnmarshaller extends
-			ThreadLocal<Unmarshaller> {
-		private final JAXBContext jaxbContext;
-
-		ThreadLocalUnmarshaller(JAXBContext jaxbContext) {
-			this.jaxbContext = jaxbContext;
-		}
-
-		@Override
-		protected Unmarshaller initialValue() {
-			try {
-				return jaxbContext.createUnmarshaller();
-			} catch (JAXBException e) {
-				logger.log(SEVERE, "Could not create unmarshaller", e);
-				return null;
-			}
-		};
-	}
-
-	protected ReceiverPort findReceiverPort(Workflow wf, Link sink)
-			throws ReaderException {
-		String portName = sink.getPort();
-		if (portName == null)
-			throw new ReaderException("Port name not specified");
-		String processorName = sink.getProcessor();
-		if (processorName == null) {
-			if (sink.getType().equals(PROCESSOR))
-				throw new ReaderException(
-						"Link type was processor, but no processor name found");
-			OutputWorkflowPort candidate = wf.getOutputPorts().getByName(
-					portName);
-			if (candidate == null)
-				throw new ReaderException("Link to unknown workflow port "
-						+ portName);
-			return candidate;
-		} else {
-			if (sink.getType().equals(DATAFLOW))
-				throw new ReaderException(
-						"Link type was dataflow, but processor name was found");
-			Processor processor = wf.getProcessors().getByName(processorName);
-			if (processor == null)
-				throw new ReaderException("Link to unknown processor "
-						+ processorName);
-			InputProcessorPort candidate = processor.getInputPorts().getByName(
-					portName);
-			if (candidate == null)
-				throw new ReaderException("Link to unknown port " + portName
-						+ " in " + processorName);
-			return candidate;
-		}
-	}
-
-	protected SenderPort findSenderPort(Workflow wf, Link source)
-			throws ReaderException {
-		if (source.getType().equals(MERGE))
-			throw new ReaderException(
-					"Link type Merge unexpected for sender ports");
-		String portName = source.getPort();
-		if (portName == null)
-			throw new ReaderException("Port name not specified");
-		String processorName = source.getProcessor();
-		if (processorName == null) {
-			if (source.getType().equals(PROCESSOR))
-				throw new ReaderException(
-						"Link type was processor, but no processor name found");
-			InputWorkflowPort candidate = wf.getInputPorts()
-					.getByName(portName);
-			if (candidate == null)
-				throw new ReaderException("Link from unknown workflow port "
-						+ portName);
-			return candidate;
-		} else {
-			if (source.getType().equals(DATAFLOW))
-				throw new ReaderException(
-						"Link type was dataflow, but processor name was found");
-			Processor processor = wf.getProcessors().getByName(processorName);
-			if (processor == null)
-				throw new ReaderException("Link from unknown processor "
-						+ processorName);
-			OutputProcessorPort candidate = processor.getOutputPorts()
-					.getByName(portName);
-			if (candidate == null)
-				throw new ReaderException("Link from unknown port " + portName
-						+ " in " + processorName);
-			return candidate;
-		}
-	}
-
-	protected T2Parser getT2Parser(URI classURI) {
-		for (T2Parser t2Parser : getT2Parsers())
-			if (t2Parser.canHandlePlugin(classURI))
-				return t2Parser;
-		return null;
-	}
-
-	public synchronized Set<T2Parser> getT2Parsers() {
-		Set<T2Parser> parsers = t2Parsers;
-		if (parsers != null)
-			return parsers;
-		parsers = new HashSet<>();
-		/*
-		 * TODO: Do we need to cache this, or is the cache in ServiceLoader fast
-		 * enough?
-		 */
-		if (discoveredT2Parsers == null)
-			discoveredT2Parsers = ServiceLoader.load(T2Parser.class);
-		for (T2Parser parser : discoveredT2Parsers)
-			parsers.add(parser);
-		return parsers;
-	}
-
-	public synchronized void setT2Parsers(Set<T2Parser> parsers) {
-		this.t2Parsers = parsers;
-	}
-
-	public boolean isStrict() {
-		return strict;
-	}
-
-	protected void makeProfile(org.apache.taverna.scufl2.xml.t2flow.jaxb.Workflow wf) {
-		// TODO: What should the default be? Should there be one? Who knows
-		Profile profile = new Profile(
-				wf.getProducedBy() == null ? DEFAULT_PRODUCED_BY
-						: wf.getProducedBy());
-		profile.setParent(parserState.get().getCurrentWorkflowBundle());
-		parserState.get().getCurrentWorkflowBundle().setMainProfile(profile);
-		parserState.get().setCurrentProfile(profile);
-	}
-
-	private URI makeRavenURI(Raven raven, String className) {
-		if (raven == null)
-			return ravenURI.resolve("undefined/" + uriTools.validFilename(className));
-
-		return ravenURI.resolve(uriTools.validFilename(raven.getGroup()) + "/"
-				+ uriTools.validFilename(raven.getArtifact()) + "/"
-				+ uriTools.validFilename(raven.getVersion()) + "/"
-				+ uriTools.validFilename(className));
-	}
-
-	private URI mapTypeFromRaven(Raven raven, String activityClass)
-			throws ReaderException {
-		URI classURI = makeRavenURI(raven, activityClass);
-		parserState.get().setCurrentT2Parser(null);
-		T2Parser t2Parser = getT2Parser(classURI);
-		if (t2Parser == null) {
-			String message = "Unknown T2 activity or dispatch layer "
-					+ classURI + ", install supporting T2Parser";
-			if (isStrict())
-				throw new ReaderException(message);
-			logger.warning(message);
-			return classURI;
-		}
-		parserState.get().setCurrentT2Parser(t2Parser);
-		return t2Parser.mapT2flowRavenIdToScufl2URI(classURI);
-	}
-
-	protected org.apache.taverna.scufl2.api.activity.Activity parseActivityAndAddToProfile(
-			Activity origActivity) throws ReaderException {
-		org.apache.taverna.scufl2.api.activity.Activity newActivity = parseActivity(origActivity);
-		newActivity.setName(parserState.get().getCurrentProcessorBinding()
-				.getName());
-		parserState.get().getCurrentProfile().getActivities()
-				.addWithUniqueName(newActivity);
-		newActivity.setParent(parserState.get().getCurrentProfile());
-		return newActivity;
-	}
-
-	protected org.apache.taverna.scufl2.api.activity.Activity parseActivity(
-			Activity origActivity) throws ReaderException {
-		Raven raven = origActivity.getRaven();
-		String activityClass = origActivity.getClazz();
-		URI activityId = mapTypeFromRaven(raven, activityClass);
-		org.apache.taverna.scufl2.api.activity.Activity newActivity = new org.apache.taverna.scufl2.api.activity.Activity();
-		newActivity.setType(activityId);
-		return newActivity;
-	}
-
-	protected void parseActivityBinding(Activity origActivity,
-			int activityPosition) throws ReaderException, JAXBException {
-		ProcessorBinding processorBinding = new ProcessorBinding();
-
-		processorBinding.setName(parserState.get().getCurrentProcessor()
-				.getName());
-		parserState.get().getCurrentProfile().getProcessorBindings()
-				.addWithUniqueName(processorBinding);
-
-		processorBinding.setBoundProcessor(parserState.get()
-				.getCurrentProcessor());
-		parserState.get().setCurrentProcessorBinding(processorBinding);
-		org.apache.taverna.scufl2.api.activity.Activity newActivity = parseActivityAndAddToProfile(origActivity);
-		parserState.get().setCurrentActivity(newActivity);
-
-		parserState.get().getCurrentProfile().getActivities().add(newActivity);
-		processorBinding.setBoundActivity(newActivity);
-		processorBinding.setActivityPosition(activityPosition);
-
-		parserState.get().setCurrentConfigurable(newActivity);
-
-		try {
-			parseConfigurationAndAddToProfile(origActivity.getConfigBean());
-		} catch (JAXBException e) {
-			if (isStrict())
-				throw e;
-			logger.log(WARNING, "Can't configure activity" + newActivity, e);
-		}
-
-		parseActivityInputMap(origActivity.getInputMap());
-		parseActivityOutputMap(origActivity.getOutputMap());
-
-		parserState.get().setCurrentConfigurable(null);
-		parserState.get().setCurrentActivity(null);
-		parserState.get().setCurrentProcessorBinding(null);
-	}
-
-	protected Configuration parseConfigurationAndAddToProfile(ConfigBean configBean) throws JAXBException, ReaderException {
-		Configuration configuration = parseConfiguration(configBean);
-		if (configuration == null)
-			return null;
-		Profile profile = parserState.get().getCurrentProfile();
-		configuration.setName(parserState.get().getCurrentActivity()
-				.getName());
-        profile.getConfigurations().addWithUniqueName(configuration);
-        configuration.setConfigures(parserState.get().getCurrentConfigurable());
-        return configuration;
-	}
-	
-	protected Configuration parseConfiguration(ConfigBean configBean)
-			throws JAXBException, ReaderException {
-		// Placeholder to check later if no configuration have been provided
-		Configuration UNCONFIGURED = new Configuration();
-		
-		Configuration configuration = UNCONFIGURED;
-		if (parserState.get().getCurrentT2Parser() == null) {
-			String message = "No config parser for " 
-					+ parserState.get().getCurrentConfigurable();
-			if (isStrict())
-				throw new ReaderException(message);
-			return null;
-		}
-
-		try {
-			configuration = parserState.get().getCurrentT2Parser()
-					.parseConfiguration(this, configBean, parserState.get());
-		} catch (ReaderException e) {
-			if (isStrict())
-				throw e;
-		}
-		if (configuration == null)
-			// Perfectly valid - true for say Invoke layer
-			return null;
-		
-		if (configuration == UNCONFIGURED) {
-			if (isStrict())
-				throw new ReaderException("No configuration returned from "
-						+ parserState.get().getCurrentT2Parser() + " for "						
-						+ parserState.get().getCurrentConfigurable());
-			// We'll have to fall back by just keeping the existing XML
-			
-			configuration = new Configuration();
-			configuration.setType(configBeanURI.resolve("Config"));
-			String xml = elementToXML((Element) configBean.getAny());
-			String encoding = configBean.getEncoding();
-			ObjectNode json = (ObjectNode)configuration.getJson();
-			json.put(encoding, xml);
-		}
-		return configuration;
-	}
-
-	public static String elementToXML(Element element) {
-		try {
-			Transformer transformer = getTransformer();
-			CharArrayWriter writer = new CharArrayWriter();
-			transformer.transform(new DOMSource(element), new StreamResult(
-					writer));
-			return writer.toString();
-		} catch (TransformerException e) {
-			throw new IllegalStateException("Can't write XML", e);
-		}
-	}
-
-	public static Transformer getTransformer()
-			throws TransformerConfigurationException {
-		if (transformerFactory == null)
-			transformerFactory = TransformerFactory.newInstance();
-		return transformerFactory.newTransformer();
-	}
-
-	public Unmarshaller getUnmarshaller() {
-		Unmarshaller u = unmarshaller.get();
-		if (!isValidating() && u.getSchema() != null) {
-			u.setSchema(null);
-		} else if (isValidating() && u.getSchema() == null) {
-			// Load and set schema to validate against
-			Schema schema;
-			try {
-				SchemaFactory schemaFactory = SchemaFactory
-						.newInstance(W3C_XML_SCHEMA_NS_URI);
-				List<URI> schemas = getAdditionalSchemas();
-				URL t2flowExtendedXSD = T2FlowParser.class
-						.getResource(T2FLOW_EXTENDED_XSD);
-				schemas.add(t2flowExtendedXSD.toURI());
-
-				List<Source> schemaSources = new ArrayList<>();
-				for (URI schemaUri : schemas)
-					schemaSources.add(new StreamSource(schemaUri
-							.toASCIIString()));
-				Source[] sources = schemaSources
-						.toArray(new Source[schemaSources.size()]);
-				schema = schemaFactory.newSchema(sources);
-			} catch (SAXException e) {
-				throw new RuntimeException("Can't load schemas", e);
-			} catch (URISyntaxException | NullPointerException e) {
-				throw new RuntimeException("Can't find schemas", e);
-			}
-			u.setSchema(schema);
-		}
-		return u;
-	}
-
-	protected List<URI> getAdditionalSchemas() {
-		List<URI> uris = new ArrayList<>();
-		for (T2Parser parser : getT2Parsers()) {
-			List<URI> schemas = parser.getAdditionalSchemas();
-			if (schemas != null)
-				uris.addAll(schemas);
-		}
-		return uris;
-	}
-
-	protected void parseActivityInputMap(
-			org.apache.taverna.scufl2.xml.t2flow.jaxb.Map inputMap)
-			throws ReaderException {
-		for (Mapping mapping : inputMap.getMap()) {
-			String fromProcessorOutput = mapping.getFrom();
-			String toActivityOutput = mapping.getTo();
-			ProcessorInputPortBinding processorInputPortBinding = new ProcessorInputPortBinding();
-
-			InputProcessorPort inputProcessorPort = findNamed(parserState.get()
-					.getCurrentProcessor().getInputPorts(), fromProcessorOutput);
-			if (inputProcessorPort == null) {
-				String message = "Invalid input port binding, "
-						+ "unknown processor port: " + fromProcessorOutput
-						+ "->" + toActivityOutput + " in "
-						+ parserState.get().getCurrentProcessor();
-				if (isStrict())
-					throw new ReaderException(message);
-				logger.warning(message);
-				continue;
-			}
-
-			InputActivityPort inputActivityPort = parserState.get()
-					.getCurrentActivity().getInputPorts()
-					.getByName(toActivityOutput);
-			if (inputActivityPort == null) {
-				inputActivityPort = new InputActivityPort();
-				inputActivityPort.setName(toActivityOutput);
-				inputActivityPort.setParent(parserState.get()
-						.getCurrentActivity());
-				parserState.get().getCurrentActivity().getInputPorts()
-						.add(inputActivityPort);
-			}
-
-			if (inputActivityPort.getDepth() == null)
-				inputActivityPort.setDepth(inputProcessorPort.getDepth());
-
-			processorInputPortBinding.setBoundActivityPort(inputActivityPort);
-			processorInputPortBinding.setBoundProcessorPort(inputProcessorPort);
-			parserState.get().getCurrentProcessorBinding()
-					.getInputPortBindings().add(processorInputPortBinding);
-		}
-	}
-
-	protected void parseActivityOutputMap(
-			org.apache.taverna.scufl2.xml.t2flow.jaxb.Map outputMap)
-			throws ReaderException {
-		for (Mapping mapping : outputMap.getMap()) {
-			String fromActivityOutput = mapping.getFrom();
-			String toProcessorOutput = mapping.getTo();
-			ProcessorOutputPortBinding processorOutputPortBinding = new ProcessorOutputPortBinding();
-
-			OutputProcessorPort outputProcessorPort = findNamed(parserState
-					.get().getCurrentProcessor().getOutputPorts(),
-					toProcessorOutput);
-			if (outputProcessorPort == null) {
-				String message = "Invalid output port binding, "
-						+ "unknown processor port: " + fromActivityOutput
-						+ "->" + toProcessorOutput + " in "
-						+ parserState.get().getCurrentProcessor();
-				if (isStrict())
-					throw new ReaderException(message);
-				logger.warning(message);
-				continue;
-			}
-
-			OutputActivityPort outputActivityPort = parserState.get()
-					.getCurrentActivity().getOutputPorts()
-					.getByName(fromActivityOutput);
-			if (outputActivityPort == null) {
-				outputActivityPort = new OutputActivityPort();
-				outputActivityPort.setName(fromActivityOutput);
-				outputActivityPort.setParent(parserState.get()
-						.getCurrentActivity());
-				parserState.get().getCurrentActivity().getOutputPorts()
-						.add(outputActivityPort);
-			}
-
-			if (outputActivityPort.getDepth() == null)
-				outputActivityPort.setDepth(outputProcessorPort.getDepth());
-			if (outputActivityPort.getGranularDepth() == null)
-				outputActivityPort.setGranularDepth(outputProcessorPort
-						.getGranularDepth());
-
-			processorOutputPortBinding.setBoundActivityPort(outputActivityPort);
-			processorOutputPortBinding
-					.setBoundProcessorPort(outputProcessorPort);
-			parserState.get().getCurrentProcessorBinding()
-					.getOutputPortBindings().add(processorOutputPortBinding);
-		}
-	}
-
-	protected Workflow parseDataflow(Dataflow df, Workflow wf)
-			throws ReaderException, JAXBException {
-		parserState.get().setCurrentWorkflow(wf);
-		wf.setInputPorts(parseInputPorts(df.getInputPorts()));
-		wf.setOutputPorts(parseOutputPorts(df.getOutputPorts()));
-		wf.setProcessors(parseProcessors(df.getProcessors()));
-		wf.setDataLinks(parseDatalinks(df.getDatalinks()));
-		wf.setControlLinks(parseControlLinks(df.getConditions()));		
-		Revision revision = parseIdentificationAnnotations(df.getAnnotations());
-		if (revision != null)
-			wf.setCurrentRevision(revision);
-		parseAnnotations(wf, df.getAnnotations());
-
-		parserState.get().setCurrentWorkflow(null);
-		return wf;
-	}
-
-	public void parseAnnotations(WorkflowBean annotatedBean,
-			Annotations annotations) throws ReaderException {
-		// logger.fine("Checking annotations for " + annotatedSubject);
-
-		Map<String, NetSfTavernaT2AnnotationAnnotationAssertionImpl> annotationElems = new HashMap<>();
-		if (annotations == null
-				|| annotations.getAnnotationChainOrAnnotationChain22() == null)
-			return;
-		for (JAXBElement<AnnotationChain> el : annotations
-				.getAnnotationChainOrAnnotationChain22()) {
-			NetSfTavernaT2AnnotationAnnotationAssertionImpl ann = el.getValue()
-					.getNetSfTavernaT2AnnotationAnnotationChainImpl()
-					.getAnnotationAssertions()
-					.getNetSfTavernaT2AnnotationAnnotationAssertionImpl();
-			String annClass = ann.getAnnotationBean().getClazz();
-			if (annotationElems.containsKey(annClass)
-					&& annotationElems.get(annClass).getDate()
-							.compareToIgnoreCase(ann.getDate()) > 0)
-				// ann.getDate() is less than current 'latest' annotation, skip
-				continue;
-			annotationElems.put(annClass, ann);
-		}
-
-		for (String clazz : annotationElems.keySet()) {
-			NetSfTavernaT2AnnotationAnnotationAssertionImpl ann = annotationElems.get(clazz);
-			Calendar cal = parseDate(ann.getDate());					
-			String value = null;	
-			String semanticMediaType = TEXT_TURTLE;
-			for (Object obj : ann.getAnnotationBean().getAny()) {
-				if (!(obj instanceof Element))
-					continue;
-				Element elem = (Element) obj;
-				if (!(elem.getNamespaceURI() == null))
-					continue;
-				if (elem.getLocalName().equals("text")) {
-					value = elem.getTextContent().trim();
-					break;
-				}
-				if (clazz.equals(SEMANTIC_ANNOTATION)) {
-					if (elem.getLocalName().equals("content"))
-						value = elem.getTextContent().trim();
-					if (elem.getLocalName().equals("mimeType"))
-						semanticMediaType = elem.getTextContent().trim();
-				}
-			}
-			if (value != null) {
-				// Add the annotation
-				Annotation annotation = new Annotation();
-				WorkflowBundle workflowBundle = parserState.get()
-						.getCurrentWorkflowBundle();
-				annotation.setParent(workflowBundle);
-
-				String path = "annotation/" + annotation.getName() + ".ttl";
-				URI bodyURI = URI.create(path);
-
-				annotation.setTarget(annotatedBean);
-				annotation.setAnnotatedAt(cal);
-				// annotation.setAnnotator();
-				annotation.setSerializedBy(t2flowParserURI);
-				annotation.setSerializedAt(new GregorianCalendar());
-				URI annotatedSubject = uriTools.relativeUriForBean(
-						annotatedBean, annotation);
-				String body;
-				if (clazz.equals(SEMANTIC_ANNOTATION)) {
-					String baseStr = "@base <"
-							+ annotatedSubject.toASCIIString() + "> .\n";
-					body = baseStr + value;
-				} else {
-					// Generate Turtle from 'classic' annotation
-					URI predicate = getPredicatesForClass().get(clazz);
-					if (predicate == null) {
-						if (isStrict())
-							throw new ReaderException(
-									"Unsupported annotation class " + clazz);
-						return;
-					}
-
-					StringBuilder turtle = new StringBuilder();
-					turtle.append("<");
-					turtle.append(annotatedSubject.toASCIIString());
-					turtle.append("> ");
-
-					turtle.append("<");
-					turtle.append(predicate.toASCIIString());
-					turtle.append("> ");
-
-					// A potentially multi-line string
-					turtle.append("\"\"\"");
-					// Escape existing \ to \\
-					String escaped = value.replace("\\", "\\\\");
-					// Escape existing " to \" (beware Java's escaping of \ and " below)
-					escaped = escaped.replace("\"", "\\\"");
-					turtle.append(escaped);
-					turtle.append("\"\"\"");
-					turtle.append(" .");
-					body = turtle.toString();
-				}
-                try {
-                    workflowBundle.getResources().addResource(body, path, semanticMediaType);
-                } catch (IOException e) {
-                    throw new ReaderException("Could not store annotation body to " + path, e);
-                }
-                annotation.setBody(bodyURI);
-			}
-		}
-	}
-
-	private Map<String, URI> getPredicatesForClass() {
-		if (this.predicates != null)
-			return this.predicates;
-		synchronized (this) {
-			if (this.predicates != null)
-				return this.predicates;
-			Map<String, URI> predicates = new HashMap<>();
-			predicates.put("net.sf.taverna.t2.annotation.annotationbeans.DescriptiveTitle", 
-					URI.create("http://purl.org/dc/terms/title"));
-			
-			predicates.put("net.sf.taverna.t2.annotation.annotationbeans.Author", 
-					URI.create("http://purl.org/dc/elements/1.1/creator"));
-			
-			predicates.put("net.sf.taverna.t2.annotation.annotationbeans.FreeTextDescription", 
-					URI.create("http://purl.org/dc/terms/description"));
-			
-			predicates.put("net.sf.taverna.t2.annotation.annotationbeans.MimeType", 
-					URI.create("http://purl.org/dc/elements/1.1/format"));
-			
-			predicates.put("net.sf.taverna.t2.annotation.annotationbeans.ExampleValue", 
-					exampleDataURI);
-			this.predicates = predicates;
-			return this.predicates;
-		}
-	}
-
-	protected Revision parseIdentificationAnnotations(Annotations annotations) {
-		SortedMap<Calendar, UUID> revisions = new TreeMap<>();
-		if (annotations == null || annotations.getAnnotationChainOrAnnotationChain22() == null)
-			return null;
-		for (JAXBElement<AnnotationChain> el : annotations
-				.getAnnotationChainOrAnnotationChain22()) {
-			NetSfTavernaT2AnnotationAnnotationAssertionImpl ann = el.getValue()
-					.getNetSfTavernaT2AnnotationAnnotationChainImpl()
-					.getAnnotationAssertions()
-					.getNetSfTavernaT2AnnotationAnnotationAssertionImpl();
-			String annClass = ann.getAnnotationBean().getClazz();
-			if (!annClass.equals(IDENTIFICATION_ASSERTION))
-				continue;
-			for (Object obj : ann.getAnnotationBean().getAny()) {
-				if (!(obj instanceof Element))
-					continue;
-				Element elem = (Element) obj;
-				if (elem.getNamespaceURI() == null
-						&& elem.getLocalName().equals("identification")) {
-					String uuid = elem.getTextContent().trim();
-					String date = ann.getDate();
-					Calendar cal = parseDate(date);
-					revisions.put(cal, UUID.fromString(uuid));
-				}
-			}
-		}
-		
-		Revision rev = null;
-		for (Entry<Calendar, UUID> entry : revisions.entrySet()) {			
-			Calendar cal = entry.getKey();
-			UUID uuid = entry.getValue();
-			URI uri = WORKFLOW_ROOT.resolve(uuid.toString() + "/");
-			rev = new Revision(uri, rev);
-			rev.setGeneratedAtTime(cal);		
-		}
-		return rev;
-	}
-
-	private Calendar parseDate(String dateStr) {
-		// Based briefly on patterns used by 
-		// com.thoughtworks.xstream.converters.basic.DateConverter
-		
-		List<String> patterns = new ArrayList<>();
-		patterns.add("yyyy-MM-dd HH:mm:ss.S z");
-		patterns.add("yyyy-MM-dd HH:mm:ss z");
-		patterns.add("yyyy-MM-dd HH:mm:ssz");
-		patterns.add("yyyy-MM-dd HH:mm:ss.S 'UTC'");
-		patterns.add("yyyy-MM-dd HH:mm:ss 'UTC'");
-        Date date;
-		for (String pattern : patterns)
-        	try {        		
-        		SimpleDateFormat dateFormat = new SimpleDateFormat(pattern, ENGLISH);
-				date = dateFormat.parse(dateStr);
-				GregorianCalendar cal = new GregorianCalendar(getTimeZone("UTC"), ENGLISH);
-				cal.setTime(date);
-				return cal;
-			} catch (ParseException e) {
-				continue;
-			}
-        throw new IllegalArgumentException("Can't parse date: " + dateStr);		
-	}
-
-	private Set<ControlLink> parseControlLinks(Conditions conditions)
-			throws ReaderException {
-		Set<ControlLink> links = new HashSet<>();
-		for (Condition condition : conditions.getCondition()) {
-			NamedSet<Processor> processors = parserState.get()
-					.getCurrentWorkflow().getProcessors();
-			String target = condition.getTarget();
-			Processor block = processors.getByName(target);
-			if (block == null && isStrict())
-				throw new ReaderException(
-						"Unrecognized blocking processor in control link: "
-								+ target);
-			String control = condition.getControl();
-			Processor untilFinished = processors.getByName(control);
-			if (untilFinished == null && isStrict())
-				throw new ReaderException(
-						"Unrecognized untilFinished processor in control link: "
-								+ control);
-
-			BlockingControlLink newLink = new BlockingControlLink(block, untilFinished);
-
-			// FIXME: missing from t2flow and schema
-			//parseAnnotations(newLink, condition.getAnnotations());
-
-			links.add(newLink);
-		}
-		return links;
-	}
-
-	protected Set<DataLink> parseDatalinks(Datalinks origLinks)
-			throws ReaderException {
-		HashSet<DataLink> newLinks = new HashSet<>();
-		Map<ReceiverPort, AtomicInteger> mergeCounts = new HashMap<>();
-		for (org.apache.taverna.scufl2.xml.t2flow.jaxb.DataLink origLink : origLinks
-				.getDatalink()) {
-			try {
-				SenderPort senderPort = findSenderPort(parserState.get()
-						.getCurrentWorkflow(), origLink.getSource());
-				ReceiverPort receiverPort = findReceiverPort(parserState.get()
-						.getCurrentWorkflow(), origLink.getSink());
-
-				DataLink newLink = new DataLink(parserState.get()
-						.getCurrentWorkflow(), senderPort, receiverPort);
-
-				AtomicInteger mergeCount = mergeCounts.get(receiverPort);
-				if (origLink.getSink().getType().equals(MERGE)) {
-					if (mergeCount != null && mergeCount.intValue() < 1)
-						throw new ReaderException(
-								"Merged and non-merged links to port "
-										+ receiverPort);
-					if (mergeCount == null) {
-						mergeCount = new AtomicInteger(0);
-						mergeCounts.put(receiverPort, mergeCount);
-					}
-					newLink.setMergePosition(mergeCount.getAndIncrement());
-				} else {
-					if (mergeCount != null)
-						throw new ReaderException(
-								"More than one link to non-merged port "
-										+ receiverPort);
-					mergeCounts.put(receiverPort, new AtomicInteger(-1));
-				}
-
-				// FIXME: missing from t2flow and schema
-				//parseAnnotations(newLink, origLink.getAnnotations());
-
-				newLinks.add(newLink);
-			} catch (ReaderException ex) {
-				logger.log(WARNING, "Could not translate link:\n" + origLink,
-						ex);
-				if (isStrict())
-					throw ex;
-				continue;
-			}
-		}
-		return newLinks;
-	}
-
-	protected void parseDispatchStack(DispatchStack dispatchStack)
-			throws ReaderException {
-		Processor processor = parserState.get().getCurrentProcessor();
-		Configuration procConfig = scufl2Tools.createConfigurationFor(
-				processor, parserState.get().getCurrentProfile());
-		parserState.get().setCurrentConfigurable(processor);
-		parserState.get().setCurrentConfiguration(procConfig);
-		parserState.get().setPreviousDispatchLayerName(null);
-		try {
-			for (DispatchLayer dispatchLayer : dispatchStack.getDispatchLayer())
-				parseDispatchStack(dispatchLayer);
-		} finally {
-			parserState.get().setCurrentConfigurable(null);
-			parserState.get().setCurrentConfiguration(null);
-			parserState.get().setPreviousDispatchLayerName(null);
-		}
-	}
-	
-	protected void parseDispatchStack(DispatchLayer dispatchLayer)
-			throws ReaderException {
-		URI typeUri = mapTypeFromRaven(dispatchLayer.getRaven(),
-				dispatchLayer.getClazz());
-		ObjectNode procConfig = parserState.get().getCurrentConfiguration().getJsonAsObjectNode();
-		
-		try {
-			Configuration dispatchConfig = parseConfiguration(dispatchLayer.getConfigBean());
-			URI relUri = INTERNAL_DISPATCH_PREFIX.relativize(typeUri);
-			String name;
-			if (!relUri.isAbsolute()) {
-				/*
-				 * It's an internal layer. We'll put it under the name which
-				 * we'll cleverly fish out of the URI path, eg. "retry" or
-				 * "parallelize"
-				 */
-                name = relUri.getPath().toLowerCase();
-			    if (dispatchConfig != null && dispatchConfig.getJson().size() > 0)
-			        // But only if non-empty (non-default)
-			        procConfig.put(name, dispatchConfig.getJson());
-			} else {
-			    ObjectNode json;
-			    if (dispatchConfig != null && dispatchConfig.getJson().isObject())
-			        json = dispatchConfig.getJsonAsObjectNode();
-			    else {
-					/*
-					 * We'll still need to create an objectNode to keep _type
-					 * and _below
-					 */
-			        json = procConfig.objectNode();
-			        if (dispatchConfig != null)
-			            // We'll put the non-objectnode here
-			            json.put("_config", dispatchConfig.getJson());
-			    }
-			    
-				/*
-				 * Not really much to go from here, we don't want to use the
-				 * typeUri as the name as third-party layers in theory could be
-				 * added several times for same type
-				 */
-			    name = randomUUID().toString();
-				json.put("_type", typeUri.toString());
-				// Might be null - meaning "top"
-				json.put("_below", parserState.get()
-						.getPreviousDispatchLayerName());
-				procConfig.put(name, json);
-			}
-			parserState.get().setPreviousDispatchLayerName(name);			
-		} catch (JAXBException ex) {
-			String message = "Can't parse configuration for dispatch layer in "
-					+ parserState.get().getCurrentProcessor();
-			if (isStrict())
-				throw new ReaderException(message, ex);
-			logger.log(WARNING, message, ex);
-		}
-	}
-
-	protected Set<InputWorkflowPort> parseInputPorts(
-			AnnotatedGranularDepthPorts originalPorts) throws ReaderException {
-		Set<InputWorkflowPort> createdPorts = new HashSet<>();
-		for (AnnotatedGranularDepthPort originalPort : originalPorts.getPort()) {
-			InputWorkflowPort newPort = new InputWorkflowPort(parserState.get()
-					.getCurrentWorkflow(), originalPort.getName());
-			newPort.setDepth(originalPort.getDepth().intValue());
-			if (!originalPort.getGranularDepth()
-					.equals(originalPort.getDepth())) {
-				String message = "Specific input port granular depth not "
-						+ "supported in scufl2, port " + originalPort.getName()
-						+ " has depth " + originalPort.getDepth()
-						+ " and granular depth "
-						+ originalPort.getGranularDepth();
-				if (isStrict())
-					throw new ReaderException(message);
-				logger.warning(message);
-			}
-			parseAnnotations(newPort, originalPort.getAnnotations());
-
-			createdPorts.add(newPort);
-		}
-		return createdPorts;
-	}
-
-	protected IterationStrategyStack parseIterationStrategyStack(
-			org.apache.taverna.scufl2.xml.t2flow.jaxb.IterationStrategyStack originalStack)
-			throws ReaderException {
-		IterationStrategyStack newStack = new IterationStrategyStack();
-
-		for (TopIterationNode strategy : originalStack.getIteration()
-				.getStrategy()) {
-			IterationNode topNode = strategy.getCross();
-			if (topNode == null)
-				topNode = strategy.getDot();
-			if (topNode == null)
-				continue;
-			IterationNodeParent parent = (IterationNodeParent) topNode;
-			if (parent.getCrossOrDotOrPort().isEmpty())
-				continue;
-			try {
-				newStack.add((IterationStrategyTopNode) parseIterationStrategyNode(topNode));
-			} catch (ReaderException e) {
-				if (isStrict())
-					throw e;
-				logger.warning(e.getMessage());
-			}
-		}
-
-		return newStack;
-	}
-
-	protected IterationStrategyNode parseIterationStrategyNode(
-			IterationNode topNode) throws ReaderException {
-		if (topNode instanceof PortProduct) {
-			PortProduct portProduct = (PortProduct) topNode;
-			PortNode portNode = new PortNode();
-			portNode.setDesiredDepth(portProduct.getDepth().intValue());
-			String name = portProduct.getName();
-			Processor processor = parserState.get().getCurrentProcessor();
-			InputProcessorPort inputProcessorPort = processor.getInputPorts()
-					.getByName(name);
-			portNode.setInputProcessorPort(inputProcessorPort);
-			return portNode;
-		}
-
-		IterationStrategyNode node;
-		if (topNode instanceof DotProduct)
-			node = new org.apache.taverna.scufl2.api.iterationstrategy.DotProduct();
-		else if (topNode instanceof CrossProduct)
-			node = new org.apache.taverna.scufl2.api.iterationstrategy.CrossProduct();
-		else
-			throw new ReaderException("Invalid node " + topNode);
-		@SuppressWarnings("unchecked")
-		List<IterationStrategyNode> children = (List<IterationStrategyNode>) node;
-		IterationNodeParent parent = (IterationNodeParent) topNode;
-		for (IterationNode child : parent.getCrossOrDotOrPort())
-			children.add(parseIterationStrategyNode(child));
-		return node;
-	}
-
-	protected Set<OutputWorkflowPort> parseOutputPorts(
-			AnnotatedPorts originalPorts) throws ReaderException {
-		Set<OutputWorkflowPort> createdPorts = new HashSet<>();
-		for (AnnotatedPort originalPort : originalPorts.getPort()) {
-			OutputWorkflowPort newPort = new OutputWorkflowPort(parserState
-					.get().getCurrentWorkflow(), originalPort.getName());
-			parseAnnotations(newPort, originalPort.getAnnotations());
-			createdPorts.add(newPort);
-		}
-		return createdPorts;
-	}
-
-	@SuppressWarnings("boxing")
-	protected Set<InputProcessorPort> parseProcessorInputPorts(
-			Processor newProc, DepthPorts origPorts) {
-		Set<InputProcessorPort> newPorts = new HashSet<>();
-		for (DepthPort origPort : origPorts.getPort()) {
-			InputProcessorPort newPort = new InputProcessorPort(newProc,
-					origPort.getName());
-			newPort.setDepth(origPort.getDepth().intValue());
-			// TODO: What about InputProcessorPort granular depth?
-			newPorts.add(newPort);
-		}
-		return newPorts;
-	}
-
-	@SuppressWarnings("boxing")
-	protected Set<OutputProcessorPort> parseProcessorOutputPorts(
-			Processor newProc, GranularDepthPorts origPorts) {
-		Set<OutputProcessorPort> newPorts = new HashSet<>();
-		for (GranularDepthPort origPort : origPorts.getPort()) {
-			OutputProcessorPort newPort = new OutputProcessorPort(newProc,
-					origPort.getName());
-			newPort.setDepth(origPort.getDepth().intValue());
-			newPort.setGranularDepth(origPort.getGranularDepth().intValue());
-			newPorts.add(newPort);
-		}
-		return newPorts;
-	}
-
-	protected Set<Processor> parseProcessors(Processors originalProcessors)
-			throws ReaderException, JAXBException {
-		HashSet<Processor> newProcessors = new HashSet<>();
-		for (org.apache.taverna.scufl2.xml.t2flow.jaxb.Processor origProc : originalProcessors
-				.getProcessor()) {
-			Processor newProc = new Processor(parserState.get()
-					.getCurrentWorkflow(), origProc.getName());
-			parserState.get().setCurrentProcessor(newProc);
-			newProc.setInputPorts(parseProcessorInputPorts(newProc,
-					origProc.getInputPorts()));
-			newProc.setOutputPorts(parseProcessorOutputPorts(newProc,
-					origProc.getOutputPorts()));
-			parseDispatchStack(origProc
-					.getDispatchStack());
-			newProc.setIterationStrategyStack(parseIterationStrategyStack(origProc
-					.getIterationStrategyStack()));
-			parseAnnotations(newProc, origProc.getAnnotations());
-
-			newProcessors.add(newProc);
-			int i = 0;
-			for (Activity origActivity : origProc.getActivities().getActivity())
-				parseActivityBinding(origActivity, i++);
-		}
-		parserState.get().setCurrentProcessor(null);
-		return newProcessors;
-	}
-
-	@SuppressWarnings("unchecked")
-	public WorkflowBundle parseT2Flow(File t2File) throws IOException,
-			ReaderException, JAXBException {
-		JAXBElement<org.apache.taverna.scufl2.xml.t2flow.jaxb.Workflow> root = (JAXBElement<org.apache.taverna.scufl2.xml.t2flow.jaxb.Workflow>) getUnmarshaller()
-				.unmarshal(t2File);
-		return parseT2Flow(root.getValue());
-	}
-
-	@SuppressWarnings("unchecked")
-	public WorkflowBundle parseT2Flow(InputStream t2File) throws IOException,
-			JAXBException, ReaderException {
-		JAXBElement<org.apache.taverna.scufl2.xml.t2flow.jaxb.Workflow> root = (JAXBElement<org.apache.taverna.scufl2.xml.t2flow.jaxb.Workflow>) getUnmarshaller()
-				.unmarshal(t2File);
-		return parseT2Flow(root.getValue());
-	}
-
-	public WorkflowBundle parseT2Flow(
-			org.apache.taverna.scufl2.xml.t2flow.jaxb.Workflow wf)
-			throws ReaderException, JAXBException {
-		try {
-			parserState.get().setT2FlowParser(this);
-			WorkflowBundle wfBundle = new WorkflowBundle();
-			parserState.get().setCurrentWorkflowBundle(wfBundle);
-			makeProfile(wf);
-
-			// First a skeleton scan of workflows (for nested workflow configs)
-			Map<Dataflow, Workflow> dataflowMap = new HashMap<>();
-			for (Dataflow df : wf.getDataflow()) {
-				Workflow workflow = skeletonDataflow(df);
-				dataflowMap.put(df, workflow);
-				wfBundle.getWorkflows().addWithUniqueName(workflow);
-				workflow.setParent(wfBundle);
-				if (df.getRole().equals(TOP)) {
-					wfBundle.setMainWorkflow(workflow);
-					wfBundle.setName(df.getName());
-					wfBundle.setGlobalBaseURI(WORKFLOW_BUNDLE_ROOT.resolve(df
-							.getId() + "/"));
-				}
-			}
-			// Second stage
-			for (Dataflow df : wf.getDataflow()) {
-				Workflow workflow = dataflowMap.get(df);
-				parseDataflow(df, workflow);
-			}
-			if (isStrict() && wfBundle.getMainWorkflow() == null)
-				throw new ReaderException("No main workflow");
-			scufl2Tools.setParents(wfBundle);
-
-			return wfBundle;
-		} finally {
-			parserState.remove();
-		}
-	}
-
-	protected Workflow skeletonDataflow(Dataflow df) {
-		Workflow wf = new Workflow();
-		parserState.get().setCurrentWorkflow(wf);
-		wf.setName(df.getName());
-		wf.setIdentifier(WORKFLOW_ROOT.resolve(df.getId() + "/"));
-		return wf;
-	}
-
-	public void setStrict(boolean strict) {
-		this.strict = strict;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2FlowReader.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2FlowReader.java b/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2FlowReader.java
deleted file mode 100644
index 00d3350..0000000
--- a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2FlowReader.java
+++ /dev/null
@@ -1,182 +0,0 @@
-package org.apache.taverna.scufl2.translator.t2flow;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-
-import static java.util.Collections.singleton;
-import static org.apache.taverna.scufl2.api.container.WorkflowBundle.WORKFLOW_BUNDLE_ROOT;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.nio.charset.Charset;
-import java.util.Set;
-import java.util.UUID;
-
-import javax.xml.bind.JAXBException;
-
-import org.apache.taverna.scufl2.api.common.Scufl2Tools;
-import org.apache.taverna.scufl2.api.common.URITools;
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.api.io.WorkflowBundleReader;
-
-
-public class T2FlowReader implements WorkflowBundleReader {
-	private final class DelayedCloseBufferedInputStream extends
-			BufferedInputStream {
-		private DelayedCloseBufferedInputStream(InputStream in, int size) {
-			super(in, size);
-		}
-
-		@Override
-		public void close() throws IOException {
-			return;
-		}
-
-		public void reallyClose() throws IOException {
-			super.close();
-		}
-	}
-
-	protected static final URI PROV = URI.create("http://www.w3.org/ns/prov#");
-	protected static final URI HAD_ORIGINAL_SOURCE = PROV.resolve("#hadOriginalSource");
-	protected static final URI ENTITY = PROV.resolve("#Entity");
-	private static final int MEGABYTE = 1024 * 1024;
-	private static final int PRESERVE_ORIGINAL_MAXIMUM_BYTES = 5 * MEGABYTE;
-	public static final String APPLICATION_VND_TAVERNA_T2FLOW_XML = "application/vnd.taverna.t2flow+xml";
-
-	private T2FlowParser parser;
-	private Scufl2Tools scufl2Tools = new Scufl2Tools();
-	private URITools uriTools = new URITools();
-	
-	@Override
-	public Set<String> getMediaTypes() {
-		return singleton(APPLICATION_VND_TAVERNA_T2FLOW_XML);
-	}
-
-	@Override
-	public WorkflowBundle readBundle(File bundleFile, String mediaType)
-			throws ReaderException, IOException {
-		try {
-			WorkflowBundle bundle = getParser().parseT2Flow(bundleFile);
-			scufl2Tools.setParents(bundle);
-			preserveOriginal(bundle, new FileInputStream(bundleFile));
-			return bundle;
-		} catch (JAXBException e) {
-			if (e.getCause() instanceof IOException) {
-				IOException ioException = (IOException) e.getCause();
-				throw ioException;
-			}
-			throw new ReaderException("Can't parse t2flow " + bundleFile, e);
-		}
-	}
-
-	protected void preserveOriginal(WorkflowBundle bundle,
-			InputStream t2flowStream) throws IOException {
-		String path = "history/" + bundleUUID(bundle) + ".t2flow";
-		bundle.getResources().addResource(t2flowStream, path,
-				APPLICATION_VND_TAVERNA_T2FLOW_XML);
-		// TODO: Add annotation recording the provenance of this history file
-//		PropertyResource original = new PropertyResource();
-//		original.setTypeURI(ENTITY);
-//		original.setResourceURI(URI.create("../../" + path));
-//		// TODO: dcterms:format ?				
-//		// TODO: Add this annotation to the workflow bundle rather than main workflow
-//		bundle.getMainWorkflow().getCurrentRevision().addProperty(HAD_ORIGINAL_SOURCE, original);		
-	}
-
-	protected String bundleUUID(WorkflowBundle bundle) {
-		String uuidPath = uriTools.relativePath(WORKFLOW_BUNDLE_ROOT,
-				bundle.getGlobalBaseURI()).getPath();
-		UUID uuid = UUID
-				.fromString(uuidPath.substring(0, uuidPath.length() - 1));
-		return uuid.toString();
-	}
-
-	@Override
-	public WorkflowBundle readBundle(InputStream inputStream, String mediaType)
-			throws ReaderException, IOException {
-		DelayedCloseBufferedInputStream buffered = new DelayedCloseBufferedInputStream(
-				inputStream, PRESERVE_ORIGINAL_MAXIMUM_BYTES);
-		try {
-			buffered.mark(PRESERVE_ORIGINAL_MAXIMUM_BYTES);
-			WorkflowBundle bundle;
-			try {
-				bundle = getParser().parseT2Flow(buffered);
-				scufl2Tools.setParents(bundle);
-			} catch (JAXBException e) {
-				if (e.getCause() instanceof IOException) {
-					IOException ioException = (IOException) e.getCause();
-					throw ioException;
-				}
-				throw new ReaderException("Can't parse t2flow", e);
-			}
-
-			// Rewind and try to copy out the original t2flow
-			try {
-				buffered.reset();
-			} catch (IOException ex) {
-				// Too big workflow, can't preserve it.
-				// TODO: Store to Bundle first?
-				// FIXME: Can we close BufferedInputStream without closing
-				// inputStream from our parameter?
-				return bundle;
-			}
-			preserveOriginal(bundle, buffered);
-			return bundle;
-		} finally {
-			buffered.reallyClose();
-		}
-	}
-
-	public void setParser(T2FlowParser parser) {
-		this.parser = parser;
-	}
-
-	public T2FlowParser getParser() throws JAXBException {
-		if (parser == null)
-			parser = new T2FlowParser();
-		return parser;
-	}
-	
-	@Override
-	public String guessMediaTypeForSignature(byte[] firstBytes) {
-		if (firstBytes.length < 100)
-			return null;
-		// FIXME: Does not deal with potential UTF-16 encoding
-		
-		// Latin 1 can deal with nasty bytes in binaries
-		Charset latin1 = Charset.forName("ISO-8859-1");
-		String asLatin1 = new String(firstBytes, latin1);
-		if (!asLatin1.contains("workflow"))
-			return null;
-		if (!asLatin1.contains("http://taverna.sf.net/2008/xml/t2flow"))
-			return null;
-		if (!asLatin1.contains("dataflow"))
-			return null;
-		// Good enough - XML is hard to check on so few bytes		
-		return APPLICATION_VND_TAVERNA_T2FLOW_XML;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2Parser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2Parser.java b/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2Parser.java
deleted file mode 100644
index 6e7c469..0000000
--- a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2Parser.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.apache.taverna.scufl2.translator.t2flow;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-
-import java.net.URI;
-import java.util.List;
-
-import org.apache.taverna.scufl2.api.configurations.Configuration;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ConfigBean;
-
-public interface T2Parser {
-	boolean canHandlePlugin(URI pluginURI);
-
-	URI mapT2flowRavenIdToScufl2URI(URI t2flowActivity);
-
-	Configuration parseConfiguration(T2FlowParser t2FlowParser,
-			ConfigBean configBean, ParserState parserState)
-			throws ReaderException;
-
-	List<URI> getAdditionalSchemas();
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/AbstractActivityParser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/AbstractActivityParser.java b/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/AbstractActivityParser.java
deleted file mode 100644
index 6069920..0000000
--- a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/AbstractActivityParser.java
+++ /dev/null
@@ -1,232 +0,0 @@
-package org.apache.taverna.scufl2.translator.t2flow.defaultactivities;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-
-import java.io.StringReader;
-import java.math.BigInteger;
-import java.net.URI;
-import java.util.Arrays;
-import java.util.List;
-
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.transform.Source;
-import javax.xml.transform.stream.StreamSource;
-
-import org.apache.taverna.scufl2.api.activity.Activity;
-import org.apache.taverna.scufl2.api.common.Scufl2Tools;
-import org.apache.taverna.scufl2.api.common.URITools;
-import org.apache.taverna.scufl2.api.configurations.Configuration;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.api.port.InputActivityPort;
-import org.apache.taverna.scufl2.api.port.OutputActivityPort;
-import org.apache.taverna.scufl2.translator.t2flow.ParserState;
-import org.apache.taverna.scufl2.translator.t2flow.T2FlowParser;
-import org.apache.taverna.scufl2.translator.t2flow.T2Parser;
-import org.w3c.dom.Element;
-
-//import org.apache.taverna.scufl2.api.property.PropertyResource;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ActivityPortDefinitionBean;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ActivityPortDefinitionBean.MimeTypes;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ConfigBean;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-public abstract class AbstractActivityParser implements T2Parser {
-	public static URI MEDIATYPES_URI = URI.create("http://purl.org/NET/mediatypes/");
-	@Deprecated
-	public static URI PORT_DEFINITION = Scufl2Tools.PORT_DEFINITION;
-	
-	@SuppressWarnings("unused")
-	private ThreadLocal<ParserState> parserState;
-
-	public <ConfigType> ConfigType unmarshallConfig(T2FlowParser t2FlowParser,
-			ConfigBean configBean, String encoding, Class<ConfigType> configType)
-			throws ReaderException {
-		Object config = configBean.getAny();
-		if (config instanceof JAXBElement) {
-			JAXBElement<?> jaxbElement = (JAXBElement<?>) config;
-			if (!configType.isInstance((jaxbElement.getValue())))
-				throw new ReaderException("Unexpected config type: "
-						+ jaxbElement.getValue().getClass() + ", expected "
-						+ configType);
-			return configType.cast(jaxbElement.getValue());
-		}
-		if (!(config instanceof Element)
-				|| !configBean.getEncoding().equals(encoding))
-			throw new ReaderException("Unsupported config bean " + configBean);
-		return unmarshallElement(t2FlowParser, (Element) config, configType);
-	}
-
-	public <ConfigType> ConfigType unmarshallElement(T2FlowParser t2FlowParser,
-			Element element, Class<ConfigType> configType)
-			throws ReaderException {
-		Unmarshaller unmarshaller2 = t2FlowParser.getUnmarshaller();
-		unmarshaller2.setSchema(null);
-		try {
-			JAXBElement<ConfigType> configElemElem = unmarshaller2.unmarshal(
-					element, configType);
-			return configElemElem.getValue();
-		} catch (JAXBException|ClassCastException e) {
-			throw new ReaderException("Can't parse element " + element, e);
-		}
-	}
-
-	public <ConfigType> ConfigType unmarshallXml(T2FlowParser t2FlowParser,
-			String xml, Class<ConfigType> configType) throws ReaderException {
-		Unmarshaller unmarshaller2 = t2FlowParser.getUnmarshaller();
-		unmarshaller2.setSchema(null);
-
-		Source source = new StreamSource(new StringReader(xml));
-		try {
-			JAXBElement<ConfigType> configElemElem = unmarshaller2.unmarshal(
-					source, configType);
-			return configElemElem.getValue();
-		} catch (JAXBException|ClassCastException e) {
-			throw new ReaderException("Can't parse xml " + xml, e);
-		}
-	}
-
-	protected ObjectNode parseAndAddOutputPortDefinition(
-			ActivityPortDefinitionBean portBean, Configuration configuration,
-			Activity activity) {
-		ObjectNode configResource = (ObjectNode) configuration.getJson();
-		OutputActivityPort outputPort = new OutputActivityPort();
-
-		outputPort.setName(getPortElement(portBean, "name", String.class));
-		outputPort.setParent(activity);
-
-		BigInteger depth = getPortElement(portBean, "depth", BigInteger.class);
-		if (depth != null)
-			outputPort.setDepth(depth.intValue());
-		
-		BigInteger granularDepth = getPortElement(portBean, "granularDepth",
-				BigInteger.class);
-		if (granularDepth != null)
-			outputPort.setGranularDepth(granularDepth.intValue());
-		
-		ObjectNode portConfig = configResource.objectNode();
-//		PropertyResource portConfig = configResource.addPropertyAsNewResource(
-//				Scufl2Tools.PORT_DEFINITION.resolve("#outputPortDefinition"),
-//				Scufl2Tools.PORT_DEFINITION.resolve("#OutputPortDefinition"));
-
-		@SuppressWarnings("unused")
-		URI portUri = new URITools().relativeUriForBean(outputPort, configuration);
-//		portConfig.addPropertyReference(Scufl2Tools.PORT_DEFINITION.resolve("#definesOutputPort"), portUri);
-
-	      // Legacy duplication of port details for XMLSplitter activities
-        portConfig.put("name", outputPort.getName());
-        portConfig.put("depth", outputPort.getDepth());
-        portConfig.put("granularDepth", outputPort.getDepth());
-		
-		parseMimeTypes(portBean, portConfig);
-		return portConfig;
-	}
-
-	/**
-	 * Deals with the not-so-helpful
-	 * getHandledReferenceSchemesOrTranslatedElementTypeOrName method
-	 * 
-	 * @param portBean
-	 * @param elementName
-	 * @return
-	 */
-	private <T> T getPortElement(ActivityPortDefinitionBean portBean,
-			String elementName, Class<T> type) {
-		for (JAXBElement<?> elem : portBean
-				.getHandledReferenceSchemesOrTranslatedElementTypeOrName())
-			if (elem.getName().getLocalPart().equals(elementName))
-				return type.cast(elem.getValue());
-		return null;
-	}
-
-	protected ObjectNode parseAndAddInputPortDefinition(
-			ActivityPortDefinitionBean portBean, Configuration configuration,
-			Activity activity) {
-		ObjectNode configResource = (ObjectNode) configuration.getJson();
-		ObjectNode portConfig = configResource.objectNode();
-
-		InputActivityPort inputPort = new InputActivityPort();
-		inputPort.setName(getPortElement(portBean, "name", String.class));
-		inputPort.setParent(activity);
-
-		BigInteger depth = getPortElement(portBean, "depth", BigInteger.class);
-		if (depth != null)
-			inputPort.setDepth(depth.intValue());
-		
-//		PropertyResource portConfig = configResource.addPropertyAsNewResource(
-//				Scufl2Tools.PORT_DEFINITION.resolve("#inputPortDefinition"),
-//				Scufl2Tools.PORT_DEFINITION.resolve("#InputPortDefinition"));
-
-		@SuppressWarnings("unused")
-		URI portUri = new URITools().relativeUriForBean(inputPort, configuration);
-//		portConfig.addPropertyReference(Scufl2Tools.PORT_DEFINITION.resolve("#definesInputPort"), portUri);
-
-		parseMimeTypes(portBean, portConfig);
-		
-		String translated = getPortElement(portBean, "translatedElementType", String.class);
-		if (translated != null) {
-			// As "translated element type" is confusing, we'll instead use "dataType"
-//			portConfig.addPropertyReference(Scufl2Tools.PORT_DEFINITION.resolve("#dataType"),
-//					URI.create("java:" + translated));
-			portConfig.put("dataType", "java:" + translated);
-
-			// TODO: Include mapping to XSD types like xsd:string
-		}
-		// T2-1681: Ignoring isAllowsLiteralValues and handledReferenceScheme
-
-		// Legacy duplication of port details for XMLSplitter activities
-		portConfig.put("name", inputPort.getName());
-		portConfig.put("depth", inputPort.getDepth());
-
-		return portConfig;
-	}
-
-	private void parseMimeTypes(ActivityPortDefinitionBean portBean,
-			ObjectNode portConfig) {
-		MimeTypes mimeTypes = getPortElement(portBean, "mimeTypes",
-				MimeTypes.class);
-		if (mimeTypes == null)
-			return;
-		// FIXME: Do as annotation as this is not configuration
-//		URI mimeType = Scufl2Tools.PORT_DEFINITION.resolve("#expectedMimeType");
-		List<String> strings = mimeTypes.getString();
-		if ((strings == null || strings.isEmpty())
-				&& mimeTypes.getElement() != null)
-			strings = Arrays.asList(mimeTypes.getElement().getValue());
-		if (strings != null)
-			for (String s : strings) {
-				if (s.contains("'"))
-					s = s.split("'")[1];
-//				portConfig.addPropertyReference(mimeType,
-//						MEDIATYPES_URI.resolve(s));
-				portConfig.put("mimeType", s);
-				return; // Just first mimeType survives
-			}
-	}
-	
-	@Override
-	public List<URI> getAdditionalSchemas() {
-		return null;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/ApiConsomerActivityParser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/ApiConsomerActivityParser.java b/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/ApiConsomerActivityParser.java
deleted file mode 100644
index 61d3dbc..0000000
--- a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/ApiConsomerActivityParser.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package org.apache.taverna.scufl2.translator.t2flow.defaultactivities;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-
-import java.math.BigInteger;
-import java.net.URI;
-
-import org.apache.taverna.scufl2.api.configurations.Configuration;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.translator.t2flow.ParserState;
-import org.apache.taverna.scufl2.translator.t2flow.T2FlowParser;
-
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ApiConsumerConfig;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ConfigBean;
-
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-public class ApiConsomerActivityParser extends AbstractActivityParser {
-	private static URI activityRavenURI = T2FlowParser.ravenURI
-			.resolve("net.sf.taverna.t2.activities/apiconsumer-activity/");
-	private static String activityClassName = "net.sf.taverna.t2.activities.apiconsumer.ApiConsumerActivity";
-	public static URI ACTIVITY_URI = URI
-			.create("http://ns.taverna.org.uk/2010/activity/apiconsumer");
-
-	@Override
-	public boolean canHandlePlugin(URI activityURI) {
-		String activityUriStr = activityURI.toASCIIString();
-		return activityUriStr.startsWith(activityRavenURI.toASCIIString())
-				&& activityUriStr.endsWith(activityClassName);
-	}
-
-	@Override
-	public URI mapT2flowRavenIdToScufl2URI(URI t2flowActivity) {
-		return ACTIVITY_URI;
-	}
-
-	@Override
-	public Configuration parseConfiguration(T2FlowParser t2FlowParser,
-			ConfigBean configBean, ParserState parserState)
-			throws ReaderException {
-		ApiConsumerConfig config = unmarshallConfig(t2FlowParser, configBean,
-				"xstream", ApiConsumerConfig.class);
-
-		Configuration configuration = new Configuration();
-		configuration.setParent(parserState.getCurrentProfile());
-
-		ObjectNode json = (ObjectNode) configuration.getJson();
-		configuration.setType(ACTIVITY_URI.resolve("#Config"));
-
-		json.put("apiConsumerDescription", config.getApiConsumerDescription());
-		json.put("apiConsumerName", config.getApiConsumerName());
-		json.put("description", config.getDescription());
-		json.put("className", config.getClassName());
-		json.put("methodName", config.getMethodName());
-
-		ArrayNode parameterNames = json.arrayNode();
-		json.put("parameterNames", parameterNames);
-		for (String parameterName : config.getParameterNames().getString())
-			parameterNames.add(parameterName);
-
-		ArrayNode parameterDimensions = json.arrayNode();
-		json.put("parameterDimensions", parameterDimensions);
-		for (BigInteger parameterDimension : config.getParameterDimensions()
-				.getInt())
-			parameterDimensions.add(parameterDimension.intValue());
-
-		ArrayNode parameterTypes = json.arrayNode();
-		json.put("parameterTypes", parameterTypes);
-		for (String parameterType : config.getParameterTypes().getString())
-			parameterTypes.add(parameterType);
-
-		json.put("returnType", config.getReturnType());
-		json.put("returnDimension", config.getReturnDimension().intValue());
-		json.put("isMethodConstructor", config.isIsMethodConstructor());
-		json.put("isMethodStatic", config.isIsMethodStatic());
-
-		return configuration;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BeanshellActivityParser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BeanshellActivityParser.java b/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BeanshellActivityParser.java
deleted file mode 100644
index 322c3c7..0000000
--- a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BeanshellActivityParser.java
+++ /dev/null
@@ -1,154 +0,0 @@
-package org.apache.taverna.scufl2.translator.t2flow.defaultactivities;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-
-import static org.apache.taverna.scufl2.translator.t2flow.T2FlowParser.ravenURI;
-
-import java.net.URI;
-
-import org.apache.taverna.scufl2.api.activity.Activity;
-import org.apache.taverna.scufl2.api.common.URITools;
-import org.apache.taverna.scufl2.api.configurations.Configuration;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.translator.t2flow.ParserState;
-import org.apache.taverna.scufl2.translator.t2flow.T2FlowParser;
-
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ActivityPortDefinitionBean;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.BasicArtifact;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.BeanshellConfig;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ClassLoaderSharing;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ConfigBean;
-
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-public class BeanshellActivityParser extends AbstractActivityParser {
-	private static final URI activityRavenURI = ravenURI
-			.resolve("net.sf.taverna.t2.activities/beanshell-activity/");
-	private static final URI localWorkerActivityRavenURI = ravenURI
-			.resolve("net.sf.taverna.t2.activities/localworker-activity/");
-	private static final String activityClassName = "net.sf.taverna.t2.activities.beanshell.BeanshellActivity";
-	private static final String localWorkerActivityClassName = "net.sf.taverna.t2.activities.localworker.LocalworkerActivity";
-	public static final URI ACTIVITY_URI = URI
-			.create("http://ns.taverna.org.uk/2010/activity/beanshell");
-	public static final URI LOCAL_WORKER_URI = URI
-			.create("http://ns.taverna.org.uk/2010/activity/localworker/");
-	public static final URI DEPENDENCY_URI = URI
-			.create("http://ns.taverna.org.uk/2010/activity/dependency");
-	private static URITools uriTools = new URITools();
-
-	@Override
-	public boolean canHandlePlugin(URI activityURI) {
-		String activityUriStr = activityURI.toASCIIString();
-		if (activityUriStr.startsWith(activityRavenURI.toASCIIString())
-				&& activityUriStr.endsWith(activityClassName))
-			return true;
-		if (activityUriStr.startsWith(localWorkerActivityRavenURI
-				.toASCIIString())
-				&& activityUriStr.endsWith(localWorkerActivityClassName))
-			return true;
-		return false;
-	}
-
-	@Override
-	public URI mapT2flowRavenIdToScufl2URI(URI t2flowActivity) {
-		return ACTIVITY_URI;
-	}
-
-	@Override
-	public Configuration parseConfiguration(T2FlowParser t2FlowParser,
-			ConfigBean configBean, ParserState parserState)
-			throws ReaderException {
-		BeanshellConfig beanshellConfig = unmarshallConfig(t2FlowParser,
-				configBean, "xstream", BeanshellConfig.class);
-
-		Configuration configuration = new Configuration();
-		configuration.setParent(parserState.getCurrentProfile());
-
-		ObjectNode json = (ObjectNode) configuration.getJson();
-		configuration.setType(ACTIVITY_URI.resolve("#Config"));
-		
-		if (beanshellConfig.getLocalworkerName() != null) {
-			URI localWorkerURI = LOCAL_WORKER_URI.resolve(uriTools
-					.validFilename(beanshellConfig.getLocalworkerName()));
-			/*
-			 * FIXME: As we can't read the annotation chain yet, we can't tell
-			 * whether this local worker has been edited or not, and so can't
-			 * use #definedBy
-			 */
-			json.put("derivedFrom", localWorkerURI.toString());
-		}
-
-		String script = beanshellConfig.getScript();
-		json.put("script", script);
-
-		ClassLoaderSharing classLoaderSharing = beanshellConfig
-				.getClassLoaderSharing();
-		if (classLoaderSharing == ClassLoaderSharing.SYSTEM)
-			json.put("classLoaderSharing", "system");
-		else {
-		    // default is "workflow" but don't need to be expressed
-//		    json.put("classLoaderSharing", "workflow");
-		}
- 
-		if (beanshellConfig.getLocalDependencies() != null) {
-			ArrayNode dependencies = json.arrayNode();
-			for (String localDep : beanshellConfig.getLocalDependencies()
-					.getString())
-				dependencies.add(localDep);
-			if (dependencies.size() > 0)
-				json.put("localDependency", dependencies);
-		}
-
-		/*
-		 * Note: Maven Dependencies are not supported by Taverna 3 - only here
-		 * for informational purposes and potential t2flow->t2flow scenarios
-		 */
-		if (beanshellConfig.getArtifactDependencies() != null) {
-			ArrayNode dependencies = json.arrayNode();
-			for (BasicArtifact mavenDep : beanshellConfig
-					.getArtifactDependencies()
-					.getNetSfTavernaRavenRepositoryBasicArtifact()) {
-				ObjectNode mavenDependency = json.objectNode();
-				dependencies.add(mavenDependency);
-				mavenDependency.put("groupId", mavenDep.getGroupId());
-				mavenDependency.put("artifactId", mavenDep.getArtifactId());
-				mavenDependency.put("version", mavenDep.getVersion());
-			}
-			if (dependencies.size() > 0)
-				json.put("mavenDependency", dependencies);
-		}
-		
-		Activity activity = parserState.getCurrentActivity();
-		activity.getInputPorts().clear();
-		activity.getOutputPorts().clear();
-		for (ActivityPortDefinitionBean portBean : beanshellConfig
-				.getInputs()
-				.getNetSfTavernaT2WorkflowmodelProcessorActivityConfigActivityInputPortDefinitionBean())
-			parseAndAddInputPortDefinition(portBean, configuration, activity);
-		for (ActivityPortDefinitionBean portBean : beanshellConfig
-				.getOutputs()
-				.getNetSfTavernaT2WorkflowmodelProcessorActivityConfigActivityOutputPortDefinitionBean())
-			parseAndAddOutputPortDefinition(portBean, configuration, activity);
-		return configuration;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BiomartActivityParser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BiomartActivityParser.java b/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BiomartActivityParser.java
deleted file mode 100644
index 06ef449..0000000
--- a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BiomartActivityParser.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.apache.taverna.scufl2.translator.t2flow.defaultactivities;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-
-import static org.apache.taverna.scufl2.translator.t2flow.T2FlowParser.ravenURI;
-
-import java.net.URI;
-
-import org.apache.taverna.scufl2.api.configurations.Configuration;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.translator.t2flow.ParserState;
-import org.apache.taverna.scufl2.translator.t2flow.T2FlowParser;
-import org.w3c.dom.Element;
-
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ConfigBean;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-public class BiomartActivityParser extends AbstractActivityParser {
-	private static final URI activityRavenURI = ravenURI
-			.resolve("net.sf.taverna.t2.activities/biomart-activity/");
-	private static final String activityClassName = "net.sf.taverna.t2.activities.biomart.BiomartActivity";
-	public static final URI ACTIVITY_URI = URI
-			.create("http://ns.taverna.org.uk/2010/activity/biomart");
-
-	@Override
-	public boolean canHandlePlugin(URI activityURI) {
-		String activityUriStr = activityURI.toASCIIString();
-		return activityUriStr.startsWith(activityRavenURI.toASCIIString())
-				&& activityUriStr.endsWith(activityClassName);
-	}
-
-	@Override
-	public URI mapT2flowRavenIdToScufl2URI(URI t2flowActivity) {
-		return ACTIVITY_URI;
-	}
-
-	@Override
-	public Configuration parseConfiguration(T2FlowParser t2FlowParser,
-			ConfigBean configBean, ParserState parserState)
-			throws ReaderException {
-		Configuration configuration = new Configuration();
-		configuration.setParent(parserState.getCurrentProfile());
-
-		ObjectNode json = (ObjectNode) configuration.getJson();
-		configuration.setType(ACTIVITY_URI.resolve("#Config"));
-
-		json.put("martQuery",
-				T2FlowParser.elementToXML((Element) configBean.getAny()));
-
-		return configuration;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BiomobyActivityParser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BiomobyActivityParser.java b/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BiomobyActivityParser.java
deleted file mode 100644
index 9778781..0000000
--- a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BiomobyActivityParser.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package org.apache.taverna.scufl2.translator.t2flow.defaultactivities;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-
-import static org.apache.taverna.scufl2.translator.t2flow.T2FlowParser.ravenURI;
-
-import java.net.URI;
-
-import org.apache.taverna.scufl2.api.configurations.Configuration;
-import org.apache.taverna.scufl2.translator.t2flow.ParserState;
-import org.apache.taverna.scufl2.translator.t2flow.T2FlowParser;
-
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ConfigBean;
-
-public class BiomobyActivityParser extends AbstractActivityParser {
-	private static URI activityRavenURI = ravenURI
-			.resolve("net.sf.taverna.t2.activities/biomoby-activity/");
-	private static String mobyObjectClassName = "net.sf.taverna.t2.activities.biomoby.BiomobyObjectActivity";
-	private static String mobyServiceClassName = "net.sf.taverna.t2.activities.biomoby.BiomobyActivity";
-	public static URI mobyObjectScufl2Uri = URI
-			.create("http://ns.taverna.org.uk/2010/activity/biomoby/object");
-	public static URI mobyServiceScufl2Uri = URI
-			.create("http://ns.taverna.org.uk/2010/activity/biomoby/service");
-
-	@Override
-	public boolean canHandlePlugin(URI activityURI) {
-		String activityUriStr = activityURI.toASCIIString();
-		if (!activityUriStr.startsWith(activityRavenURI.toASCIIString()))
-			return false;
-		return activityUriStr.endsWith(mobyObjectClassName)
-				|| activityUriStr.endsWith(mobyServiceClassName);
-	}
-
-	@Override
-	public URI mapT2flowRavenIdToScufl2URI(URI t2flowActivity) {
-		String activityUriStr = t2flowActivity.toASCIIString();
-		if (activityUriStr.endsWith(mobyObjectClassName))
-			return mobyObjectScufl2Uri;
-		else
-			return mobyServiceScufl2Uri;
-	}
-
-	@Override
-	public Configuration parseConfiguration(T2FlowParser t2FlowParser,
-			ConfigBean configBean, ParserState parserState) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/ComponentActivityParser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/ComponentActivityParser.java b/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/ComponentActivityParser.java
deleted file mode 100644
index d928414..0000000
--- a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/ComponentActivityParser.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package org.apache.taverna.scufl2.translator.t2flow.defaultactivities;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-
-import static java.net.URI.create;
-import static org.apache.taverna.scufl2.translator.t2flow.T2FlowParser.ravenURI;
-
-import java.net.URI;
-
-import org.apache.taverna.scufl2.api.configurations.Configuration;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.translator.t2flow.ParserState;
-import org.apache.taverna.scufl2.translator.t2flow.T2FlowParser;
-
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ComponentConfig;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ConfigBean;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-public class ComponentActivityParser extends AbstractActivityParser {
-	private static URI activityRavenURI = ravenURI
-			.resolve("net.sf.taverna.t2.component/component-activity/");
-	private static String activityClassName = "net.sf.taverna.t2.component.ComponentActivity";
-	public static URI ACTIVITY_URI = create("http://ns.taverna.org.uk/2010/activity/component");
-
-	@Override
-	public boolean canHandlePlugin(URI activityURI) {
-		String activityUriStr = activityURI.toASCIIString();
-		return activityUriStr.startsWith(activityRavenURI.toASCIIString())
-				&& activityUriStr.endsWith(activityClassName);
-	}
-
-	@Override
-	public URI mapT2flowRavenIdToScufl2URI(URI t2flowActivity) {
-		return ACTIVITY_URI;
-	}
-
-	@Override
-	public Configuration parseConfiguration(T2FlowParser t2FlowParser,
-			ConfigBean configBean, ParserState parserState)
-			throws ReaderException {
-		ComponentConfig config = unmarshallConfig(t2FlowParser, configBean,
-				"xstream", ComponentConfig.class);
-
-		Configuration configuration = new Configuration();
-		configuration.setParent(parserState.getCurrentProfile());
-
-		ObjectNode json = (ObjectNode) configuration.getJson();
-		configuration.setType(ACTIVITY_URI.resolve("#Config"));
-
-		json.put("registryBase", config.getRegistryBase());
-		json.put("familyName", config.getFamilyName());
-		json.put("componentName", config.getComponentName());
-		if (config.getComponentVersion() != null)
-			json.put("componentVersion", (int) config.getComponentVersion());
-
-		return configuration;
-	}
-}