You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by st...@apache.org on 2015/02/17 21:40:06 UTC
[15/51] [partial] incubator-taverna-language git commit: temporarily
empty repository
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2FlowParser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2FlowParser.java b/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2FlowParser.java
deleted file mode 100644
index f103281..0000000
--- a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2FlowParser.java
+++ /dev/null
@@ -1,1214 +0,0 @@
-package org.apache.taverna.scufl2.translator.t2flow;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-
-import static java.util.Locale.ENGLISH;
-import static java.util.TimeZone.getTimeZone;
-import static java.util.UUID.randomUUID;
-import static java.util.logging.Level.SEVERE;
-import static java.util.logging.Level.WARNING;
-import static javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI;
-import static org.apache.taverna.scufl2.api.container.WorkflowBundle.WORKFLOW_BUNDLE_ROOT;
-import static org.apache.taverna.scufl2.api.core.Workflow.WORKFLOW_ROOT;
-import static org.apache.taverna.scufl2.xml.t2flow.jaxb.LinkType.DATAFLOW;
-import static org.apache.taverna.scufl2.xml.t2flow.jaxb.LinkType.MERGE;
-import static org.apache.taverna.scufl2.xml.t2flow.jaxb.LinkType.PROCESSOR;
-import static org.apache.taverna.scufl2.xml.t2flow.jaxb.Role.TOP;
-
-import java.io.CharArrayWriter;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.ServiceLoader;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.TreeMap;
-import java.util.UUID;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.logging.Logger;
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
-
-import org.w3c.dom.Element;
-import org.xml.sax.SAXException;
-
-import org.apache.taverna.scufl2.api.annotation.Annotation;
-import org.apache.taverna.scufl2.api.annotation.Revision;
-import org.apache.taverna.scufl2.api.common.Named;
-import org.apache.taverna.scufl2.api.common.NamedSet;
-import org.apache.taverna.scufl2.api.common.Scufl2Tools;
-import org.apache.taverna.scufl2.api.common.URITools;
-import org.apache.taverna.scufl2.api.common.WorkflowBean;
-import org.apache.taverna.scufl2.api.configurations.Configuration;
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.core.BlockingControlLink;
-import org.apache.taverna.scufl2.api.core.ControlLink;
-import org.apache.taverna.scufl2.api.core.DataLink;
-import org.apache.taverna.scufl2.api.core.Processor;
-import org.apache.taverna.scufl2.api.core.Workflow;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.api.iterationstrategy.IterationStrategyNode;
-import org.apache.taverna.scufl2.api.iterationstrategy.IterationStrategyStack;
-import org.apache.taverna.scufl2.api.iterationstrategy.IterationStrategyTopNode;
-import org.apache.taverna.scufl2.api.iterationstrategy.PortNode;
-import org.apache.taverna.scufl2.api.port.InputActivityPort;
-import org.apache.taverna.scufl2.api.port.InputProcessorPort;
-import org.apache.taverna.scufl2.api.port.InputWorkflowPort;
-import org.apache.taverna.scufl2.api.port.OutputActivityPort;
-import org.apache.taverna.scufl2.api.port.OutputProcessorPort;
-import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
-import org.apache.taverna.scufl2.api.port.ReceiverPort;
-import org.apache.taverna.scufl2.api.port.SenderPort;
-import org.apache.taverna.scufl2.api.profiles.ProcessorBinding;
-import org.apache.taverna.scufl2.api.profiles.ProcessorInputPortBinding;
-import org.apache.taverna.scufl2.api.profiles.ProcessorOutputPortBinding;
-import org.apache.taverna.scufl2.api.profiles.Profile;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.Activity;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.AnnotatedGranularDepthPort;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.AnnotatedGranularDepthPorts;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.AnnotatedPort;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.AnnotatedPorts;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.AnnotationAssertionImpl.NetSfTavernaT2AnnotationAnnotationAssertionImpl;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.AnnotationChain;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.Annotations;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.Condition;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.Conditions;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ConfigBean;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.CrossProduct;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.Dataflow;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.Datalinks;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.DepthPort;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.DepthPorts;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.DispatchLayer;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.DispatchStack;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.DotProduct;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.GranularDepthPort;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.GranularDepthPorts;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.IterationNode;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.IterationNodeParent;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.Link;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.Mapping;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ObjectFactory;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.PortProduct;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.Processors;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.Raven;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.TopIterationNode;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-public class T2FlowParser {
- private static final URI INTERNAL_DISPATCH_PREFIX = URI.create("http://ns.taverna.org.uk/2010/scufl2/taverna/dispatchlayer/");
- private static final String TEXT_TURTLE = "text/turtle";
- private static final String SEMANTIC_ANNOTATION = "net.sf.taverna.t2.annotation.annotationbeans.SemanticAnnotation";
- private static final String IDENTIFICATION_ASSERTION = "net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion";
- private static final String T2FLOW_EXTENDED_XSD = "xsd/t2flow-extended.xsd";
- @SuppressWarnings("unused")
- private static final String T2FLOW_XSD = "xsd/t2flow.xsd";
- private static final Logger logger = Logger.getLogger(T2FlowParser.class
- .getCanonicalName());
- public static final URI ravenURI = URI
- .create("http://ns.taverna.org.uk/2010/xml/t2flow/raven/");
- public static final URI configBeanURI = URI
- .create("http://ns.taverna.org.uk/2010/xml/t2flow/configbean/");
- public static final URI t2flowParserURI = URI
- .create("http://ns.taverna.org.uk/2012/scufl2/t2flowParser");
- // TODO: Find better example predicate
- public static final URI exampleDataURI = URI
- .create("http://biocatalogue.org/attribute/exampleData");
- public static final String DEFAULT_PRODUCED_BY = "unspecified";
-
- public static <T extends Named> T findNamed(Collection<T> namedObjects,
- String name) {
- for (T named : namedObjects)
- if (named.getName().equals(name))
- return named;
- return null;
- }
-
- protected ThreadLocal<ParserState> parserState = new ThreadLocalParserState();
-
- /**
- * A static class for the thread-local parser state.
- */
- private static class ThreadLocalParserState extends ThreadLocal<ParserState> {
- @Override
- protected ParserState initialValue() {
- return new ParserState();
- };
- }
-
- private static Scufl2Tools scufl2Tools = new Scufl2Tools();
- private static URITools uriTools = new URITools();
- private static TransformerFactory transformerFactory;
-
- protected Set<T2Parser> t2Parsers = null;
- protected final JAXBContext jaxbContext;
- private boolean strict = false;
- private boolean validating = false;
-
- public final boolean isValidating() {
- return validating;
- }
-
- public final void setValidating(boolean validating) {
- this.validating = validating;
- }
-
- protected ServiceLoader<T2Parser> discoveredT2Parsers;
- protected final ThreadLocal<Unmarshaller> unmarshaller;
- private Map<String, URI> predicates;
-
- public T2FlowParser() throws JAXBException {
- jaxbContext = JAXBContext.newInstance(ObjectFactory.class);
- unmarshaller = new ThreadLocalUnmarshaller(jaxbContext);
- }
-
- /**
- * A static class for the thread-local unmarshaller.
- */
- private static class ThreadLocalUnmarshaller extends
- ThreadLocal<Unmarshaller> {
- private final JAXBContext jaxbContext;
-
- ThreadLocalUnmarshaller(JAXBContext jaxbContext) {
- this.jaxbContext = jaxbContext;
- }
-
- @Override
- protected Unmarshaller initialValue() {
- try {
- return jaxbContext.createUnmarshaller();
- } catch (JAXBException e) {
- logger.log(SEVERE, "Could not create unmarshaller", e);
- return null;
- }
- };
- }
-
- protected ReceiverPort findReceiverPort(Workflow wf, Link sink)
- throws ReaderException {
- String portName = sink.getPort();
- if (portName == null)
- throw new ReaderException("Port name not specified");
- String processorName = sink.getProcessor();
- if (processorName == null) {
- if (sink.getType().equals(PROCESSOR))
- throw new ReaderException(
- "Link type was processor, but no processor name found");
- OutputWorkflowPort candidate = wf.getOutputPorts().getByName(
- portName);
- if (candidate == null)
- throw new ReaderException("Link to unknown workflow port "
- + portName);
- return candidate;
- } else {
- if (sink.getType().equals(DATAFLOW))
- throw new ReaderException(
- "Link type was dataflow, but processor name was found");
- Processor processor = wf.getProcessors().getByName(processorName);
- if (processor == null)
- throw new ReaderException("Link to unknown processor "
- + processorName);
- InputProcessorPort candidate = processor.getInputPorts().getByName(
- portName);
- if (candidate == null)
- throw new ReaderException("Link to unknown port " + portName
- + " in " + processorName);
- return candidate;
- }
- }
-
- protected SenderPort findSenderPort(Workflow wf, Link source)
- throws ReaderException {
- if (source.getType().equals(MERGE))
- throw new ReaderException(
- "Link type Merge unexpected for sender ports");
- String portName = source.getPort();
- if (portName == null)
- throw new ReaderException("Port name not specified");
- String processorName = source.getProcessor();
- if (processorName == null) {
- if (source.getType().equals(PROCESSOR))
- throw new ReaderException(
- "Link type was processor, but no processor name found");
- InputWorkflowPort candidate = wf.getInputPorts()
- .getByName(portName);
- if (candidate == null)
- throw new ReaderException("Link from unknown workflow port "
- + portName);
- return candidate;
- } else {
- if (source.getType().equals(DATAFLOW))
- throw new ReaderException(
- "Link type was dataflow, but processor name was found");
- Processor processor = wf.getProcessors().getByName(processorName);
- if (processor == null)
- throw new ReaderException("Link from unknown processor "
- + processorName);
- OutputProcessorPort candidate = processor.getOutputPorts()
- .getByName(portName);
- if (candidate == null)
- throw new ReaderException("Link from unknown port " + portName
- + " in " + processorName);
- return candidate;
- }
- }
-
- protected T2Parser getT2Parser(URI classURI) {
- for (T2Parser t2Parser : getT2Parsers())
- if (t2Parser.canHandlePlugin(classURI))
- return t2Parser;
- return null;
- }
-
- public synchronized Set<T2Parser> getT2Parsers() {
- Set<T2Parser> parsers = t2Parsers;
- if (parsers != null)
- return parsers;
- parsers = new HashSet<>();
- /*
- * TODO: Do we need to cache this, or is the cache in ServiceLoader fast
- * enough?
- */
- if (discoveredT2Parsers == null)
- discoveredT2Parsers = ServiceLoader.load(T2Parser.class);
- for (T2Parser parser : discoveredT2Parsers)
- parsers.add(parser);
- return parsers;
- }
-
- public synchronized void setT2Parsers(Set<T2Parser> parsers) {
- this.t2Parsers = parsers;
- }
-
- public boolean isStrict() {
- return strict;
- }
-
- protected void makeProfile(org.apache.taverna.scufl2.xml.t2flow.jaxb.Workflow wf) {
- // TODO: What should the default be? Should there be one? Who knows
- Profile profile = new Profile(
- wf.getProducedBy() == null ? DEFAULT_PRODUCED_BY
- : wf.getProducedBy());
- profile.setParent(parserState.get().getCurrentWorkflowBundle());
- parserState.get().getCurrentWorkflowBundle().setMainProfile(profile);
- parserState.get().setCurrentProfile(profile);
- }
-
- private URI makeRavenURI(Raven raven, String className) {
- if (raven == null)
- return ravenURI.resolve("undefined/" + uriTools.validFilename(className));
-
- return ravenURI.resolve(uriTools.validFilename(raven.getGroup()) + "/"
- + uriTools.validFilename(raven.getArtifact()) + "/"
- + uriTools.validFilename(raven.getVersion()) + "/"
- + uriTools.validFilename(className));
- }
-
- private URI mapTypeFromRaven(Raven raven, String activityClass)
- throws ReaderException {
- URI classURI = makeRavenURI(raven, activityClass);
- parserState.get().setCurrentT2Parser(null);
- T2Parser t2Parser = getT2Parser(classURI);
- if (t2Parser == null) {
- String message = "Unknown T2 activity or dispatch layer "
- + classURI + ", install supporting T2Parser";
- if (isStrict())
- throw new ReaderException(message);
- logger.warning(message);
- return classURI;
- }
- parserState.get().setCurrentT2Parser(t2Parser);
- return t2Parser.mapT2flowRavenIdToScufl2URI(classURI);
- }
-
- protected org.apache.taverna.scufl2.api.activity.Activity parseActivityAndAddToProfile(
- Activity origActivity) throws ReaderException {
- org.apache.taverna.scufl2.api.activity.Activity newActivity = parseActivity(origActivity);
- newActivity.setName(parserState.get().getCurrentProcessorBinding()
- .getName());
- parserState.get().getCurrentProfile().getActivities()
- .addWithUniqueName(newActivity);
- newActivity.setParent(parserState.get().getCurrentProfile());
- return newActivity;
- }
-
- protected org.apache.taverna.scufl2.api.activity.Activity parseActivity(
- Activity origActivity) throws ReaderException {
- Raven raven = origActivity.getRaven();
- String activityClass = origActivity.getClazz();
- URI activityId = mapTypeFromRaven(raven, activityClass);
- org.apache.taverna.scufl2.api.activity.Activity newActivity = new org.apache.taverna.scufl2.api.activity.Activity();
- newActivity.setType(activityId);
- return newActivity;
- }
-
- protected void parseActivityBinding(Activity origActivity,
- int activityPosition) throws ReaderException, JAXBException {
- ProcessorBinding processorBinding = new ProcessorBinding();
-
- processorBinding.setName(parserState.get().getCurrentProcessor()
- .getName());
- parserState.get().getCurrentProfile().getProcessorBindings()
- .addWithUniqueName(processorBinding);
-
- processorBinding.setBoundProcessor(parserState.get()
- .getCurrentProcessor());
- parserState.get().setCurrentProcessorBinding(processorBinding);
- org.apache.taverna.scufl2.api.activity.Activity newActivity = parseActivityAndAddToProfile(origActivity);
- parserState.get().setCurrentActivity(newActivity);
-
- parserState.get().getCurrentProfile().getActivities().add(newActivity);
- processorBinding.setBoundActivity(newActivity);
- processorBinding.setActivityPosition(activityPosition);
-
- parserState.get().setCurrentConfigurable(newActivity);
-
- try {
- parseConfigurationAndAddToProfile(origActivity.getConfigBean());
- } catch (JAXBException e) {
- if (isStrict())
- throw e;
- logger.log(WARNING, "Can't configure activity" + newActivity, e);
- }
-
- parseActivityInputMap(origActivity.getInputMap());
- parseActivityOutputMap(origActivity.getOutputMap());
-
- parserState.get().setCurrentConfigurable(null);
- parserState.get().setCurrentActivity(null);
- parserState.get().setCurrentProcessorBinding(null);
- }
-
- protected Configuration parseConfigurationAndAddToProfile(ConfigBean configBean) throws JAXBException, ReaderException {
- Configuration configuration = parseConfiguration(configBean);
- if (configuration == null)
- return null;
- Profile profile = parserState.get().getCurrentProfile();
- configuration.setName(parserState.get().getCurrentActivity()
- .getName());
- profile.getConfigurations().addWithUniqueName(configuration);
- configuration.setConfigures(parserState.get().getCurrentConfigurable());
- return configuration;
- }
-
- protected Configuration parseConfiguration(ConfigBean configBean)
- throws JAXBException, ReaderException {
- // Placeholder to check later if no configuration have been provided
- Configuration UNCONFIGURED = new Configuration();
-
- Configuration configuration = UNCONFIGURED;
- if (parserState.get().getCurrentT2Parser() == null) {
- String message = "No config parser for "
- + parserState.get().getCurrentConfigurable();
- if (isStrict())
- throw new ReaderException(message);
- return null;
- }
-
- try {
- configuration = parserState.get().getCurrentT2Parser()
- .parseConfiguration(this, configBean, parserState.get());
- } catch (ReaderException e) {
- if (isStrict())
- throw e;
- }
- if (configuration == null)
- // Perfectly valid - true for say Invoke layer
- return null;
-
- if (configuration == UNCONFIGURED) {
- if (isStrict())
- throw new ReaderException("No configuration returned from "
- + parserState.get().getCurrentT2Parser() + " for "
- + parserState.get().getCurrentConfigurable());
- // We'll have to fall back by just keeping the existing XML
-
- configuration = new Configuration();
- configuration.setType(configBeanURI.resolve("Config"));
- String xml = elementToXML((Element) configBean.getAny());
- String encoding = configBean.getEncoding();
- ObjectNode json = (ObjectNode)configuration.getJson();
- json.put(encoding, xml);
- }
- return configuration;
- }
-
- public static String elementToXML(Element element) {
- try {
- Transformer transformer = getTransformer();
- CharArrayWriter writer = new CharArrayWriter();
- transformer.transform(new DOMSource(element), new StreamResult(
- writer));
- return writer.toString();
- } catch (TransformerException e) {
- throw new IllegalStateException("Can't write XML", e);
- }
- }
-
- public static Transformer getTransformer()
- throws TransformerConfigurationException {
- if (transformerFactory == null)
- transformerFactory = TransformerFactory.newInstance();
- return transformerFactory.newTransformer();
- }
-
- public Unmarshaller getUnmarshaller() {
- Unmarshaller u = unmarshaller.get();
- if (!isValidating() && u.getSchema() != null) {
- u.setSchema(null);
- } else if (isValidating() && u.getSchema() == null) {
- // Load and set schema to validate against
- Schema schema;
- try {
- SchemaFactory schemaFactory = SchemaFactory
- .newInstance(W3C_XML_SCHEMA_NS_URI);
- List<URI> schemas = getAdditionalSchemas();
- URL t2flowExtendedXSD = T2FlowParser.class
- .getResource(T2FLOW_EXTENDED_XSD);
- schemas.add(t2flowExtendedXSD.toURI());
-
- List<Source> schemaSources = new ArrayList<>();
- for (URI schemaUri : schemas)
- schemaSources.add(new StreamSource(schemaUri
- .toASCIIString()));
- Source[] sources = schemaSources
- .toArray(new Source[schemaSources.size()]);
- schema = schemaFactory.newSchema(sources);
- } catch (SAXException e) {
- throw new RuntimeException("Can't load schemas", e);
- } catch (URISyntaxException | NullPointerException e) {
- throw new RuntimeException("Can't find schemas", e);
- }
- u.setSchema(schema);
- }
- return u;
- }
-
- protected List<URI> getAdditionalSchemas() {
- List<URI> uris = new ArrayList<>();
- for (T2Parser parser : getT2Parsers()) {
- List<URI> schemas = parser.getAdditionalSchemas();
- if (schemas != null)
- uris.addAll(schemas);
- }
- return uris;
- }
-
- protected void parseActivityInputMap(
- org.apache.taverna.scufl2.xml.t2flow.jaxb.Map inputMap)
- throws ReaderException {
- for (Mapping mapping : inputMap.getMap()) {
- String fromProcessorOutput = mapping.getFrom();
- String toActivityOutput = mapping.getTo();
- ProcessorInputPortBinding processorInputPortBinding = new ProcessorInputPortBinding();
-
- InputProcessorPort inputProcessorPort = findNamed(parserState.get()
- .getCurrentProcessor().getInputPorts(), fromProcessorOutput);
- if (inputProcessorPort == null) {
- String message = "Invalid input port binding, "
- + "unknown processor port: " + fromProcessorOutput
- + "->" + toActivityOutput + " in "
- + parserState.get().getCurrentProcessor();
- if (isStrict())
- throw new ReaderException(message);
- logger.warning(message);
- continue;
- }
-
- InputActivityPort inputActivityPort = parserState.get()
- .getCurrentActivity().getInputPorts()
- .getByName(toActivityOutput);
- if (inputActivityPort == null) {
- inputActivityPort = new InputActivityPort();
- inputActivityPort.setName(toActivityOutput);
- inputActivityPort.setParent(parserState.get()
- .getCurrentActivity());
- parserState.get().getCurrentActivity().getInputPorts()
- .add(inputActivityPort);
- }
-
- if (inputActivityPort.getDepth() == null)
- inputActivityPort.setDepth(inputProcessorPort.getDepth());
-
- processorInputPortBinding.setBoundActivityPort(inputActivityPort);
- processorInputPortBinding.setBoundProcessorPort(inputProcessorPort);
- parserState.get().getCurrentProcessorBinding()
- .getInputPortBindings().add(processorInputPortBinding);
- }
- }
-
- protected void parseActivityOutputMap(
- org.apache.taverna.scufl2.xml.t2flow.jaxb.Map outputMap)
- throws ReaderException {
- for (Mapping mapping : outputMap.getMap()) {
- String fromActivityOutput = mapping.getFrom();
- String toProcessorOutput = mapping.getTo();
- ProcessorOutputPortBinding processorOutputPortBinding = new ProcessorOutputPortBinding();
-
- OutputProcessorPort outputProcessorPort = findNamed(parserState
- .get().getCurrentProcessor().getOutputPorts(),
- toProcessorOutput);
- if (outputProcessorPort == null) {
- String message = "Invalid output port binding, "
- + "unknown processor port: " + fromActivityOutput
- + "->" + toProcessorOutput + " in "
- + parserState.get().getCurrentProcessor();
- if (isStrict())
- throw new ReaderException(message);
- logger.warning(message);
- continue;
- }
-
- OutputActivityPort outputActivityPort = parserState.get()
- .getCurrentActivity().getOutputPorts()
- .getByName(fromActivityOutput);
- if (outputActivityPort == null) {
- outputActivityPort = new OutputActivityPort();
- outputActivityPort.setName(fromActivityOutput);
- outputActivityPort.setParent(parserState.get()
- .getCurrentActivity());
- parserState.get().getCurrentActivity().getOutputPorts()
- .add(outputActivityPort);
- }
-
- if (outputActivityPort.getDepth() == null)
- outputActivityPort.setDepth(outputProcessorPort.getDepth());
- if (outputActivityPort.getGranularDepth() == null)
- outputActivityPort.setGranularDepth(outputProcessorPort
- .getGranularDepth());
-
- processorOutputPortBinding.setBoundActivityPort(outputActivityPort);
- processorOutputPortBinding
- .setBoundProcessorPort(outputProcessorPort);
- parserState.get().getCurrentProcessorBinding()
- .getOutputPortBindings().add(processorOutputPortBinding);
- }
- }
-
- protected Workflow parseDataflow(Dataflow df, Workflow wf)
- throws ReaderException, JAXBException {
- parserState.get().setCurrentWorkflow(wf);
- wf.setInputPorts(parseInputPorts(df.getInputPorts()));
- wf.setOutputPorts(parseOutputPorts(df.getOutputPorts()));
- wf.setProcessors(parseProcessors(df.getProcessors()));
- wf.setDataLinks(parseDatalinks(df.getDatalinks()));
- wf.setControlLinks(parseControlLinks(df.getConditions()));
- Revision revision = parseIdentificationAnnotations(df.getAnnotations());
- if (revision != null)
- wf.setCurrentRevision(revision);
- parseAnnotations(wf, df.getAnnotations());
-
- parserState.get().setCurrentWorkflow(null);
- return wf;
- }
-
- public void parseAnnotations(WorkflowBean annotatedBean,
- Annotations annotations) throws ReaderException {
- // logger.fine("Checking annotations for " + annotatedSubject);
-
- Map<String, NetSfTavernaT2AnnotationAnnotationAssertionImpl> annotationElems = new HashMap<>();
- if (annotations == null
- || annotations.getAnnotationChainOrAnnotationChain22() == null)
- return;
- for (JAXBElement<AnnotationChain> el : annotations
- .getAnnotationChainOrAnnotationChain22()) {
- NetSfTavernaT2AnnotationAnnotationAssertionImpl ann = el.getValue()
- .getNetSfTavernaT2AnnotationAnnotationChainImpl()
- .getAnnotationAssertions()
- .getNetSfTavernaT2AnnotationAnnotationAssertionImpl();
- String annClass = ann.getAnnotationBean().getClazz();
- if (annotationElems.containsKey(annClass)
- && annotationElems.get(annClass).getDate()
- .compareToIgnoreCase(ann.getDate()) > 0)
- // ann.getDate() is less than current 'latest' annotation, skip
- continue;
- annotationElems.put(annClass, ann);
- }
-
- for (String clazz : annotationElems.keySet()) {
- NetSfTavernaT2AnnotationAnnotationAssertionImpl ann = annotationElems.get(clazz);
- Calendar cal = parseDate(ann.getDate());
- String value = null;
- String semanticMediaType = TEXT_TURTLE;
- for (Object obj : ann.getAnnotationBean().getAny()) {
- if (!(obj instanceof Element))
- continue;
- Element elem = (Element) obj;
- if (!(elem.getNamespaceURI() == null))
- continue;
- if (elem.getLocalName().equals("text")) {
- value = elem.getTextContent().trim();
- break;
- }
- if (clazz.equals(SEMANTIC_ANNOTATION)) {
- if (elem.getLocalName().equals("content"))
- value = elem.getTextContent().trim();
- if (elem.getLocalName().equals("mimeType"))
- semanticMediaType = elem.getTextContent().trim();
- }
- }
- if (value != null) {
- // Add the annotation
- Annotation annotation = new Annotation();
- WorkflowBundle workflowBundle = parserState.get()
- .getCurrentWorkflowBundle();
- annotation.setParent(workflowBundle);
-
- String path = "annotation/" + annotation.getName() + ".ttl";
- URI bodyURI = URI.create(path);
-
- annotation.setTarget(annotatedBean);
- annotation.setAnnotatedAt(cal);
- // annotation.setAnnotator();
- annotation.setSerializedBy(t2flowParserURI);
- annotation.setSerializedAt(new GregorianCalendar());
- URI annotatedSubject = uriTools.relativeUriForBean(
- annotatedBean, annotation);
- String body;
- if (clazz.equals(SEMANTIC_ANNOTATION)) {
- String baseStr = "@base <"
- + annotatedSubject.toASCIIString() + "> .\n";
- body = baseStr + value;
- } else {
- // Generate Turtle from 'classic' annotation
- URI predicate = getPredicatesForClass().get(clazz);
- if (predicate == null) {
- if (isStrict())
- throw new ReaderException(
- "Unsupported annotation class " + clazz);
- return;
- }
-
- StringBuilder turtle = new StringBuilder();
- turtle.append("<");
- turtle.append(annotatedSubject.toASCIIString());
- turtle.append("> ");
-
- turtle.append("<");
- turtle.append(predicate.toASCIIString());
- turtle.append("> ");
-
- // A potentially multi-line string
- turtle.append("\"\"\"");
- // Escape existing \ to \\
- String escaped = value.replace("\\", "\\\\");
- // Escape existing " to \" (beware Java's escaping of \ and " below)
- escaped = escaped.replace("\"", "\\\"");
- turtle.append(escaped);
- turtle.append("\"\"\"");
- turtle.append(" .");
- body = turtle.toString();
- }
- try {
- workflowBundle.getResources().addResource(body, path, semanticMediaType);
- } catch (IOException e) {
- throw new ReaderException("Could not store annotation body to " + path, e);
- }
- annotation.setBody(bodyURI);
- }
- }
- }
-
- private Map<String, URI> getPredicatesForClass() {
- if (this.predicates != null)
- return this.predicates;
- synchronized (this) {
- if (this.predicates != null)
- return this.predicates;
- Map<String, URI> predicates = new HashMap<>();
- predicates.put("net.sf.taverna.t2.annotation.annotationbeans.DescriptiveTitle",
- URI.create("http://purl.org/dc/terms/title"));
-
- predicates.put("net.sf.taverna.t2.annotation.annotationbeans.Author",
- URI.create("http://purl.org/dc/elements/1.1/creator"));
-
- predicates.put("net.sf.taverna.t2.annotation.annotationbeans.FreeTextDescription",
- URI.create("http://purl.org/dc/terms/description"));
-
- predicates.put("net.sf.taverna.t2.annotation.annotationbeans.MimeType",
- URI.create("http://purl.org/dc/elements/1.1/format"));
-
- predicates.put("net.sf.taverna.t2.annotation.annotationbeans.ExampleValue",
- exampleDataURI);
- this.predicates = predicates;
- return this.predicates;
- }
- }
-
- protected Revision parseIdentificationAnnotations(Annotations annotations) {
- SortedMap<Calendar, UUID> revisions = new TreeMap<>();
- if (annotations == null || annotations.getAnnotationChainOrAnnotationChain22() == null)
- return null;
- for (JAXBElement<AnnotationChain> el : annotations
- .getAnnotationChainOrAnnotationChain22()) {
- NetSfTavernaT2AnnotationAnnotationAssertionImpl ann = el.getValue()
- .getNetSfTavernaT2AnnotationAnnotationChainImpl()
- .getAnnotationAssertions()
- .getNetSfTavernaT2AnnotationAnnotationAssertionImpl();
- String annClass = ann.getAnnotationBean().getClazz();
- if (!annClass.equals(IDENTIFICATION_ASSERTION))
- continue;
- for (Object obj : ann.getAnnotationBean().getAny()) {
- if (!(obj instanceof Element))
- continue;
- Element elem = (Element) obj;
- if (elem.getNamespaceURI() == null
- && elem.getLocalName().equals("identification")) {
- String uuid = elem.getTextContent().trim();
- String date = ann.getDate();
- Calendar cal = parseDate(date);
- revisions.put(cal, UUID.fromString(uuid));
- }
- }
- }
-
- Revision rev = null;
- for (Entry<Calendar, UUID> entry : revisions.entrySet()) {
- Calendar cal = entry.getKey();
- UUID uuid = entry.getValue();
- URI uri = WORKFLOW_ROOT.resolve(uuid.toString() + "/");
- rev = new Revision(uri, rev);
- rev.setGeneratedAtTime(cal);
- }
- return rev;
- }
-
- private Calendar parseDate(String dateStr) {
- // Based briefly on patterns used by
- // com.thoughtworks.xstream.converters.basic.DateConverter
-
- List<String> patterns = new ArrayList<>();
- patterns.add("yyyy-MM-dd HH:mm:ss.S z");
- patterns.add("yyyy-MM-dd HH:mm:ss z");
- patterns.add("yyyy-MM-dd HH:mm:ssz");
- patterns.add("yyyy-MM-dd HH:mm:ss.S 'UTC'");
- patterns.add("yyyy-MM-dd HH:mm:ss 'UTC'");
- Date date;
- for (String pattern : patterns)
- try {
- SimpleDateFormat dateFormat = new SimpleDateFormat(pattern, ENGLISH);
- date = dateFormat.parse(dateStr);
- GregorianCalendar cal = new GregorianCalendar(getTimeZone("UTC"), ENGLISH);
- cal.setTime(date);
- return cal;
- } catch (ParseException e) {
- continue;
- }
- throw new IllegalArgumentException("Can't parse date: " + dateStr);
- }
-
- private Set<ControlLink> parseControlLinks(Conditions conditions)
- throws ReaderException {
- Set<ControlLink> links = new HashSet<>();
- for (Condition condition : conditions.getCondition()) {
- NamedSet<Processor> processors = parserState.get()
- .getCurrentWorkflow().getProcessors();
- String target = condition.getTarget();
- Processor block = processors.getByName(target);
- if (block == null && isStrict())
- throw new ReaderException(
- "Unrecognized blocking processor in control link: "
- + target);
- String control = condition.getControl();
- Processor untilFinished = processors.getByName(control);
- if (untilFinished == null && isStrict())
- throw new ReaderException(
- "Unrecognized untilFinished processor in control link: "
- + control);
-
- BlockingControlLink newLink = new BlockingControlLink(block, untilFinished);
-
- // FIXME: missing from t2flow and schema
- //parseAnnotations(newLink, condition.getAnnotations());
-
- links.add(newLink);
- }
- return links;
- }
-
- protected Set<DataLink> parseDatalinks(Datalinks origLinks)
- throws ReaderException {
- HashSet<DataLink> newLinks = new HashSet<>();
- Map<ReceiverPort, AtomicInteger> mergeCounts = new HashMap<>();
- for (org.apache.taverna.scufl2.xml.t2flow.jaxb.DataLink origLink : origLinks
- .getDatalink()) {
- try {
- SenderPort senderPort = findSenderPort(parserState.get()
- .getCurrentWorkflow(), origLink.getSource());
- ReceiverPort receiverPort = findReceiverPort(parserState.get()
- .getCurrentWorkflow(), origLink.getSink());
-
- DataLink newLink = new DataLink(parserState.get()
- .getCurrentWorkflow(), senderPort, receiverPort);
-
- AtomicInteger mergeCount = mergeCounts.get(receiverPort);
- if (origLink.getSink().getType().equals(MERGE)) {
- if (mergeCount != null && mergeCount.intValue() < 1)
- throw new ReaderException(
- "Merged and non-merged links to port "
- + receiverPort);
- if (mergeCount == null) {
- mergeCount = new AtomicInteger(0);
- mergeCounts.put(receiverPort, mergeCount);
- }
- newLink.setMergePosition(mergeCount.getAndIncrement());
- } else {
- if (mergeCount != null)
- throw new ReaderException(
- "More than one link to non-merged port "
- + receiverPort);
- mergeCounts.put(receiverPort, new AtomicInteger(-1));
- }
-
- // FIXME: missing from t2flow and schema
- //parseAnnotations(newLink, origLink.getAnnotations());
-
- newLinks.add(newLink);
- } catch (ReaderException ex) {
- logger.log(WARNING, "Could not translate link:\n" + origLink,
- ex);
- if (isStrict())
- throw ex;
- continue;
- }
- }
- return newLinks;
- }
-
- protected void parseDispatchStack(DispatchStack dispatchStack)
- throws ReaderException {
- Processor processor = parserState.get().getCurrentProcessor();
- Configuration procConfig = scufl2Tools.createConfigurationFor(
- processor, parserState.get().getCurrentProfile());
- parserState.get().setCurrentConfigurable(processor);
- parserState.get().setCurrentConfiguration(procConfig);
- parserState.get().setPreviousDispatchLayerName(null);
- try {
- for (DispatchLayer dispatchLayer : dispatchStack.getDispatchLayer())
- parseDispatchStack(dispatchLayer);
- } finally {
- parserState.get().setCurrentConfigurable(null);
- parserState.get().setCurrentConfiguration(null);
- parserState.get().setPreviousDispatchLayerName(null);
- }
- }
-
- protected void parseDispatchStack(DispatchLayer dispatchLayer)
- throws ReaderException {
- URI typeUri = mapTypeFromRaven(dispatchLayer.getRaven(),
- dispatchLayer.getClazz());
- ObjectNode procConfig = parserState.get().getCurrentConfiguration().getJsonAsObjectNode();
-
- try {
- Configuration dispatchConfig = parseConfiguration(dispatchLayer.getConfigBean());
- URI relUri = INTERNAL_DISPATCH_PREFIX.relativize(typeUri);
- String name;
- if (!relUri.isAbsolute()) {
- /*
- * It's an internal layer. We'll put it under the name which
- * we'll cleverly fish out of the URI path, eg. "retry" or
- * "parallelize"
- */
- name = relUri.getPath().toLowerCase();
- if (dispatchConfig != null && dispatchConfig.getJson().size() > 0)
- // But only if non-empty (non-default)
- procConfig.put(name, dispatchConfig.getJson());
- } else {
- ObjectNode json;
- if (dispatchConfig != null && dispatchConfig.getJson().isObject())
- json = dispatchConfig.getJsonAsObjectNode();
- else {
- /*
- * We'll still need to create an objectNode to keep _type
- * and _below
- */
- json = procConfig.objectNode();
- if (dispatchConfig != null)
- // We'll put the non-objectnode here
- json.put("_config", dispatchConfig.getJson());
- }
-
- /*
- * Not really much to go from here, we don't want to use the
- * typeUri as the name as third-party layers in theory could be
- * added several times for same type
- */
- name = randomUUID().toString();
- json.put("_type", typeUri.toString());
- // Might be null - meaning "top"
- json.put("_below", parserState.get()
- .getPreviousDispatchLayerName());
- procConfig.put(name, json);
- }
- parserState.get().setPreviousDispatchLayerName(name);
- } catch (JAXBException ex) {
- String message = "Can't parse configuration for dispatch layer in "
- + parserState.get().getCurrentProcessor();
- if (isStrict())
- throw new ReaderException(message, ex);
- logger.log(WARNING, message, ex);
- }
- }
-
- protected Set<InputWorkflowPort> parseInputPorts(
- AnnotatedGranularDepthPorts originalPorts) throws ReaderException {
- Set<InputWorkflowPort> createdPorts = new HashSet<>();
- for (AnnotatedGranularDepthPort originalPort : originalPorts.getPort()) {
- InputWorkflowPort newPort = new InputWorkflowPort(parserState.get()
- .getCurrentWorkflow(), originalPort.getName());
- newPort.setDepth(originalPort.getDepth().intValue());
- if (!originalPort.getGranularDepth()
- .equals(originalPort.getDepth())) {
- String message = "Specific input port granular depth not "
- + "supported in scufl2, port " + originalPort.getName()
- + " has depth " + originalPort.getDepth()
- + " and granular depth "
- + originalPort.getGranularDepth();
- if (isStrict())
- throw new ReaderException(message);
- logger.warning(message);
- }
- parseAnnotations(newPort, originalPort.getAnnotations());
-
- createdPorts.add(newPort);
- }
- return createdPorts;
- }
-
- protected IterationStrategyStack parseIterationStrategyStack(
- org.apache.taverna.scufl2.xml.t2flow.jaxb.IterationStrategyStack originalStack)
- throws ReaderException {
- IterationStrategyStack newStack = new IterationStrategyStack();
-
- for (TopIterationNode strategy : originalStack.getIteration()
- .getStrategy()) {
- IterationNode topNode = strategy.getCross();
- if (topNode == null)
- topNode = strategy.getDot();
- if (topNode == null)
- continue;
- IterationNodeParent parent = (IterationNodeParent) topNode;
- if (parent.getCrossOrDotOrPort().isEmpty())
- continue;
- try {
- newStack.add((IterationStrategyTopNode) parseIterationStrategyNode(topNode));
- } catch (ReaderException e) {
- if (isStrict())
- throw e;
- logger.warning(e.getMessage());
- }
- }
-
- return newStack;
- }
-
- protected IterationStrategyNode parseIterationStrategyNode(
- IterationNode topNode) throws ReaderException {
- if (topNode instanceof PortProduct) {
- PortProduct portProduct = (PortProduct) topNode;
- PortNode portNode = new PortNode();
- portNode.setDesiredDepth(portProduct.getDepth().intValue());
- String name = portProduct.getName();
- Processor processor = parserState.get().getCurrentProcessor();
- InputProcessorPort inputProcessorPort = processor.getInputPorts()
- .getByName(name);
- portNode.setInputProcessorPort(inputProcessorPort);
- return portNode;
- }
-
- IterationStrategyNode node;
- if (topNode instanceof DotProduct)
- node = new org.apache.taverna.scufl2.api.iterationstrategy.DotProduct();
- else if (topNode instanceof CrossProduct)
- node = new org.apache.taverna.scufl2.api.iterationstrategy.CrossProduct();
- else
- throw new ReaderException("Invalid node " + topNode);
- @SuppressWarnings("unchecked")
- List<IterationStrategyNode> children = (List<IterationStrategyNode>) node;
- IterationNodeParent parent = (IterationNodeParent) topNode;
- for (IterationNode child : parent.getCrossOrDotOrPort())
- children.add(parseIterationStrategyNode(child));
- return node;
- }
-
- protected Set<OutputWorkflowPort> parseOutputPorts(
- AnnotatedPorts originalPorts) throws ReaderException {
- Set<OutputWorkflowPort> createdPorts = new HashSet<>();
- for (AnnotatedPort originalPort : originalPorts.getPort()) {
- OutputWorkflowPort newPort = new OutputWorkflowPort(parserState
- .get().getCurrentWorkflow(), originalPort.getName());
- parseAnnotations(newPort, originalPort.getAnnotations());
- createdPorts.add(newPort);
- }
- return createdPorts;
- }
-
- @SuppressWarnings("boxing")
- protected Set<InputProcessorPort> parseProcessorInputPorts(
- Processor newProc, DepthPorts origPorts) {
- Set<InputProcessorPort> newPorts = new HashSet<>();
- for (DepthPort origPort : origPorts.getPort()) {
- InputProcessorPort newPort = new InputProcessorPort(newProc,
- origPort.getName());
- newPort.setDepth(origPort.getDepth().intValue());
- // TODO: What about InputProcessorPort granular depth?
- newPorts.add(newPort);
- }
- return newPorts;
- }
-
- @SuppressWarnings("boxing")
- protected Set<OutputProcessorPort> parseProcessorOutputPorts(
- Processor newProc, GranularDepthPorts origPorts) {
- Set<OutputProcessorPort> newPorts = new HashSet<>();
- for (GranularDepthPort origPort : origPorts.getPort()) {
- OutputProcessorPort newPort = new OutputProcessorPort(newProc,
- origPort.getName());
- newPort.setDepth(origPort.getDepth().intValue());
- newPort.setGranularDepth(origPort.getGranularDepth().intValue());
- newPorts.add(newPort);
- }
- return newPorts;
- }
-
- protected Set<Processor> parseProcessors(Processors originalProcessors)
- throws ReaderException, JAXBException {
- HashSet<Processor> newProcessors = new HashSet<>();
- for (org.apache.taverna.scufl2.xml.t2flow.jaxb.Processor origProc : originalProcessors
- .getProcessor()) {
- Processor newProc = new Processor(parserState.get()
- .getCurrentWorkflow(), origProc.getName());
- parserState.get().setCurrentProcessor(newProc);
- newProc.setInputPorts(parseProcessorInputPorts(newProc,
- origProc.getInputPorts()));
- newProc.setOutputPorts(parseProcessorOutputPorts(newProc,
- origProc.getOutputPorts()));
- parseDispatchStack(origProc
- .getDispatchStack());
- newProc.setIterationStrategyStack(parseIterationStrategyStack(origProc
- .getIterationStrategyStack()));
- parseAnnotations(newProc, origProc.getAnnotations());
-
- newProcessors.add(newProc);
- int i = 0;
- for (Activity origActivity : origProc.getActivities().getActivity())
- parseActivityBinding(origActivity, i++);
- }
- parserState.get().setCurrentProcessor(null);
- return newProcessors;
- }
-
- @SuppressWarnings("unchecked")
- public WorkflowBundle parseT2Flow(File t2File) throws IOException,
- ReaderException, JAXBException {
- JAXBElement<org.apache.taverna.scufl2.xml.t2flow.jaxb.Workflow> root = (JAXBElement<org.apache.taverna.scufl2.xml.t2flow.jaxb.Workflow>) getUnmarshaller()
- .unmarshal(t2File);
- return parseT2Flow(root.getValue());
- }
-
- @SuppressWarnings("unchecked")
- public WorkflowBundle parseT2Flow(InputStream t2File) throws IOException,
- JAXBException, ReaderException {
- JAXBElement<org.apache.taverna.scufl2.xml.t2flow.jaxb.Workflow> root = (JAXBElement<org.apache.taverna.scufl2.xml.t2flow.jaxb.Workflow>) getUnmarshaller()
- .unmarshal(t2File);
- return parseT2Flow(root.getValue());
- }
-
- public WorkflowBundle parseT2Flow(
- org.apache.taverna.scufl2.xml.t2flow.jaxb.Workflow wf)
- throws ReaderException, JAXBException {
- try {
- parserState.get().setT2FlowParser(this);
- WorkflowBundle wfBundle = new WorkflowBundle();
- parserState.get().setCurrentWorkflowBundle(wfBundle);
- makeProfile(wf);
-
- // First a skeleton scan of workflows (for nested workflow configs)
- Map<Dataflow, Workflow> dataflowMap = new HashMap<>();
- for (Dataflow df : wf.getDataflow()) {
- Workflow workflow = skeletonDataflow(df);
- dataflowMap.put(df, workflow);
- wfBundle.getWorkflows().addWithUniqueName(workflow);
- workflow.setParent(wfBundle);
- if (df.getRole().equals(TOP)) {
- wfBundle.setMainWorkflow(workflow);
- wfBundle.setName(df.getName());
- wfBundle.setGlobalBaseURI(WORKFLOW_BUNDLE_ROOT.resolve(df
- .getId() + "/"));
- }
- }
- // Second stage
- for (Dataflow df : wf.getDataflow()) {
- Workflow workflow = dataflowMap.get(df);
- parseDataflow(df, workflow);
- }
- if (isStrict() && wfBundle.getMainWorkflow() == null)
- throw new ReaderException("No main workflow");
- scufl2Tools.setParents(wfBundle);
-
- return wfBundle;
- } finally {
- parserState.remove();
- }
- }
-
- protected Workflow skeletonDataflow(Dataflow df) {
- Workflow wf = new Workflow();
- parserState.get().setCurrentWorkflow(wf);
- wf.setName(df.getName());
- wf.setIdentifier(WORKFLOW_ROOT.resolve(df.getId() + "/"));
- return wf;
- }
-
- public void setStrict(boolean strict) {
- this.strict = strict;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2FlowReader.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2FlowReader.java b/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2FlowReader.java
deleted file mode 100644
index 00d3350..0000000
--- a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2FlowReader.java
+++ /dev/null
@@ -1,182 +0,0 @@
-package org.apache.taverna.scufl2.translator.t2flow;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-
-import static java.util.Collections.singleton;
-import static org.apache.taverna.scufl2.api.container.WorkflowBundle.WORKFLOW_BUNDLE_ROOT;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.nio.charset.Charset;
-import java.util.Set;
-import java.util.UUID;
-
-import javax.xml.bind.JAXBException;
-
-import org.apache.taverna.scufl2.api.common.Scufl2Tools;
-import org.apache.taverna.scufl2.api.common.URITools;
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.api.io.WorkflowBundleReader;
-
-
-public class T2FlowReader implements WorkflowBundleReader {
- private final class DelayedCloseBufferedInputStream extends
- BufferedInputStream {
- private DelayedCloseBufferedInputStream(InputStream in, int size) {
- super(in, size);
- }
-
- @Override
- public void close() throws IOException {
- return;
- }
-
- public void reallyClose() throws IOException {
- super.close();
- }
- }
-
- protected static final URI PROV = URI.create("http://www.w3.org/ns/prov#");
- protected static final URI HAD_ORIGINAL_SOURCE = PROV.resolve("#hadOriginalSource");
- protected static final URI ENTITY = PROV.resolve("#Entity");
- private static final int MEGABYTE = 1024 * 1024;
- private static final int PRESERVE_ORIGINAL_MAXIMUM_BYTES = 5 * MEGABYTE;
- public static final String APPLICATION_VND_TAVERNA_T2FLOW_XML = "application/vnd.taverna.t2flow+xml";
-
- private T2FlowParser parser;
- private Scufl2Tools scufl2Tools = new Scufl2Tools();
- private URITools uriTools = new URITools();
-
- @Override
- public Set<String> getMediaTypes() {
- return singleton(APPLICATION_VND_TAVERNA_T2FLOW_XML);
- }
-
- @Override
- public WorkflowBundle readBundle(File bundleFile, String mediaType)
- throws ReaderException, IOException {
- try {
- WorkflowBundle bundle = getParser().parseT2Flow(bundleFile);
- scufl2Tools.setParents(bundle);
- preserveOriginal(bundle, new FileInputStream(bundleFile));
- return bundle;
- } catch (JAXBException e) {
- if (e.getCause() instanceof IOException) {
- IOException ioException = (IOException) e.getCause();
- throw ioException;
- }
- throw new ReaderException("Can't parse t2flow " + bundleFile, e);
- }
- }
-
- protected void preserveOriginal(WorkflowBundle bundle,
- InputStream t2flowStream) throws IOException {
- String path = "history/" + bundleUUID(bundle) + ".t2flow";
- bundle.getResources().addResource(t2flowStream, path,
- APPLICATION_VND_TAVERNA_T2FLOW_XML);
- // TODO: Add annotation recording the provenance of this history file
-// PropertyResource original = new PropertyResource();
-// original.setTypeURI(ENTITY);
-// original.setResourceURI(URI.create("../../" + path));
-// // TODO: dcterms:format ?
-// // TODO: Add this annotation to the workflow bundle rather than main workflow
-// bundle.getMainWorkflow().getCurrentRevision().addProperty(HAD_ORIGINAL_SOURCE, original);
- }
-
- protected String bundleUUID(WorkflowBundle bundle) {
- String uuidPath = uriTools.relativePath(WORKFLOW_BUNDLE_ROOT,
- bundle.getGlobalBaseURI()).getPath();
- UUID uuid = UUID
- .fromString(uuidPath.substring(0, uuidPath.length() - 1));
- return uuid.toString();
- }
-
- @Override
- public WorkflowBundle readBundle(InputStream inputStream, String mediaType)
- throws ReaderException, IOException {
- DelayedCloseBufferedInputStream buffered = new DelayedCloseBufferedInputStream(
- inputStream, PRESERVE_ORIGINAL_MAXIMUM_BYTES);
- try {
- buffered.mark(PRESERVE_ORIGINAL_MAXIMUM_BYTES);
- WorkflowBundle bundle;
- try {
- bundle = getParser().parseT2Flow(buffered);
- scufl2Tools.setParents(bundle);
- } catch (JAXBException e) {
- if (e.getCause() instanceof IOException) {
- IOException ioException = (IOException) e.getCause();
- throw ioException;
- }
- throw new ReaderException("Can't parse t2flow", e);
- }
-
- // Rewind and try to copy out the original t2flow
- try {
- buffered.reset();
- } catch (IOException ex) {
- // Too big workflow, can't preserve it.
- // TODO: Store to Bundle first?
- // FIXME: Can we close BufferedInputStream without closing
- // inputStream from our parameter?
- return bundle;
- }
- preserveOriginal(bundle, buffered);
- return bundle;
- } finally {
- buffered.reallyClose();
- }
- }
-
- public void setParser(T2FlowParser parser) {
- this.parser = parser;
- }
-
- public T2FlowParser getParser() throws JAXBException {
- if (parser == null)
- parser = new T2FlowParser();
- return parser;
- }
-
- @Override
- public String guessMediaTypeForSignature(byte[] firstBytes) {
- if (firstBytes.length < 100)
- return null;
- // FIXME: Does not deal with potential UTF-16 encoding
-
- // Latin 1 can deal with nasty bytes in binaries
- Charset latin1 = Charset.forName("ISO-8859-1");
- String asLatin1 = new String(firstBytes, latin1);
- if (!asLatin1.contains("workflow"))
- return null;
- if (!asLatin1.contains("http://taverna.sf.net/2008/xml/t2flow"))
- return null;
- if (!asLatin1.contains("dataflow"))
- return null;
- // Good enough - XML is hard to check on so few bytes
- return APPLICATION_VND_TAVERNA_T2FLOW_XML;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2Parser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2Parser.java b/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2Parser.java
deleted file mode 100644
index 6e7c469..0000000
--- a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2Parser.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.apache.taverna.scufl2.translator.t2flow;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-
-import java.net.URI;
-import java.util.List;
-
-import org.apache.taverna.scufl2.api.configurations.Configuration;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ConfigBean;
-
-public interface T2Parser {
- boolean canHandlePlugin(URI pluginURI);
-
- URI mapT2flowRavenIdToScufl2URI(URI t2flowActivity);
-
- Configuration parseConfiguration(T2FlowParser t2FlowParser,
- ConfigBean configBean, ParserState parserState)
- throws ReaderException;
-
- List<URI> getAdditionalSchemas();
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/AbstractActivityParser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/AbstractActivityParser.java b/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/AbstractActivityParser.java
deleted file mode 100644
index 6069920..0000000
--- a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/AbstractActivityParser.java
+++ /dev/null
@@ -1,232 +0,0 @@
-package org.apache.taverna.scufl2.translator.t2flow.defaultactivities;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-
-import java.io.StringReader;
-import java.math.BigInteger;
-import java.net.URI;
-import java.util.Arrays;
-import java.util.List;
-
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.transform.Source;
-import javax.xml.transform.stream.StreamSource;
-
-import org.apache.taverna.scufl2.api.activity.Activity;
-import org.apache.taverna.scufl2.api.common.Scufl2Tools;
-import org.apache.taverna.scufl2.api.common.URITools;
-import org.apache.taverna.scufl2.api.configurations.Configuration;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.api.port.InputActivityPort;
-import org.apache.taverna.scufl2.api.port.OutputActivityPort;
-import org.apache.taverna.scufl2.translator.t2flow.ParserState;
-import org.apache.taverna.scufl2.translator.t2flow.T2FlowParser;
-import org.apache.taverna.scufl2.translator.t2flow.T2Parser;
-import org.w3c.dom.Element;
-
-//import org.apache.taverna.scufl2.api.property.PropertyResource;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ActivityPortDefinitionBean;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ActivityPortDefinitionBean.MimeTypes;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ConfigBean;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-public abstract class AbstractActivityParser implements T2Parser {
- public static URI MEDIATYPES_URI = URI.create("http://purl.org/NET/mediatypes/");
- @Deprecated
- public static URI PORT_DEFINITION = Scufl2Tools.PORT_DEFINITION;
-
- @SuppressWarnings("unused")
- private ThreadLocal<ParserState> parserState;
-
- public <ConfigType> ConfigType unmarshallConfig(T2FlowParser t2FlowParser,
- ConfigBean configBean, String encoding, Class<ConfigType> configType)
- throws ReaderException {
- Object config = configBean.getAny();
- if (config instanceof JAXBElement) {
- JAXBElement<?> jaxbElement = (JAXBElement<?>) config;
- if (!configType.isInstance((jaxbElement.getValue())))
- throw new ReaderException("Unexpected config type: "
- + jaxbElement.getValue().getClass() + ", expected "
- + configType);
- return configType.cast(jaxbElement.getValue());
- }
- if (!(config instanceof Element)
- || !configBean.getEncoding().equals(encoding))
- throw new ReaderException("Unsupported config bean " + configBean);
- return unmarshallElement(t2FlowParser, (Element) config, configType);
- }
-
- public <ConfigType> ConfigType unmarshallElement(T2FlowParser t2FlowParser,
- Element element, Class<ConfigType> configType)
- throws ReaderException {
- Unmarshaller unmarshaller2 = t2FlowParser.getUnmarshaller();
- unmarshaller2.setSchema(null);
- try {
- JAXBElement<ConfigType> configElemElem = unmarshaller2.unmarshal(
- element, configType);
- return configElemElem.getValue();
- } catch (JAXBException|ClassCastException e) {
- throw new ReaderException("Can't parse element " + element, e);
- }
- }
-
- public <ConfigType> ConfigType unmarshallXml(T2FlowParser t2FlowParser,
- String xml, Class<ConfigType> configType) throws ReaderException {
- Unmarshaller unmarshaller2 = t2FlowParser.getUnmarshaller();
- unmarshaller2.setSchema(null);
-
- Source source = new StreamSource(new StringReader(xml));
- try {
- JAXBElement<ConfigType> configElemElem = unmarshaller2.unmarshal(
- source, configType);
- return configElemElem.getValue();
- } catch (JAXBException|ClassCastException e) {
- throw new ReaderException("Can't parse xml " + xml, e);
- }
- }
-
- protected ObjectNode parseAndAddOutputPortDefinition(
- ActivityPortDefinitionBean portBean, Configuration configuration,
- Activity activity) {
- ObjectNode configResource = (ObjectNode) configuration.getJson();
- OutputActivityPort outputPort = new OutputActivityPort();
-
- outputPort.setName(getPortElement(portBean, "name", String.class));
- outputPort.setParent(activity);
-
- BigInteger depth = getPortElement(portBean, "depth", BigInteger.class);
- if (depth != null)
- outputPort.setDepth(depth.intValue());
-
- BigInteger granularDepth = getPortElement(portBean, "granularDepth",
- BigInteger.class);
- if (granularDepth != null)
- outputPort.setGranularDepth(granularDepth.intValue());
-
- ObjectNode portConfig = configResource.objectNode();
-// PropertyResource portConfig = configResource.addPropertyAsNewResource(
-// Scufl2Tools.PORT_DEFINITION.resolve("#outputPortDefinition"),
-// Scufl2Tools.PORT_DEFINITION.resolve("#OutputPortDefinition"));
-
- @SuppressWarnings("unused")
- URI portUri = new URITools().relativeUriForBean(outputPort, configuration);
-// portConfig.addPropertyReference(Scufl2Tools.PORT_DEFINITION.resolve("#definesOutputPort"), portUri);
-
- // Legacy duplication of port details for XMLSplitter activities
- portConfig.put("name", outputPort.getName());
- portConfig.put("depth", outputPort.getDepth());
- portConfig.put("granularDepth", outputPort.getDepth());
-
- parseMimeTypes(portBean, portConfig);
- return portConfig;
- }
-
- /**
- * Deals with the not-so-helpful
- * getHandledReferenceSchemesOrTranslatedElementTypeOrName method
- *
- * @param portBean
- * @param elementName
- * @return
- */
- private <T> T getPortElement(ActivityPortDefinitionBean portBean,
- String elementName, Class<T> type) {
- for (JAXBElement<?> elem : portBean
- .getHandledReferenceSchemesOrTranslatedElementTypeOrName())
- if (elem.getName().getLocalPart().equals(elementName))
- return type.cast(elem.getValue());
- return null;
- }
-
- protected ObjectNode parseAndAddInputPortDefinition(
- ActivityPortDefinitionBean portBean, Configuration configuration,
- Activity activity) {
- ObjectNode configResource = (ObjectNode) configuration.getJson();
- ObjectNode portConfig = configResource.objectNode();
-
- InputActivityPort inputPort = new InputActivityPort();
- inputPort.setName(getPortElement(portBean, "name", String.class));
- inputPort.setParent(activity);
-
- BigInteger depth = getPortElement(portBean, "depth", BigInteger.class);
- if (depth != null)
- inputPort.setDepth(depth.intValue());
-
-// PropertyResource portConfig = configResource.addPropertyAsNewResource(
-// Scufl2Tools.PORT_DEFINITION.resolve("#inputPortDefinition"),
-// Scufl2Tools.PORT_DEFINITION.resolve("#InputPortDefinition"));
-
- @SuppressWarnings("unused")
- URI portUri = new URITools().relativeUriForBean(inputPort, configuration);
-// portConfig.addPropertyReference(Scufl2Tools.PORT_DEFINITION.resolve("#definesInputPort"), portUri);
-
- parseMimeTypes(portBean, portConfig);
-
- String translated = getPortElement(portBean, "translatedElementType", String.class);
- if (translated != null) {
- // As "translated element type" is confusing, we'll instead use "dataType"
-// portConfig.addPropertyReference(Scufl2Tools.PORT_DEFINITION.resolve("#dataType"),
-// URI.create("java:" + translated));
- portConfig.put("dataType", "java:" + translated);
-
- // TODO: Include mapping to XSD types like xsd:string
- }
- // T2-1681: Ignoring isAllowsLiteralValues and handledReferenceScheme
-
- // Legacy duplication of port details for XMLSplitter activities
- portConfig.put("name", inputPort.getName());
- portConfig.put("depth", inputPort.getDepth());
-
- return portConfig;
- }
-
- private void parseMimeTypes(ActivityPortDefinitionBean portBean,
- ObjectNode portConfig) {
- MimeTypes mimeTypes = getPortElement(portBean, "mimeTypes",
- MimeTypes.class);
- if (mimeTypes == null)
- return;
- // FIXME: Do as annotation as this is not configuration
-// URI mimeType = Scufl2Tools.PORT_DEFINITION.resolve("#expectedMimeType");
- List<String> strings = mimeTypes.getString();
- if ((strings == null || strings.isEmpty())
- && mimeTypes.getElement() != null)
- strings = Arrays.asList(mimeTypes.getElement().getValue());
- if (strings != null)
- for (String s : strings) {
- if (s.contains("'"))
- s = s.split("'")[1];
-// portConfig.addPropertyReference(mimeType,
-// MEDIATYPES_URI.resolve(s));
- portConfig.put("mimeType", s);
- return; // Just first mimeType survives
- }
- }
-
- @Override
- public List<URI> getAdditionalSchemas() {
- return null;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/ApiConsomerActivityParser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/ApiConsomerActivityParser.java b/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/ApiConsomerActivityParser.java
deleted file mode 100644
index 61d3dbc..0000000
--- a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/ApiConsomerActivityParser.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package org.apache.taverna.scufl2.translator.t2flow.defaultactivities;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-
-import java.math.BigInteger;
-import java.net.URI;
-
-import org.apache.taverna.scufl2.api.configurations.Configuration;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.translator.t2flow.ParserState;
-import org.apache.taverna.scufl2.translator.t2flow.T2FlowParser;
-
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ApiConsumerConfig;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ConfigBean;
-
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-public class ApiConsomerActivityParser extends AbstractActivityParser {
- private static URI activityRavenURI = T2FlowParser.ravenURI
- .resolve("net.sf.taverna.t2.activities/apiconsumer-activity/");
- private static String activityClassName = "net.sf.taverna.t2.activities.apiconsumer.ApiConsumerActivity";
- public static URI ACTIVITY_URI = URI
- .create("http://ns.taverna.org.uk/2010/activity/apiconsumer");
-
- @Override
- public boolean canHandlePlugin(URI activityURI) {
- String activityUriStr = activityURI.toASCIIString();
- return activityUriStr.startsWith(activityRavenURI.toASCIIString())
- && activityUriStr.endsWith(activityClassName);
- }
-
- @Override
- public URI mapT2flowRavenIdToScufl2URI(URI t2flowActivity) {
- return ACTIVITY_URI;
- }
-
- @Override
- public Configuration parseConfiguration(T2FlowParser t2FlowParser,
- ConfigBean configBean, ParserState parserState)
- throws ReaderException {
- ApiConsumerConfig config = unmarshallConfig(t2FlowParser, configBean,
- "xstream", ApiConsumerConfig.class);
-
- Configuration configuration = new Configuration();
- configuration.setParent(parserState.getCurrentProfile());
-
- ObjectNode json = (ObjectNode) configuration.getJson();
- configuration.setType(ACTIVITY_URI.resolve("#Config"));
-
- json.put("apiConsumerDescription", config.getApiConsumerDescription());
- json.put("apiConsumerName", config.getApiConsumerName());
- json.put("description", config.getDescription());
- json.put("className", config.getClassName());
- json.put("methodName", config.getMethodName());
-
- ArrayNode parameterNames = json.arrayNode();
- json.put("parameterNames", parameterNames);
- for (String parameterName : config.getParameterNames().getString())
- parameterNames.add(parameterName);
-
- ArrayNode parameterDimensions = json.arrayNode();
- json.put("parameterDimensions", parameterDimensions);
- for (BigInteger parameterDimension : config.getParameterDimensions()
- .getInt())
- parameterDimensions.add(parameterDimension.intValue());
-
- ArrayNode parameterTypes = json.arrayNode();
- json.put("parameterTypes", parameterTypes);
- for (String parameterType : config.getParameterTypes().getString())
- parameterTypes.add(parameterType);
-
- json.put("returnType", config.getReturnType());
- json.put("returnDimension", config.getReturnDimension().intValue());
- json.put("isMethodConstructor", config.isIsMethodConstructor());
- json.put("isMethodStatic", config.isIsMethodStatic());
-
- return configuration;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BeanshellActivityParser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BeanshellActivityParser.java b/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BeanshellActivityParser.java
deleted file mode 100644
index 322c3c7..0000000
--- a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BeanshellActivityParser.java
+++ /dev/null
@@ -1,154 +0,0 @@
-package org.apache.taverna.scufl2.translator.t2flow.defaultactivities;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-
-import static org.apache.taverna.scufl2.translator.t2flow.T2FlowParser.ravenURI;
-
-import java.net.URI;
-
-import org.apache.taverna.scufl2.api.activity.Activity;
-import org.apache.taverna.scufl2.api.common.URITools;
-import org.apache.taverna.scufl2.api.configurations.Configuration;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.translator.t2flow.ParserState;
-import org.apache.taverna.scufl2.translator.t2flow.T2FlowParser;
-
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ActivityPortDefinitionBean;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.BasicArtifact;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.BeanshellConfig;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ClassLoaderSharing;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ConfigBean;
-
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-public class BeanshellActivityParser extends AbstractActivityParser {
- private static final URI activityRavenURI = ravenURI
- .resolve("net.sf.taverna.t2.activities/beanshell-activity/");
- private static final URI localWorkerActivityRavenURI = ravenURI
- .resolve("net.sf.taverna.t2.activities/localworker-activity/");
- private static final String activityClassName = "net.sf.taverna.t2.activities.beanshell.BeanshellActivity";
- private static final String localWorkerActivityClassName = "net.sf.taverna.t2.activities.localworker.LocalworkerActivity";
- public static final URI ACTIVITY_URI = URI
- .create("http://ns.taverna.org.uk/2010/activity/beanshell");
- public static final URI LOCAL_WORKER_URI = URI
- .create("http://ns.taverna.org.uk/2010/activity/localworker/");
- public static final URI DEPENDENCY_URI = URI
- .create("http://ns.taverna.org.uk/2010/activity/dependency");
- private static URITools uriTools = new URITools();
-
- @Override
- public boolean canHandlePlugin(URI activityURI) {
- String activityUriStr = activityURI.toASCIIString();
- if (activityUriStr.startsWith(activityRavenURI.toASCIIString())
- && activityUriStr.endsWith(activityClassName))
- return true;
- if (activityUriStr.startsWith(localWorkerActivityRavenURI
- .toASCIIString())
- && activityUriStr.endsWith(localWorkerActivityClassName))
- return true;
- return false;
- }
-
- @Override
- public URI mapT2flowRavenIdToScufl2URI(URI t2flowActivity) {
- return ACTIVITY_URI;
- }
-
- @Override
- public Configuration parseConfiguration(T2FlowParser t2FlowParser,
- ConfigBean configBean, ParserState parserState)
- throws ReaderException {
- BeanshellConfig beanshellConfig = unmarshallConfig(t2FlowParser,
- configBean, "xstream", BeanshellConfig.class);
-
- Configuration configuration = new Configuration();
- configuration.setParent(parserState.getCurrentProfile());
-
- ObjectNode json = (ObjectNode) configuration.getJson();
- configuration.setType(ACTIVITY_URI.resolve("#Config"));
-
- if (beanshellConfig.getLocalworkerName() != null) {
- URI localWorkerURI = LOCAL_WORKER_URI.resolve(uriTools
- .validFilename(beanshellConfig.getLocalworkerName()));
- /*
- * FIXME: As we can't read the annotation chain yet, we can't tell
- * whether this local worker has been edited or not, and so can't
- * use #definedBy
- */
- json.put("derivedFrom", localWorkerURI.toString());
- }
-
- String script = beanshellConfig.getScript();
- json.put("script", script);
-
- ClassLoaderSharing classLoaderSharing = beanshellConfig
- .getClassLoaderSharing();
- if (classLoaderSharing == ClassLoaderSharing.SYSTEM)
- json.put("classLoaderSharing", "system");
- else {
- // default is "workflow" but don't need to be expressed
-// json.put("classLoaderSharing", "workflow");
- }
-
- if (beanshellConfig.getLocalDependencies() != null) {
- ArrayNode dependencies = json.arrayNode();
- for (String localDep : beanshellConfig.getLocalDependencies()
- .getString())
- dependencies.add(localDep);
- if (dependencies.size() > 0)
- json.put("localDependency", dependencies);
- }
-
- /*
- * Note: Maven Dependencies are not supported by Taverna 3 - only here
- * for informational purposes and potential t2flow->t2flow scenarios
- */
- if (beanshellConfig.getArtifactDependencies() != null) {
- ArrayNode dependencies = json.arrayNode();
- for (BasicArtifact mavenDep : beanshellConfig
- .getArtifactDependencies()
- .getNetSfTavernaRavenRepositoryBasicArtifact()) {
- ObjectNode mavenDependency = json.objectNode();
- dependencies.add(mavenDependency);
- mavenDependency.put("groupId", mavenDep.getGroupId());
- mavenDependency.put("artifactId", mavenDep.getArtifactId());
- mavenDependency.put("version", mavenDep.getVersion());
- }
- if (dependencies.size() > 0)
- json.put("mavenDependency", dependencies);
- }
-
- Activity activity = parserState.getCurrentActivity();
- activity.getInputPorts().clear();
- activity.getOutputPorts().clear();
- for (ActivityPortDefinitionBean portBean : beanshellConfig
- .getInputs()
- .getNetSfTavernaT2WorkflowmodelProcessorActivityConfigActivityInputPortDefinitionBean())
- parseAndAddInputPortDefinition(portBean, configuration, activity);
- for (ActivityPortDefinitionBean portBean : beanshellConfig
- .getOutputs()
- .getNetSfTavernaT2WorkflowmodelProcessorActivityConfigActivityOutputPortDefinitionBean())
- parseAndAddOutputPortDefinition(portBean, configuration, activity);
- return configuration;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BiomartActivityParser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BiomartActivityParser.java b/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BiomartActivityParser.java
deleted file mode 100644
index 06ef449..0000000
--- a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BiomartActivityParser.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.apache.taverna.scufl2.translator.t2flow.defaultactivities;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-
-import static org.apache.taverna.scufl2.translator.t2flow.T2FlowParser.ravenURI;
-
-import java.net.URI;
-
-import org.apache.taverna.scufl2.api.configurations.Configuration;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.translator.t2flow.ParserState;
-import org.apache.taverna.scufl2.translator.t2flow.T2FlowParser;
-import org.w3c.dom.Element;
-
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ConfigBean;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-public class BiomartActivityParser extends AbstractActivityParser {
- private static final URI activityRavenURI = ravenURI
- .resolve("net.sf.taverna.t2.activities/biomart-activity/");
- private static final String activityClassName = "net.sf.taverna.t2.activities.biomart.BiomartActivity";
- public static final URI ACTIVITY_URI = URI
- .create("http://ns.taverna.org.uk/2010/activity/biomart");
-
- @Override
- public boolean canHandlePlugin(URI activityURI) {
- String activityUriStr = activityURI.toASCIIString();
- return activityUriStr.startsWith(activityRavenURI.toASCIIString())
- && activityUriStr.endsWith(activityClassName);
- }
-
- @Override
- public URI mapT2flowRavenIdToScufl2URI(URI t2flowActivity) {
- return ACTIVITY_URI;
- }
-
- @Override
- public Configuration parseConfiguration(T2FlowParser t2FlowParser,
- ConfigBean configBean, ParserState parserState)
- throws ReaderException {
- Configuration configuration = new Configuration();
- configuration.setParent(parserState.getCurrentProfile());
-
- ObjectNode json = (ObjectNode) configuration.getJson();
- configuration.setType(ACTIVITY_URI.resolve("#Config"));
-
- json.put("martQuery",
- T2FlowParser.elementToXML((Element) configBean.getAny()));
-
- return configuration;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BiomobyActivityParser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BiomobyActivityParser.java b/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BiomobyActivityParser.java
deleted file mode 100644
index 9778781..0000000
--- a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/BiomobyActivityParser.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package org.apache.taverna.scufl2.translator.t2flow.defaultactivities;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-
-import static org.apache.taverna.scufl2.translator.t2flow.T2FlowParser.ravenURI;
-
-import java.net.URI;
-
-import org.apache.taverna.scufl2.api.configurations.Configuration;
-import org.apache.taverna.scufl2.translator.t2flow.ParserState;
-import org.apache.taverna.scufl2.translator.t2flow.T2FlowParser;
-
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ConfigBean;
-
-public class BiomobyActivityParser extends AbstractActivityParser {
- private static URI activityRavenURI = ravenURI
- .resolve("net.sf.taverna.t2.activities/biomoby-activity/");
- private static String mobyObjectClassName = "net.sf.taverna.t2.activities.biomoby.BiomobyObjectActivity";
- private static String mobyServiceClassName = "net.sf.taverna.t2.activities.biomoby.BiomobyActivity";
- public static URI mobyObjectScufl2Uri = URI
- .create("http://ns.taverna.org.uk/2010/activity/biomoby/object");
- public static URI mobyServiceScufl2Uri = URI
- .create("http://ns.taverna.org.uk/2010/activity/biomoby/service");
-
- @Override
- public boolean canHandlePlugin(URI activityURI) {
- String activityUriStr = activityURI.toASCIIString();
- if (!activityUriStr.startsWith(activityRavenURI.toASCIIString()))
- return false;
- return activityUriStr.endsWith(mobyObjectClassName)
- || activityUriStr.endsWith(mobyServiceClassName);
- }
-
- @Override
- public URI mapT2flowRavenIdToScufl2URI(URI t2flowActivity) {
- String activityUriStr = t2flowActivity.toASCIIString();
- if (activityUriStr.endsWith(mobyObjectClassName))
- return mobyObjectScufl2Uri;
- else
- return mobyServiceScufl2Uri;
- }
-
- @Override
- public Configuration parseConfiguration(T2FlowParser t2FlowParser,
- ConfigBean configBean, ParserState parserState) {
- // TODO Auto-generated method stub
- return null;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/316e4a8a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/ComponentActivityParser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/ComponentActivityParser.java b/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/ComponentActivityParser.java
deleted file mode 100644
index d928414..0000000
--- a/taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/defaultactivities/ComponentActivityParser.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package org.apache.taverna.scufl2.translator.t2flow.defaultactivities;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-
-import static java.net.URI.create;
-import static org.apache.taverna.scufl2.translator.t2flow.T2FlowParser.ravenURI;
-
-import java.net.URI;
-
-import org.apache.taverna.scufl2.api.configurations.Configuration;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.translator.t2flow.ParserState;
-import org.apache.taverna.scufl2.translator.t2flow.T2FlowParser;
-
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ComponentConfig;
-import org.apache.taverna.scufl2.xml.t2flow.jaxb.ConfigBean;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-public class ComponentActivityParser extends AbstractActivityParser {
- private static URI activityRavenURI = ravenURI
- .resolve("net.sf.taverna.t2.component/component-activity/");
- private static String activityClassName = "net.sf.taverna.t2.component.ComponentActivity";
- public static URI ACTIVITY_URI = create("http://ns.taverna.org.uk/2010/activity/component");
-
- @Override
- public boolean canHandlePlugin(URI activityURI) {
- String activityUriStr = activityURI.toASCIIString();
- return activityUriStr.startsWith(activityRavenURI.toASCIIString())
- && activityUriStr.endsWith(activityClassName);
- }
-
- @Override
- public URI mapT2flowRavenIdToScufl2URI(URI t2flowActivity) {
- return ACTIVITY_URI;
- }
-
- @Override
- public Configuration parseConfiguration(T2FlowParser t2FlowParser,
- ConfigBean configBean, ParserState parserState)
- throws ReaderException {
- ComponentConfig config = unmarshallConfig(t2FlowParser, configBean,
- "xstream", ComponentConfig.class);
-
- Configuration configuration = new Configuration();
- configuration.setParent(parserState.getCurrentProfile());
-
- ObjectNode json = (ObjectNode) configuration.getJson();
- configuration.setType(ACTIVITY_URI.resolve("#Config"));
-
- json.put("registryBase", config.getRegistryBase());
- json.put("familyName", config.getFamilyName());
- json.put("componentName", config.getComponentName());
- if (config.getComponentVersion() != null)
- json.put("componentVersion", (int) config.getComponentVersion());
-
- return configuration;
- }
-}