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/06/11 18:35:35 UTC

[16/31] incubator-taverna-language git commit: Test files added

Test files added

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/997f48fc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/997f48fc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/997f48fc

Branch: refs/heads/master
Commit: 997f48fcab75cee5399bc2bdd8cd9ef77eb1d73c
Parents: f49db52
Author: menaka121 <me...@gmail.com>
Authored: Thu Jun 11 19:01:29 2015 +0530
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jun 11 17:33:29 2015 +0100

----------------------------------------------------------------------
 .../tavlang/commandline/CommandLineTool.java    |   2 +-
 .../commandline/tools/convert/ToJson.java       | 310 +++++++++++++++++++
 .../commandline/tools/convert/ToRobundle.java   |  68 ++++
 .../commandline/test/CommandLineTest.java       |   5 +-
 .../commandline/test/Scufl2ConvertTest.java     |  14 +
 5 files changed, 396 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/997f48fc/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/CommandLineTool.java
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/CommandLineTool.java b/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/CommandLineTool.java
index 5c0105e..bff8576 100644
--- a/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/CommandLineTool.java
+++ b/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/CommandLineTool.java
@@ -39,9 +39,9 @@ import org.apache.taverna.scufl2.api.io.ReaderException;
 import org.apache.tavlang.commandline.tools.Tools;
 import org.apache.tavlang.commandline.tools.Tools.ConvertionTools;
 import org.apache.tavlang.commandline.tools.convert.Scufl2Convert;
+import org.apache.tavlang.commandline.tools.convert.ToRobundle;
 import org.apache.tavlang.commandline.tools.inspect.ProcessorNames;
 import org.apache.tavlang.commandline.tools.inspect.ServiceTypes;
