http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/ProfileParser.java
----------------------------------------------------------------------
diff --git 
a/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/ProfileParser.java
 
b/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/ProfileParser.java
deleted file mode 100644
index 1c22929..0000000
--- 
a/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/ProfileParser.java
+++ /dev/null
@@ -1,356 +0,0 @@
-package org.apache.taverna.scufl2.rdfxml;
-/*
- *
- * 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.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.util.Iterator;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.JAXBException;
-
-import org.apache.taverna.scufl2.api.activity.Activity;
-import org.apache.taverna.scufl2.api.common.Configurable;
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.core.Processor;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.api.port.InputActivityPort;
-import org.apache.taverna.scufl2.api.port.InputProcessorPort;
-import org.apache.taverna.scufl2.api.port.OutputActivityPort;
-import org.apache.taverna.scufl2.api.port.OutputProcessorPort;
-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.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import org.apache.taverna.scufl2.rdfxml.jaxb.Configuration;
-import org.apache.taverna.scufl2.rdfxml.jaxb.ProcessorBinding.InputPortBinding;
-import 
org.apache.taverna.scufl2.rdfxml.jaxb.ProcessorBinding.OutputPortBinding;
-import org.apache.taverna.scufl2.rdfxml.jaxb.Profile;
-import org.apache.taverna.scufl2.rdfxml.jaxb.ProfileDocument;
-
-public class ProfileParser extends AbstractParser {
-    private static Logger logger = Logger.getLogger(ProfileParser.class
-            .getCanonicalName());
-    
-       public ProfileParser() {
-               super();
-       }
-
-       public ProfileParser(ThreadLocal<ParserState> parserState) {
-               super(parserState);
-       }
-
-       @SuppressWarnings("unused")
-       private Element getChildElement(Element element) {
-               for (Node node : nodeIterable(element.getChildNodes()))
-                       if (node instanceof Element)
-                               return (Element) node;
-               return null;
-       }
-
-       private Iterable<Node> nodeIterable(final NodeList childNodes) {
-               return new Iterable<Node>() {
-                       @Override
-                       public Iterator<Node> iterator() {
-                               return new Iterator<Node>() {
-                                       int position = 0;
-
-                                       @Override
-                                       public boolean hasNext() {
-                                               return childNodes.getLength() > 
position;
-                                       }
-
-                                       @Override
-                                       public Node next() {
-                                               return 
childNodes.item(position++);
-                                       }
-
-                                       @Override
-                                       public void remove() {
-                                               Node node = 
childNodes.item(position);
-                                               
node.getParentNode().removeChild(node);
-                                       }
-                               };
-                       }
-               };
-       }
-
-       protected void parseActivity(
-                       org.apache.taverna.scufl2.rdfxml.jaxb.Activity 
original) {
-               Activity activity = new Activity();
-
-               getParserState().push(activity);
-               try {
-                       mapBean(original.getAbout(), activity);
-                       if (original.getName() != null)
-                               activity.setName(original.getName());
-                       activity.setParent(getParserState().getCurrent(
-                                       
org.apache.taverna.scufl2.api.profiles.Profile.class));
-                       if (original.getType() != null)
-                               
activity.setType(resolve(original.getType().getResource()));
-                       for 
(org.apache.taverna.scufl2.rdfxml.jaxb.Activity.InputActivityPort 
inputActivityPort : original
-                                       .getInputActivityPort())
-                               
parseInputActivityPort(inputActivityPort.getInputActivityPort());
-                       for 
(org.apache.taverna.scufl2.rdfxml.jaxb.Activity.OutputActivityPort 
outputActivityPort : original
-                                       .getOutputActivityPort())
-                               parseOutputActivityPort(outputActivityPort
-                                               .getOutputActivityPort());
-               } finally {
-                       getParserState().pop();
-               }
-       }
-
-   private static final URI INTERNAL_DISPATCH_PREFIX = 
URI.create("http://ns.taverna.org.uk/2010/scufl2/taverna/dispatchlayer/";);
-
-       protected void parseConfiguration(Configuration original)
-                       throws ReaderException {
-               org.apache.taverna.scufl2.api.configurations.Configuration 
config = new org.apache.taverna.scufl2.api.configurations.Configuration();
-
-               boolean ignoreConfig = false;
-               
-               if (original.getType() != null) {
-                       URI type = resolve(original.getType().getResource());
-                       if (! 
INTERNAL_DISPATCH_PREFIX.relativize(type).isAbsolute()) {
-                logger.fine("Ignoring unsupported Dispatch stack configuration 
(SCUFL2-130)");
-                logger.finest(original.getAbout());
-                ignoreConfig = true;
-                       }
-            config.setType(type);
-               }
-
-               if (original.getName() != null)
-                       config.setName(original.getName());
-
-               if (!ignoreConfig) {
-                       mapBean(original.getAbout(), config);
-
-                       if (original.getConfigure() != null) {
-                               Configurable configurable = 
resolveBeanUri(original
-                                               .getConfigure().getResource(), 
Configurable.class);
-                               config.setConfigures(configurable);
-                       }
-                       config.setParent(getParserState().getCurrent(
-                                       
org.apache.taverna.scufl2.api.profiles.Profile.class));
-               }
-
-               getParserState().push(config);
-
-               if (original.getSeeAlso() != null) {
-                       String about = original.getSeeAlso().getResource();
-               if (about != null) {
-                   URI resource = resolve(about);
-                   URI bundleBase = parserState .get().getLocation();
-                   URI path = uriTools.relativePath(bundleBase, resource);     
            
-                   if (ignoreConfig) {
-                       logger.finest("Deleting " + path + " (SCUFL2-130)");
-                       
parserState.get().getUcfPackage().removeResource(path.getRawPath());
-                   } else {
-                           try {
-                               // TODO: Should the path in the UCF Package be 
%-escaped or not?
-                               // See TestRDFXMLWriter.awkwardFilenames
-                        
config.setJson(parserState.get().getUcfPackage().getResourceAsString(path.getRawPath()));
-                    } catch (IllegalArgumentException e) {
-                        logger.log(Level.WARNING, "Could not parse JSON 
configuration " + path, e);
-                           } catch (IOException e) {
-                        logger.log(Level.WARNING, "Could not load JSON 
configuration " + path, e);
-                    }
-                   }
-               }
-               }
-               
-               for (Object o : original.getAny()) {
-                   // Legacy SCUFL2 <= 0.11.0  PropertyResource configuration
-                   // Just ignoring it for now :(
-                   // 
-                   // TODO: Parse and represent as JSON-LD?
-                   logger.warning("Ignoring unsupported PropertyResource (from 
wfbundle 0.2.0 or older) for " + config + " " + o);
-               }
-               
-               getParserState().pop();
-       }
-
-       protected void parseInputActivityPort(
-                       org.apache.taverna.scufl2.rdfxml.jaxb.InputActivityPort 
original) {
-               InputActivityPort port = new InputActivityPort();
-               mapBean(original.getAbout(), port);
-               port.setParent(getParserState().getCurrent(Activity.class));
-
-               port.setName(original.getName());
-               if (original.getPortDepth() != null)
-                       port.setDepth(original.getPortDepth().getValue());
-       }
-
-       protected void parseInputPortBinding(
-                       org.apache.taverna.scufl2.rdfxml.jaxb.InputPortBinding 
original)
-                       throws ReaderException {
-               ProcessorInputPortBinding binding = new 
ProcessorInputPortBinding();
-               mapBean(original.getAbout(), binding);
-
-               binding.setBoundActivityPort(resolveBeanUri(original
-                               .getBindInputActivityPort().getResource(),
-                               InputActivityPort.class));
-               binding.setBoundProcessorPort(resolveBeanUri(original
-                               .getBindInputProcessorPort().getResource(),
-                               InputProcessorPort.class));
-               
binding.setParent(getParserState().getCurrent(ProcessorBinding.class));
-       }
-
-       protected void parseOutputActivityPort(
-                       
org.apache.taverna.scufl2.rdfxml.jaxb.OutputActivityPort original) {
-               OutputActivityPort port = new OutputActivityPort();
-               mapBean(original.getAbout(), port);
-               port.setParent(getParserState().getCurrent(Activity.class));
-
-               port.setName(original.getName());
-               if (original.getPortDepth() != null)
-                       port.setDepth(original.getPortDepth().getValue());
-               if (original.getGranularPortDepth() != null)
-                       
port.setGranularDepth(original.getGranularPortDepth().getValue());
-       }
-
-       protected void parseOutputPortBinding(
-                       org.apache.taverna.scufl2.rdfxml.jaxb.OutputPortBinding 
original)
-                       throws ReaderException {
-               ProcessorOutputPortBinding binding = new 
ProcessorOutputPortBinding();
-               mapBean(original.getAbout(), binding);
-
-               binding.setBoundActivityPort(resolveBeanUri(original
-                               .getBindOutputActivityPort().getResource(),
-                               OutputActivityPort.class));
-               binding.setBoundProcessorPort(resolveBeanUri(original
-                               .getBindOutputProcessorPort().getResource(),
-                               OutputProcessorPort.class));
-               
binding.setParent(getParserState().getCurrent(ProcessorBinding.class));
-       }
-
-       protected void parseProcessorBinding(
-                       org.apache.taverna.scufl2.rdfxml.jaxb.ProcessorBinding 
original)
-                       throws ReaderException {
-               org.apache.taverna.scufl2.api.profiles.ProcessorBinding binding 
= new org.apache.taverna.scufl2.api.profiles.ProcessorBinding();
-               binding.setParent(getParserState().getCurrent(
-                               
org.apache.taverna.scufl2.api.profiles.Profile.class));
-               mapBean(original.getAbout(), binding);
-               getParserState().push(binding);
-
-               if (original.getName() != null)
-                       binding.setName(original.getName());
-               if (original.getActivityPosition() != null)
-                       
binding.setActivityPosition(original.getActivityPosition()
-                                       .getValue());
-
-               URI processorUri = 
resolve(original.getBindProcessor().getResource());
-               URI activityUri = 
resolve(original.getBindActivity().getResource());
-
-               binding.setBoundProcessor((Processor) 
resolveBeanUri(processorUri));
-               binding.setBoundActivity((Activity) 
resolveBeanUri(activityUri));
-
-               for (InputPortBinding inputPortBinding : 
original.getInputPortBinding())
-                       
parseInputPortBinding(inputPortBinding.getInputPortBinding());
-               for (OutputPortBinding outputPortBinding : original
-                               .getOutputPortBinding())
-                       
parseOutputPortBinding(outputPortBinding.getOutputPortBinding());
-
-               getParserState().pop();
-       }
-
-       protected void parseProfile(Profile original, URI profileUri) {
-               org.apache.taverna.scufl2.api.profiles.Profile p = new 
org.apache.taverna.scufl2.api.profiles.Profile();
-               p.setParent(getParserState().getCurrent(WorkflowBundle.class));
-
-               getParserState().push(p);
-
-               if (original.getAbout() != null) {
-                       URI about = getParserState().getCurrentBase().resolve(
-                                       original.getAbout());
-                       mapBean(about, p);
-               } else
-                       mapBean(profileUri, p);
-
-               if (original.getName() != null)
-                       p.setName(original.getName());
-               // Note - we'll pop() in profileSecond() instead
-       }
-
-       protected void parseProfileSecond(Profile profileElem) {
-               // TODO: Parse activates config etc.
-               getParserState().pop();
-       }
-
-       protected void readProfile(URI profileUri, URI source)
-                       throws ReaderException, IOException {
-               if (source.isAbsolute())
-                       throw new ReaderException("Can't read external profile 
source "
-                                       + source);
-               InputStream bundleStream = getParserState().getUcfPackage()
-                               .getResourceAsInputStream(source.getRawPath());
-               if (bundleStream == null)
-                   throw new ReaderException("Can't find profile " + 
source.getPath());
-               readProfile(profileUri, source, bundleStream);
-       }
-
-       @SuppressWarnings("unchecked")
-       protected void readProfile(URI profileUri, URI source,
-                       InputStream bundleStream) throws ReaderException, 
IOException {
-               JAXBElement<ProfileDocument> elem;
-               try {
-                       elem = (JAXBElement<ProfileDocument>) unmarshaller
-                                       .unmarshal(bundleStream);
-               } catch (JAXBException e) {
-                       throw new ReaderException("Can't parse profile document 
" + source,
-                                       e);
-               }
-
-               URI base = getParserState().getLocation().resolve(source);
-               if (elem.getValue().getBase() != null)
-                       base = base.resolve(elem.getValue().getBase());
-
-               getParserState().setCurrentBase(base);
-
-               org.apache.taverna.scufl2.rdfxml.jaxb.Profile profileElem = 
null;
-               for (Object any : elem.getValue().getAny())
-                       if (any instanceof 
org.apache.taverna.scufl2.rdfxml.jaxb.Profile) {
-                               if (profileElem != null)
-                                       throw new ReaderException("More than 
one <Profile> found");
-                               profileElem = 
(org.apache.taverna.scufl2.rdfxml.jaxb.Profile) any;
-                               parseProfile(profileElem, profileUri);
-                       } else if (any instanceof 
org.apache.taverna.scufl2.rdfxml.jaxb.Activity) {
-                               if (profileElem == null)
-                                       throw new ReaderException("No <Profile> 
found");
-                               
parseActivity((org.apache.taverna.scufl2.rdfxml.jaxb.Activity) any);
-                       } else if (any instanceof 
org.apache.taverna.scufl2.rdfxml.jaxb.ProcessorBinding) {
-                               if (profileElem == null)
-                                       throw new ReaderException("No <Profile> 
found");
-                               
parseProcessorBinding((org.apache.taverna.scufl2.rdfxml.jaxb.ProcessorBinding) 
any);
-                       } else if (any instanceof 
org.apache.taverna.scufl2.rdfxml.jaxb.Configuration) {
-                               if (profileElem == null)
-                                       throw new ReaderException("No <Profile> 
found");
-                               
parseConfiguration((org.apache.taverna.scufl2.rdfxml.jaxb.Configuration) any);
-                       }
-               parseProfileSecond(profileElem);
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/RDFXMLReader.java
----------------------------------------------------------------------
diff --git 
a/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/RDFXMLReader.java
 
b/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/RDFXMLReader.java
deleted file mode 100644
index dd81ba0..0000000
--- 
a/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/RDFXMLReader.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.apache.taverna.scufl2.rdfxml;
-/*
- *
- * 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.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.nio.charset.Charset;
-import java.util.Collections;
-import java.util.Set;
-
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.api.io.WorkflowBundleReader;
-import org.apache.taverna.scufl2.ucfpackage.UCFPackage;
-
-
-public class RDFXMLReader implements WorkflowBundleReader {
-       public static final String 
APPLICATION_VND_TAVERNA_SCUFL2_WORKFLOW_BUNDLE = 
"application/vnd.taverna.scufl2.workflow-bundle";
-       public static final String APPLICATION_RDF_XML = "application/rdf+xml";
-
-       @Override
-       public Set<String> getMediaTypes() {
-               return 
Collections.singleton(APPLICATION_VND_TAVERNA_SCUFL2_WORKFLOW_BUNDLE);
-       }
-
-       @Override
-       public WorkflowBundle readBundle(File bundleFile, String mediaType)
-                       throws ReaderException, IOException {
-               UCFPackage ucfPackage = new UCFPackage(bundleFile);
-               WorkflowBundleParser deserializer = new WorkflowBundleParser();
-               return deserializer.readWorkflowBundle(ucfPackage, 
bundleFile.toURI());
-       }
-
-       @Override
-       public WorkflowBundle readBundle(InputStream inputStream, String 
mediaType)
-                       throws ReaderException, IOException {
-               UCFPackage ucfPackage = new UCFPackage(inputStream);
-               WorkflowBundleParser deserializer = new WorkflowBundleParser();
-               return deserializer.readWorkflowBundle(ucfPackage, 
URI.create(""));
-       }
-
-       @Override
-       public String guessMediaTypeForSignature(byte[] firstBytes) {
-               if (firstBytes.length < 100)
-                       return null;
-               Charset latin1 = Charset.forName("ISO-8859-1");
-               String pk = new String(firstBytes, 0, 2, latin1);
-               if (!pk.equals("PK"))
-                       return null;
-               String mimetype = new String(firstBytes, 30, 8, latin1);
-               if (!mimetype.equals("mimetype"))
-                       return null;
-               String bundle = new String(firstBytes, 38,
-                               
APPLICATION_VND_TAVERNA_SCUFL2_WORKFLOW_BUNDLE.length(), latin1);
-               if 
(!bundle.equals(APPLICATION_VND_TAVERNA_SCUFL2_WORKFLOW_BUNDLE))
-                       return null;
-               return APPLICATION_VND_TAVERNA_SCUFL2_WORKFLOW_BUNDLE;
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/RDFXMLSerializer.java
----------------------------------------------------------------------
diff --git 
a/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/RDFXMLSerializer.java
 
b/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/RDFXMLSerializer.java
deleted file mode 100644
index 3ab7501..0000000
--- 
a/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/RDFXMLSerializer.java
+++ /dev/null
@@ -1,860 +0,0 @@
-package org.apache.taverna.scufl2.rdfxml;
-/*
- *
- * 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.lang.Boolean.TRUE;
-import static java.util.logging.Level.FINE;
-import static java.util.logging.Level.WARNING;
-import static javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI;
-import static javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.net.URI;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Stack;
-import java.util.logging.Logger;
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Marshaller;
-import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
-
-import org.apache.taverna.scufl2.api.activity.Activity;
-import org.apache.taverna.scufl2.api.annotation.Annotation;
-import org.apache.taverna.scufl2.api.common.Typed;
-import org.apache.taverna.scufl2.api.common.URITools;
-import org.apache.taverna.scufl2.api.common.Visitor;
-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.DataLink;
-import org.apache.taverna.scufl2.api.core.Processor;
-import org.apache.taverna.scufl2.api.core.Workflow;
-import org.apache.taverna.scufl2.api.io.WriterException;
-import org.apache.taverna.scufl2.api.iterationstrategy.CrossProduct;
-import org.apache.taverna.scufl2.api.iterationstrategy.DotProduct;
-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.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.rdfxml.impl.NamespacePrefixMapperJAXB_RI;
-import org.apache.taverna.scufl2.ucfpackage.UCFPackage;
-import org.w3._1999._02._22_rdf_syntax_ns_.RDF;
-import org.w3._1999._02._22_rdf_syntax_ns_.Resource;
-import org.w3._1999._02._22_rdf_syntax_ns_.Type;
-import org.w3._2000._01.rdf_schema_.SeeAlso;
-import org.xml.sax.SAXException;
-
-import org.apache.taverna.scufl2.rdfxml.jaxb.Blocking;
-import org.apache.taverna.scufl2.rdfxml.jaxb.Control;
-import org.apache.taverna.scufl2.rdfxml.jaxb.DataLink.MergePosition;
-import org.apache.taverna.scufl2.rdfxml.jaxb.DataLinkEntry;
-import org.apache.taverna.scufl2.rdfxml.jaxb.GranularPortDepth;
-import 
org.apache.taverna.scufl2.rdfxml.jaxb.IterationStrategyStack.IterationStrategies;
-import org.apache.taverna.scufl2.rdfxml.jaxb.ObjectFactory;
-import org.apache.taverna.scufl2.rdfxml.jaxb.PortDepth;
-import org.apache.taverna.scufl2.rdfxml.jaxb.PortNode.DesiredDepth;
-import org.apache.taverna.scufl2.rdfxml.jaxb.ProcessorBinding.ActivityPosition;
-import org.apache.taverna.scufl2.rdfxml.jaxb.ProcessorBinding.InputPortBinding;
-import 
org.apache.taverna.scufl2.rdfxml.jaxb.ProcessorBinding.OutputPortBinding;
-import org.apache.taverna.scufl2.rdfxml.jaxb.ProductOf;
-import org.apache.taverna.scufl2.rdfxml.jaxb.ProfileDocument;
-import org.apache.taverna.scufl2.rdfxml.jaxb.SeeAlsoType;
-import org.apache.taverna.scufl2.rdfxml.jaxb.WorkflowBundleDocument;
-import org.apache.taverna.scufl2.rdfxml.jaxb.WorkflowDocument;
-
-public class RDFXMLSerializer {
-       private static final String DOT_RDF = ".rdf";
-       protected static final URI OA = URI.create("http://www.w3.org/ns/oa#";);
-       protected static final URI PAV = URI.create("http://purl.org/pav/";);
-       private static boolean warnedOnce = false;
-       
-       public class ProfileSerialisationVisitor implements Visitor {
-               private org.apache.taverna.scufl2.rdfxml.jaxb.Activity activity;
-               private final ProfileDocument doc;
-               private org.apache.taverna.scufl2.rdfxml.jaxb.Profile 
profileElem;
-               private Profile profile;
-               private org.apache.taverna.scufl2.rdfxml.jaxb.ProcessorBinding 
processorBindingElem;
-
-               public ProfileSerialisationVisitor(ProfileDocument doc) {
-                       this.doc = doc;
-               }
-
-               private void activity(Activity node) {
-                       activity = objectFactory.createActivity();
-                       activity.setAbout(uri(node));
-                       activity.setType(type(node));
-                       activity.setName(node.getName());
-                       doc.getAny().add(activity);
-               }
-
-               private void configuration(Configuration node) {
-                       org.apache.taverna.scufl2.rdfxml.jaxb.Configuration 
configuration = objectFactory
-                                       .createConfiguration();
-                       
configuration.setConfigure(resource(uri(node.getConfigures())));
-                       configuration.setName(node.getName());
-                       configuration.setType(type(node));
-                       
-                       URI configUri = uriTools.relativeUriForBean(node, 
profile);
-            String jsonPath = configUri.toString().replaceFirst("/$", ".json");
-
-                       URI profilePath = uriTools.relativeUriForBean(profile, 
profile.getParent());
-                       
-                       String bundlePath = profilePath + jsonPath;
-                       
-                       UCFPackage bundle = profile.getParent().getResources();
-                       try {
-                bundle.addResource(node.getJsonAsString(), bundlePath, 
"application/json");
-            } catch (IOException e) {
-                logger.log(WARNING, "Can't save JSON to " + bundlePath, e);
-            }
-                       configuration.setAbout(configUri.toString());
-                       
-                       SeeAlso seeAlso = rdfsObjectFactory.createSeeAlso();
-                       seeAlso.setResource(jsonPath);
-                       configuration.setSeeAlso(seeAlso);
-            
-                       // TODO: No way in API to mark non-activated 
configurations
-                       
profileElem.getActivateConfiguration().add(resource(uri(node)));
-                       doc.getAny().add(configuration);
-               }
-
-               private GranularPortDepth granularPortDepth(Integer integer) {
-                       if (integer == null)
-                               return null;
-                       GranularPortDepth p = 
objectFactory.createGranularPortDepth();
-                       p.setValue(integer);
-                       p.setDatatype(p.getDatatype());
-                       return p;
-               }
-
-               private void inputActivityPort(InputActivityPort node) {
-                       org.apache.taverna.scufl2.rdfxml.jaxb.InputActivityPort 
inputActivityPort = objectFactory
-                                       .createInputActivityPort();
-                       inputActivityPort.setAbout(uri(node));
-                       inputActivityPort.setName(node.getName());
-                       
inputActivityPort.setPortDepth(portDepth(node.getDepth()));
-
-                       
org.apache.taverna.scufl2.rdfxml.jaxb.Activity.InputActivityPort wrapper = 
objectFactory
-                                       .createActivityInputActivityPort();
-                       wrapper.setInputActivityPort(inputActivityPort);
-                       activity.getInputActivityPort().add(wrapper);
-               }
-
-               private void outputActivityPort(OutputActivityPort node) {
-                       
org.apache.taverna.scufl2.rdfxml.jaxb.OutputActivityPort outputActivityPort = 
objectFactory
-                                       .createOutputActivityPort();
-                       outputActivityPort.setAbout(uri(node));
-                       outputActivityPort.setName(node.getName());
-                       
outputActivityPort.setPortDepth(portDepth(node.getDepth()));
-                       
outputActivityPort.setGranularPortDepth(granularPortDepth(node
-                                       .getGranularDepth()));
-
-                       
org.apache.taverna.scufl2.rdfxml.jaxb.Activity.OutputActivityPort wrapper = 
objectFactory
-                                       .createActivityOutputActivityPort();
-                       wrapper.setOutputActivityPort(outputActivityPort);
-                       activity.getOutputActivityPort().add(wrapper);
-               }
-
-               private PortDepth portDepth(Integer integer) {
-                       if (integer == null)
-                               return null;
-                       PortDepth p = objectFactory.createPortDepth();
-                       p.setValue(integer);
-                       p.setDatatype(p.getDatatype());
-                       return p;
-               }
-
-               private void processorBinding(ProcessorBinding node) {
-                       processorBindingElem = 
objectFactory.createProcessorBinding();
-                       processorBindingElem.setAbout(uri(node));
-                       processorBindingElem.setName(node.getName());
-                       processorBindingElem.setBindActivity(resource(uri(node
-                                       .getBoundActivity())));
-                       processorBindingElem.setBindProcessor(resource(uri(node
-                                       .getBoundProcessor())));
-                       if (node.getActivityPosition() != null) {
-                               ActivityPosition value = new ActivityPosition();
-                               value.setDatatype(value.getDatatype());
-                               value.setValue(node.getActivityPosition());
-                               processorBindingElem.setActivityPosition(value);
-                       }
-
-                       
profileElem.getProcessorBinding().add(resource(uri(node)));
-                       doc.getAny().add(processorBindingElem);
-               }
-
-               private void 
processorInputPortBinding(ProcessorInputPortBinding node) {
-                       org.apache.taverna.scufl2.rdfxml.jaxb.InputPortBinding 
inputBinding = objectFactory
-                                       .createInputPortBinding();
-                       inputBinding.setAbout(uri(node));
-                       inputBinding.setBindInputActivityPort(resource(uri(node
-                                       .getBoundActivityPort())));
-                       inputBinding.setBindInputProcessorPort(resource(uri(node
-                                       .getBoundProcessorPort())));
-                       InputPortBinding b = objectFactory
-                                       
.createProcessorBindingInputPortBinding();
-                       b.setInputPortBinding(inputBinding);
-                       processorBindingElem.getInputPortBinding().add(b);
-               }
-
-               private void 
processorOutputPortBinding(ProcessorOutputPortBinding node) {
-                       org.apache.taverna.scufl2.rdfxml.jaxb.OutputPortBinding 
outputBinding = objectFactory
-                                       .createOutputPortBinding();
-                       outputBinding.setAbout(uri(node));
-                       
outputBinding.setBindOutputActivityPort(resource(uri(node
-                                       .getBoundActivityPort())));
-                       
outputBinding.setBindOutputProcessorPort(resource(uri(node
-                                       .getBoundProcessorPort())));
-                       OutputPortBinding b = objectFactory
-                                       
.createProcessorBindingOutputPortBinding();
-                       b.setOutputPortBinding(outputBinding);
-                       processorBindingElem.getOutputPortBinding().add(b);
-               }
-
-               private void profile(Profile node) {
-                       profile = node;
-                       profileElem = objectFactory.createProfile();
-                       profileElem.setAbout(uri(node));
-                       profileElem.setName(node.getName());
-                       doc.getAny().add(profileElem);
-               }
-
-               private String uri(WorkflowBean node) {
-                       return uriTools.relativeUriForBean(node, 
profile).toASCIIString();
-               }
-
-               @Override
-               public boolean visit(WorkflowBean node) {
-                       if (node instanceof Profile)
-                               profile((Profile) node);
-                       else if (node instanceof Activity)
-                               activity((Activity) node);
-                       else if (node instanceof InputActivityPort)
-                               inputActivityPort((InputActivityPort) node);
-                       else if (node instanceof OutputActivityPort)
-                               outputActivityPort((OutputActivityPort) node);
-                       else if (node instanceof ProcessorBinding)
-                               processorBinding((ProcessorBinding) node);
-                       else if (node instanceof ProcessorInputPortBinding)
-                               
processorInputPortBinding((ProcessorInputPortBinding) node);
-                       else if (node instanceof ProcessorOutputPortBinding)
-                               
processorOutputPortBinding((ProcessorOutputPortBinding) node);
-                       else if (node instanceof Configuration)
-                               configuration((Configuration) node);
-                       else
-                               throw new IllegalStateException("Unexpected 
node " + node);
-                       return true;
-               }
-
-               @Override
-               public boolean visitEnter(WorkflowBean node) {
-                       return visit(node);
-               }
-
-               @Override
-               public boolean visitLeave(WorkflowBean node) {
-                       return true;
-               }
-       }
-
-       public class WorkflowSerialisationVisitor implements Visitor {
-               private final org.apache.taverna.scufl2.rdfxml.jaxb.Workflow 
workflow;
-               private org.apache.taverna.scufl2.rdfxml.jaxb.Processor proc;
-               private Workflow wf;
-               @SuppressWarnings("unused")
-               private org.apache.taverna.scufl2.rdfxml.jaxb.DispatchStack 
dispatchStack;
-               private 
org.apache.taverna.scufl2.rdfxml.jaxb.IterationStrategyStack 
iterationStrategyStack;
-               private IterationStrategies iterationStrategies;
-               private Stack<List<Object>> productStack;
-
-               public WorkflowSerialisationVisitor(
-                               org.apache.taverna.scufl2.rdfxml.jaxb.Workflow 
workflow) {
-                       this.workflow = workflow;
-               }
-
-               private GranularPortDepth makeGranularPortDepth(Integer 
granularDepth) {
-                       if (granularDepth == null)
-                               return null;
-                       GranularPortDepth portDepth = objectFactory
-                                       .createGranularPortDepth();
-                       portDepth.setValue(granularDepth);
-                       portDepth.setDatatype(portDepth.getDatatype());
-                       return portDepth;
-               }
-
-               private PortDepth makePortDepth(Integer depth) {
-                       if (depth == null)
-                               return null;
-                       PortDepth portDepth = objectFactory.createPortDepth();
-                       portDepth.setValue(depth);
-                       portDepth.setDatatype(portDepth.getDatatype());
-                       return portDepth;
-               }
-
-               private Resource makeResource(URI uri) {
-                       Resource resource = rdfObjectFactory.createResource();
-                       resource.setResource(uri.toASCIIString());
-                       return resource;
-               }
-
-               @Override
-               public boolean visit(WorkflowBean node) {
-                       if (node instanceof Workflow) {
-                               wf = (Workflow) node;
-                               workflow.setAbout("");
-                               workflow.setName(wf.getName());
-
-                               if (wf.getIdentifier() != null) {
-                                       Resource wfId = 
rdfObjectFactory.createResource();
-                                       
wfId.setResource(wf.getIdentifier().toASCIIString());
-                                       workflow.setWorkflowIdentifier(wfId);
-                               }
-                       }
-                                               
-                       URI uri = uriTools.relativeUriForBean(node, wf);
-
-                       if (node instanceof InputWorkflowPort) {
-                               InputWorkflowPort ip = (InputWorkflowPort) node;
-                               
org.apache.taverna.scufl2.rdfxml.jaxb.Workflow.InputWorkflowPort inP = 
objectFactory
-                                               
.createWorkflowInputWorkflowPort();
-                               
org.apache.taverna.scufl2.rdfxml.jaxb.InputWorkflowPort inPort = objectFactory
-                                               .createInputWorkflowPort();
-                               inP.setInputWorkflowPort(inPort);
-                               inPort.setName(ip.getName());
-
-                               URI portURI = uriTools.relativeUriForBean(ip, 
ip.getParent());
-                               inPort.setAbout(portURI.toASCIIString());
-
-                               PortDepth portDepth = 
makePortDepth(ip.getDepth());
-                               inPort.setPortDepth(portDepth);
-                               workflow.getInputWorkflowPort().add(inP);
-                       }
-                       if (node instanceof OutputWorkflowPort) {
-                               OutputWorkflowPort op = (OutputWorkflowPort) 
node;
-                               
org.apache.taverna.scufl2.rdfxml.jaxb.Workflow.OutputWorkflowPort inP = 
objectFactory
-                                               
.createWorkflowOutputWorkflowPort();
-                               
org.apache.taverna.scufl2.rdfxml.jaxb.OutputWorkflowPort outPort = objectFactory
-                                               .createOutputWorkflowPort();
-                               inP.setOutputWorkflowPort(outPort);
-                               outPort.setName(op.getName());
-
-                               URI portURI = uriTools.relativeUriForBean(op, 
op.getParent());
-                               outPort.setAbout(portURI.toASCIIString());
-                               workflow.getOutputWorkflowPort().add(inP);
-                       }
-                       if (node instanceof Processor) {
-                               Processor processor = (Processor) node;
-                               
org.apache.taverna.scufl2.rdfxml.jaxb.Workflow.Processor wfProc = objectFactory
-                                               .createWorkflowProcessor();
-                               proc = objectFactory.createProcessor();
-                               wfProc.setProcessor(proc);
-                               proc.setName(processor.getName());
-                               URI procUri = 
uriTools.relativeUriForBean(processor, wf);
-                               proc.setAbout(procUri.toASCIIString());
-                               wfProc.setProcessor(proc);
-                               workflow.getProcessor().add(wfProc);
-                       }
-                       if (node instanceof InputProcessorPort) {
-                               InputProcessorPort inPort = 
(InputProcessorPort) node;
-                               
org.apache.taverna.scufl2.rdfxml.jaxb.InputProcessorPort port = objectFactory
-                                               .createInputProcessorPort();
-                               port.setAbout(uri.toASCIIString());
-                               port.setName(inPort.getName());
-                               
port.setPortDepth(makePortDepth(inPort.getDepth()));
-                               
org.apache.taverna.scufl2.rdfxml.jaxb.Processor.InputProcessorPort 
inputProcessorPort = objectFactory
-                                               
.createProcessorInputProcessorPort();
-                               inputProcessorPort.setInputProcessorPort(port);
-                               
proc.getInputProcessorPort().add(inputProcessorPort);
-                       }
-                       if (node instanceof OutputProcessorPort) {
-                               
org.apache.taverna.scufl2.rdfxml.jaxb.OutputProcessorPort port;
-                               OutputProcessorPort outPort = 
(OutputProcessorPort) node;
-                               port = 
objectFactory.createOutputProcessorPort();
-                               port.setAbout(uri.toASCIIString());
-                               port.setName(outPort.getName());
-                               
port.setPortDepth(makePortDepth(outPort.getDepth()));
-                               
port.setGranularPortDepth(makeGranularPortDepth(outPort
-                                               .getGranularDepth()));
-
-                               
org.apache.taverna.scufl2.rdfxml.jaxb.Processor.OutputProcessorPort 
outputProcessorPort = objectFactory
-                                               
.createProcessorOutputProcessorPort();
-                               
outputProcessorPort.setOutputProcessorPort(port);
-                               
proc.getOutputProcessorPort().add(outputProcessorPort);
-                       }
-                       if (node instanceof IterationStrategyStack) {
-                               iterationStrategyStack = objectFactory
-                                               .createIterationStrategyStack();
-                               
iterationStrategyStack.setAbout(uri.toASCIIString());
-                               
org.apache.taverna.scufl2.rdfxml.jaxb.Processor.IterationStrategyStack 
processorIterationStrategyStack = objectFactory
-                                               
.createProcessorIterationStrategyStack();
-                               processorIterationStrategyStack
-                                               
.setIterationStrategyStack(iterationStrategyStack);
-                               
proc.setIterationStrategyStack(processorIterationStrategyStack);
-                               productStack = new Stack<List<Object>>();
-                       }
-                       if (node instanceof IterationStrategyTopNode
-                                       && productStack.isEmpty()) {
-                               iterationStrategies = objectFactory
-                                               
.createIterationStrategyStackIterationStrategies();
-                               iterationStrategyStack
-                                               
.setIterationStrategies(iterationStrategies);
-                               
iterationStrategies.setParseType(iterationStrategies
-                                               .getParseType());
-                               List<Object> dotProductOrCrossProduct = 
iterationStrategies
-                                               .getDotProductOrCrossProduct();
-                               productStack.add(dotProductOrCrossProduct);
-                       }
-                       if (node instanceof CrossProduct) {
-                               
org.apache.taverna.scufl2.rdfxml.jaxb.CrossProduct crossProduct = objectFactory
-                                               .createCrossProduct();
-                               crossProduct.setAbout(uri.toASCIIString());
-                               productStack.peek().add(crossProduct);
-                               ProductOf productOf = 
objectFactory.createProductOf();
-                               
productOf.setParseType(productOf.getParseType());
-                               crossProduct.setProductOf(productOf);
-                               
productStack.add(crossProduct.getProductOf().getCrossProductOrDotProductOrPortNode());
-                       }
-                       if (node instanceof DotProduct) {
-                               
org.apache.taverna.scufl2.rdfxml.jaxb.DotProduct dotProduct = objectFactory
-                                               .createDotProduct();
-                               dotProduct.setAbout(uri.toASCIIString());
-                               productStack.peek().add(dotProduct);
-                               ProductOf productOf = 
objectFactory.createProductOf();
-                               
productOf.setParseType(productOf.getParseType());
-                               dotProduct.setProductOf(productOf);
-                               productStack.add(dotProduct.getProductOf()
-                                               
.getCrossProductOrDotProductOrPortNode());
-                       }
-                       if (node instanceof PortNode) {
-                               PortNode portNode = (PortNode) node;
-                               InputProcessorPort inPort = 
portNode.getInputProcessorPort();
-                               URI portUri = 
uriTools.relativeUriForBean(inPort, wf);
-                               org.apache.taverna.scufl2.rdfxml.jaxb.PortNode 
port = objectFactory.createPortNode();
-                               port.setAbout(uri.toASCIIString());
-                               if (portNode.getDesiredDepth() != null) {
-                                       DesiredDepth value = 
objectFactory.createPortNodeDesiredDepth();
-                                       value.setDatatype(value.getDatatype());
-                                       
value.setValue(portNode.getDesiredDepth());
-                                       port.setDesiredDepth(value);
-                               }
-                               
port.setIterateOverInputPort(makeResource(portUri));
-                               productStack.peek().add(port);
-                       }
-                       if (node instanceof DataLink) {
-                               DataLink dataLink = (DataLink) node;
-                               org.apache.taverna.scufl2.rdfxml.jaxb.DataLink 
link = objectFactory
-                                               .createDataLink();
-                               link.setAbout(uri.toASCIIString());
-                               URI fromUri = uriTools.relativeUriForBean(
-                                               dataLink.getReceivesFrom(), wf);
-                               URI toUri = 
uriTools.relativeUriForBean(dataLink.getSendsTo(),
-                                               wf);
-                               link.setReceiveFrom(makeResource(fromUri));
-                               link.setSendTo(makeResource(toUri));
-
-                               if (dataLink.getMergePosition() != null) {
-                                       MergePosition value = 
objectFactory.createDataLinkMergePosition();
-                                       value.setValue(dataLink
-                                                       .getMergePosition());
-                                       value.setDatatype(value.getDatatype());
-                                       link.setMergePosition(value);
-                               }
-
-                               DataLinkEntry linkEntry = 
objectFactory.createDataLinkEntry();
-                               linkEntry.setDataLink(link);
-                               workflow.getDatalink().add(linkEntry);
-                       }
-                       if (node instanceof BlockingControlLink) {
-                               BlockingControlLink controlLink = 
(BlockingControlLink) node;
-                               URI blockUri = uriTools.relativeUriForBean(
-                                               controlLink.getBlock(), wf);
-                               URI untilUri = uriTools.relativeUriForBean(
-                                               controlLink.getUntilFinished(), 
wf);
-
-                               Blocking blocking = 
objectFactory.createBlocking();
-                               blocking.setAbout(uri.toASCIIString());
-                               blocking.setBlock(makeResource(blockUri));
-                               
blocking.setUntilFinished(makeResource(untilUri));
-
-                               Control control = objectFactory.createControl();
-                               control.setBlocking(blocking);
-                               workflow.getControl().add(control);
-                       }
-
-                       // TODO: Datalinks
-
-                       return true;
-               }
-
-               @Override
-               public boolean visitEnter(WorkflowBean node) {
-                       return visit(node);
-               }
-
-               @Override
-               public boolean visitLeave(WorkflowBean node) {
-                       if (node instanceof IterationStrategyTopNode)
-                               // Actually for any Cross/Dot product
-                               productStack.pop();
-                       return true;
-               }
-       }
-
-       protected synchronized static JAXBContext getJAxbContextStatic()
-                       throws JAXBException {
-               if (jaxbContextStatic == null) {
-                       Class<?>[] packages = { ObjectFactory.class,
-                                       
org.w3._1999._02._22_rdf_syntax_ns_.ObjectFactory.class,
-                                       
org.w3._2000._01.rdf_schema_.ObjectFactory.class };
-                       jaxbContextStatic = JAXBContext.newInstance(packages);
-               }
-               return jaxbContextStatic;
-       }
-
-       public void annotation(final Annotation ann) {
-               URI wfBundleURI = uriTools.uriForBean(wfBundle);
-               URI annUri = uriTools.uriForBean(ann);
-               URI bodyURI = ann.getBody();
-               if (bodyURI == null || bodyURI.isAbsolute())
-                       // Workaround with separate file for the annotation 
alone
-                       bodyURI = 
annUri.resolve(uriTools.validFilename(ann.getName()) + DOT_RDF);
-               URI pathUri = uriTools.relativePath(wfBundleURI, bodyURI);      
                
-               if (ann.getBody() == null || 
ann.getBody().equals(wfBundleURI.resolve(pathUri)))
-                       // Set the relative path
-                       ann.setBody(pathUri);
-
-               // TODO: Add annotation to RO manifest
-               
-//             // Miniature OA description for now
-//             // See http://openannotation.org/spec/core/20130205/
-//             final PropertyResource annProv = new PropertyResource();
-//             annProv.setResourceURI(annUri);
-//             annProv.setTypeURI(OA.resolve("#Annotation"));
-//             
-//             if (ann.getAnnotatedAt() != null) {
-//                     annProv.addProperty(OA.resolve("#annotedAt"),
-//                                     new 
PropertyLiteral(ann.getAnnotatedAt()));
-//             }
-//             if (ann.getSerializedAt() != null) {
-//                     annProv.addProperty(OA.resolve("#serializedAt"),
-//                                     new 
PropertyLiteral(ann.getSerializedAt()));
-//             }
-//             
-//             if (ann.getAnnotatedBy() != null) {
-//                     annProv.addPropertyReference(OA.resolve("#annotatedBy"),
-//                                     ann.getAnnotatedBy());
-//             }
-//             if (ann.getSerializedBy() != null) {
-//                     
annProv.addPropertyReference(OA.resolve("#serializedBy"),
-//                                     ann.getSerializedBy());
-//             }
-//             
-//             if (ann.getBody() != null) {
-//                     annProv.addPropertyReference(OA.resolve("#hasBody"), 
ann.getBody());
-//             } else if (! ann.getBodyStatements().isEmpty()){                
                                
-//                     // FIXME: Hack - Our body is also the annotation!
-//                     annProv.addPropertyReference(OA.resolve("#hasBody"), 
pathUri);
-//             }
-//             
-//             // CHECK: should this be a relative reference instead?
-//             annProv.addPropertyReference(OA.resolve("#hasTarget"), 
-//                             uriTools.uriForBean(ann.getTarget()));          
                        
-//             // Serialize the metadata
-//
-//     
-//             try {
-//                     /*
-//                      * TODO: Serialize manually with nicer 
indentation/namespaces etc.,
-//                      * as done for our other RDF/XML documents
-//                      */
-//                     wfBundle.getResources()
-//                                     .addResource(visitor.getDoc(), 
pathUri.toASCIIString(), APPLICATION_RDF_XML);
-//             } catch (IOException e) {
-//                     logger.log(Level.WARNING, "Can't write annotation to " 
+ pathUri, e);
-//             }
-               
-       }
-
-       private ObjectFactory objectFactory = new ObjectFactory();
-
-       private org.w3._2000._01.rdf_schema_.ObjectFactory rdfsObjectFactory = 
new org.w3._2000._01.rdf_schema_.ObjectFactory();
-       private org.w3._1999._02._22_rdf_syntax_ns_.ObjectFactory 
rdfObjectFactory = new org.w3._1999._02._22_rdf_syntax_ns_.ObjectFactory();
-       private URITools uriTools = new URITools();
-       private boolean usingSchema = false;
-
-       private WorkflowBundle wfBundle;
-
-       private JAXBContext jaxbContext;
-
-       private Map<WorkflowBean, URI> seeAlsoUris = new HashMap<>();
-       private static JAXBContext jaxbContextStatic;
-       private static Logger logger = Logger.getLogger(RDFXMLSerializer.class
-                       .getCanonicalName());
-       public RDFXMLSerializer() {
-       }
-
-       public RDFXMLSerializer(WorkflowBundle wfBundle) {
-               setWfBundle(wfBundle);
-       }
-
-       public JAXBContext getJaxbContext() throws JAXBException {
-               if (jaxbContext == null)
-                       return getJAxbContextStatic();
-               return jaxbContext;
-       }
-
-       public Marshaller getMarshaller() {
-               String schemaPath = "xsd/scufl2.xsd";
-               Marshaller marshaller;
-               try {
-                       marshaller = getJaxbContext().createMarshaller();
-
-                       if (isUsingSchema()) {
-                               SchemaFactory schemaFactory = SchemaFactory
-                                               
.newInstance(W3C_XML_SCHEMA_NS_URI);
-                               Schema schema = 
schemaFactory.newSchema(getClass().getResource(
-                                               schemaPath));
-                               // FIXME: re-enable schema
-                               marshaller.setSchema(schema);
-                       }
-                       marshaller.setProperty(JAXB_FORMATTED_OUTPUT, TRUE);
-                       marshaller
-                                       .setProperty(
-                                                       "jaxb.schemaLocation",
-                                                       
"http://ns.taverna.org.uk/2010/scufl2# 
http://ns.taverna.org.uk/2010/scufl2/scufl2.xsd "
-                                                                       + 
"http://www.w3.org/1999/02/22-rdf-syntax-ns# 
http://ns.taverna.org.uk/2010/scufl2/rdf.xsd";);
-               } catch (JAXBException e) {
-                       throw new IllegalStateException(e);
-               } catch (SAXException e) {
-                       throw new IllegalStateException("Could not load schema "
-                                       + schemaPath, e);
-               }
-               setPrefixMapper(marshaller);
-               return marshaller;
-       }
-
-       public WorkflowBundle getWfBundle() {
-               return wfBundle;
-       }
-
-       public boolean isUsingSchema() {
-               return usingSchema;
-       }
-
-       protected ProfileDocument makeProfile(Profile pf, URI path) {
-               ProfileDocument doc = objectFactory.createProfileDocument();
-
-               objectFactory.createProfile();
-               pf.accept(new ProfileSerialisationVisitor(doc) {
-               });
-               return doc;
-       }
-
-       protected org.apache.taverna.scufl2.rdfxml.jaxb.Workflow makeWorkflow(
-                       Workflow wf, URI documentPath) {
-               org.apache.taverna.scufl2.rdfxml.jaxb.Workflow workflow = 
objectFactory
-                               .createWorkflow();
-               wf.accept(new WorkflowSerialisationVisitor(workflow) {
-               });
-               return workflow;
-       }
-
-       protected org.apache.taverna.scufl2.rdfxml.jaxb.WorkflowBundle 
makeWorkflowBundleElem() {
-               org.apache.taverna.scufl2.rdfxml.jaxb.WorkflowBundle bundle = 
objectFactory
-                               .createWorkflowBundle();
-               // FIXME: Support other URIs
-               bundle.setAbout("");
-               bundle.setName(wfBundle.getName());
-
-               if (wfBundle.getGlobalBaseURI() != null) {
-                       Resource globalBaseURI = 
rdfObjectFactory.createResource();
-                       
globalBaseURI.setResource(wfBundle.getGlobalBaseURI().toASCIIString());
-                       bundle.setGlobalBaseURI(globalBaseURI);
-               }
-
-               for (Workflow wf : wfBundle.getWorkflows()) {
-                       
org.apache.taverna.scufl2.rdfxml.jaxb.WorkflowBundle.Workflow wfElem = 
objectFactory
-                                       .createWorkflowBundleWorkflow();
-                       SeeAlsoType seeAlsoElem = 
objectFactory.createSeeAlsoType();
-                       seeAlsoElem.setAbout(uriTools.relativeUriForBean(wf, 
wfBundle)
-                                       .toASCIIString());
-
-                       if (seeAlsoUris.containsKey(wf)) {
-                               SeeAlso seeAlso = 
rdfsObjectFactory.createSeeAlso();
-                               
seeAlso.setResource(seeAlsoUris.get(wf).toASCIIString());
-                               seeAlsoElem.setSeeAlso(seeAlso);
-                       } else
-                               logger.warning("Can't find bundle URI for 
workflow document "
-                                               + wf.getName());
-
-                       wfElem.setWorkflow(seeAlsoElem);
-                       bundle.getWorkflow().add(wfElem);
-
-                       if (wfBundle.getMainWorkflow() == wf) {
-                               Resource mainWorkflow = 
rdfObjectFactory.createResource();
-                               
mainWorkflow.setResource(seeAlsoElem.getAbout());
-                               bundle.setMainWorkflow(mainWorkflow);
-                       }
-               }
-
-               for (Profile pf : wfBundle.getProfiles()) {
-                       
org.apache.taverna.scufl2.rdfxml.jaxb.WorkflowBundle.Profile wfElem = 
objectFactory
-                                       .createWorkflowBundleProfile();
-                       SeeAlsoType seeAlsoElem = 
objectFactory.createSeeAlsoType();
-                       seeAlsoElem.setAbout(uriTools.relativeUriForBean(pf, 
wfBundle)
-                                       .toASCIIString());
-
-                       if (seeAlsoUris.containsKey(pf)) {
-                               SeeAlso seeAlso = 
rdfsObjectFactory.createSeeAlso();
-                               
seeAlso.setResource(seeAlsoUris.get(pf).toASCIIString());
-                               seeAlsoElem.setSeeAlso(seeAlso);
-                       } else
-                               logger.warning("Can't find bundle URI for 
profile document "
-                                               + pf.getName());
-
-                       wfElem.setProfile(seeAlsoElem);
-                       bundle.getProfile().add(wfElem);
-
-                       if (wfBundle.getMainProfile() == pf) {
-                               Resource mainProfile = 
rdfObjectFactory.createResource();
-                               mainProfile.setResource(seeAlsoElem.getAbout());
-                               bundle.setMainProfile(mainProfile);
-                       }
-               }
-
-               for (Annotation ann : wfBundle.getAnnotations())
-                       annotation(ann);
-               
-               return bundle;
-       }
-
-       public void profileDoc(OutputStream outputStream, Profile pf, URI path)
-                       throws JAXBException, WriterException {
-               ProfileDocument doc = makeProfile(pf, path);
-
-               URI wfUri = uriTools.relativeUriForBean(pf, wfBundle);
-               doc.setBase(uriTools.relativePath(path, wfUri).toASCIIString());
-
-               JAXBElement<RDF> element = rdfObjectFactory.createRDF(doc);
-               getMarshaller().marshal(element, outputStream);
-               seeAlsoUris.put(pf, path);
-       }
-
-       private Resource resource(String uri) {
-               Resource r = rdfObjectFactory.createResource();
-               r.setResource(uri);
-               return r;
-       }
-
-       public void setJaxbContext(JAXBContext jaxbContext) {
-               this.jaxbContext = jaxbContext;
-       }
-
-       protected void setPrefixMapper(Marshaller marshaller) {
-               boolean setPrefixMapper = false;
-
-               try {
-                       /*
-                        * This only works with JAXB RI, in which case we can 
set the
-                        * namespace prefix mapper
-                        */
-                       
Class.forName("com.sun.xml.bind.marshaller.NamespacePrefixMapper");
-                       
marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper",
-                                       new NamespacePrefixMapperJAXB_RI());
-                       /*
-                        * Note: A similar mapper for the built-in java
-                        * (com.sun.xml.bind.internal.namespacePrefixMapper) is 
no longer
-                        * included here, as it will not (easily) compile with 
Maven.
-                        */
-                       setPrefixMapper = true;
-               } catch (Exception e) {
-                       logger.log(FINE, "Can't find NamespacePrefixMapper", e);
-               }
-
-               if (!setPrefixMapper && ! warnedOnce) {
-                       logger.info("Could not set prefix mapper (missing or 
incompatible JAXB) "
-                                       + "- will use prefixes ns0, ns1, ..");
-                       warnedOnce = true;
-               }
-       }
-
-       public void setUsingSchema(boolean usingSchema) {
-               this.usingSchema = usingSchema;
-       }
-
-       public void setWfBundle(WorkflowBundle wfBundle) {
-               this.wfBundle = wfBundle;
-       }
-
-       private Type type(Typed typed) {
-               if (typed.getType() == null)
-                       return null;
-               Type t = rdfObjectFactory.createType();
-               t.setResource(typed.getType().toASCIIString());
-               return t;
-       }
-
-       public void workflowBundleDoc(OutputStream outputStream, URI path)
-                       throws JAXBException, WriterException {
-               org.apache.taverna.scufl2.rdfxml.jaxb.WorkflowBundle bundle = 
makeWorkflowBundleElem();
-               WorkflowBundleDocument doc = objectFactory
-                               .createWorkflowBundleDocument();
-               doc.getAny().add(bundle);
-
-               doc.setBase(path.relativize(URI.create("./")).toASCIIString());
-               JAXBElement<RDF> element = rdfObjectFactory.createRDF(doc);
-
-               getMarshaller().marshal(element, outputStream);
-               seeAlsoUris.put(wfBundle, path);
-       }
-
-       public void workflowDoc(OutputStream outputStream, Workflow wf, URI 
path)
-                       throws JAXBException, WriterException {
-               org.apache.taverna.scufl2.rdfxml.jaxb.Workflow wfElem = 
makeWorkflow(wf,
-                               path);
-               WorkflowDocument doc = objectFactory.createWorkflowDocument();
-               doc.getAny().add(wfElem);
-
-               URI wfUri = uriTools.relativeUriForBean(wf, wfBundle);
-               doc.setBase(uriTools.relativePath(path, wfUri).toASCIIString());
-
-               JAXBElement<RDF> element = rdfObjectFactory.createRDF(doc);
-               getMarshaller().marshal(element, outputStream);
-               seeAlsoUris.put(wf, path);
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/RDFXMLWriter.java
----------------------------------------------------------------------
diff --git 
a/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/RDFXMLWriter.java
 
b/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/RDFXMLWriter.java
deleted file mode 100644
index 3670898..0000000
--- 
a/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/RDFXMLWriter.java
+++ /dev/null
@@ -1,164 +0,0 @@
-package org.apache.taverna.scufl2.rdfxml;
-/*
- *
- * 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.rdfxml.RDFXMLReader.APPLICATION_RDF_XML;
-import static 
org.apache.taverna.scufl2.rdfxml.RDFXMLReader.APPLICATION_VND_TAVERNA_SCUFL2_WORKFLOW_BUNDLE;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.net.URI;
-import java.util.Collections;
-import java.util.Set;
-
-import javax.xml.bind.JAXBException;
-
-import org.apache.taverna.scufl2.api.annotation.Revision;
-import org.apache.taverna.scufl2.api.annotation.Revisioned;
-import org.apache.taverna.scufl2.api.common.URITools;
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.core.Workflow;
-import org.apache.taverna.scufl2.api.io.WorkflowBundleWriter;
-import org.apache.taverna.scufl2.api.io.WriterException;
-import org.apache.taverna.scufl2.api.profiles.Profile;
-import org.apache.taverna.scufl2.ucfpackage.UCFPackage;
-
-
-public class RDFXMLWriter implements WorkflowBundleWriter {
-       private static final String WF = "wf-";
-       private static final String REVISIONS = "-revisions";
-       protected static final String RDF = ".rdf";
-       protected static final String WORKFLOW = "workflow/";
-       protected static final String HISTORY = "history/";
-       protected static final String PROFILE = "profile/";
-       protected static final String WORKFLOW_BUNDLE_RDF = 
"workflowBundle.rdf";
-
-       private static URITools uriTools = new URITools();
-       
-       public static final URITools getUriTools() {
-               return uriTools;
-       }
-
-       public static final void setUriTools(URITools uriTools) {
-               RDFXMLWriter.uriTools = uriTools;
-       }
-
-       /**
-        * Version of Workflow Bundle format
-        */
-    public final String WORKFLOW_BUNDLE_VERSION = "0.4.0";
-
-       @Override
-       public Set<String> getMediaTypes() {
-               return Collections
-                               
.singleton(APPLICATION_VND_TAVERNA_SCUFL2_WORKFLOW_BUNDLE);
-       }
-
-       @Override
-       public void writeBundle(WorkflowBundle wfBundle, File destination,
-                       String mediaType) throws WriterException, IOException {
-               UCFPackage ucfPackage = makeUCFPackage(wfBundle);
-               ucfPackage.save(destination);
-       }
-
-       protected UCFPackage makeUCFPackage(WorkflowBundle wfBundle)
-                       throws IOException, WriterException {
-               //UCFPackage ucfPackage = new UCFPackage();
-               UCFPackage ucfPackage = wfBundle.getResources();                
-               if (ucfPackage.getPackageMediaType() == null)
-                       ucfPackage
-                               
.setPackageMediaType(APPLICATION_VND_TAVERNA_SCUFL2_WORKFLOW_BUNDLE);
-
-               RDFXMLSerializer serializer = new RDFXMLSerializer(wfBundle);
-               
-               for (Workflow wf : wfBundle.getWorkflows()) {
-                       String path = WORKFLOW + 
uriTools.validFilename(wf.getName()) + RDF;
-
-                       try (OutputStream outputStream = ucfPackage
-                                       .addResourceUsingOutputStream(path, 
APPLICATION_RDF_XML)) {
-                               serializer.workflowDoc(outputStream, wf, 
URI.create(path));
-                       } catch (JAXBException e) {
-                               throw new WriterException("Can't generate " + 
path, e);
-                       }
-                       
-                       path = HISTORY + WF +  
-                                       uriTools.validFilename(wf.getName()) + 
REVISIONS + RDF;
-                       addRevisions(wf, path, wfBundle);
-               }
-
-               for (Profile pf : wfBundle.getProfiles()) {
-                       String path = PROFILE + 
uriTools.validFilename(pf.getName()) + RDF;
-                       try (OutputStream outputStream = ucfPackage
-                                       .addResourceUsingOutputStream(path, 
APPLICATION_RDF_XML)) {
-                               serializer.profileDoc(outputStream, pf, 
URI.create(path));
-                       } catch (JAXBException e) {
-                               throw new WriterException("Can't generate " + 
path, e);
-                       }
-                       path = HISTORY + "pf-" +  
-                                       uriTools.validFilename(pf.getName()) + 
REVISIONS + RDF;
-                       addRevisions(pf, path, wfBundle);
-               }
-
-               try (OutputStream outputStream = ucfPackage
-                               
.addResourceUsingOutputStream(WORKFLOW_BUNDLE_RDF,
-                                               APPLICATION_RDF_XML)) {
-                       serializer.workflowBundleDoc(outputStream,
-                                       URI.create(WORKFLOW_BUNDLE_RDF));
-               } catch (JAXBException e) {
-                       throw new WriterException("Can't generate " + 
WORKFLOW_BUNDLE_RDF,
-                                       e);
-               }
-               
-               if (ucfPackage.getPackageMediaType().equals(
-                               APPLICATION_VND_TAVERNA_SCUFL2_WORKFLOW_BUNDLE))
-                       ucfPackage
-                                       .setRootFile(WORKFLOW_BUNDLE_RDF, 
WORKFLOW_BUNDLE_VERSION);
-
-               String path = HISTORY + "wfbundle" + REVISIONS + RDF;
-               addRevisions(wfBundle, path, wfBundle);
-               
-               return ucfPackage;
-       }
-
-
-       protected void addRevisions(Revisioned revisioned, String path, 
WorkflowBundle wfBundle) throws WriterException {
-               @SuppressWarnings("unused")
-               URI uriBase = uriTools.uriForBean(wfBundle).resolve(path);      
        
-               Revision currentRevision = revisioned.getCurrentRevision();
-               if (currentRevision == null)
-                       return;
-//             try {
-//                     wfBundle.getResources()
-//                                     .addResource(visitor.getDoc(), path, 
APPLICATION_RDF_XML);
-//             } catch (IOException e) {
-//                     throw new WriterException("Can't write revisions to " + 
path, e);
-//             }
-       }
-
-       @Override
-       public void writeBundle(WorkflowBundle wfBundle, OutputStream output,
-                       String mediaType) throws WriterException, IOException {
-               UCFPackage ucfPackage = makeUCFPackage(wfBundle);
-               ucfPackage.save(output);
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/RevisionParser.java
----------------------------------------------------------------------
diff --git 
a/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/RevisionParser.java
 
b/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/RevisionParser.java
deleted file mode 100644
index 366069b..0000000
--- 
a/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/RevisionParser.java
+++ /dev/null
@@ -1,173 +0,0 @@
-package org.apache.taverna.scufl2.rdfxml;
-/*
- *
- * 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.InputStream;
-import java.net.URI;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.Map;
-import java.util.Set;
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.datatype.XMLGregorianCalendar;
-
-import org.apache.taverna.scufl2.api.annotation.Revision;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.purl.wf4ever.roevo.jaxb.Change;
-import org.purl.wf4ever.roevo.jaxb.ChangeSpecification;
-import org.purl.wf4ever.roevo.jaxb.ChangeSpecification.HasChange;
-import org.purl.wf4ever.roevo.jaxb.RoEvoDocument;
-import org.purl.wf4ever.roevo.jaxb.VersionableResource;
-import org.w3._1999._02._22_rdf_syntax_ns_.Resource;
-
-
-public class RevisionParser {
-       private JAXBContext jaxbContext;
-
-       protected JAXBContext getJaxbContext() throws JAXBException {
-               if (jaxbContext == null) {
-                       Class<?>[] packages = {
-                                       
org.purl.wf4ever.roevo.jaxb.ObjectFactory.class,
-                                       org.w3.prov.jaxb.ObjectFactory.class,
-                                       
org.w3._1999._02._22_rdf_syntax_ns_.ObjectFactory.class,
-                                       
org.w3._2000._01.rdf_schema_.ObjectFactory.class };
-                       jaxbContext = JAXBContext.newInstance(packages);
-               }
-               return jaxbContext;
-       }
-
-       @SuppressWarnings({ "unchecked" })
-       public Map<URI, Revision> readRevisionChain(
-                       InputStream revisionDocumentStream, URI base)
-                       throws ReaderException {
-               JAXBElement<RoEvoDocument> roEvoDoc;
-               try {
-                       Unmarshaller unmarshaller = 
getJaxbContext().createUnmarshaller();
-                       roEvoDoc = (JAXBElement<RoEvoDocument>) unmarshaller
-                                       .unmarshal(revisionDocumentStream);
-               } catch (JAXBException e) {
-                       throw new ReaderException(e);
-               }
-
-               RoEvoDocument document = roEvoDoc.getValue();
-               if (document.getBase() != null)
-                       base = base.resolve(document.getBase());
-               Map<URI, Revision> revisions = new LinkedHashMap<>();
-               // NOTE: Silly hack to iterate/cast in one go.. will it work?
-               for (VersionableResource verResource : 
document.getAny().toArray(
-                               new VersionableResource[0]))
-                       parse(base, verResource, revisions);
-               return revisions;
-       }
-
-       private Revision parse(URI base, VersionableResource verResource,
-                       Map<URI, Revision> revisions) throws ReaderException {
-               URI uri = base.resolve(verResource.getAbout());
-               Revision revision = addOrExisting(uri, revisions);
-
-               if (verResource.getGeneratedAtTime() != null) {
-                       XMLGregorianCalendar xmlCal = 
verResource.getGeneratedAtTime()
-                                       .getValue();
-                       
revision.setGeneratedAtTime(xmlCal.toGregorianCalendar());
-               }
-
-               Resource wasRevisionOf = verResource.getWasRevisionOf();
-               if (wasRevisionOf != null) {
-                       // TODO Put these in a map
-                       Revision r = addOrExisting(
-                                       
base.resolve(wasRevisionOf.getResource()), revisions);
-                       revision.setPreviousRevision(r);
-               }
-
-               if (verResource.getWasChangedBy() != null) {
-                       ChangeSpecification changeSpec = 
verResource.getWasChangedBy()
-                                       .getChangeSpecification();
-                       if (changeSpec.getFromVersion() != null) {
-                               Revision r = addOrExisting(
-                                               
base.resolve(changeSpec.getFromVersion().getResource()),
-                                               revisions);
-                               if (revision.getPreviousRevision() != null
-                                               && 
revision.getPreviousRevision() != r)
-                                       throw new ReaderException(
-                                                       "Inconsistent previous 
revision: "
-                                                                       + 
revision.getPreviousRevision()
-                                                                               
        .getIdentifier() + " or "
-                                                                       + 
r.getIdentifier());
-                               revision.setPreviousRevision(r);
-                       }
-
-                       if (changeSpec.getType() != null)
-                               
revision.setChangeSpecificationType(base.resolve(changeSpec
-                                               .getType().getResource()));
-
-                       for (HasChange hasChange : changeSpec.getHasChange()) {
-                               if (hasChange.getAddition() != null) {
-                                       Set<URI> additions = 
parse(hasChange.getAddition(), base);
-                                       // Note: Use addAll in case a buggy XML 
has multiple
-                                       // <hasChange><Addition>
-                                       
revision.getAdditionOf().addAll(additions);
-                               }
-                               if (hasChange.getModification() != null) {
-                                       Set<URI> modifications = 
parse(hasChange.getModification(),
-                                                       base);
-                                       
revision.getModificationsOf().addAll(modifications);
-                               }
-                               if (hasChange.getRemoval() != null) {
-                                       Set<URI> removals = 
parse(hasChange.getRemoval(), base);
-                                       
revision.getRemovalOf().addAll(removals);
-                               }
-                       }
-               }
-
-               for (Resource assoc : verResource.getWasAttributedTo())
-                       revision.getWasAttributedTo()
-                                       .add(base.resolve(assoc.getResource()));
-
-               for (Resource assoc : verResource.getHadOriginalSource()) {
-                       Revision r = 
addOrExisting(base.resolve(assoc.getResource()),
-                                       revisions);
-                       revision.getHadOriginalSources().add(r);
-               }
-
-               return revision;
-       }
-
-       private Revision addOrExisting(URI uri, Map<URI, Revision> revisions) {
-               Revision rev = revisions.get(uri);
-               if (rev != null)
-                       return rev;
-               rev = new Revision(uri, null);
-               revisions.put(uri, rev);
-               return rev;
-       }
-
-       private Set<URI> parse(Change addition, URI base) {
-               Set<URI> uris = new LinkedHashSet<>();
-               for (Resource r : addition.getRelatedResource())
-                       uris.add(base.resolve(r.getResource()));
-               return uris;
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/WorkflowBundleParser.java
----------------------------------------------------------------------
diff --git 
a/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/WorkflowBundleParser.java
 
b/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/WorkflowBundleParser.java
deleted file mode 100644
index 4e56a1f..0000000
--- 
a/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/WorkflowBundleParser.java
+++ /dev/null
@@ -1,190 +0,0 @@
-package org.apache.taverna.scufl2.rdfxml;
-/*
- *
- * 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.rdfxml.RDFXMLReader.APPLICATION_RDF_XML;
-import static 
org.apache.taverna.scufl2.rdfxml.RDFXMLReader.APPLICATION_VND_TAVERNA_SCUFL2_WORKFLOW_BUNDLE;
-import static 
org.apache.taverna.scufl2.rdfxml.RDFXMLWriter.WORKFLOW_BUNDLE_RDF;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.JAXBException;
-
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.core.Workflow;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.ucfpackage.UCFPackage;
-import org.apache.taverna.scufl2.ucfpackage.UCFPackage.ResourceEntry;
-
-import org.apache.taverna.scufl2.rdfxml.jaxb.WorkflowBundleDocument;
-
-public class WorkflowBundleParser extends AbstractParser {
-
-       private WorkflowParser workflowParser;
-       private ProfileParser profileParser;
-
-       public WorkflowBundleParser() {
-               super();
-               workflowParser = new WorkflowParser(parserState);
-               profileParser = new ProfileParser(parserState);
-       }
-
-       protected String findWorkflowBundlePath() {
-               if (APPLICATION_VND_TAVERNA_SCUFL2_WORKFLOW_BUNDLE
-                               
.equals(getParserState().getUcfPackage().getPackageMediaType()))
-                       for (ResourceEntry potentialRoot : 
getParserState().getUcfPackage()
-                                       .getRootFiles())
-                               if 
(APPLICATION_RDF_XML.equals(potentialRoot.getMediaType()))
-                                       return potentialRoot.getPath();
-               return WORKFLOW_BUNDLE_RDF;
-       }
-
-       protected WorkflowBundle parseWorkflowBundle(
-                       org.apache.taverna.scufl2.rdfxml.jaxb.WorkflowBundle 
wb, URI base)
-                       throws ReaderException, IOException {
-               WorkflowBundle workflowBundle = new WorkflowBundle();
-               getParserState().push(workflowBundle);
-               try {
-                       
workflowBundle.setResources(getParserState().getUcfPackage());
-                       if (wb.getName() != null)
-                               workflowBundle.setName(wb.getName());
-                       if (wb.getGlobalBaseURI() != null
-                                       && wb.getGlobalBaseURI().getResource() 
!= null)
-                               workflowBundle.setGlobalBaseURI(base.resolve(wb
-                                               
.getGlobalBaseURI().getResource()));
-                       mapBean(base.resolve(wb.getAbout()), workflowBundle);
-                       for 
(org.apache.taverna.scufl2.rdfxml.jaxb.WorkflowBundle.Workflow wfEntry : wb
-                                       .getWorkflow()) {
-                               URI wfUri = 
base.resolve(wfEntry.getWorkflow().getAbout());
-                               String resource = 
wfEntry.getWorkflow().getSeeAlso()
-                                               .getResource();
-                               URI source = 
uriTools.relativePath(getParserState()
-                                               .getLocation(), 
base.resolve(resource));
-                               workflowParser.readWorkflow(wfUri, source);
-                       }
-                       for 
(org.apache.taverna.scufl2.rdfxml.jaxb.WorkflowBundle.Profile pfEntry : wb
-                                       .getProfile()) {
-                               URI wfUri = 
base.resolve(pfEntry.getProfile().getAbout());
-                               String resource = 
pfEntry.getProfile().getSeeAlso()
-                                               .getResource();
-                               URI source = 
uriTools.relativePath(getParserState()
-                                               .getLocation(), 
base.resolve(resource));
-                               profileParser.readProfile(wfUri, source);
-                       }
-
-                       if (wb.getMainWorkflow() != null
-                                       && wb.getMainWorkflow().getResource() 
!= null) {
-                               URI mainWfUri = base
-                                               
.resolve(wb.getMainWorkflow().getResource());
-                               Workflow mainWorkflow = (Workflow) 
resolveBeanUri(mainWfUri);
-                               if (mainWorkflow == null)
-                                       throw new ReaderException("Unknown main 
workflow "
-                                                       + mainWfUri + ", got"
-                                                       + 
getParserState().getUriToBean().keySet());
-                               workflowBundle.setMainWorkflow(mainWorkflow);
-                       }
-                       if (wb.getMainProfile() != null
-                                       && wb.getMainProfile().getResource() != 
null) {
-                               URI profileUri = base
-                                               
.resolve(wb.getMainProfile().getResource());
-                               org.apache.taverna.scufl2.api.profiles.Profile 
mainWorkflow = (org.apache.taverna.scufl2.api.profiles.Profile) 
resolveBeanUri(profileUri);
-                               workflowBundle.setMainProfile(mainWorkflow);
-                       }
-               } finally {
-                       getParserState().pop();
-               }
-               return workflowBundle;
-       }
-
-       @SuppressWarnings("unchecked")
-       public WorkflowBundle readWorkflowBundle(UCFPackage ucfPackage,
-                       URI suggestedLocation) throws IOException, 
ReaderException {
-               try {
-                       getParserState().setUcfPackage(ucfPackage);
-                       getParserState().setLocation(suggestedLocation);
-                       if (getParserState().getLocation() == null) {
-                               getParserState().setLocation(URI.create(""));
-                       } else if (!getParserState().getLocation().getRawPath()
-                                       .endsWith("/")) {
-                               if (getParserState().getLocation().getQuery() 
!= null
-                                               || 
getParserState().getLocation().getFragment() != null)
-                                       /*
-                                        * Ouch.. Perhaps some silly website 
with ?bundleId=15 ?
-                                        * We'll better conserve that somehow. 
Let's do the jar:
-                                        * trick and hope it works. Have to 
escape evil chars.
-                                        */
-                                       getParserState().setLocation(
-                                                       URI.create("jar:"
-                                                                       + 
getParserState().getLocation()
-                                                                       
.toASCIIString()
-                                                                       
.replace("?", "%63")
-                                                                       
.replace("#", "#35") + "!/"));
-                               else
-                                       /*
-                                        * Simple, pretend we're one level down 
inside the ZIP file
-                                        * as a directory
-                                        */
-                                       getParserState().setLocation(
-                                                       
getParserState().getLocation().resolve(
-                                                                       
getParserState().getLocation().getRawPath()
-                                                                               
        + "/"));
-                       }
-                       String workflowBundlePath = findWorkflowBundlePath();
-
-                       InputStream bundleStream = 
getParserState().getUcfPackage()
-                                       
.getResourceAsInputStream(workflowBundlePath);
-
-                       JAXBElement<WorkflowBundleDocument> elem;
-                       try {
-                               elem = (JAXBElement<WorkflowBundleDocument>) 
unmarshaller
-                                               .unmarshal(bundleStream);
-                       } catch (JAXBException e) {
-                               throw new ReaderException(
-                                               "Can't parse workflow bundle 
document "
-                                                               + 
workflowBundlePath, e);
-                       }
-                       WorkflowBundleDocument workflowBundleDocument = 
elem.getValue();
-
-                       URI base = getParserState().getLocation().resolve(
-                                       workflowBundlePath);
-                       if (workflowBundleDocument.getBase() != null)
-                               base = getParserState().getLocation().resolve(
-                                               
workflowBundleDocument.getBase());
-
-                       if (workflowBundleDocument.getAny().size() != 1)
-                               throw new ReaderException(
-                                               "Invalid 
WorkflowBundleDocument, expected only one <WorkflowBundle>");
-
-                       org.apache.taverna.scufl2.rdfxml.jaxb.WorkflowBundle wb 
= (org.apache.taverna.scufl2.rdfxml.jaxb.WorkflowBundle) workflowBundleDocument
-                                       .getAny().get(0);
-                       WorkflowBundle workflowBundle = parseWorkflowBundle(wb, 
base);
-
-                       scufl2Tools.setParents(workflowBundle);
-                       return workflowBundle;
-               } finally {
-                       clearParserState();
-               }
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/WorkflowParser.java
----------------------------------------------------------------------
diff --git 
a/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/WorkflowParser.java
 
