add a method that vallidate the cwl tool for Taverna

Project: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/commit/18c5155f
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/tree/18c5155f
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/diff/18c5155f

Branch: refs/heads/cwl-browse
Commit: 18c5155f380bc1e6e7d92b5b9dcadacff6f9da13
Parents: 6bb504e
Author: ThilinaManamgoda <maanafun...@gmail.com>
Authored: Sun May 29 03:23:35 2016 +0530
Committer: ThilinaManamgoda <maanafun...@gmail.com>
Committed: Sun May 29 03:23:35 2016 +0530

----------------------------------------------------------------------
 .../CWLFiles/binding-test.cwl                   |   1 -
 .../java/org/apache/taverna/cwl/ui/App.java     |  29 ------
 .../org/apache/taverna/cwl/ui/CWLParser.java    |  93 -----------------
 .../ui/serviceprovider/CwlServiceProvider.java  | 101 ++++++++++++++++++-
 .../taverna/cwl/ui/serviceprovider/Testing.java |  88 +++++++++++++---
 .../org/apache/taverna/cwl/CwlDumyActivity.java |  15 ++-
 6 files changed, 186 insertions(+), 141 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/18c5155f/taverna-cwl-activity-ui/CWLFiles/binding-test.cwl
----------------------------------------------------------------------
diff --git a/taverna-cwl-activity-ui/CWLFiles/binding-test.cwl 
b/taverna-cwl-activity-ui/CWLFiles/binding-test.cwl
index 2905c51..6906d71 100644
--- a/taverna-cwl-activity-ui/CWLFiles/binding-test.cwl
+++ b/taverna-cwl-activity-ui/CWLFiles/binding-test.cwl
@@ -5,7 +5,6 @@ cwlVersion: cwl:draft-3
 
 inputs:
   - id: reference
