TAVERNA-71 workaround
Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/commit/9add077f Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/9add077f Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/9add077f Branch: refs/heads/cwl Commit: 9add077f57c05c73bee82a878dba0c67a544f5ad Parents: 3626da1 Author: Stian Soiland-Reyes <[email protected]> Authored: Wed May 4 11:54:33 2016 +0100 Committer: Stian Soiland-Reyes <[email protected]> Committed: Wed May 4 11:54:33 2016 +0100 ---------------------------------------------------------------------- .../scufl2/rdfxml/WorkflowBundleParser.java | 70 ++++++++++++++++++++ 1 file changed, 70 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/9add077f/taverna-scufl2-wfbundle/src/main/java/org/apache/taverna/scufl2/rdfxml/WorkflowBundleParser.java ---------------------------------------------------------------------- diff --git a/taverna-scufl2-wfbundle/src/main/java/org/apache/taverna/scufl2/rdfxml/WorkflowBundleParser.java b/taverna-scufl2-wfbundle/src/main/java/org/apache/taverna/scufl2/rdfxml/WorkflowBundleParser.java index 12da471..362be52 100644 --- a/taverna-scufl2-wfbundle/src/main/java/org/apache/taverna/scufl2/rdfxml/WorkflowBundleParser.java +++ b/taverna-scufl2-wfbundle/src/main/java/org/apache/taverna/scufl2/rdfxml/WorkflowBundleParser.java @@ -32,6 +32,18 @@ import java.net.URI; import javax.xml.bind.JAXBElement; import javax.xml.bind.JAXBException; +import org.apache.jena.rdf.model.Model; +import org.apache.jena.rdf.model.ModelFactory; +import org.apache.jena.rdf.model.ResIterator; +import org.apache.jena.rdf.model.Resource; +import org.apache.jena.riot.Lang; +import org.apache.jena.riot.RDFDataMgr; +import org.apache.jena.riot.RDFLanguages; +import org.apache.taverna.robundle.Bundle; +import org.apache.taverna.robundle.xml.odf.manifest.Manifest; +import org.apache.taverna.scufl2.api.annotation.Annotation; +import org.apache.taverna.scufl2.api.common.URITools; +import org.apache.taverna.scufl2.api.common.WorkflowBean; import org.apache.taverna.scufl2.api.container.WorkflowBundle; import org.apache.taverna.scufl2.api.core.Workflow; import org.apache.taverna.scufl2.api.io.ReaderException; @@ -112,12 +124,70 @@ public class WorkflowBundleParser extends AbstractParser { org.apache.taverna.scufl2.api.profiles.Profile mainWorkflow = (org.apache.taverna.scufl2.api.profiles.Profile) resolveBeanUri(profileUri); workflowBundle.setMainProfile(mainWorkflow); } + // TAVERNA-71 workaround - naively find annotations + parseAnnotations(workflowBundle); + } finally { getParserState().pop(); } return workflowBundle; } + /** + * Workaround for TAVERNA-71 to find annotations in WorkflowBundle + * <p> + * FIXME: The annotation links should instead be stored in the + * {@link Manifest} using taverna-robundle - see TAVERNA-71 + * + * @param wb + * @throws IOException + */ + private void parseAnnotations(final WorkflowBundle wb) throws IOException { + if (! wb.getAnnotations().isEmpty()) { + // Assume already parsed + return; + } + URITools uriTools = new URITools(); + for (ResourceEntry resource : wb.getResources().listResources("annotation").values()) { + Lang lang = RDFLanguages.contentTypeToLang(resource.getMediaType()); + if (lang == null) { + // Not a semantic annotation + continue; + } + System.out.println(resource.getPath()); + System.out.println(resource.getMediaType()); + Annotation ann = new Annotation(); + // Hackish way to generate a name from the annotation filename + // as these typically are UUIDs + String name = resource.getPath().replace("annotation/", "").replaceAll("\\..*", ""); // strip extension + ann.setName(name); + ann.setParent(wb); + + String path = resource.getPath(); + ann.setBody(URI.create("/" + path)); + URI base = wb.getGlobalBaseURI().resolve(path); + Model model = ModelFactory.createDefaultModel(); + InputStream inputStream = resource.getUcfPackage().getResourceAsInputStream(path); + if (inputStream == null) { + System.out.println("Eh..?"); + continue; + } + RDFDataMgr.read(model, inputStream, + base.toASCIIString(), lang); + ResIterator subjs = model.listSubjects(); + while (subjs.hasNext()) { + Resource r = subjs.next(); + //System.out.println(r); + WorkflowBean b = uriTools.resolveUri(URI.create(r.getURI()), wb); + //System.out.println(b); + if (b != null) { + ann.setTarget(b); + } + break; + } + } + } + @SuppressWarnings("unchecked") public WorkflowBundle readWorkflowBundle(UCFPackage ucfPackage, URI suggestedLocation) throws IOException, ReaderException {