b/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/WorkflowParser.java
deleted file mode 100644
index 6d84ef7..0000000
--- 
a/taverna-scufl2-rdfxml/src/main/java/org/apache/taverna/scufl2/rdfxml/WorkflowParser.java
+++ /dev/null
@@ -1,381 +0,0 @@
-package org.apache.taverna.scufl2.rdfxml;
-/*
- *
- * 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.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.util.List;
-import java.util.logging.Logger;
-
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.JAXBException;
-
-import org.apache.taverna.scufl2.api.common.WorkflowBean;
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.core.BlockingControlLink;
-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.IterationStrategyParent;
-import org.apache.taverna.scufl2.api.port.ReceiverPort;
-import org.apache.taverna.scufl2.api.port.SenderPort;
-
-import org.apache.taverna.scufl2.rdfxml.jaxb.Blocking;
-import org.apache.taverna.scufl2.rdfxml.jaxb.CrossProduct;
-import org.apache.taverna.scufl2.rdfxml.jaxb.DataLink;
-import org.apache.taverna.scufl2.rdfxml.jaxb.DispatchStack;
-import org.apache.taverna.scufl2.rdfxml.jaxb.DotProduct;
-import org.apache.taverna.scufl2.rdfxml.jaxb.IterationStrategyStack;
-import org.apache.taverna.scufl2.rdfxml.jaxb.PortNode;
-import org.apache.taverna.scufl2.rdfxml.jaxb.Processor.InputProcessorPort;
-import org.apache.taverna.scufl2.rdfxml.jaxb.Processor.OutputProcessorPort;
-import org.apache.taverna.scufl2.rdfxml.jaxb.ProductOf;
-import org.apache.taverna.scufl2.rdfxml.jaxb.WorkflowDocument;
-
-import com.fasterxml.jackson.databind.node.JsonNodeFactory;
-
-public class WorkflowParser extends AbstractParser {
-       private static Logger logger = Logger.getLogger(WorkflowParser.class
-                       .getCanonicalName());
-       @SuppressWarnings("unused")
-       private static final JsonNodeFactory JSON_NODE_FACTORY = 
JsonNodeFactory.instance;
-
-       public WorkflowParser() {
-       }
-
-       public WorkflowParser(ThreadLocal<ParserState> parserState) {
-               super(parserState);
-       }
-
-       protected void parseControlLink(Blocking original) {
-               URI blockUri = getParserState().getCurrentBase().resolve(
-                               original.getBlock().getResource());
-               URI untilFinishedUri = 
getParserState().getCurrentBase().resolve(
-                               original.getUntilFinished().getResource());
-               WorkflowBean block = resolveBeanUri(blockUri);
-               WorkflowBean untilFinished = resolveBeanUri(untilFinishedUri);
-
-               BlockingControlLink blocking = new BlockingControlLink();
-               
blocking.setBlock((org.apache.taverna.scufl2.api.core.Processor) block);
-               
blocking.setUntilFinished((org.apache.taverna.scufl2.api.core.Processor) 
untilFinished);
-
-               blocking.setParent(getParserState().getCurrent(Workflow.class));
-               
mapBean(getParserState().getCurrentBase().resolve(original.getAbout()),
-                               blocking);
-       }
-
-       protected void parseCrossDotOrPortNodeList(List<Object> nodeList)
-                       throws ReaderException {
-               for (Object node : nodeList)
-                       if (node instanceof DotProduct)
-                               parseDotProduct((DotProduct) node);
-                       else if (node instanceof CrossProduct)
-                               parseCrossProduct((CrossProduct) node);
-                       else if (node instanceof PortNode)
-                               parsePortNode((PortNode) node);
-                       else
-                               throw new ReaderException("Unexpected node " + 
node);
-       }
-
-       protected void parseCrossProduct(CrossProduct original)
-                       throws ReaderException {
-               org.apache.taverna.scufl2.api.iterationstrategy.CrossProduct 
cross = new org.apache.taverna.scufl2.api.iterationstrategy.CrossProduct();
-               
mapBean(getParserState().getCurrentBase().resolve(original.getAbout()),
-                               cross);
-               cross.setParent(getParserState().getCurrent(
-                               IterationStrategyParent.class));
-               getParserState().push(cross);
-               try {
-                       parseProductOf(original.getProductOf());
-               } finally {
-                       getParserState().pop();
-               }
-       }
-
-       protected void parseDataLink(DataLink original) {
-               URI fromUri = getParserState().getCurrentBase().resolve(
-                               original.getReceiveFrom().getResource());
-               URI toUri = getParserState().getCurrentBase().resolve(
-                               original.getSendTo().getResource());
-               WorkflowBean from = resolveBeanUri(fromUri);
-               WorkflowBean to = resolveBeanUri(toUri);
-
-               org.apache.taverna.scufl2.api.core.DataLink link = new 
org.apache.taverna.scufl2.api.core.DataLink();
-               link.setReceivesFrom((SenderPort) from);
-               link.setSendsTo((ReceiverPort) to);
-               if (original.getMergePosition() != null)
-                       
link.setMergePosition(original.getMergePosition().getValue());
-               link.setParent(getParserState().getCurrent(Workflow.class));
-               
mapBean(getParserState().getCurrentBase().resolve(original.getAbout()),
-                               link);
-       }
-
-       protected void parseDispatchStack(DispatchStack original) {
-        logger.fine("Ignoring Dispatch stack: not supported (SCUFL2-130)");
-        return;
-
-//        // FIXME: Legacy code - support parsing old dispatch stack 
configurations
-//             Processor processor = getParserState().getCurrent(
-//                             
org.apache.taverna.scufl2.api.core.Processor.class);
-//        ObjectNode config = JSON_NODE_FACTORY.objectNode();
-//        getParserState().getDispatchConfigs().put(processor, config);        
-//             if (original.getDispatchStackLayers() != null) {
-//                     for (DispatchStackLayer dispatchStackLayer : original
-//                                     
.getDispatchStackLayers().getDispatchStackLayer()) {
-//                             parseDispatchStackLayer(dispatchStackLayer);
-//                     }
-//             }
-       }
-
-//     protected void parseDispatchStackLayer(DispatchStackLayer original) {
-//         Processor processor = getParserState().getCurrent(Processor.class);
-//         URI type = getParserState().getCurrentBase().resolve(
-//                             original.getType().getResource());
-//         URI config = 
getParserState().getCurrentBase().resolve(original.getAbout());
-//         // TODO: SCUFL2-130
-//         // Add Legacy code for wfbundle 0.3.0 to
-//         // support parsing old dispatch stack configurations
-//         // 
-//         // The difficult bit is that the layers themselves has moved to 
-//         // to be a Configuration on a Processor - but we are here within
-//         // parsing of the Workflow. In 0.3.0 each layer is then configured
-//         // separately. So we need to pass over somehow the current stack 
-//         // to the ParserState so that it can be picked up in ProfileParser
-//         // and added to each of the profiles -- or at least where the
-//         // stack layers have been configured.
-//         // 
-//         // Here's an idea on how it can work. Here we should push each 
layer to a
-//         // List<Pair<URI,URI>> that we can keep in the ParserState. 
-//         // Then, within ProfileParser, we can pick them up and
-//      // recreate what the Processor config would look like for
-//      // the default configs - and then delete those dangling configs
-//     }
-
-       protected void parseDotProduct(DotProduct original) throws 
ReaderException {
-               org.apache.taverna.scufl2.api.iterationstrategy.DotProduct dot 
= new org.apache.taverna.scufl2.api.iterationstrategy.DotProduct();
-               
mapBean(getParserState().getCurrentBase().resolve(original.getAbout()),
-                               dot);
-               dot.setParent(getParserState()
-                               .getCurrent(IterationStrategyParent.class));
-
-               getParserState().push(dot);
-               try {
-                       parseProductOf(original.getProductOf());
-               } finally {
-                       getParserState().pop();
-               }
-       }
-
-       protected void parseInputWorkflowPort(
-                       org.apache.taverna.scufl2.rdfxml.jaxb.InputWorkflowPort 
original) {
-               org.apache.taverna.scufl2.api.port.InputWorkflowPort port = new 
org.apache.taverna.scufl2.api.port.InputWorkflowPort();
-               port.setName(original.getName());
-               if (original.getPortDepth() != null)
-                       port.setDepth(original.getPortDepth().getValue());
-               port.setParent(getParserState().getCurrent(Workflow.class));
-               
mapBean(getParserState().getCurrentBase().resolve(original.getAbout()),
-                               port);
-       }
-
-       protected void parseIterationStrategyStack(IterationStrategyStack 
original)
-                       throws ReaderException {
-               
org.apache.taverna.scufl2.api.iterationstrategy.IterationStrategyStack 
iterationStrategyStack = new 
org.apache.taverna.scufl2.api.iterationstrategy.IterationStrategyStack();
-               iterationStrategyStack.setParent(getParserState().getCurrent(
-                               Processor.class));
-
-               
mapBean(getParserState().getCurrentBase().resolve(original.getAbout()),
-                               iterationStrategyStack);
-               if (original.getIterationStrategies() != null) {
-                       getParserState().push(iterationStrategyStack);
-                       try {
-                               
parseCrossDotOrPortNodeList(original.getIterationStrategies()
-                                               .getDotProductOrCrossProduct());
-                       } finally {
-                               getParserState().pop();
-                       }
-               }
-       }
-
-       protected void parseOutputWorkflowPort(
-                       
org.apache.taverna.scufl2.rdfxml.jaxb.OutputWorkflowPort original) {
-               org.apache.taverna.scufl2.api.port.OutputWorkflowPort port = 
new org.apache.taverna.scufl2.api.port.OutputWorkflowPort();
-               port.setName(original.getName());
-               port.setParent(getParserState().getCurrent(Workflow.class));
-               
mapBean(getParserState().getCurrentBase().resolve(original.getAbout()),
-                               port);
-       }
-
-       protected void parsePortNode(PortNode original) {
-               org.apache.taverna.scufl2.api.iterationstrategy.PortNode node = 
new org.apache.taverna.scufl2.api.iterationstrategy.PortNode();
-               node.setParent(getParserState().getCurrent(
-                               IterationStrategyParent.class));
-               if (original.getDesiredDepth() != null)
-                       
node.setDesiredDepth(original.getDesiredDepth().getValue());
-               
mapBean(getParserState().getCurrentBase().resolve(original.getAbout()),
-                               node);
-               URI inputPortUri = getParserState().getCurrentBase().resolve(
-                               
original.getIterateOverInputPort().getResource());
-               org.apache.taverna.scufl2.api.port.InputProcessorPort inputPort 
= (org.apache.taverna.scufl2.api.port.InputProcessorPort) 
resolveBeanUri(inputPortUri);
-               node.setInputProcessorPort(inputPort);
-       }
-
-       protected void parseProcessor(
-                       org.apache.taverna.scufl2.rdfxml.jaxb.Processor 
processor)
-                       throws ReaderException {
-               org.apache.taverna.scufl2.api.core.Processor p = new 
org.apache.taverna.scufl2.api.core.Processor();
-               getParserState().push(p);
-               try {
-                       
p.setParent(getParserState().getCurrent(Workflow.class));
-                       mapBean(getParserState().getCurrentBase().resolve(
-                                       processor.getAbout()), p);
-                       if (processor.getName() != null)
-                               p.setName(processor.getName());
-                       for (InputProcessorPort inputProcessorPort : processor
-                                       .getInputProcessorPort())
-                               processorInputProcessorPort(inputProcessorPort
-                                               .getInputProcessorPort());
-                       for (OutputProcessorPort outputProcessorPort : processor
-                                       .getOutputProcessorPort())
-                               processorOutputProcessorPort(outputProcessorPort
-                                               .getOutputProcessorPort());
-                       if (processor.getDispatchStack() != null)
-                           // Legacy wfbundle
-                               parseDispatchStack(processor.getDispatchStack()
-                                               .getDispatchStack());
-                       if (processor.getIterationStrategyStack() != null)
-                               parseIterationStrategyStack(processor
-                                               .getIterationStrategyStack()
-                                               .getIterationStrategyStack());
-               } finally {
-                       getParserState().pop();
-               }
-       }
-
-       protected void parseProductOf(ProductOf productOf) throws 
ReaderException {
-               if (productOf == null)
-                       return;
-               parseCrossDotOrPortNodeList(productOf
-                               .getCrossProductOrDotProductOrPortNode());
-       }
-
-       protected void parseWorkflow(
-                       org.apache.taverna.scufl2.rdfxml.jaxb.Workflow 
workflow, URI wfUri)
-                       throws ReaderException {
-               Workflow wf = new Workflow();
-               wf.setParent(getParserState().getCurrent(WorkflowBundle.class));
-
-               if (workflow.getAbout() != null)
-                       mapBean(getParserState().getCurrentBase().resolve(
-                                       workflow.getAbout()), wf);
-                       // TODO: Compare resolved URI with desired wfUri
-               else
-                       mapBean(wfUri, wf);
-
-               getParserState().push(wf);
-               try {
-                       if (workflow.getName() != null)
-                               wf.setName(workflow.getName());
-                       if (workflow.getWorkflowIdentifier() != null
-                                       && 
workflow.getWorkflowIdentifier().getResource() != null)
-                               
wf.setIdentifier(getParserState().getCurrentBase().resolve(
-                                               
workflow.getWorkflowIdentifier().getResource()));
-
-                       for 
(org.apache.taverna.scufl2.rdfxml.jaxb.Workflow.InputWorkflowPort 
inputWorkflowPort : workflow
-                                       .getInputWorkflowPort())
-                               
parseInputWorkflowPort(inputWorkflowPort.getInputWorkflowPort());
-                       for 
(org.apache.taverna.scufl2.rdfxml.jaxb.Workflow.OutputWorkflowPort 
outputWorkflowPort : workflow
-                                       .getOutputWorkflowPort())
-                               parseOutputWorkflowPort(outputWorkflowPort
-                                               .getOutputWorkflowPort());
-                       for 
(org.apache.taverna.scufl2.rdfxml.jaxb.Workflow.Processor processor : workflow
-                                       .getProcessor())
-                               parseProcessor(processor.getProcessor());
-                       for 
(org.apache.taverna.scufl2.rdfxml.jaxb.DataLinkEntry dataLinkEntry : workflow
-                                       .getDatalink())
-                               parseDataLink(dataLinkEntry.getDataLink());
-                       for (org.apache.taverna.scufl2.rdfxml.jaxb.Control c : 
workflow
-                                       .getControl())
-                               parseControlLink(c.getBlocking());
-               } finally {
-                       getParserState().pop();
-               }
-       }
-
-       protected void processorInputProcessorPort(
-                       
org.apache.taverna.scufl2.rdfxml.jaxb.InputProcessorPort original) {
-               org.apache.taverna.scufl2.api.port.InputProcessorPort port = 
new org.apache.taverna.scufl2.api.port.InputProcessorPort();
-               port.setName(original.getName());
-               if (original.getPortDepth() != null)
-                       port.setDepth(original.getPortDepth().getValue());
-               port.setParent(getParserState().getCurrent(Processor.class));
-               
mapBean(getParserState().getCurrentBase().resolve(original.getAbout()),
-                               port);
-       }
-
-       protected void processorOutputProcessorPort(
-                       
org.apache.taverna.scufl2.rdfxml.jaxb.OutputProcessorPort original) {
-               org.apache.taverna.scufl2.api.port.OutputProcessorPort port = 
new org.apache.taverna.scufl2.api.port.OutputProcessorPort();
-               port.setName(original.getName());
-               if (original.getPortDepth() != null)
-                       port.setDepth(original.getPortDepth().getValue());
-               if (original.getGranularPortDepth() != null)
-                       
port.setGranularDepth(original.getGranularPortDepth().getValue());
-               port.setParent(getParserState().getCurrent(
-                               
org.apache.taverna.scufl2.api.core.Processor.class));
-               
mapBean(getParserState().getCurrentBase().resolve(original.getAbout()),
-                               port);
-       }
-
-       @SuppressWarnings("unchecked")
-       protected void readWorkflow(URI wfUri, URI source) throws 
ReaderException,
-                       IOException {
-               if (source.isAbsolute())
-                       throw new ReaderException("Can't read external workflow 
source "
-                                       + source);
-
-               InputStream bundleStream = getParserState().getUcfPackage()
-                               .getResourceAsInputStream(source.getRawPath());
-
-               JAXBElement<WorkflowDocument> elem;
-               try {
-                       elem = (JAXBElement<WorkflowDocument>) unmarshaller
-                                       .unmarshal(bundleStream);
-               } catch (JAXBException e) {
-                       throw new ReaderException(
-                                       "Can't parse workflow document " + 
source, e);
-               }
-
-               URI base = getParserState().getLocation().resolve(source);
-               if (elem.getValue().getBase() != null)
-                       base = base.resolve(elem.getValue().getBase());
-
-               if (elem.getValue().getAny().size() != 1)
-                       throw new ReaderException("Expects only a <Workflow> 
element in "
-                                       + source);
-               org.apache.taverna.scufl2.rdfxml.jaxb.Workflow workflow = 
(org.apache.taverna.scufl2.rdfxml.jaxb.Workflow) elem
-                               .getValue().getAny().get(0);
-
-               getParserState().setCurrentBase(base);
-               parseWorkflow(workflow, wfUri);
-       }
-}

Reply via email to