Package updated 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/7fea7108 Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/7fea7108 Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/7fea7108
Branch: refs/heads/master Commit: 7fea710801088662588afbb3630c43c5fb3e6b8e Parents: 3d6285d Author: Menaka Madushanka <menaka12...@gmail.com> Authored: Thu Jun 11 21:11:11 2015 +0530 Committer: Stian Soiland-Reyes <st...@apache.org> Committed: Thu Jun 11 17:33:29 2015 +0100 ---------------------------------------------------------------------- .../apache/taverna/tavlang/CommandLineTool.java | 276 +++++++++++++++++ .../taverna/tavlang/TavernaCommandline.java | 29 ++ .../org/apache/taverna/tavlang/tools/Tools.java | 89 ++++++ .../tavlang/tools/convert/Scufl2Convert.java | 190 ++++++++++++ .../taverna/tavlang/tools/convert/ToJson.java | 310 +++++++++++++++++++ .../tavlang/tools/convert/ToRobundle.java | 68 ++++ .../tavlang/tools/inspect/ProcessorNames.java | 169 ++++++++++ .../tavlang/tools/inspect/ServiceTypes.java | 111 +++++++ .../tavlang/tools/validate/Validate.java | 38 +++ .../tavlang/commandline/CommandLineTool.java | 276 ----------------- .../tavlang/commandline/TavernaCommandline.java | 29 -- .../apache/tavlang/commandline/tools/Tools.java | 89 ------ .../tools/convert/Scufl2Convert.java | 190 ------------ .../commandline/tools/convert/ToJson.java | 310 ------------------- .../commandline/tools/convert/ToRobundle.java | 68 ---- .../tools/inspect/ProcessorNames.java | 169 ---------- .../commandline/tools/inspect/ServiceTypes.java | 111 ------- .../commandline/tools/validate/Validate.java | 38 --- .../taverna/tavlang/test/CommandLineTest.java | 57 ++++ .../taverna/tavlang/test/Scufl2ConvertTest.java | 14 + .../commandline/test/CommandLineTest.java | 57 ---- .../commandline/test/Scufl2ConvertTest.java | 14 - 22 files changed, 1351 insertions(+), 1351 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/7fea7108/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java ---------------------------------------------------------------------- diff --git a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java new file mode 100644 index 0000000..57ee3cb --- /dev/null +++ b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java @@ -0,0 +1,276 @@ +package org.apache.taverna.tavlang; + + +/* + * 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 io.airlift.airline.Arguments; +import io.airlift.airline.Cli; +import io.airlift.airline.Cli.CliBuilder; +import io.airlift.airline.Command; +import io.airlift.airline.Help; +import io.airlift.airline.Option; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +import javax.inject.Inject; +import javax.xml.bind.JAXBException; + +import org.apache.taverna.scufl2.api.io.ReaderException; +import org.apache.taverna.tavlang.tools.Tools; +import org.apache.taverna.tavlang.tools.Tools.ConvertionTools; +import org.apache.taverna.tavlang.tools.convert.Scufl2Convert; +import org.apache.taverna.tavlang.tools.convert.ToRobundle; +import org.apache.taverna.tavlang.tools.inspect.ProcessorNames; +import org.apache.taverna.tavlang.tools.inspect.ServiceTypes; + +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; + + +/* + * The command line options for convert, validate and inspect workflows. + * Use the airlift/airline library + * */ + +public class CommandLineTool { + + private Cli<TvnLangTool> parser(){ + CliBuilder<TvnLangTool> build = Cli.<TvnLangTool>builder("tavlang") + .withDescription("Convert, manage workflows") + .withDefaultCommand(HelpCommand.class) + .withCommand(CommandConvert.class) + .withCommand(HelpCommand.class) + .withCommand(CommandInspect.class) + .withCommand(CommandValidate.class) + .withCommand(CommandVersion.class); + + return build.build(); + } + + public CommandLineTool(){}; + public void parse(String... args) + { + System.out.println("$ tavlang " + Joiner.on(" ").join(args)); + TvnLangTool command = parser().parse(args); + command.execute(); + System.out.println(); + } + + public static abstract class TvnLangTool{ + + public abstract void execute(); + } + + //placeholder for output file types + public static class Filetypes{ + @Option(name= "-wfdesc", description="Convert the workflow file to wfdesc-turtle") + public static boolean isWfdesc = false; + + @Option(name="-wfbundle", description="Convert the workflow file to wfbundel") + public static boolean isWfbundel = false; + + @Option(name = "-robundle", description = "Convert given bundel in to Research Object bundel") + public static boolean isRo = false; + + @Option(name= "-structure", description = "Convert the workflow into *.structure") + public static boolean isStructure = false; + + @Option(name = "-json", description = "Convert the workflow into json") + public static boolean isJson = false; + + //The tool can only handle one output format at a time. + //Return the file type which is selected + public static String isTrue(){ + if(isWfdesc) return "wfdesc"; + else if(isWfbundel) return "wfbundle"; + else if(isRo) return "robundle"; + else if(isStructure) return "structure"; + else if(isJson) return "json"; + else return null; + } + + } + + public static class Inspect{ + @Option(name = "-servicetypes", description = "List the service types used in workflow") + public static boolean servicetypes = false; + + @Option(name = "-processornames", description = "List a tree of processor names used in workflow") + public static boolean processor = false; + + public String getWay(){ + if(servicetypes) return "servicetypes"; + else if (processor) return "processornames"; + else return null; + } + + } + + + //Placeholder for optional parameters: Ex: -i, -o + public static class Optional{ + + //The input file or directory + @Option(name = {"-i", "--input"}, description="Input file/ file dir for conversion") + public static String in_file_dir; + + //The out put file or directory. When this is set, all the converted files will be saved into the directory that specified. + @Option(name = {"-o", "--output"}, description="Output file/ directory") + public static String out_file_dir; + + public static String getInFile(){ + return in_file_dir; + } + + public static String getOutFile(){ + return out_file_dir; + } + + } + + @Command(name = "help", description = "Display help information about Tvarna") + public static class HelpCommand extends TvnLangTool{ + @Inject + public Help help; + + @Override + public void execute(){ + help.call(); + } + } + + //Command for convert workflows + @Command(name="convert", description="Convert the given workflow") + public static class CommandConvert extends TvnLangTool{ + @Inject + Optional optional = new Optional(); + + @Inject + Filetypes filetypes = new Filetypes(); + + @Arguments(usage = "<output format> <input files> ", description = "List of files to be converted.\n " + + "Give the list of files to be converted without -i/-o and the converted files will be saved in to /converted folder in the same dir") + public final List<String> files = Lists.newArrayList(); + + //When this is true, the command will run recursively in a directory. + @Option(name={"-r", "--recursive"}, description="Execute the command recursively") + public boolean recurse = false; + + //Option for validate the given workflow when converting + @Option(name = {"-V", "--validate"}, description="Validate the workflow before convert") + public boolean validate = false; + + @Override + public void execute(){ + Scufl2Convert bn; + if(filetypes.isJson ){ + + }else if(filetypes.isRo){ + try { + ToRobundle ro = new ToRobundle(files, optional.getOutFile()); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + }else{ + if(recurse){ + bn = new Scufl2Convert(filetypes.isTrue(), optional.getInFile(), optional.getOutFile()); + }else{ + bn = new Scufl2Convert(filetypes.isTrue(), files, optional.getOutFile()); + } + } + + } + + } + + //Version command + @Command(name="version", description = "Show version informantion") + public static class CommandVersion extends TvnLangTool{ + + @Override + public void execute() { + // TODO Auto-generated method stub + System.out.println("Apache Taverna Language Command line tool. \nVersion 1.0 "); + } + + } + + //Command for inspection of workflows....!! + @Command(name="inspect", description="Inspect the given workflow and show the results on the terminal") + public static class CommandInspect extends TvnLangTool{ + + @Inject + Inspect inspect = new Inspect(); + + @Option(name={"-l", "--log"}, description="Specify the file name where results should be stored ([some dir]/log.txt)") + public String file; + + @Arguments(usage="<option> <input files>", description="Inspect the given workflow") + public List<String> toInspect = Lists.newArrayList(); + + @Override + public void execute() { + // TODO Auto-generated method stub + if(inspect.processor){ + try { + ProcessorNames pn = new ProcessorNames(toInspect, file); + + } catch (ReaderException | IOException | JAXBException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + }else if(inspect.servicetypes){ + try { + ServiceTypes st = new ServiceTypes(toInspect, file); + } catch (IOException | ReaderException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + } + + } + + //Command for validation + @Command(name = "validate", description = "validate the given workflow") + public static class CommandValidate extends TvnLangTool{ + + @Inject + Optional optional = new Optional(); + + @Arguments(usage="<option> <input files> <output dir>", description="Validate the given workflow file/s") + public List<String> toValidate = Lists.newArrayList(); + + @Override + public void execute() { + // TODO Auto-generated method stub + + } + + } + + +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/7fea7108/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java ---------------------------------------------------------------------- diff --git a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java new file mode 100644 index 0000000..016488c --- /dev/null +++ b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java @@ -0,0 +1,29 @@ +package org.apache.taverna.tavlang; + +/* + * 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. + */ + +public class TavernaCommandline { + + public static void main(String args[]){ + CommandLineTool tool = new CommandLineTool(); + tool.parse(args); + + } +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/7fea7108/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/Tools.java ---------------------------------------------------------------------- diff --git a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/Tools.java b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/Tools.java new file mode 100644 index 0000000..a8ee5f4 --- /dev/null +++ b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/Tools.java @@ -0,0 +1,89 @@ +package org.apache.taverna.tavlang.tools; + +/* + * 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 javax.print.attribute.standard.Media; + +public class Tools { + + public static enum ConvertionTools { + wfbundle{ + public String mediaType = "application/vnd.taverna.scufl2.workflow-bundle"; + + + @Override + public String getMediaType(ConvertionTools t) { + // TODO Auto-generated method stub + System.out.println(mediaType); + return this.mediaType; + } + }, + json{ + public String mediaType = "application/json"; + + + @Override + public String getMediaType(ConvertionTools t) { + // TODO Auto-generated method stub + System.out.println(mediaType); + return mediaType; + } + }, + wfdesc{ + public String mediaType = "text/vnd.wf4ever.wfdesc+turtle"; + + + @Override + public String getMediaType(ConvertionTools t) { + // TODO Auto-generated method stub + System.out.println(mediaType); + return mediaType; + } + }, + robundle{ + + @Override + public String getMediaType(ConvertionTools t) { + // TODO Auto-generated method stub + return null; + } + + }, + structure{ + public String mediaType = "text/vnd.taverna.scufl2.structure"; + + @Override + public String getMediaType(ConvertionTools t) { + // TODO Auto-generated method stub + System.out.println(mediaType); + return mediaType; + } + + + }; + + ConvertionTools(){} + + public abstract String getMediaType(ConvertionTools t); + + } + +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/7fea7108/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java ---------------------------------------------------------------------- diff --git a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java new file mode 100644 index 0000000..02135dc --- /dev/null +++ b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java @@ -0,0 +1,190 @@ +package org.apache.taverna.tavlang.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.util.List; + +import org.apache.commons.io.FileUtils; +import org.apache.taverna.scufl2.api.container.WorkflowBundle; +import org.apache.taverna.scufl2.api.io.ReaderException; +import org.apache.taverna.scufl2.api.io.WorkflowBundleIO; +import org.apache.taverna.scufl2.api.io.WriterException; +import org.apache.taverna.tavlang.tools.Tools.ConvertionTools; +import org.apache.taverna.tavlang.tools.validate.Validate; + + +/* + * Converts + * .t2flow --> .wfbundle + * .t2flow --> .structure + * .wfbundle --> .structure + * two constructors. + * Scufl2Convert(List<String> list, String out) --> will save the converted files in 'out folder or a directory named /converted in the same folder. + * Scufl2Convert(String in, String out) --> Will convert all the files in the 'in' folder and save them in 'out' folder --> -r must be true. + * + * */ +public class Scufl2Convert{ + + private ConvertionTools t; + private String MEDIA_TYPE; + private String input; + private String output; + private String type; + private List<String> filesList; + + public Scufl2Convert(String type, List<String> files, String out){ + this.filesList = files; + this.output = out; + this.type = type.equals("wfdesc")?".wfdesc.ttl":"."+type; + this.MEDIA_TYPE = ConvertionTools.valueOf(type).getMediaType(t); + this.convert(); + } + + //When recursive case is on.... + public Scufl2Convert(String type, String in, String out){ + this.input = in; + this.output = out; + this.type = type.equals("wfdesc")?".wfdesc.ttl":"."+type; + this.MEDIA_TYPE = ConvertionTools.valueOf(type).getMediaType(t); //Determine the writer media type + + this.createdir(); + } + + //Create the dir if not exists + public void createdir(){ + if(output == null){ + File outFile = new File(this.input, "converted"); + try { + FileUtils.forceMkdir(outFile); + this.output = outFile.getAbsolutePath(); + } catch (IOException e1) { + // TODO Auto-generated catch block + System.err.println("Error creating the directory...!!!!"); + e1.printStackTrace(); + } + }else{ + File outFile = new File(this.output); + try { + FileUtils.forceMkdir(outFile); + + } catch (IOException e1) { + // TODO Auto-generated catch block + System.err.println("Error creating the directory...!!!!"); + e1.printStackTrace(); + } + } + this.rec_convert(this.input); + } + + //Convert the given file. Return in case of an exception. + public boolean convert(){ + + boolean check = false; + // If the output folder is given, save the converted files in to that folder. + + if(this.filesList.size()>0 && this.output != null){ + File outFile = new File(this.output); + try { + FileUtils.forceMkdir(outFile); + } catch (IOException e1) { + System.err.println("Error creating the directory...!!!"); + } + for(String file : this.filesList){ + File t2File = new File(file); + + convertFile(t2File, outFile); + + } + + } + + /* If the output file is not given, save the converted files in + * '/converted' folder. + */ + + else if(this.filesList.size()>0 && this.output == null){ + for(String file : this.filesList){ + File t2File = new File(file); + + File outFile = new File(t2File.getParentFile(), "converted"); + try { + FileUtils.forceMkdir(outFile); + } catch (IOException e1) { + System.err.println("Error creating the directory...!!!"); + } + + convertFile(t2File, outFile); + + } + }else{ + System.err.println("Argument mismatch"); + check = false; + } + + return check; + } + + //Convert the files in a given directory and save the converted files in to specified dir or /converted folder. + //Recursive conversion + public void rec_convert(String dir){ + + File parent = new File(this.input); + if(!parent.exists()){ + System.err.println("Input directory not found"); + }else{ + for(File file : parent.listFiles()){ + if(!file.isDirectory()) + { + File outFile = new File(this.output); + convertFile(file, outFile); + } + } + } + } + + //Convert the file + public void convertFile(File t2File, File outFile){ + WorkflowBundleIO wfbio = new WorkflowBundleIO(); + String filename = t2File.getName(); + filename = filename.replaceFirst("\\..*", this.type); +// System.out.println(filename); + File scufl2File = new File(outFile.getAbsolutePath(), filename); + + WorkflowBundle wfBundle; + try { + wfBundle = wfbio.readBundle(t2File, null);// null --> will guess the media type for reading. + wfbio.writeBundle(wfBundle, scufl2File, this.MEDIA_TYPE); + System.out.println(scufl2File.getPath() + " is created."); + }catch (ReaderException e){ + System.err.println(e.getLocalizedMessage()); +// e.printStackTrace(); + }catch(IOException e){ + System.err.println(e.getLocalizedMessage()); +// e.printStackTrace(); + }catch(WriterException e) { + System.err.println(e.getLocalizedMessage()); +// e.printStackTrace(); + } + } + + +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/7fea7108/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java ---------------------------------------------------------------------- diff --git a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java new file mode 100644 index 0000000..f2ab156 --- /dev/null +++ b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java @@ -0,0 +1,310 @@ +package org.apache.taverna.tavlang.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/7fea7108/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java ---------------------------------------------------------------------- diff --git a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java new file mode 100644 index 0000000..8781ca6 --- /dev/null +++ b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java @@ -0,0 +1,68 @@ +package org.apache.taverna.tavlang.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/7fea7108/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java ---------------------------------------------------------------------- diff --git a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java new file mode 100644 index 0000000..8cbf989 --- /dev/null +++ b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java @@ -0,0 +1,169 @@ +package org.apache.taverna.tavlang.tools.inspect; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreeModel; +import javax.xml.bind.JAXBException; + +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.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.profiles.Profile; + +/* + * 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. + */ + + +/* + * list the processor names used in the workflow. + * Supported formats: .t2flow, .wfbundle + * */ + +public class ProcessorNames { + + private List<String> fileList; + + private String file2; + + private Scufl2Tools scufl2Tools = new Scufl2Tools(); + + private URITools uriTools = new URITools(); + + public ProcessorNames(List<String> fileList, String file) throws ReaderException, IOException, JAXBException{ + this.fileList = fileList; + this.file2 = file; + this.show(); + } + + public void show() throws ReaderException, IOException, JAXBException{ + WorkflowBundleIO io = new WorkflowBundleIO(); + StringBuilder sb = new StringBuilder(); + + for(String file : this.fileList){ + File file2 = new File(file); + if(file2.isDirectory()){ + for(File f : file2.listFiles()){ + WorkflowBundle wfb = io.readBundle(f, null); + System.out.println("Processor tree of "+ f.getName() +" \n" +this.showProcessorTree(wfb)); + sb.append("Processor tree of "+ f.getName() +" \n" +this.showProcessorTree(wfb) + "\n"); + } + }else{ + WorkflowBundle wfb = io.readBundle(new File(file), null); + System.out.println("Processor tree of "+ file +" \n" +this.showProcessorTree(wfb)); + sb.append("Processor tree of "+ file +" \n" +this.showProcessorTree(wfb) + "\n"); + } + + + } + + if(this.file2!=null){ + File log = new File(file2); + FileWriter fw = new FileWriter(log); + BufferedWriter bw = new BufferedWriter(fw); + bw.write(sb.toString()); + bw.close(); + fw.close(); + } + } + + private Workflow findNestedWorkflow(Processor processor) { + Profile profile = processor.getParent().getParent().getMainProfile(); + return scufl2Tools.nestedWorkflowForProcessor(processor, profile); + } + + private void findProcessors(WorkflowBundle ro, Workflow workflow, + DefaultMutableTreeNode parent) { + for (Processor processor : workflow.getProcessors()) { + DefaultMutableTreeNode processorNode = new DefaultMutableTreeNode( + processor.getName()); + parent.add(processorNode); + Workflow wf = findNestedWorkflow(processor); + if (wf != null) { + findProcessors(ro, wf, processorNode); + } + } + + } + + public TreeModel makeProcessorTree(WorkflowBundle workflowBundle) + throws JAXBException, IOException { + Workflow workflow = workflowBundle.getMainWorkflow(); + TreeModel treeModel = new DefaultTreeModel(new DefaultMutableTreeNode( + workflow.getName())); + DefaultMutableTreeNode parent = (DefaultMutableTreeNode) treeModel + .getRoot(); + + findProcessors(workflowBundle, workflow, parent); + return treeModel; + } + + public List<String> showProcessorNames(WorkflowBundle ro) + throws JAXBException, IOException { + ArrayList<String> names = new ArrayList<String>(); + for (Processor processor : ro.getMainWorkflow().getProcessors()) { + names.add(processor.getName()); + } + Collections.sort(names); + return names; + } + + public String showProcessorTree(WorkflowBundle ro) throws JAXBException, + IOException { + TreeModel treeModel = makeProcessorTree(ro); + return treeModelAsString(treeModel); + } + + public String treeModelAsString(TreeModel treeModel) { + StringBuffer sb = new StringBuffer(); + Object root = treeModel.getRoot(); + treeModelAsString(treeModel, root, sb, ""); + return sb.toString(); + } + + protected void treeModelAsString(TreeModel treeModel, Object parent, + StringBuffer sb, String indentation) { + sb.append(indentation); + int childCount = treeModel.getChildCount(parent); + if (childCount == 0) { + sb.append("- "); + } else { + sb.append("+ "); + indentation = indentation + " "; + } + sb.append(parent); + sb.append("\n"); + for (int i = 0; i < childCount; i++) { + Object child = treeModel.getChild(parent, i); + treeModelAsString(treeModel, child, sb, indentation); + } + } + +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/7fea7108/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java ---------------------------------------------------------------------- diff --git a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java new file mode 100644 index 0000000..d27e024 --- /dev/null +++ b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java @@ -0,0 +1,111 @@ +package org.apache.taverna.tavlang.tools.inspect; + + +/* + * 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.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import org.apache.taverna.scufl2.api.io.WorkflowBundleIO; +import org.apache.taverna.scufl2.api.activity.Activity; +import org.apache.taverna.scufl2.api.container.WorkflowBundle; +import org.apache.taverna.scufl2.api.io.ReaderException; +import org.apache.taverna.scufl2.api.profiles.Profile; + +/* + * List the service types used in workflow. + * Supported file formats : .wfbundle, .t2flow + * */ + +public class ServiceTypes { + + private List<String> filesList; + private Set<String> types = new LinkedHashSet<String>(); + private String save; + + public ServiceTypes(List<String> filesList, String file) throws IOException, ReaderException{ + this.filesList = filesList; + this.save = file; + this.service(); + + } + + public void service() throws ReaderException, IOException{ + WorkflowBundleIO io = new WorkflowBundleIO(); + StringBuilder sb = new StringBuilder(); + + for (String filepath : filesList) { + File file = new File(filepath); + + if(file.isDirectory()){ + for(File f : file.listFiles()){ + WorkflowBundle wfBundle = io.readBundle(f, null); + System.out.println("Service types used in " + f.getCanonicalPath() + " :" +"\n"); + sb.append("Service types used in " + f.getCanonicalPath() + " :"); + for (Profile profile : wfBundle.getProfiles()) { + for (Activity activity : profile.getActivities()) { + this.types.add(activity.getType().toASCIIString()); + } + } + for(String t : types){ + System.out.println(t); + sb.append(t + "\n"); + } + System.out.println("\n**************************************************\n"); + sb.append("\n**************************************************\n"); + } + }else{ + // mediaType = null --> guess + WorkflowBundle wfBundle = io.readBundle(file, null); + System.out.println("Service types used in " + file.getCanonicalPath() + " :" + "\n"); + sb.append("Service types used in " + file.getCanonicalPath() + " :"); + for (Profile profile : wfBundle.getProfiles()) { + for (Activity activity : profile.getActivities()) { + this.types.add(activity.getType().toASCIIString()); + } + } + for(String t : types){ + System.out.println(t); + sb.append(t + "\n"); + } + + System.out.println("\n**************************************************\n"); + sb.append("\n**************************************************\n"); + } + } + + if(save!=null){ + File log = new File(save); + FileWriter fw = new FileWriter(log); + BufferedWriter bw = new BufferedWriter(fw); + bw.write(sb.toString()); + bw.close(); + fw.close(); + } + + } + +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/7fea7108/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java ---------------------------------------------------------------------- diff --git a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java new file mode 100644 index 0000000..572679f --- /dev/null +++ b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java @@ -0,0 +1,38 @@ +package org.apache.taverna.tavlang.tools.validate; + +/* + * 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 org.apache.taverna.scufl2.api.container.WorkflowBundle; +import org.apache.taverna.scufl2.validation.ValidationReport; +import org.apache.taverna.scufl2.validation.Validator; +import org.apache.taverna.scufl2.validation.structural.StructuralValidationListener; +import org.apache.taverna.scufl2.validation.structural.StructuralValidator; + + +public class Validate { + + public Validate(WorkflowBundle wfb){ + System.out.println("Validation started..."); + StructuralValidator v = new StructuralValidator(); + StructuralValidationListener l = v.validate(wfb); + ValidationReport r; + } + +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/7fea7108/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 deleted file mode 100644 index bff8576..0000000 --- a/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/CommandLineTool.java +++ /dev/null @@ -1,276 +0,0 @@ -package org.apache.tavlang.commandline; - - -/* - * 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 io.airlift.airline.Arguments; -import io.airlift.airline.Cli; -import io.airlift.airline.Cli.CliBuilder; -import io.airlift.airline.Command; -import io.airlift.airline.Help; -import io.airlift.airline.Option; - -import java.io.File; -import java.io.IOException; -import java.util.List; - -import javax.inject.Inject; -import javax.xml.bind.JAXBException; - -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 com.google.common.base.Joiner; -import com.google.common.collect.Lists; - - -/* - * The command line options for convert, validate and inspect workflows. - * Use the airlift/airline library - * */ - -public class CommandLineTool { - - private Cli<TvnLangTool> parser(){ - CliBuilder<TvnLangTool> build = Cli.<TvnLangTool>builder("tavlang") - .withDescription("Convert, manage workflows") - .withDefaultCommand(HelpCommand.class) - .withCommand(CommandConvert.class) - .withCommand(HelpCommand.class) - .withCommand(CommandInspect.class) - .withCommand(CommandValidate.class) - .withCommand(CommandVersion.class); - - return build.build(); - } - - public CommandLineTool(){}; - public void parse(String... args) - { - System.out.println("$ tavlang " + Joiner.on(" ").join(args)); - TvnLangTool command = parser().parse(args); - command.execute(); - System.out.println(); - } - - public static abstract class TvnLangTool{ - - public abstract void execute(); - } - - //placeholder for output file types - public static class Filetypes{ - @Option(name= "-wfdesc", description="Convert the workflow file to wfdesc-turtle") - public static boolean isWfdesc = false; - - @Option(name="-wfbundle", description="Convert the workflow file to wfbundel") - public static boolean isWfbundel = false; - - @Option(name = "-robundle", description = "Convert given bundel in to Research Object bundel") - public static boolean isRo = false; - - @Option(name= "-structure", description = "Convert the workflow into *.structure") - public static boolean isStructure = false; - - @Option(name = "-json", description = "Convert the workflow into json") - public static boolean isJson = false; - - //The tool can only handle one output format at a time. - //Return the file type which is selected - public static String isTrue(){ - if(isWfdesc) return "wfdesc"; - else if(isWfbundel) return "wfbundle"; - else if(isRo) return "robundle"; - else if(isStructure) return "structure"; - else if(isJson) return "json"; - else return null; - } - - } - - public static class Inspect{ - @Option(name = "-servicetypes", description = "List the service types used in workflow") - public static boolean servicetypes = false; - - @Option(name = "-processornames", description = "List a tree of processor names used in workflow") - public static boolean processor = false; - - public String getWay(){ - if(servicetypes) return "servicetypes"; - else if (processor) return "processornames"; - else return null; - } - - } - - - //Placeholder for optional parameters: Ex: -i, -o - public static class Optional{ - - //The input file or directory - @Option(name = {"-i", "--input"}, description="Input file/ file dir for conversion") - public static String in_file_dir; - - //The out put file or directory. When this is set, all the converted files will be saved into the directory that specified. - @Option(name = {"-o", "--output"}, description="Output file/ directory") - public static String out_file_dir; - - public static String getInFile(){ - return in_file_dir; - } - - public static String getOutFile(){ - return out_file_dir; - } - - } - - @Command(name = "help", description = "Display help information about Tvarna") - public static class HelpCommand extends TvnLangTool{ - @Inject - public Help help; - - @Override - public void execute(){ - help.call(); - } - } - - //Command for convert workflows - @Command(name="convert", description="Convert the given workflow") - public static class CommandConvert extends TvnLangTool{ - @Inject - Optional optional = new Optional(); - - @Inject - Filetypes filetypes = new Filetypes(); - - @Arguments(usage = "<output format> <input files> ", description = "List of files to be converted.\n " - + "Give the list of files to be converted without -i/-o and the converted files will be saved in to /converted folder in the same dir") - public final List<String> files = Lists.newArrayList(); - - //When this is true, the command will run recursively in a directory. - @Option(name={"-r", "--recursive"}, description="Execute the command recursively") - public boolean recurse = false; - - //Option for validate the given workflow when converting - @Option(name = {"-V", "--validate"}, description="Validate the workflow before convert") - public boolean validate = false; - - @Override - public void execute(){ - Scufl2Convert bn; - if(filetypes.isJson ){ - - }else if(filetypes.isRo){ - try { - ToRobundle ro = new ToRobundle(files, optional.getOutFile()); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - }else{ - if(recurse){ - bn = new Scufl2Convert(filetypes.isTrue(), optional.getInFile(), optional.getOutFile()); - }else{ - bn = new Scufl2Convert(filetypes.isTrue(), files, optional.getOutFile()); - } - } - - } - - } - - //Version command - @Command(name="version", description = "Show version informantion") - public static class CommandVersion extends TvnLangTool{ - - @Override - public void execute() { - // TODO Auto-generated method stub - System.out.println("Apache Taverna Language Command line tool. \nVersion 1.0 "); - } - - } - - //Command for inspection of workflows....!! - @Command(name="inspect", description="Inspect the given workflow and show the results on the terminal") - public static class CommandInspect extends TvnLangTool{ - - @Inject - Inspect inspect = new Inspect(); - - @Option(name={"-l", "--log"}, description="Specify the file name where results should be stored ([some dir]/log.txt)") - public String file; - - @Arguments(usage="<option> <input files>", description="Inspect the given workflow") - public List<String> toInspect = Lists.newArrayList(); - - @Override - public void execute() { - // TODO Auto-generated method stub - if(inspect.processor){ - try { - ProcessorNames pn = new ProcessorNames(toInspect, file); - - } catch (ReaderException | IOException | JAXBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - }else if(inspect.servicetypes){ - try { - ServiceTypes st = new ServiceTypes(toInspect, file); - } catch (IOException | ReaderException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - - } - - } - - //Command for validation - @Command(name = "validate", description = "validate the given workflow") - public static class CommandValidate extends TvnLangTool{ - - @Inject - Optional optional = new Optional(); - - @Arguments(usage="<option> <input files> <output dir>", description="Validate the given workflow file/s") - public List<String> toValidate = Lists.newArrayList(); - - @Override - public void execute() { - // TODO Auto-generated method stub - - } - - } - - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/7fea7108/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/TavernaCommandline.java ---------------------------------------------------------------------- diff --git a/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/TavernaCommandline.java b/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/TavernaCommandline.java deleted file mode 100644 index 0bd0226..0000000 --- a/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/TavernaCommandline.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.apache.tavlang.commandline; - -/* - * 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. - */ - -public class TavernaCommandline { - - public static void main(String args[]){ - CommandLineTool tool = new CommandLineTool(); - tool.parse(args); - - } -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/7fea7108/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/tools/Tools.java ---------------------------------------------------------------------- diff --git a/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/tools/Tools.java b/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/tools/Tools.java deleted file mode 100644 index c5ba1b3..0000000 --- a/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/tools/Tools.java +++ /dev/null @@ -1,89 +0,0 @@ -package org.apache.tavlang.commandline.tools; - -/* - * 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 javax.print.attribute.standard.Media; - -public class Tools { - - public static enum ConvertionTools { - wfbundle{ - public String mediaType = "application/vnd.taverna.scufl2.workflow-bundle"; - - - @Override - public String getMediaType(ConvertionTools t) { - // TODO Auto-generated method stub - System.out.println(mediaType); - return this.mediaType; - } - }, - json{ - public String mediaType = "application/json"; - - - @Override - public String getMediaType(ConvertionTools t) { - // TODO Auto-generated method stub - System.out.println(mediaType); - return mediaType; - } - }, - wfdesc{ - public String mediaType = "text/vnd.wf4ever.wfdesc+turtle"; - - - @Override - public String getMediaType(ConvertionTools t) { - // TODO Auto-generated method stub - System.out.println(mediaType); - return mediaType; - } - }, - robundle{ - - @Override - public String getMediaType(ConvertionTools t) { - // TODO Auto-generated method stub - return null; - } - - }, - structure{ - public String mediaType = "text/vnd.taverna.scufl2.structure"; - - @Override - public String getMediaType(ConvertionTools t) { - // TODO Auto-generated method stub - System.out.println(mediaType); - return mediaType; - } - - - }; - - ConvertionTools(){} - - public abstract String getMediaType(ConvertionTools t); - - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/7fea7108/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/tools/convert/Scufl2Convert.java ---------------------------------------------------------------------- diff --git a/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/tools/convert/Scufl2Convert.java b/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/tools/convert/Scufl2Convert.java deleted file mode 100644 index 9d0a145..0000000 --- a/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/tools/convert/Scufl2Convert.java +++ /dev/null @@ -1,190 +0,0 @@ -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.util.List; - -import org.apache.commons.io.FileUtils; -import org.apache.taverna.scufl2.api.container.WorkflowBundle; -import org.apache.taverna.scufl2.api.io.ReaderException; -import org.apache.taverna.scufl2.api.io.WorkflowBundleIO; -import org.apache.taverna.scufl2.api.io.WriterException; -import org.apache.tavlang.commandline.tools.Tools.ConvertionTools; -import org.apache.tavlang.commandline.tools.validate.Validate; - - -/* - * Converts - * .t2flow --> .wfbundle - * .t2flow --> .structure - * .wfbundle --> .structure - * two constructors. - * Scufl2Convert(List<String> list, String out) --> will save the converted files in 'out folder or a directory named /converted in the same folder. - * Scufl2Convert(String in, String out) --> Will convert all the files in the 'in' folder and save them in 'out' folder --> -r must be true. - * - * */ -public class Scufl2Convert{ - - private ConvertionTools t; - private String MEDIA_TYPE; - private String input; - private String output; - private String type; - private List<String> filesList; - - public Scufl2Convert(String type, List<String> files, String out){ - this.filesList = files; - this.output = out; - this.type = type.equals("wfdesc")?".wfdesc.ttl":"."+type; - this.MEDIA_TYPE = ConvertionTools.valueOf(type).getMediaType(t); - this.convert(); - } - - //When recursive case is on.... - public Scufl2Convert(String type, String in, String out){ - this.input = in; - this.output = out; - this.type = type.equals("wfdesc")?".wfdesc.ttl":"."+type; - this.MEDIA_TYPE = ConvertionTools.valueOf(type).getMediaType(t); //Determine the writer media type - - this.createdir(); - } - - //Create the dir if not exists - public void createdir(){ - if(output == null){ - File outFile = new File(this.input, "converted"); - try { - FileUtils.forceMkdir(outFile); - this.output = outFile.getAbsolutePath(); - } catch (IOException e1) { - // TODO Auto-generated catch block - System.err.println("Error creating the directory...!!!!"); - e1.printStackTrace(); - } - }else{ - File outFile = new File(this.output); - try { - FileUtils.forceMkdir(outFile); - - } catch (IOException e1) { - // TODO Auto-generated catch block - System.err.println("Error creating the directory...!!!!"); - e1.printStackTrace(); - } - } - this.rec_convert(this.input); - } - - //Convert the given file. Return in case of an exception. - public boolean convert(){ - - boolean check = false; - // If the output folder is given, save the converted files in to that folder. - - if(this.filesList.size()>0 && this.output != null){ - File outFile = new File(this.output); - try { - FileUtils.forceMkdir(outFile); - } catch (IOException e1) { - System.err.println("Error creating the directory...!!!"); - } - for(String file : this.filesList){ - File t2File = new File(file); - - convertFile(t2File, outFile); - - } - - } - - /* If the output file is not given, save the converted files in - * '/converted' folder. - */ - - else if(this.filesList.size()>0 && this.output == null){ - for(String file : this.filesList){ - File t2File = new File(file); - - File outFile = new File(t2File.getParentFile(), "converted"); - try { - FileUtils.forceMkdir(outFile); - } catch (IOException e1) { - System.err.println("Error creating the directory...!!!"); - } - - convertFile(t2File, outFile); - - } - }else{ - System.err.println("Argument mismatch"); - check = false; - } - - return check; - } - - //Convert the files in a given directory and save the converted files in to specified dir or /converted folder. - //Recursive conversion - public void rec_convert(String dir){ - - File parent = new File(this.input); - if(!parent.exists()){ - System.err.println("Input directory not found"); - }else{ - for(File file : parent.listFiles()){ - if(!file.isDirectory()) - { - File outFile = new File(this.output); - convertFile(file, outFile); - } - } - } - } - - //Convert the file - public void convertFile(File t2File, File outFile){ - WorkflowBundleIO wfbio = new WorkflowBundleIO(); - String filename = t2File.getName(); - filename = filename.replaceFirst("\\..*", this.type); -// System.out.println(filename); - File scufl2File = new File(outFile.getAbsolutePath(), filename); - - WorkflowBundle wfBundle; - try { - wfBundle = wfbio.readBundle(t2File, null);// null --> will guess the media type for reading. - wfbio.writeBundle(wfBundle, scufl2File, this.MEDIA_TYPE); - System.out.println(scufl2File.getPath() + " is created."); - }catch (ReaderException e){ - System.err.println(e.getLocalizedMessage()); -// e.printStackTrace(); - }catch(IOException e){ - System.err.println(e.getLocalizedMessage()); -// e.printStackTrace(); - }catch(WriterException e) { - System.err.println(e.getLocalizedMessage()); -// e.printStackTrace(); - } - } - - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/7fea7108/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 deleted file mode 100644 index 4193c30..0000000 --- a/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/tools/convert/ToJson.java +++ /dev/null @@ -1,310 +0,0 @@ -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/7fea7108/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 deleted file mode 100644 index 9c788ff..0000000 --- a/taverna-language-commandline/src/main/java/org/apache/tavlang/commandline/tools/convert/ToRobundle.java +++ /dev/null @@ -1,68 +0,0 @@ -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(); - } - } - - -}