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/26 13:43:28 UTC

[32/50] 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/cwl
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 {