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

Branch: refs/heads/master
Commit: 3aa91bf883dc3b112a7e7b9a8b2154c43c8e3957
Parents: 66a8cfd
Author: Menaka Madushanka <menaka12...@gmail.com>
Authored: Tue Feb 2 11:59:55 2016 +0530
Committer: Menaka Madushanka <menaka12...@gmail.com>
Committed: Tue Feb 2 11:59:55 2016 +0530

----------------------------------------------------------------------
 taverna-tavlang-tool/.gitignore                 |    1 +
 taverna-tavlang-tool/README.md                  |  425 +++++
 taverna-tavlang-tool/pom.xml                    |  213 +++
 taverna-tavlang-tool/src/main/java/.gitignore   |    0
 .../apache/taverna/tavlang/CommandLineTool.java |  350 ++++
 .../taverna/tavlang/TavernaCommandline.java     |   29 +
 .../org/apache/taverna/tavlang/tools/Tools.java |   88 +
 .../tavlang/tools/convert/Scufl2Convert.java    |  206 +++
 .../taverna/tavlang/tools/convert/ToJson.java   |  298 ++++
 .../tavlang/tools/convert/ToRobundle.java       |   66 +
 .../tavlang/tools/inspect/ProcessorNames.java   |  169 ++
 .../tavlang/tools/inspect/ServiceTypes.java     |  112 ++
 .../taverna/tavlang/tools/stats/GetWfStat.java  |  193 ++
 .../tavlang/tools/validate/Validate.java        |  151 ++
 .../src/main/resources/.gitignore               |    0
 .../src/main/resources/META-INF/NOTICE          |    7 +
 taverna-tavlang-tool/src/test/java/.gitignore   |    0
 .../taverna/tavlang/test/CommandLineTest.java   |   43 +
 .../taverna/tavlang/test/TestConvert.java       |   34 +
 .../apache/taverna/tavlang/test/TestStats.java  |   34 +
 .../apache/taverna/tavlang/test/TestTools.java  |   80 +
 .../taverna/tavlang/test/TestValidate.java      |   49 +
 .../src/test/resources/.gitignore               |    0
 .../test/resources/workflows/t2flow/as.t2flow   | 1674 ++++++++++++++++++
 24 files changed, 4222 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/.gitignore b/taverna-tavlang-tool/.gitignore
