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 2016/05/04 10:55:57 UTC
[2/3] incubator-taverna-language git commit: TAVERNA-71 workaround
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/master
Commit: 9add077f57c05c73bee82a878dba0c67a544f5ad
Parents: 3626da1
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Wed May 4 11:54:33 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
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 {