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 {

Reply via email to