new file mode 100644
index 0000000..916e17c
--- /dev/null
+++ b/taverna-tavlang-tool/.gitignore
@@ -0,0 +1 @@
+dependency-reduced-pom.xml

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/README.md
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/README.md b/taverna-tavlang-tool/README.md
new file mode 100644
index 0000000..e76cbcd
--- /dev/null
+++ b/taverna-tavlang-tool/README.md
@@ -0,0 +1,425 @@
+<!--
+   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.
+-->
+
+# Apache Taverna Language Command Line
+
+
+This is planned as a command line for the
+[Apache Taverna 
Language](https://github.com/apache/incubator-taverna-language/),
+an API for the 
+[Apache Taverna](http://taverna.incubator.apache.org/) workflows.
+
+This module is a **work in progress** as part of Google Summer of Code 2015.
+
+
+
+## License
+
+(c) 2015 Apache Software Foundation
+
+This product includes software developed at The [Apache Software
+Foundation](http://www.apache.org/).
+
+Licensed under the [Apache License
+2.0](https://www.apache.org/licenses/LICENSE-2.0), see the file
+[../LICENSE](../LICENSE) for details.
+
+The file [NOTICE](src/main/resources/NOTICE) contains any additional 
attributions and
+details about embedded third-party libraries and source code.
+
+
+# Contribute
+
+Please subscribe to and contact the 
+[dev@taverna](http://taverna.incubator.apache.org/community/lists#dev%20mailing%20list)
+for any questions, suggestions and discussions about 
+Apache Taverna Language Commandline.
+
+Bugs and planned features are tracked in the Jira
+[Issue 
tracker](https://issues.apache.org/jira/browse/TAVERNA/component/12326903)
+under the `TAVERNA` component _GSOC Taverna Language Command line_. Feel free
+to add an issue!
+
+To suggest changes to this source code, feel free to raise a 
+[GitHub pull 
request](https://github.com/apache/incubator-taverna-mobile/pulls).
+Any contributions received are assumed to be covered by the [Apache License
+2.0](https://www.apache.org/licenses/LICENSE-2.0). We might ask you 
+to sign a [Contributor License 
Agreement](https://www.apache.org/licenses/#clas)
+before accepting a larger contribution.
+
+
+# Building and install requirements
+
+## Requisites
+
+* Java 1.7 or newer
+* [Apache Maven](https://maven.apache.org/download.html) 3.2.5 or newer (older
+  versions probably also work)
+
+
+## Building
+
+To build, run:
+
+    mvn clean install
+
+
+# Usage
+
+       usage: tavlang <command> [<args>]
+       
+       The most commonly used tavlang commands are:
+           convert    Convert the given workflow
+           help       Display help information about Tvarna
+           inspect    Inspect the given workflow and show the results on the 
terminal
+           validate   Validate the given workflow
+           version    Show version informantion
+       
+       See 'tavlang help <command>' for more information on a specific command.
+
+# Documentation
+
+The Taverna language command line tool is for accessing the features of the 
Taverna language modules. 
+The tool has the following functions:
+
+* Conversion
+* Inspection
+* Validation
+* Viewing workflow statistics.
+       
+## Command line structure 
+       
+       $tavlang <command> <options> [arguments and parameters]
+       
+Each command has its own set of options.
+
+###Commands and Options
+The tool has the following major commands:
+
+* convert: Options {-r -- recursive, -i --input, -o --output,}
+* inspect: Options {-l --log}
+* validate: Options {-l --log, -v --verbose}
+* stats: Options {-l --log, -v --verbose}
+
+## Commands in detail
+
+### convert ------------------------------------------------------
+
+Convert the given workflow file/s into a specified output format.
+
+Usage:
+       
+       tavlang convert (--output_fomat) ([[options] [arguments]]|files...)
+       
+ Supported output formats are,
+ 
+ * wfbundle
+ * iwir
+ * json
+ * robundle
+ * structure
+ 
+Options:
+
+ * -r, --recursive : Convert all workflow files in a given directory 
recursively
+ * -i, --input     : Used with recursive case. Specify the input directory
+ * -o, --output    : Specify the out put directory 
+
+*The tool can only convert into one format at a time
+
+There are two methods for using the conversion command.
+
+####  1. Non-recursive method
+
+Usage: 
+
+       $tavlang convert (--output_format) [options] [arguments] 
+       
+####### Example 1: Without specifying any options
+       
+       $tavlang convert --structure /helloworld.t2flow
+       
+Output:
+
+       /converted/helloworld.structure is created
+
+Convert the helloworld.t2flow into helloworld.structure format and store in 
the /converted directory
+
+###### Example 2: Convert multiple workflows
+       
+       $tavlang convert --json /helloworld.t2flow /hello.t2flow
+       
+Output:
+       
+       /converted/helloworld.json is created
+       /converted/hello.json is created
+       
+Convert both workflow files and store them in /converted directory
+
+###### Example 3: with options and arguments
+
+       $tavlang convert --wfbundle /helloworld.t2flow -o /output/workflows
+       
+Output:
+       
+       /output/workflows/helloworld.wfbundle is created
+       
+Convert the workflow file/s and store them in the specified output directory
+
+####  2. Recursive method
+
+If there are many workflows in a directory, which are needed to be converted 
into one single format use this method.
+       
+Usage: 
+       
+       $tavlang convert -r (--output_format) -i workflow_src_dir <options> 
[arguments]
+
+###### Example 4: Without options and arguments
+
+       $tavlang convert -r --json -i /home/user/workflows
+       
+Convert all the workflows in the input directory into the specified format and 
store them in the "/home/user/workflows/converted" directory.
+
+Output: Suppose that there are 2 workflow files in the dir 1.t2flow and 
2.t2flow
+
+       /home/workflows/converted/1.json is created
+       /home/workflows/converted/2.json is created
+
+###### Example 5: with output dir is specified
+
+       $tavlang convert -r --iwir -i /home/workflows -o /home/final
+       
+Convert all the workflows in the input directory and store them in /home/final 
directory
+
+Output:
+
+       /home/final/1.iwir is created
+       /home/final/2.iwir is created
+       
+### inspect -----------------------------------------------------------------
+
+Inspect the given workflow file/s and give the inspection report. 
+Supported workflow bundle formats: .wfbundle, .t2flow
+
+Usage:-
+       
+       $tavlang inspect (--inspection_options) <-other-options> [arguments] 
workflow_undles_to_be_inspected
+       
+Inspection options: 
+
+ * --servicetypes :- List all the service-types used in the workflow
+ * --processornames :- List the tree of the processor names used in the 
workflow
+ 
+Other Options:
+
+ * -l, --log :- save the inspection report in a text file 
+ 
+###### Example 1: Without any other-options
+
+1. Inspection result for Service types
+
+
+       $tavlang inspect --servicetypes helloworld.wfbundle
+       Service types used in helloworld.wfbundle :
+
+       http://ns.taverna.org.uk/2010/activity/constant
+       **************************************************
+
+2. inspection result for Processor names
+       
+       
+       $tavlang inspect --processornames helloworld.wfbundle
+       Processor tree of helloworld.wfbundle 
+       + Hello_World
+         - hello
+       
+###### Example 2: With other options
+The output is the same but the results will be saved in the given file.
+
+       $tavlang inspect --processornames helloworld.wfbundle -l results.txt
+       Processor tree of helloworld.wfbundle 
+       + Hello_World
+        - hello
+
+
+The output will be saved in results.txt in the same format.
+
+### validate 
----------------------------------------------------------------------
+
+Validates the given workflow file or files and gives the validation report. 
+Validate tool checks for the following problematic conditions.
+
+ * Empty Iteration Strategy Top-Node Problems
+ * Mismatch Configurable Type Problems
+ * Non-Absolute URI Problems
+ * Null Field Problems
+ * Out-Of-Scope Value Problems
+ * Port Mentioned Twice Problems
+ * Port Missing From Iteration Strategy Stack Problems
+ * Wrong Parent Problems
+ * Incompatible Granular Depth Problems
+ 
+Usage:-
+
+       $tavlang validate [options][arguments] input_files
+
+Options:- 
+
+ * -l, --log: Save the validation report in a text file
+ * -v, --verbose: Verbose mode
+
+Supported workflow bundle formats: .t2flow and .wfbundle
+
+###### Example 1: Normal mode
+
+  Validate one workflow bundle
+
+       $tavlang validate helloworld.t2flow
+       
+Output: 
+       
+       Validation started....
+       Validating helloworld.t2flow
+       The workflow helloworld.t2flow has no errors. 
+
+       Validation completed.......
+ 
+  Validate more than one workflow bundles
+ 
+       $tavlang validate ../../workflow2.t2flow ../../workflow3.wfbundle
+
+       Validation started....
+       Validating ../../workflow2.t2flow
+       The workflow workflow2.t2flow has no errors. 
+
+       Validating ../../workflow3.wfbundle
+       The workflow workflow3.t2flow has no errors. 
+
+       Validation completed.......
+
+
+###### Example 2: Verbose mode
+
+The report is more explanatory.
+
+       $tavlang validate -v ../../workflow2.t2flow
+
+       Validation started....
+       Validating ../../workflow2.t2flow
+       The workflow workflow2.t2flow has no errors. 
+
+       The validation report for defaultActivitiesTaverna2.wfbundle......
+       
--------------------------------------------------------------------------------
 
+       -->NegativeValueProblems:- null 
+       
+       -->EmptyIterationStrategyTopNodeProblems:- null 
+
+       -->MismatchConfigurableTypeProblems:- null 
+
+       -->NonAbsoluteURIProblems:- null 
+
+       -->NullFieldProblems:- null 
+
+       -->OutOfScopeValueProblems:- null 
+
+       -->PortMentionedTwiceProblems:- null 
+
+       -->PortMissingFromIterationStrategyStackProblems:- null 
+
+       -->WrongParentProblems:- null 
+
+       -->IncompatibleGranularDepthProblems:- null 
+
+       
---------------------------------------------------------------------------------
+
+###### Example 3: Saving results to a file
+
+       $tavlang validate workflow2.t2flow -l log2.txt 
+       Validation started.... 
+       Validating workflow2.t2flow 
+       The workflow helloworld.wfbundle has no errors. 
+       Validation completed....... 
+       
+       Results were saved into log2.txt
+
+### stats 
----------------------------------------------------------------------------------
+
+A workflow contains several resources.
+
+* Processors
+* Input ports
+* Output ports
+* Data links
+* Control links
+
+The stats command gives a report of the resources used in the workflow.
+
+Usage:- 
+
+       $tavlang stats <options>[arguments] input_files...
+       
+Options:- 
+
+ * -l, – – log : Save results in a log file
+ * -v, – – verbose : verbose mode
+ 
+Supported workflow bundle formats:- .t2flow, .wfbundle
+
+###### Example 1: Normal mode
+
+       $tavlang helloworld.wfbundle
+       >>> Statistics of the workflow bundle: helloworld.wfbundle <<<
+       Name of the workflow = Hello_World
+        |--> Number of Processors = 1
+        |--> Number of Data Links = 1
+        |--> Number of Control Links = 0
+        |--> Number of Input ports = 0
+        |--> Number of Output Ports = 1
+ 
+###### Example 2: Verbose mode 
+
+       $tavlang -v ../../../helloworld.wfbundle
+       >>> Statistics of the workflow bundle: helloworld.wfbundle <<<
+       Name of the workflow = Hello_World
+        |--> Number of Processors = 1
+        | |--> Processors: 
+        |      |--> hello
+        |
+        |--> Number of Data Links = 1
+        | |--> Data Links
+        |      |--> DataLink value=>greeting
+        |
+        |--> Number of Control Links = 0
+        |--> Number of Input ports = 0
+        |--> Number of Output Ports = 1
+        | |--> Output Ports
+        |      |--> OutputWorkflowPort "greeting"
+        
+###### Example 3: Saving results in a file 
+
+       $tavlang -l ../../results.txt ../../../helloworld.wfbundle
+       >>> Statistics of the workflow bundle: helloworld.wfbundle <<<
+       Name of the workflow = Hello_World
+        |--> Number of Processors = 1
+        |--> Number of Data Links = 1
+        |--> Number of Control Links = 0
+        |--> Number of Input ports = 0
+        |--> Number of Output Ports = 1
+
+       Results were saved into ../../results.txt
+       
+-----------------------------------------------------------------------------------------------------------------------------------------
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/pom.xml
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/pom.xml b/taverna-tavlang-tool/pom.xml
new file mode 100644
index 0000000..369dbf4
--- /dev/null
+++ b/taverna-tavlang-tool/pom.xml
@@ -0,0 +1,213 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+       <groupId>org.apache.taverna.language</groupId>
+       <artifactId>taverna-language</artifactId>
+       <version>0.15.1-incubating-SNAPSHOT</version>
+    </parent>
+    <artifactId>taverna-tavlang-tool</artifactId>
+    <name>Apache Taverna Language Commandline</name>
+    <description>Command line for Taverna Language (experimental)</description>
+
+       
+    <dependencies>
+    
+       <dependency>
+                       <groupId>commons-io</groupId>
+                       <artifactId>commons-io</artifactId>
+               </dependency>
+
+               <dependency>
+                       <groupId>${project.parent.groupId}</groupId>
+                       <artifactId>taverna-scufl2-api</artifactId>
+                       <version>${project.parent.version}</version>
+               </dependency>
+
+               <dependency>
+                       <groupId>${project.groupId}</groupId>
+                       <artifactId>taverna-scufl2-wfbundle</artifactId>
+                       <version>${project.version}</version>
+               </dependency>
+
+               <dependency>
+                       <groupId>${project.groupId}</groupId>
+                       <artifactId>taverna-scufl2-t2flow</artifactId>
+                       <version>${project.version}</version>
+               </dependency>
+
+<!--           <dependency> -->
+<!--                   <groupId>org.shiwa.iwir</groupId> -->
+<!--                   <artifactId>iwir</artifactId> -->
+<!--                   <version>1.1.4</version> -->
+<!--                   <scope>optional</scope> -->
+<!--                   
<systemPath>${project.build.directory}/taverna-language-commandline/lib/</systemPath>
 -->
+<!--           </dependency> -->
+               
+        <dependency>
+               <groupId>no.s11.scufl2</groupId>
+               <artifactId>scufl2-iwir</artifactId>
+               <version>0.2-SNAPSHOT</version>
+        <optional>true</optional>
+    </dependency>
+
+ 
+               
+               <dependency>
+                       <groupId>com.thoughtworks.xstream</groupId>
+                       <artifactId>xstream</artifactId>
+                       <version>1.4.8</version>
+               </dependency>
+
+
+               <!-- <dependency> <groupId>${project.groupId}</groupId> 
<artifactId>taverna-scufl2-wfdesc</artifactId> 
+                       <version>${project.version}</version> 
<optional>true</optional> </dependency> -->
+               <!-- <dependency> <groupId>org.purl.wf4ever</groupId> 
<artifactId>scufl2-wfdesc</artifactId> 
+                       <version>0.3.7</version> </dependency> -->
+               <dependency>
+                       <groupId>com.fasterxml.jackson.core</groupId>
+                       <artifactId>jackson-core</artifactId>
+               </dependency>
+
+               <dependency>
+                       <groupId>com.fasterxml.jackson.core</groupId>
+                       <artifactId>jackson-databind</artifactId>
+               </dependency>
+
+               <dependency>
+                       <groupId>${project.groupId}</groupId>
+                       <artifactId>taverna-scufl2-ucfpackage</artifactId>
+                       <version>${project.version}</version>
+               </dependency>
+
+               <dependency>
+                       <groupId>${project.groupId}</groupId>
+                       <artifactId>taverna-robundle</artifactId>
+                       <version>${project.version}</version>
+               </dependency>
+
+               <dependency>
+                       <groupId>junit</groupId>
+                       <artifactId>junit</artifactId>
+                       <scope>test</scope>
+               </dependency>
+
+               <dependency>
+                       <groupId>io.airlift</groupId>
+                       <artifactId>airline</artifactId>
+                       <!-- <version>${io.airlift.airline.version}</version> 
-->
+                       <version>0.7</version>
+               </dependency>
+
+
+       </dependencies>
+
+       <build>
+               <!-- TODO: plugins for launchers and executable jar files? -->
+               <plugins>
+
+                       <plugin>
+                               <groupId>org.codehaus.mojo</groupId>
+                               
<artifactId>appassembler-maven-plugin</artifactId>
+                               <version>1.1.1</version>
+                               <executions>
+                                       <execution>
+                                               <id>assemble</id>
+                                               <phase>package</phase>
+                                               <goals>
+                                                       <goal>assemble</goal>
+                                               </goals>
+                                       </execution>
+                               </executions>
+                               <configuration>
+                                       
<repositoryLayout>flat</repositoryLayout>
+                                       <repositoryName>lib</repositoryName>
+                                       
<assembleDirectory>${project.build.directory}/${project.artifactId}</assembleDirectory>
+                                       <programs>
+                                               <program>
+                                                       
<mainClass>org.apache.taverna.tavlang.TavernaCommandline</mainClass>
+                                                       <name>tavlang</name>
+                                               </program>
+                                       </programs>
+                               </configuration>
+                       </plugin>
+
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-shade-plugin</artifactId>
+                               <version>2.3</version>
+                               <executions>
+                                       <execution>
+                                               <phase>package</phase>
+                                               <goals>
+                                                       <goal>shade</goal>
+                                               </goals>
+                                               <configuration>
+                                                       <transformers>
+                                                               <transformer
+                                                                       
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"
 />
+                                                               <transformer
+                                                                       
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+                                                                       
<mainClass>org.apache.taverna.tavlang.TavernaCommandline</mainClass>
+                                                               </transformer>
+                                                               <transformer 
implementation="org.apache.maven.plugins.shade.resource.ApacheNoticeResourceTransformer">
+                                       <addHeader>false</addHeader>
+                                       </transformer>
+                                                       </transformers>
+                                               </configuration>
+                                       </execution>
+                               </executions>
+                       </plugin>
+
+
+               </plugins>
+       </build>
+
+       <repositories>
+               <repository>
+                       <releases>
+                               <enabled>false</enabled>
+                       </releases>
+                       <snapshots />
+                       <id>mygrid-repository</id>
+                       <name>myGrid Repository</name>
+                       <url>http://www.mygrid.org.uk/maven/repository</url>
+               </repository>
+               
+               <repository>
+                       <id>mygrid-snapshot-repository</id>
+                       <name>myGrid Snapshot Repository</name>
+                       
<url>http://www.mygrid.org.uk/maven/snapshot-repository</url>
+                       <releases>
+                               <enabled>false</enabled>
+                       </releases>
+                       <snapshots />
+               </repository>
+
+               <repository>
+                       <id>apache.snapshots</id>
+                       <name>Apache Snapshot Repository</name>
+                       <url>http://repository.apache.org/snapshots</url>
+                       <releases>
+                               <enabled>false</enabled>
+                       </releases>
+               </repository>
+       </repositories>
+
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/java/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/main/java/.gitignore 
b/taverna-tavlang-tool/src/main/java/.gitignore
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java
----------------------------------------------------------------------
diff --git 
a/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java
 
b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java
new file mode 100644
index 0000000..068c933
--- /dev/null
+++ 
b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java
@@ -0,0 +1,350 @@
+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.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.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 org.apache.taverna.tavlang.tools.stats.GetWfStat;
+import org.apache.taverna.tavlang.tools.validate.Validate;
+
+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 static Cli<TvnLangTool> parser() {
+               CliBuilder<TvnLangTool> build = Cli.<TvnLangTool> 
builder("tavlang")
+                               .withDescription("Convert, manage workflows")
+                               .withDefaultCommand(HelpCommand.class)
+                               .withCommand(CommandConvert.class) // Conversion
+                               .withCommand(HelpCommand.class) // Help
+                               .withCommand(CommandInspect.class) // Inspect
+                               .withCommand(CommandValidate.class) // Validate
+                               .withCommand(CommandVersion.class) // Version
+                               .withCommand(CommandStat.class); // Statistics
+
+               return build.build();
+       }
+
+       public CommandLineTool() {
+       };
+
+       public void parse(String... 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 wfbundle")
+               public static boolean isWfbundle = false;
+
+               @Option(name = "--robundle", description = "Convert given 
bundle in to Research Object bundle")
+               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;
+
+               
+               @Option(name = "--iwir", description = "Convert scufl2 
workflows into IWIR 1.1 specification")
+               public static boolean isIwir = 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 (isWfbundle)
+                               return "wfbundle";
+                       else if (isRo)
+                               return "robundle";
+                       else if (isStructure)
+                               return "structure";
+                       else if (isJson)
+                               return "json";
+                       
+                       else if (isIwir)
+                               return "iwir";
+                               
+                       
+                       else{
+                               System.out.println("Invalid argument....");
+                               TvnLangTool command = parser().parse("help", 
"convert");
+                               command.execute();
+                               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{
+                               System.out.println("Invalid argument....");
+                               TvnLangTool command = parser().parse("help", 
"inspect");
+                               command.execute();
+                               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() {
+                       
+                       //Validate before convert
+                       if(validate){
+                               Validate validate = new Validate(files, null, 
false);
+                               if(validate.getCheck()){
+                                       System.out.println("Conversion 
failed...! Workflow bundle has errors");
+                                       return;
+                               }else{
+                                       runcommand();
+                               }
+                       }
+               }
+                       
+               public void runcommand(){
+                       if (Filetypes.isRo) {
+                               try {
+                                       new ToRobundle(files, 
Optional.getOutFile());
+                               } catch (Exception e) {
+                                       e.printStackTrace();
+                               }
+//                             else if(Filetypes.isIwir || Filetypes.isJson || 
Filetypes.isStructure || Filetypes.isWfbundle || Filetypes.isWfdesc)
+                       } else if(Filetypes.isIwir || Filetypes.isJson || 
Filetypes.isStructure || Filetypes.isWfbundle || Filetypes.isWfdesc){
+                               if (recurse) {
+                                       new Scufl2Convert(Filetypes.isTrue(),
+                                                       Optional.getInFile(), 
Optional.getOutFile());
+                               } else {
+                                       new Scufl2Convert(Filetypes.isTrue(), 
files,
+                                                       Optional.getOutFile());
+                               }
+                       }else{
+                               System.out.println("Invalid argument....");
+                               TvnLangTool command = parser().parse("help", 
"convert");
+                               command.execute();
+                       }
+
+               }
+               
+               
+               
+       }
+
+       // Version command
+       @Command(name = "version", description = "Show version informantion")
+       public static class CommandVersion extends TvnLangTool {
+
+               @Override
+               public void execute() {
+                       
System.out.print(getClass().getPackage().getImplementationTitle());
+            System.out.println(" " + 
getClass().getPackage().getImplementationVersion());
+               }
+
+       }
+
+       // 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() {
+                       if (Inspect.processor) {
+                               try {
+                                       new ProcessorNames(toInspect, file);
+
+                               } catch (ReaderException | IOException | 
JAXBException e) {
+                                       e.printStackTrace();
+                               }
+                       } else if (Inspect.servicetypes) {
+                               try {
+                                       new ServiceTypes(toInspect, file);
+                               } catch (IOException | ReaderException e) {
+                                       e.printStackTrace();
+                               }
+
+                       }else{
+                               System.out.println("Invalid argument....");
+                               TvnLangTool command = parser().parse("help", 
"inspect");
+                               command.execute();
+                       }
+
+               }
+
+       }
+
+       // Command for validation
+       @Command(name = "validate", description = "validate the given workflow")
+       public static class CommandValidate extends TvnLangTool{
+       
+               @Option(name = { "-l", "--log" }, description = "Specify the 
file name where results should be stored ([some dir]/log.txt)")
+               public String file;
+               
+               @Option(name = {"-v", "--verbose"}, description = "Verbose 
mode")
+               public boolean verbose;
+
+//             @Arguments(usage = "<option> <input files> <output dir>", 
description = "Validate the given workflow file/s")
+               @Arguments(usage = "input files", description = "Validate the 
given workflow file/s")
+               public List<String> toValidate = Lists.newArrayList();
+
+               @Override
+               public void execute() {
+               
+                       Validate validate = new Validate(toValidate, file, 
verbose);
+                       
+
+               }
+
+       }
+       
+       //Command for getting workflow stats
+       @Command (name = "stats", description = "Shows the workflow statistics")
+       public static class CommandStat extends TvnLangTool{
+
+               
+               @Option(name = {"-l", "--log"}, description ="Save the workflow 
statictics in a file")
+               public String file;
+               
+               @Option(name = {"-v", "--verbose"}, description = "Verbose 
mode")
+               public boolean verbose;
+               
+               @Arguments(usage="input files", description = "Enter the 
workflow bundle files")
+               public List<String> files;
+               
+               @Override
+               public void execute() {
+                       
+                       GetWfStat stat = new GetWfStat(files, file, verbose);
+                       
+               }
+               
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java
----------------------------------------------------------------------
diff --git 
a/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java
 
b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java
new file mode 100644
index 0000000..016488c
--- /dev/null
+++ 
b/taverna-tavlang-tool/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/3aa91bf8/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/Tools.java
----------------------------------------------------------------------
diff --git 
a/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/Tools.java
 
b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/Tools.java
new file mode 100644
index 0000000..c78c7a2
--- /dev/null
+++ 
b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/Tools.java
@@ -0,0 +1,88 @@
+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.
+ */
+
+
+
+public class Tools {
+       
+       public static enum ConvertionTools {
+               wfbundle{
+                       public String mediaType = 
"application/vnd.taverna.scufl2.workflow-bundle";
+                       
+
+                       @Override
+                       public String getMediaType(ConvertionTools t) {
+                               return this.mediaType;
+                       }
+               },
+               json{
+                       public String mediaType = "application/ld+json";
+
+
+                       @Override
+                       public String getMediaType(ConvertionTools t) {
+                               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) {
+                               return null;
+                       }
+               
+               },
+               structure{
+                       public String mediaType = 
"text/vnd.taverna.scufl2.structure";
+                       
+                       @Override
+                       public String getMediaType(ConvertionTools t) {
+                               return mediaType;
+                       }
+               },
+               
+               iwir{
+                               public String mediaType = 
"application/vnd.shiwa.iwir+xml";
+                               
+                               @Override
+                               public String getMediaType(ConvertionTools t) {
+                                       return mediaType;
+                               }
+               };
+               
+               ConvertionTools(){}
+               
+               public abstract String getMediaType(ConvertionTools t);
+               
+       }
+       
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java
----------------------------------------------------------------------
diff --git 
a/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java
 
b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java
new file mode 100644
index 0000000..da4dff0
--- /dev/null
+++ 
b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java
@@ -0,0 +1,206 @@
+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.commons.io.FilenameUtils;
+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;
+
+
+/*
+ * Converts 
+ *     .t2flow --> .wfbundle
+ *     .t2flow --> .structure
+ *     .wfbundle --> .structure
+ *  .wfbundle/ .t2flow -> .iwir
+ * 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) {
+                               System.err.println("Error: The directory cannot 
be created...!!!!");
+                               e1.printStackTrace();
+                       }
+               }else{
+                       File outFile = new File(this.output);
+                       try {
+                               FileUtils.forceMkdir(outFile);
+                               
+                       } catch (IOException e1) {
+                               System.err.println("Error: The directory cannot 
be created...!!!!");
+                               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: The directory cannot 
be created...!!!");
+                       }
+                       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: The 
directory cannot be created...!!!");
+                               }
+                               
+                               convertFile(t2File, outFile);
+                               
+                       }
+               }else{
+                       System.err.println("Error: 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("Error: 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){
+               
+               //Check weather the input files are in valid format...!!!
+               String ext = FilenameUtils.getExtension(t2File.getName());
+               
if(!ext.equalsIgnoreCase("t2flow")&&!ext.equalsIgnoreCase("wfbundle")){
+                       System.err.println("Error: Invalid input file 
format...!!!");
+                       return;
+               }
+               
+               WorkflowBundleIO wfbio = new WorkflowBundleIO();
+               String filename = t2File.getName();
+               filename = filename.replaceFirst("\\..*", this.type);
+               File scufl2File = new File(outFile.getAbsolutePath(), filename);
+               
+               WorkflowBundle wfBundle;
+               try {
+                       wfBundle = wfbio.readBundle(t2File, null);// null --> 
will guess the media type for reading.
+                       
+//                     if(this.type.equals(".iwir")){
+//                             IwirWriter iww = new IwirWriter();
+//                             iww.writeBundle(wfBundle, scufl2File, 
this.MEDIA_TYPE);
+//                     }else
+                       
+                       if(this.type.equals(".json")){
+                               ToJson toJ = new ToJson();
+                               toJ.convert(t2File, outFile);
+                       }
+                       else{
+                               wfbio.writeBundle(wfBundle, scufl2File, 
this.MEDIA_TYPE);
+                       }
+                       System.out.println(scufl2File.getPath() + " is 
created.");
+               }catch (ReaderException e){
+                       System.err.println("Error: Connot read the file");
+               }catch(IOException e){
+                       System.err.println("Error: File not found");
+               }catch(WriterException e) {
+                       System.err.println("Error: Cannot write to the file");
+//                     e.printStackTrace();
+               }
+       }
+
+       
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java
----------------------------------------------------------------------
diff --git 
a/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java
 
b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java
new file mode 100644
index 0000000..f11424c
--- /dev/null
+++ 
b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java
@@ -0,0 +1,298 @@
+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);
+               }
+
+       }
+
+       
+       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(File in, File out) throws ReaderException, 
IOException,
+                       WriterException {
+               String filename = in.getName();
+               filename = filename.replaceFirst("\\..*", ".json");
+               File workflowFile = new File(out.getAbsolutePath(), filename);
+
+               WorkflowBundle wfBundle = io.readBundle(in, 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/3aa91bf8/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java
----------------------------------------------------------------------
diff --git 
a/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java
 
b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java
new file mode 100644
index 0000000..6ab14bc
--- /dev/null
+++ 
b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java
@@ -0,0 +1,66 @@
+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.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) {
+               
+       }
+       
+       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/3aa91bf8/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java
----------------------------------------------------------------------
diff --git 
a/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java
 
b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java
new file mode 100644
index 0000000..f93aadc
--- /dev/null
+++ 
b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java
@@ -0,0 +1,169 @@
+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.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;
+
+/*
+ * 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();
+                       System.out.println("Results were saved into " + file2);
+               }
+       }
+       
+       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/3aa91bf8/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java
----------------------------------------------------------------------
diff --git 
a/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java
 
b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java
new file mode 100644
index 0000000..ddff2ab
--- /dev/null
+++ 
b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java
@@ -0,0 +1,112 @@
+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();
+                       System.out.println("Results were saved into " + save);
+               }
+               
+       }
+       
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/stats/GetWfStat.java
----------------------------------------------------------------------
diff --git 
a/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/stats/GetWfStat.java
 
b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/stats/GetWfStat.java
new file mode 100644
index 0000000..7daa38e
--- /dev/null
+++ 
b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/stats/GetWfStat.java
@@ -0,0 +1,193 @@
+package org.apache.taverna.tavlang.tools.stats;
+
+/*
+ * 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.List;
+
+import org.apache.taverna.scufl2.api.common.NamedSet;
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+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.port.InputPort;
+import org.apache.taverna.scufl2.api.port.OutputPort;
+
+public class GetWfStat {
+       
+       private NamedSet<Workflow> set;
+       private String logFile;
+       private boolean verbose;
+       private StringBuilder str_verb = new StringBuilder();
+       private StringBuilder str_nverb = new StringBuilder();
+       
+       
+       //If given file is a workflow file
+       public GetWfStat(List<String> wf_files, String log, boolean verbose){
+               this.logFile = log;
+               this.verbose = verbose;
+               
+               for(String files : wf_files){
+                       File f = new File(files);
+                       if(f.isFile()){
+                               this.read(f);
+                               
+                       }else{
+                               System.err.println("Error reading the file " + 
f.getName());
+                       }
+               }
+               
+               this.isVerbose();
+               
+               if(log!=null){
+                       this.writefile(this.str_verb.toString(), this.logFile);
+               }
+       }
+       
+       //Read the workflow file and extract the resources.
+       //And append them to a String builder
+       public void read(File file){
+               WorkflowBundleIO io = new WorkflowBundleIO();
+               try {
+                       WorkflowBundle wf = io.readBundle(file, null);
+                       this.set = wf.getWorkflows();
+
+                       //String to be written to a file.
+                       this.str_nverb.append(">>> Statistics of the workflow 
bundle: " + file.getName() + " <<<\n");
+                       this.str_verb.append(">>> Statistics of the workflow 
bundle: " + file.getName() + " <<<\n");
+                       
+                       for(Workflow wrf : set){
+                               //TODO :- Take each type of resource and make a 
system to view them to the user.
+                               String name = "Name of the workflow = " + 
wrf.getName();
+                               this.str_verb.append(name + "\n");
+                               this.str_nverb.append(name + "\n");
+
+                               
+                               String noP = "  |--> Number of Processors = " + 
wrf.getProcessors().size();
+                               this.str_verb.append(noP + "\n");
+                               this.str_nverb.append(noP + "\n");
+                               
+                               if(this.verbose && 
wrf.getProcessors().size()!=0){
+                                       this.str_verb.append("  |     |--> 
Processors: " + "\n");
+                                       
+                                       for(Processor p : wrf.getProcessors()){
+                                               this.str_verb.append("  |       
   |--> " + p.getName() + "\n");
+                                       }
+                                       this.str_verb.append("  |" + "\n");
+                               }
+                               
+                               this.str_verb.append("  |--> Number of Data 
Links = " + wrf.getDataLinks().size() + "\n");
+                               this.str_nverb.append("  |--> Number of Data 
Links = " + wrf.getDataLinks().size() + "\n");
+                               
+                               if(this.verbose && 
wrf.getDataLinks().size()!=0){
+                                       this.str_verb.append("  |     |--> Data 
Links" + "\n");
+                                       
+                                       for(DataLink link : wrf.getDataLinks()){
+                                               this.str_verb.append("  |       
   |--> " + link + "\n");
+                                       }
+                                       this.str_verb.append("  |" + "\n");
+                               }
+                               
+                               this.str_nverb.append("  |--> Number of Control 
Links = " + wrf.getControlLinks().size() + "\n");
+                               this.str_verb.append("  |--> Number of Control 
Links = " + wrf.getControlLinks().size() + "\n");
+                               
+                               
+                               if(this.verbose && 
wrf.getControlLinks().size()!=0){
+                                       this.str_verb.append("  |     |--> 
Control Links\n");
+                                       for(ControlLink link : 
wrf.getControlLinks()){
+                                               this.str_verb.append("  |       
   |--> " + link + "\n");
+                                       }
+                                       this.str_verb.append("  |\n");
+                               }
+                               
+                               this.str_nverb.append("  |--> Number of Input 
ports = " + wrf.getInputPorts().size()+"\n");
+                               this.str_verb.append("  |--> Number of Input 
ports = " + wrf.getInputPorts().size()+"\n");
+                               
+                               
+                               if(this.verbose && 
wrf.getInputPorts().size()!=0){
+                                       this.str_verb.append("  |     |--> 
Input Ports\n");
+                                       for(InputPort iport : 
wrf.getInputPorts()){
+                                               this.str_verb.append("  |       
   |--> " + iport.toString()+"\n");
+                                       }
+                                       this.str_verb.append("  |\n");
+                               }
+                       
+                               this.str_nverb.append("  |--> Number of Output 
Ports = " + wrf.getOutputPorts().size()+"\n");
+                               this.str_verb.append("  |--> Number of Output 
Ports = " + wrf.getOutputPorts().size()+"\n");
+                               
+                               if(this.verbose && 
wrf.getOutputPorts().size()!=0){
+                                       this.str_verb.append("  |     |--> 
Output Ports\n");
+                                       for(OutputPort o_port : 
wrf.getOutputPorts()){
+                                               this.str_verb.append("  |       
   |--> " + o_port.toString()+"\n");
+                                       }
+                                       
+                                       this.str_verb.append("\n");
+                               }
+                               
+                               this.str_nverb.append("\n");
+                               this.str_verb.append("\n");
+                       }
+                       
+               } catch (ReaderException | IOException e) {
+                       e.printStackTrace();
+               }
+       }
+       
+       
+       //Saving the output into a log
+       public void writefile(String report, String url){
+               
+                       File file = new File(url);
+                       
+                       if(!file.isFile()){
+                               System.err.println("Error in writing the log 
file...");
+                       }
+                       
+                       FileWriter writer;
+                       BufferedWriter bfw;
+                       try {
+                               writer = new FileWriter(file);
+                               bfw = new BufferedWriter(writer);
+                               bfw.write(report);
+                               bfw.close();
+                               writer.close();
+                               System.out.println("Results were saved into " + 
file.getPath());
+                       } catch (IOException e) {
+                               e.printStackTrace();
+                       }
+               
+       }
+               
+       public void isVerbose(){
+               if(verbose)
+                       System.out.println(this.str_verb.toString());
+               else 
+                       System.out.println(this.str_nverb.toString());
+       }
+       
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java
----------------------------------------------------------------------
diff --git 
a/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java
 
b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java
new file mode 100644
index 0000000..fc05e3b
--- /dev/null
+++ 
b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java
@@ -0,0 +1,151 @@
+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 java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.List;
+
+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.validation.correctness.CorrectnessValidationListener;
+import org.apache.taverna.scufl2.validation.correctness.CorrectnessValidator;
+import 
org.apache.taverna.scufl2.validation.correctness.ReportCorrectnessValidationListener;
+
+/*
+ * Takes .wfbundle/ .t2flow as the input
+ * */
+public class Validate {
+
+       private String logfile;
+       private String nonVerbose = "";
+       private String finalrep = "";
+       private boolean verbose;
+       private boolean check = false;
+       
+
+       public Validate(List<String> files, String file, boolean verbose) {
+               this.verbose = verbose;
+               this.logfile = file;
+               System.out.println("Validation started....");
+               for (String f : files) {
+                       System.out.println("Validating " + f);
+                       File wfile = new File(f);
+                       read(wfile);
+                       
+               }
+               System.out.println("Validation completed.......");
+               
+               
+               if (this.logfile != null) {
+                       saveToLog(this.finalrep);
+               }
+       }
+
+       public void read(File file) {
+               WorkflowBundleIO io = new WorkflowBundleIO();
+               try {
+                       this.finalrep += validate(io.readBundle(file, null), 
file.getName());
+                       
+               } catch (ReaderException e) {
+                       System.err.println(e.getMessage());
+
+               } catch (IOException e) {
+                       System.err.println("Workflow bundle not found!");
+                       System.err.println(e.getMessage());
+
+               }
+       }
+
+       public String validate(WorkflowBundle wfb, String file) {
+               
+               StringBuilder report2 = new StringBuilder();
+               CorrectnessValidationListener correctnessValidationListener = 
new ReportCorrectnessValidationListener();
+               CorrectnessValidator correctnessValidator = new 
CorrectnessValidator();
+               correctnessValidationListener = 
correctnessValidator.validate(wfb);
+               String report = 
correctnessValidationListener.toString().replace(
+                               "ReportCorrectnessValidationListener [", "");
+
+               String[] sections = report.split(", ");
+
+               
+               
+               boolean detect = 
correctnessValidationListener.detectedProblems();
+               if (!detect){
+                       report2.append("The workflow " + file + " has no 
errors. \n\n");
+                       this.nonVerbose = "The workflow " + file + " has no 
errors. \n";
+               }
+                       
+               
+//             System.out.println("The validation report for " + file);
+               report2.append("The validation report for " + file + 
"......\n");
+               
report2.append("--------------------------------------------------------------------------------
 \n");
+               for (int i = 0; i < sections.length; i++) {
+                       String line = 
"-->"+sections[i].split("=")[0].replace("()", "").replace(
+                                       "get", "")
+                                       + ":- ";
+                       report2.append(line);
+                       String line2 =  sections[i].split("=")[1].replace("[", 
"").replace("]","");
+                       if(line2.equals("")) report2.append("null \n\n");
+                       else report2.append("\t").append(line2).append("\n");
+                       
+               
+               }
+               
report2.append("---------------------------------------------------------------------------------
 \n\n");
+               
+               if(detect){
+                       System.out.println("The workflow bundle has following 
problems: \n"+report2.toString());
+                       check = true;
+               }
+               
+               if(verbose){
+                       System.out.println(report2.toString());
+               }else{
+                       System.out.println(this.nonVerbose);
+               }
+               
+               return report2.toString();
+
+       }
+
+       public void saveToLog(String s) {
+               File logFile = new File(this.logfile);
+               FileWriter logwriter;
+               try {
+                       logwriter = new FileWriter(logFile);
+                       BufferedWriter blw = new BufferedWriter(logwriter);
+                       blw.write(s);
+                       blw.close();
+                       logwriter.close();
+                       System.out.println("Results were saved into " + 
logFile.getPath());
+               } catch (IOException e) {
+                       System.err.println("Error writing to the file \n" + 
e.getMessage());
+               }
+
+       }
+       
+       public boolean getCheck(){
+               return this.check;
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/resources/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/main/resources/.gitignore 
b/taverna-tavlang-tool/src/main/resources/.gitignore
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/resources/META-INF/NOTICE
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/main/resources/META-INF/NOTICE 
b/taverna-tavlang-tool/src/main/resources/META-INF/NOTICE
new file mode 100644
index 0000000..370a8fc
--- /dev/null
+++ b/taverna-tavlang-tool/src/main/resources/META-INF/NOTICE
@@ -0,0 +1,7 @@
+Apache Taverna Language
+Copyright 2010-2014 University of Manchester, UK
+Copyright 2014-2015 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/test/java/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/test/java/.gitignore 
b/taverna-tavlang-tool/src/test/java/.gitignore
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/CommandLineTest.java
----------------------------------------------------------------------
diff --git 
a/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/CommandLineTest.java
 
b/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/CommandLineTest.java
new file mode 100644
index 0000000..6beaa8e
--- /dev/null
+++ 
b/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/CommandLineTest.java
@@ -0,0 +1,43 @@
+package org.apache.taverna.tavlang.test;
+
+/*
+ * 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.tavlang.CommandLineTool;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class CommandLineTest {
+       CommandLineTool commandLineTool = new CommandLineTool();
+       
+       @Test
+       public void testHelp(){
+               commandLineTool.parse();
+               commandLineTool.parse("version");
+               commandLineTool.parse("help");
+               commandLineTool.parse("help", "convert");
+               commandLineTool.parse("help", "inspect");
+               commandLineTool.parse("help", "validate");
+               commandLineTool.parse("help", "help");
+       }
+       
+       
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestConvert.java
----------------------------------------------------------------------
diff --git 
a/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestConvert.java
 
b/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestConvert.java
new file mode 100644
index 0000000..a920db2
--- /dev/null
+++ 
b/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestConvert.java
@@ -0,0 +1,34 @@
+package org.apache.taverna.tavlang.test;
+
+/*
+ * 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 static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class TestConvert{
+
+       @Test
+       public void testConvertS() {
+//             fail("Not yet implemented");
+               
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestStats.java
----------------------------------------------------------------------
diff --git 
a/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestStats.java
 
b/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestStats.java
new file mode 100644
index 0000000..4c22377
--- /dev/null
+++ 
b/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestStats.java
@@ -0,0 +1,34 @@
+package org.apache.taverna.tavlang.test;
+
+/*
+ * 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 static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class TestStats {
+
+       @Test
+       public void test() {
+//             fail("Not yet implemented");
+       }
+
+}


Reply via email to