-import org.apache.tavlang.tools.ToRobundle;
 
 import com.google.common.base.Joiner;
 import com.google.common.collect.Lists;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/997f48fc/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/tools/convert/ToJson.java
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/tools/convert/ToJson.java b/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/tools/convert/ToJson.java
new file mode 100644
index 0000000..4193c30
--- /dev/null
+++ b/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/tools/convert/ToJson.java
@@ -0,0 +1,310 @@
+package org.apache.tavlang.commandline.tools.convert;
+
+/*
+ * 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.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URI;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.taverna.scufl2.api.annotation.Annotation;
+import org.apache.taverna.scufl2.api.annotation.Revision;
+import org.apache.taverna.scufl2.api.common.Child;
+import org.apache.taverna.scufl2.api.common.Ported;
+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.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.io.WorkflowBundleIO;
+import org.apache.taverna.scufl2.api.io.WorkflowBundleWriter;
+import org.apache.taverna.scufl2.api.io.WriterException;
+import org.apache.taverna.scufl2.api.port.DepthPort;
+import org.apache.taverna.scufl2.api.port.GranularDepthPort;
+import org.apache.taverna.scufl2.api.port.Port;
+import org.apache.taverna.scufl2.api.profiles.Profile;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.fasterxml.jackson.databind.util.ISO8601DateFormat;
+
+public class ToJson {
+    public class JsonWriter implements WorkflowBundleWriter {
+        
+        @Override
+        public Set<String> getMediaTypes() {
+            return new HashSet<String>(Arrays.asList("application/ld+json",
+                    "application/json"));
+        }
+        @Override
+        public void writeBundle(WorkflowBundle wfBundle, File destination,
+                String mediaType) throws WriterException, IOException {
+            ObjectNode json = toJson(wfBundle);
+            mapper.writeValue(destination, json);
+        }
+
+        @Override
+        public void writeBundle(WorkflowBundle wfBundle,
+                OutputStream output, String mediaType)
+                throws WriterException, IOException {
+            ObjectNode json = toJson(wfBundle);
+            mapper.writeValue(output, json);
+        }
+
+    }
+
+    public static void main(String[] args) throws ReaderException, IOException,
+            WriterException {
+    	String[] args2 = {"/home/menaka/conv/aaa/as.wfbundle"};
+        new ToJson().convert(args2);
+    }
+
+
+    private WorkflowBundleIO io = new WorkflowBundleIO();;
+
+    private WorkflowBundleWriter jsonWriter = new JsonWriter();
+
+    private ObjectMapper mapper = new ObjectMapper();
+    
+    private Scufl2Tools scufl2Tools = new Scufl2Tools();
+    
+    private URITools uriTools = new URITools();
+    
+    public ToJson() {
+        mapper.enable(SerializationFeature.INDENT_OUTPUT);
+        mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
+        mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+
+        mapper.setDateFormat(new ISO8601DateFormat());
+        
+        // Adding custom writer dynamically
+        List<WorkflowBundleWriter> writers = io.getWriters();
+        writers.add(jsonWriter);        
+        io.setWriters(writers);
+    }
+
+    protected void addPorts(Ported ported, ObjectNode p) {
+        ArrayNode inputs = mapper.createArrayNode();        
+        for (Port port : ported.getInputPorts()) {
+            inputs.add(toJson(port));
+        }
+        p.put("inputs", inputs);        
+        
+        ArrayNode outputs = mapper.createArrayNode();        
+        for (Port port : ported.getOutputPorts()) {
+            outputs.add(toJson(port));
+            // FIXME: Do we need the id for ports? Needed if we add datalinks
+        }
+        p.put("outputs", outputs);
+    }
+    
+    protected ObjectNode annotations(Child<?> bean) {
+        ObjectNode node = mapper.createObjectNode();
+        for (Annotation ann : scufl2Tools.annotationsFor(bean)) {
+            URI annUri = uriTools.uriForBean(ann);
+            
+            // TODO: include annotation body?
+        }
+        return node;
+    }
+
+    public void convert(String[] filepaths) throws ReaderException,
+            IOException, WriterException {
+        if (filepaths[0].equals("-")) {
+            // Do piped Stdin/Stdout instead
+            WorkflowBundle wfBundle = io.readBundle(System.in, null);
+            io.writeBundle(wfBundle, System.err, "application/ld+json");
+            return;
+        }
+
+        for (String filepath : filepaths) {
+            File workflow = new File(filepath);
+
+            String filename = workflow.getName();
+            filename = filename.replaceFirst("\\..*", ".json");
+            File workflowFile = new File(workflow.getParentFile(), filename);
+
+            WorkflowBundle wfBundle = io.readBundle(workflow, null);
+            io.writeBundle(wfBundle, workflowFile, "application/ld+json");
+            System.out.println(workflowFile);
+        } 
+    }
+
+    protected ObjectNode toJson(Port port) {
+       ObjectNode p = mapper.createObjectNode();
+       p.put("name", port.getName());
+       p.putPOJO("id", uriTools.relativeUriForBean(port, 
+               scufl2Tools.findParent(WorkflowBundle.class, ((Child<?>)port))));
+       
+       if (port instanceof DepthPort) {
+        DepthPort depthPort = (DepthPort) port;
+        if (depthPort.getDepth() != null) {
+            p.put("depth", depthPort.getDepth());
+        }
+       }
+       if (port instanceof GranularDepthPort) {
+           GranularDepthPort granularDepthPort = (GranularDepthPort) port;
+           if (granularDepthPort.getGranularDepth() != null && 
+                   ! granularDepthPort.getGranularDepth().equals(granularDepthPort.getDepth())) {
+               p.put("granularDepth", granularDepthPort.getGranularDepth());
+           }
+       }
+       p.putAll(annotations((Child<?>)port));
+       return p;
+    }
+
+    protected JsonNode toJson(Processor proc) {
+        ObjectNode p = mapper.createObjectNode();
+        p.putPOJO("id", uriTools.relativeUriForBean(proc, proc.getParent().getParent()));
+        p.put("name", proc.getName());
+        addPorts(proc, p);
+        p.putAll(annotations(proc));
+        
+        List<Workflow> nested = scufl2Tools.nestedWorkflowsForProcessor(proc, 
+                proc.getParent().getParent().getMainProfile());
+        if (! nested.isEmpty()) {
+            if (nested.size() == 1) {
+                p.put("nestedWorkflow", toJson(nested.iterator().next()));
+            } else {
+                ArrayNode list = mapper.createArrayNode();
+                for (Workflow w : nested) {
+                    list.add(toJson(w));
+                }
+                p.put("nestedWorkflow", list);
+            }
+        }
+        return p;
+    }
+    
+    protected JsonNode toJson(Revision currentRevision) {
+        ArrayNode revisions = mapper.createArrayNode();
+        while (currentRevision != null) {
+            ObjectNode rev = mapper.createObjectNode();
+            rev.putPOJO("id", currentRevision.getIdentifier());
+            if (currentRevision.getGeneratedAtTime() != null) {
+                rev.putPOJO("generatedAtTime", currentRevision.getGeneratedAtTime());
+            }
+            currentRevision = currentRevision.getPreviousRevision();
+            if (currentRevision != null) {
+                rev.putPOJO("wasRevisionOf", currentRevision.getIdentifier());
+            }
+            revisions.add(rev);
+        }
+        return revisions;
+    }
+
+    protected ObjectNode toJson(Workflow workflow) {
+        ObjectNode wf = mapper.createObjectNode();
+
+        wf.putPOJO("id", uriTools.relativeUriForBean(workflow, workflow.getParent()));
+        
+        wf.put("name", workflow.getName());
+        wf.put("revisions", toJson(workflow.getCurrentRevision()));
+
+        ArrayNode processors = mapper.createArrayNode();
+        for (Processor p : workflow.getProcessors()) {
+            processors.add(toJson(p));
+        }
+        addPorts(workflow, wf);
+        wf.put("processors", processors);
+        
+        ArrayNode datalinks = mapper.createArrayNode();
+        for (DataLink link : workflow.getDataLinks()) {
+            datalinks.add(toJson(link));
+        }
+        wf.put("datalinks", datalinks);
+
+        ArrayNode controlLinks = mapper.createArrayNode();
+        for (ControlLink link : workflow.getControlLinks()) {
+            controlLinks.add(toJson(link));
+        }
+        wf.put("controllinks", controlLinks);
+
+        
+        wf.putAll(annotations(workflow));
+        
+        return wf;
+    }
+
+    protected JsonNode toJson(ControlLink link) {
+        ObjectNode l = mapper.createObjectNode();
+        if (link instanceof BlockingControlLink) {
+            BlockingControlLink controlLink = (BlockingControlLink) link;
+            l.putPOJO("block", uriTools.relativeUriForBean(controlLink.getBlock(), 
+                    link.getParent().getParent()));
+            l.putPOJO("untilFinished", uriTools.relativeUriForBean(controlLink.getUntilFinished(), 
+                    link.getParent().getParent()));
+        }
+        return l;
+    }
+
+    protected JsonNode toJson(DataLink link) {
+        ObjectNode l = mapper.createObjectNode();
+        l.putPOJO("receivesFrom", uriTools.relativeUriForBean(link.getReceivesFrom(), 
+                link.getParent().getParent()));
+        l.putPOJO("sendsTo", uriTools.relativeUriForBean(link.getSendsTo(), 
+                link.getParent().getParent()));
+        if (link.getMergePosition() != null) {
+            l.put("mergePosition", link.getMergePosition());
+        }
+        return l;
+    }
+
+    public ObjectNode toJson(WorkflowBundle wfBundle) {
+        
+        ObjectNode root = mapper.createObjectNode();
+        ArrayNode contextList = root.arrayNode();
+        root.put("@context", contextList);
+        ObjectNode context = root.objectNode();
+        contextList.add("https://w3id.org/scufl2/context");
+        contextList.add(context);
+        URI base = wfBundle.getGlobalBaseURI();
+        context.put("@base", base.toASCIIString());
+        root.put("id", base.toASCIIString());
+       
+//        root.put("name", wfBundle.getName());
+//        root.put("revisions", toJson(wfBundle.getCurrentRevision()));
+        
+        root.put("workflow", toJson(wfBundle.getMainWorkflow()));
+        root.put("profile", toJson(wfBundle.getMainProfile()));
+        
+        return root;
+    }
+
+    private JsonNode toJson(Profile profile) {
+        ObjectNode pf = mapper.createObjectNode();
+
+        pf.putPOJO("id", uriTools.relativeUriForBean(profile, profile.getParent()));
+        // TODO: Activities and configurations
+        return pf;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/997f48fc/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/tools/convert/ToRobundle.java
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/tools/convert/ToRobundle.java b/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/tools/convert/ToRobundle.java
new file mode 100644
index 0000000..9c788ff
--- /dev/null
+++ b/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/tools/convert/ToRobundle.java
@@ -0,0 +1,68 @@
+package org.apache.tavlang.commandline.tools.convert;
+
+/*
+ * 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.File;
+import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.logging.ConsoleHandler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.apache.taverna.robundle.Bundle;
+import org.apache.taverna.robundle.Bundles;
+
+public class ToRobundle{
+
+	public ToRobundle(List<String> files, String out) throws Exception{
+		
+		Logger logger = Logger.getLogger("");
+		//logger.setLevel(Level.FINER);
+		ConsoleHandler console = new ConsoleHandler();
+		console.setLevel(Level.FINEST);
+		logger.addHandler(console);
+		Logger.getLogger("org.researchobject").setLevel(Level.FINEST);
+		
+		for(String f : files){
+			Path file = Paths.get(f);
+			convert(file);
+		}
+	}
+	
+	//Recursive conversion
+	public ToRobundle(String type, String in, String out) {
+		// TODO Auto-generated constructor stub
+		
+	}
+	
+	public void convert(Path file) throws IOException{
+		try (Bundle bundle = Bundles.openBundle(file)) {
+			
+			System.out.println(bundle.getManifest().toString());
+//			bundle.getManifest().writeAsJsonLD();
+//			bundle.getManifest().writeAsCombineManifest();
+		}
+	}
+	
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/997f48fc/taverna-language-commandline/src/test/java/org/apache/tavlang/commandline/test/CommandLineTest.java
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/test/java/org/apache/tavlang/commandline/test/CommandLineTest.java b/taverna-language-commandline/src/test/java/org/apache/tavlang/commandline/test/CommandLineTest.java
index e97c715..6e03c88 100644
--- a/taverna-language-commandline/src/test/java/org/apache/tavlang/commandline/test/CommandLineTest.java
+++ b/taverna-language-commandline/src/test/java/org/apache/tavlang/commandline/test/CommandLineTest.java
@@ -42,10 +42,11 @@ public class CommandLineTest {
 	@Test
 	public void testConvert(){
 		
+		
 //		CommandLineTool tool = new CommandLineTool();
-		commandLineTool.parse("convert", "-r", "-wfbundle", "-o", "/files/dir", "-i", "/files0/dir");
+//		commandLineTool.parse("convert", "-r", "-wfbundle", "-o", "/files/dir", "-i", "/files0/dir");
 //		CommandLineTool tool2 = new CommandLineTool();
-		commandLineTool.parse("convert", "-r", "-wfdesc", "-o", "/files/dir", "-i", "/files0/dir");
+//		commandLineTool.parse("convert", "-r", "-wfdesc", "-o", "/files/dir", "-i", "/files0/dir");
 //		commandLineTool.parse();
 //		commandLineTool.parse();
 //		commandLineTool.parse();

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/997f48fc/taverna-language-commandline/src/test/java/org/apache/tavlang/commandline/test/Scufl2ConvertTest.java
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/test/java/org/apache/tavlang/commandline/test/Scufl2ConvertTest.java b/taverna-language-commandline/src/test/java/org/apache/tavlang/commandline/test/Scufl2ConvertTest.java
new file mode 100644
index 0000000..c838549
--- /dev/null
+++ b/taverna-language-commandline/src/test/java/org/apache/tavlang/commandline/test/Scufl2ConvertTest.java
@@ -0,0 +1,14 @@
+package org.apache.tavlang.commandline.test;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class Scufl2ConvertTest{
+
+	@Test
+	public void test() {
+		fail("Not yet implemented");
+	}
+
+}