-    type: File
     inputBinding: { position: 2 }
 
   - id: reads

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/18c5155f/taverna-cwl-activity-ui/src/main/java/org/apache/taverna/cwl/ui/App.java
----------------------------------------------------------------------
diff --git 
a/taverna-cwl-activity-ui/src/main/java/org/apache/taverna/cwl/ui/App.java 
b/taverna-cwl-activity-ui/src/main/java/org/apache/taverna/cwl/ui/App.java
deleted file mode 100644
index 4abf19f..0000000
--- a/taverna-cwl-activity-ui/src/main/java/org/apache/taverna/cwl/ui/App.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*******************************************************************************
- *  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.
- 
*******************************************************************************/
-package org.apache.taverna.cwl.ui;
-
-/**
- * Hello world!
- *
- */
-public class App 
-{
-    public static void main( String[] args )
-    {
-        System.out.println( "Hello World!" );
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/18c5155f/taverna-cwl-activity-ui/src/main/java/org/apache/taverna/cwl/ui/CWLParser.java
----------------------------------------------------------------------
diff --git 
a/taverna-cwl-activity-ui/src/main/java/org/apache/taverna/cwl/ui/CWLParser.java
 
b/taverna-cwl-activity-ui/src/main/java/org/apache/taverna/cwl/ui/CWLParser.java
deleted file mode 100644
index 1badefd..0000000
--- 
a/taverna-cwl-activity-ui/src/main/java/org/apache/taverna/cwl/ui/CWLParser.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
- *  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.
- 
*******************************************************************************/
-package org.apache.taverna.cwl.ui;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.util.ArrayList;
-import java.util.Map;
-
-import org.yaml.snakeyaml.Yaml;
-
-
-public class CWLParser {
-
-       private File cwlFile;
-
-       private void setUpFile(File cwlFile) {
-
-               this.cwlFile = cwlFile;
-       }
-
-       private void readKeyWords() throws FileNotFoundException {
-
-               Yaml yaml = new Yaml();
-               Map contents = (Map) yaml.load(new FileInputStream(cwlFile));
-
-               for (Object key : contents.keySet()) {
-                       if (key.equals("inputs"))
-                               for (Object inputPairs : (ArrayList<String>) 
contents.get(key)) {
-                                       Map test = (Map) inputPairs;
-                                       System.out.println(inputPairs);
-
-                                       for (Object inputKey : test.keySet()) {
-                                               if (inputKey.equals("id"))
-                                                       
System.out.println(test.get(inputKey));
-                                               else if 
(inputKey.equals("type")) {
-                                                       try {
-                                                               Map inputType = 
(Map) test.get(inputKey);
-                                                               for (Object 
inputTypekey : inputType.keySet()) {
-                                                                       if 
(inputTypekey.equals("inputBinding")) {
-                                                                               
Map typeInputBinding = (Map) inputType.get(inputTypekey);
-                                                                               
for (Object inputBindingKey : typeInputBinding.keySet()) {
-
-                                                                               
        System.out.println(
-                                                                               
                        inputBindingKey + " " + 
typeInputBinding.get(inputBindingKey));
-                                                                               
}
-                                                                       } else {
-                                                                               
System.out.println(inputTypekey + " " + inputType.get(inputTypekey));
-                                                                       }
-                                                               }
-                                                       } catch 
(ClassCastException e) {
-                                                               
System.out.println(inputKey + " " + test.get(inputKey));
-                                                       }
-                                               } else {
-                                                       
System.out.println(inputKey + " " + test.get(inputKey));
-                                               }
-
-                                       }
-
-                               }
-               }
-
-       }
-
-       public static void main(String[] args) {
-               CWLParser cwlParser = new CWLParser();
-
-               cwlParser.setUpFile(new File("CWLFiles/binding-test.cwl"));
-
-               try {
-                       cwlParser.readKeyWords();
-               } catch (FileNotFoundException e) {
-                       e.printStackTrace();
-               }
-
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/18c5155f/taverna-cwl-activity-ui/src/main/java/org/apache/taverna/cwl/ui/serviceprovider/CwlServiceProvider.java
----------------------------------------------------------------------
diff --git 
a/taverna-cwl-activity-ui/src/main/java/org/apache/taverna/cwl/ui/serviceprovider/CwlServiceProvider.java
 
b/taverna-cwl-activity-ui/src/main/java/org/apache/taverna/cwl/ui/serviceprovider/CwlServiceProvider.java
index 44cdbdc..ec82630 100644
--- 
a/taverna-cwl-activity-ui/src/main/java/org/apache/taverna/cwl/ui/serviceprovider/CwlServiceProvider.java
+++ 
b/taverna-cwl-activity-ui/src/main/java/org/apache/taverna/cwl/ui/serviceprovider/CwlServiceProvider.java
@@ -21,11 +21,13 @@ import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FilenameFilter;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import javax.swing.Icon;
 
+import org.apache.taverna.cwl.Type;
 import org.yaml.snakeyaml.Yaml;
 
 import net.sf.taverna.t2.servicedescriptions.ServiceDescriptionProvider;
@@ -33,6 +35,18 @@ import 
net.sf.taverna.t2.servicedescriptions.ServiceDescriptionProvider;
 public class CwlServiceProvider implements ServiceDescriptionProvider {
 
        private static final File cwlFilesLocation = new File("CWLFiles");
+       // CWLTYPES
+       private static final String FILE = "File";
+       private static final String INTEGER = "int";
+       private static final String DOUBLE = "double";
+       private static final String FLOAT = "float";
+       private static final String STRING = "string";
+
+       private static final String ITEMS = "items";
+       private static final String TYPE = "type";
+       private static final String ID = "id";
+       private static final String INPUTS = "inputs";
+       private static final String ARRAY = "array";
 
        @Override
        public void 
findServiceDescriptionsAsync(FindServiceDescriptionsCallBack callBack) {
@@ -41,10 +55,10 @@ public class CwlServiceProvider implements 
ServiceDescriptionProvider {
                List<CwlServiceDesc> result = new ArrayList<CwlServiceDesc>();
 
                File[] cwlFiles = getCwlFiles();
-               
+
                // Load the CWL file using SnakeYaml lib
                Yaml cwlReader = new Yaml();
-               
+
                for (File file : cwlFiles) {
                        Map cwlFile = null;
 
@@ -68,6 +82,89 @@ public class CwlServiceProvider implements 
ServiceDescriptionProvider {
 
        }
 
+       private HashMap<String, Type> processInputs(ArrayList<Map> inputs) {
+
+               HashMap<String, Type> result = new HashMap<>();
+
+               for (Map input : inputs) {
+
+                       String Id = (String) input.get(ID);
+                       // This require for nested type definitions
+                       Map typeConfigurations;
+                       // this object holds the type and if it's an array then 
type of the
+                       // elements in the array
+                       Type type = null;
+                       try {
+                               /*
+                                * This part will go through nested type 
definitions
+                                * 
+                                * type : type : array items : boolean
+                                * 
+                                */
+
+                               typeConfigurations = (Map) input.get(TYPE);
+
+                               // Check type is defined or not
+                               if (typeConfigurations != null) {
+                                       type = new Type();
+                                       type.setType((String) 
typeConfigurations.get(TYPE));
+                                       type.setItems((String) 
typeConfigurations.get(ITEMS));
+
+                               }
+
+                       } catch (ClassCastException e) {
+                               /*
+                                * This exception means type is described as 
single argument ex:
+                                * type : File
+                                */
+                               type = new Type();
+                               type.setType((String) input.get(TYPE));
+                               type.setItems(null);
+                       }
+                       //when processing the inputs from the HashMap  type 
should be checked for is it null or not 
+                               result.put(Id, type);
+               }
+               return result;
+       }
+
+       public boolean isTavernaCompatible(Map cwlFile) {
+
+       
+               /*
+                * in this method cwl tool is verified whether it's compatible 
with
+                * Taverna or not
+                */
+               ArrayList<Map> inputs = (ArrayList<Map>) cwlFile.get(INPUTS);
+
+               if (inputs != null) {
+
+                       HashMap<String, Type> processedinputs = 
processInputs(inputs);
+
+                       for (String inputId : processedinputs.keySet()) {
+                               Type type = processedinputs.get(inputId);
+                               if (type != null)
+                                       if (type.getItems() == null) {
+                                               String inputType = 
type.getType();
+                                               if (!(inputType.equals(DOUBLE) 
|| inputType.equals(FILE) || inputType.equals(FLOAT)
+                                                               || 
inputType.equals(INTEGER) || inputType.equals(STRING)))
+                                                       return false;
+
+                                       } else {
+                                               if 
(type.getType().equals(ARRAY)) {
+                                                       String inputType = 
type.getItems();
+                                                       if 
(!(inputType.equals(DOUBLE) || inputType.equals(FILE) || inputType.equals(FLOAT)
+                                                                       || 
inputType.equals(INTEGER) || inputType.equals(STRING)))
+                                                               return false;
+
+                                               }
+                                       }
+                               else return false;
+                       }
+               }
+               return true;
+               
+       }
+
        @Override
        public Icon getIcon() {
                // TODO Auto-generated method stub

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/18c5155f/taverna-cwl-activity-ui/src/main/java/org/apache/taverna/cwl/ui/serviceprovider/Testing.java
----------------------------------------------------------------------
diff --git 
a/taverna-cwl-activity-ui/src/main/java/org/apache/taverna/cwl/ui/serviceprovider/Testing.java
 
b/taverna-cwl-activity-ui/src/main/java/org/apache/taverna/cwl/ui/serviceprovider/Testing.java
index 9a7a015..d6baf60 100644
--- 
a/taverna-cwl-activity-ui/src/main/java/org/apache/taverna/cwl/ui/serviceprovider/Testing.java
+++ 
b/taverna-cwl-activity-ui/src/main/java/org/apache/taverna/cwl/ui/serviceprovider/Testing.java
@@ -18,13 +18,21 @@ public class Testing {
        private static final String ID = "id";
        private static final String TYPE = "type";
        private static final String ARRAY = "array";
-       private static final String FILE = "File";
        private static final String ITEMS = "items";
-       static int i=0;
+       static int i = 0;
+
+       // CWLTYPES
+       private static final String FILE = "File";
+       private static final String INTEGER = "int";
+       private static final String DOUBLE = "double";
+       private static final String FLOAT = "float";
+       private static final String STRING = "string";
+
        public static void main(String[] args) {
                File[] cwlFiles = getCwlFiles();
 
                for (File file : cwlFiles) {
+
                        Map cwlFile = null;
                        // Load the CWL file using SnakeYaml lib
                        Yaml cwlReader = new Yaml();
@@ -37,14 +45,53 @@ public class Testing {
                                // Creating the CWL configuration bean
                                CwlActivityConfigurationBean configurationBean 
= new CwlActivityConfigurationBean();
                                configurationBean.setCwlConfigurations(cwlFile);
-                               getInputs(configurationBean);
+                               // getInputs(configurationBean);
+                               if (isTavernaCompatible(cwlFile))
+                                       
System.out.println(file.getName().split("\\.")[0]);
                        }
 
                }
        }
 
+       public static boolean isTavernaCompatible(Map cwlFile) {
+
+               /*
+                * in this method cwl tool is verified whether it's compatible 
with
+                * Taverna or not
+                */
+               ArrayList<Map> inputs = (ArrayList<Map>) cwlFile.get(INPUTS);
+
+               if (inputs != null) {
+
+                       HashMap<String, Type> processedinputs = 
processInputs(inputs);
+
+                       for (String inputId : processedinputs.keySet()) {
+                               Type type = processedinputs.get(inputId);
+                               if (type != null)
+                                       if (type.getItems() == null) {
+                                               String inputType = 
type.getType();
+                                               if (!(inputType.equals(DOUBLE) 
|| inputType.equals(FILE) || inputType.equals(FLOAT)
+                                                               || 
inputType.equals(INTEGER) || inputType.equals(STRING)))
+                                                       return false;
+
+                                       } else {
+                                               if 
(type.getType().equals(ARRAY)) {
+                                                       String inputType = 
type.getItems();
+                                                       if 
(!(inputType.equals(DOUBLE) || inputType.equals(FILE) || inputType.equals(FLOAT)
+                                                                       || 
inputType.equals(INTEGER) || inputType.equals(STRING)))
+                                                               return false;
+
+                                               }
+                                       }
+                               else return false;
+                       }
+               }
+               return true;
+
+       }
+
        private static void getInputs(CwlActivityConfigurationBean 
configurationBean) {
-               
+
                System.out.println(i);
                i++;
                Map cwlFile = configurationBean.getCwlConfigurations();
@@ -53,12 +100,14 @@ public class Testing {
 
                        if (mainKey.equals(INPUTS)) {
                                ArrayList<Map> arrayList = (ArrayList<Map>) 
cwlFile.get(mainKey);
-                               
+
                                HashMap<String, Type> map = 
processInputs(arrayList);
-                               for (String s:map.keySet()  ) {
-                                       if(map.get(s).getType().equals(FILE)) 
System.out.println("ID: "+s+" type : File");
-                                       
-                                       if(map.get(s).getType().equals(ARRAY)) 
System.out.println("ID :"+s+" type: Array items: "+map.get(s).getItems());
+                               for (String s : map.keySet()) {
+                                       if (map.get(s).getType().equals(FILE))
+                                               System.out.println("ID: " + s + 
" type : File");
+
+                                       if (map.get(s).getType().equals(ARRAY))
+                                               System.out.println("ID :" + s + 
" type: Array items: " + map.get(s).getItems());
                                }
                        }
                }
@@ -71,18 +120,31 @@ public class Testing {
                for (Map input : inputs) {
                        String currentInputId = (String) input.get(ID);
                        Map typeConfigurations;
-                       Type type = new Type();
+                       Type type = null;
+
                        try {
+
                                typeConfigurations = (Map) input.get(TYPE);
-                               type.setType((String) 
typeConfigurations.get(TYPE));
-                               type.setItems((String) 
typeConfigurations.get(ITEMS));
+
+                               if (typeConfigurations != null) {
+                                       type = new Type();
+                                       type.setType((String) 
typeConfigurations.get(TYPE));
+                                       type.setItems((String) 
typeConfigurations.get(ITEMS));
+                               }
                        } catch (ClassCastException e) {
                                // This exception means type is described as 
single argument ex:
                                // type : File
-                               type.setType((String)input.get(TYPE));
+
+                               type = new Type();
+                               type.setType((String) input.get(TYPE));
                                type.setItems(null);
+                       } catch (NullPointerException e) {
+
+                               System.out.println("No type is defined");
                        }
+
                        result.put(currentInputId, type);
+
                }
                return result;
        }

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/18c5155f/taverna-cwl-activity/src/main/java/org/apache/taverna/cwl/CwlDumyActivity.java
----------------------------------------------------------------------
diff --git 
a/taverna-cwl-activity/src/main/java/org/apache/taverna/cwl/CwlDumyActivity.java
 
b/taverna-cwl-activity/src/main/java/org/apache/taverna/cwl/CwlDumyActivity.java
index d7147cc..03944e0 100644
--- 
a/taverna-cwl-activity/src/main/java/org/apache/taverna/cwl/CwlDumyActivity.java
+++ 
b/taverna-cwl-activity/src/main/java/org/apache/taverna/cwl/CwlDumyActivity.java
@@ -33,15 +33,24 @@ public class CwlDumyActivity extends 
AbstractAsynchronousActivity<CwlActivityCon
        private static final String ID = "id";
        private static final String TYPE = "type";
        private static final String ARRAY = "array";
-       private static final String FILE = "File";
-       private static final String ITEMS = "items";
 
+       private static final String ITEMS = "items";
+       
+       //CWLTYPES
+       private static final String FILE = "File";
+       private static final String INTEGER="int";
+       private static final String DOUBLE="double";
+       private static final String FLOAT="float";
+       private static final String STRING="string";
+       
        @Override
        public void configure(CwlActivityConfigurationBean arg0) throws 
ActivityConfigurationException {
                removeInputs();
                removeOutputs();
 
        }
+       
+       
 
        private void getInputs(CwlActivityConfigurationBean configurationBean) {
 
@@ -58,6 +67,7 @@ public class CwlDumyActivity extends 
AbstractAsynchronousActivity<CwlActivityCon
                        for (String inputId : processedInputs.keySet()) {
                                if 
(processedInputs.get(inputId).getType().equals(FILE))
                                        System.out.println("ID: " + inputId + " 
type : File");
+                               
 
                                if 
(processedInputs.get(inputId).getType().equals(ARRAY))
                                        System.out.println(
@@ -106,7 +116,6 @@ public class CwlDumyActivity extends 
AbstractAsynchronousActivity<CwlActivityCon
 
        @Override
        public void executeAsynch(Map<String, T2Reference> arg0, 
AsynchronousActivityCallback arg1) {
-
        }
 
        @Override

Reply via email to