upgradede for CWL v1.0

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

Branch: refs/heads/cwl-browse
Commit: e56b8021080de1b5e1254bc62cb05337801f721e
Parents: f2eda87
Author: ThilinaManamgoda <maanafun...@gmail.com>
Authored: Thu Aug 4 15:17:36 2016 +0530
Committer: ThilinaManamgoda <maanafun...@gmail.com>
Committed: Thu Aug 4 15:17:36 2016 +0530

----------------------------------------------------------------------
 .../ui/serviceprovider/CwlServiceProvider.java  |   6 +
 .../apache/taverna/cwl/utilities/CWLUtil.java   | 123 +++++++++++++++----
 2 files changed, 103 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/e56b8021/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 1d71fe5..a1e2561 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
@@ -105,6 +105,12 @@ public class CwlServiceProvider extends 
AbstractConfigurableServiceProvider impl
                                }
 
                        });
+                       if(stream!=null)
+                               try {
+                                       stream.close();
+                               } catch (IOException e) {
+                                       logger.warn("Can't close Stream !");
+                               }
                        callBack.finished();
                }
 

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/e56b8021/taverna-cwl-utilities/src/main/java/org/apache/taverna/cwl/utilities/CWLUtil.java
----------------------------------------------------------------------
diff --git 
a/taverna-cwl-utilities/src/main/java/org/apache/taverna/cwl/utilities/CWLUtil.java
 
b/taverna-cwl-utilities/src/main/java/org/apache/taverna/cwl/utilities/CWLUtil.java
index aafe81c..49d85a9 100644
--- 
a/taverna-cwl-utilities/src/main/java/org/apache/taverna/cwl/utilities/CWLUtil.java
+++ 
b/taverna-cwl-utilities/src/main/java/org/apache/taverna/cwl/utilities/CWLUtil.java
@@ -19,10 +19,13 @@ package org.apache.taverna.cwl.utilities;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
@@ -105,6 +108,9 @@ public class CWLUtil {
 
                Map<String, Integer> result = new HashMap<>();
 
+               if (inputs == null)
+                       return result;
+
                if (inputs.getClass() == ArrayNode.class) {
                        Iterator<JsonNode> iterator = inputs.iterator();
 
@@ -118,17 +124,31 @@ public class CWLUtil {
                                        typeConfigurations = input.get(TYPE);
                                        // if type :single argument
                                        if (typeConfigurations.getClass() == 
TextNode.class) {
-                                               
if(isValidArrayType(typeConfigurations.asText()))
+                                               // inputs:
+                                               //      -id: input_1
+                                               //       type: int[]  
+                                               if 
(isValidArrayType(typeConfigurations.asText()))
                                                        
result.put(currentInputId, DEPTH_1);
+                                               // inputs:
+                                               //      -id: input_1
+                                               //       type: int  or int?
                                                else
-                                               result.put(currentInputId, 
DEPTH_0);
+                                                       
result.put(currentInputId, DEPTH_0);
                                                // type : defined as another 
map which contains type:
                                        } else if 
(typeConfigurations.getClass() == ObjectNode.class) {
+                                               // inputs:
+                                               //      -id: input_1
+                                               //       type:
+                                               //              type: array or 
int[]
                                                String inputType = 
typeConfigurations.get(TYPE).asText();
-                                               if (inputType.equals(ARRAY)) {
+                                               if 
(inputType.equals(ARRAY)||isValidArrayType(inputType)) {
                                                        
result.put(currentInputId, DEPTH_1);
 
                                                }
+                                               // inputs:
+                                               //      -id: input_1
+                                               //       type:
+                                               //              type: 
["null",int] 
                                        } else if 
(typeConfigurations.getClass() == ArrayNode.class) {
                                                if 
(isValidDataType(typeConfigurations)) {
                                                        
result.put(currentInputId, DEPTH_0);
@@ -143,9 +163,44 @@ public class CWLUtil {
 
                        }
                } else if (inputs.getClass() == ObjectNode.class) {
-                       for (JsonNode parameter : inputs) {
-                               if (parameter.asText().startsWith("$"))
-                                       System.out.println("Exception");
+                        
+                       Iterator<Entry<String, JsonNode>> iterator = 
inputs.fields();
+
+                       while (iterator.hasNext()) {
+                               Entry<String, JsonNode> entry = iterator.next();
+                               String currentInputId = entry.getKey();
+                               JsonNode typeConfigurations = entry.getValue();
+
+                               
+                               if (typeConfigurations.getClass() == 
TextNode.class) {
+                                       if 
(typeConfigurations.asText().startsWith("$")){
+                                                
System.out.println("Exception");
+                                                }
+                                       // inputs:
+                                       //      input_1: int[]
+                                       else if 
(isValidArrayType(typeConfigurations.asText()))
+                                               result.put(currentInputId, 
DEPTH_1);
+                                       // inputs:
+                                       //      input_1: int
+                                       else
+                                               result.put(currentInputId, 
DEPTH_0);
+
+                               } else if (typeConfigurations.getClass() == 
ObjectNode.class) {
+                                               
+                                       if (typeConfigurations.has(TYPE)) {
+                                               String inputType = 
typeConfigurations.get(TYPE).asText();
+                                               // inputs:
+                                               //      input_1: 
+                                               //       type: array or int[]   
+                                               if (inputType.equals(ARRAY) || 
isValidArrayType(inputType))
+                                                       
result.put(currentInputId, DEPTH_1);
+                                               // inputs:
+                                               //      input_1: 
+                                               //       type: int or int?
+                                               else
+                                                       
result.put(currentInputId, DEPTH_0);
+                                       }
+                               }
                        }
 
                }
@@ -171,23 +226,32 @@ public class CWLUtil {
                                PortDetail detail = new PortDetail();
                                String currentInputId = input.get(ID).asText();
 
-                               extractDescription(input, detail);
-
-                               extractFormat(input, detail);
-
-                               extractLabel(input, detail);
-                               result.put(currentInputId, detail);
+                               getParamDetails(result, input, detail, 
currentInputId);
 
                        }
                } else if (inputs.getClass() == ObjectNode.class) {
-                       for (JsonNode parameter : inputs) {
-                               if (parameter.asText().startsWith("$"))
-                                       System.out.println("Exception");
+                       ObjectMapper mapper = new ObjectMapper();
+                       JsonNode inputs_json=mapper.valueToTree(inputs);
+                       Iterator<Entry<String, JsonNode>> iterator = 
inputs_json.fields();
+                       while(iterator.hasNext()){
+                               PortDetail detail = new PortDetail();
+                               Entry<String, JsonNode> s=iterator.next();
+                               getParamDetails(result, s.getValue(), detail, 
s.getKey());
                        }
                }
                return result;
        }
 
+       private void getParamDetails(Map<String, PortDetail> result, JsonNode 
input, PortDetail detail,
+                       String currentInputId) {
+               extractDescription(input, detail);
+
+               extractFormat(input, detail);
+
+               extractLabel(input, detail);
+               result.put(currentInputId, detail);
+       }
+
        /**
         * This method is used for extracting the Label of a CWL input or Output
         * 
@@ -291,7 +355,8 @@ public class CWLUtil {
         * @return
         */
        public boolean isValidDataType(JsonNode typeConfigurations) {
-               if(typeConfigurations==null) return false;
+               if (typeConfigurations == null)
+                       return false;
                for (JsonNode type : typeConfigurations) {
                        if (!(type.asText().equals(FLOAT) || 
type.asText().equals(NULL) || type.asText().equals(BOOLEAN)
                                        || type.asText().equals(INT) || 
type.asText().equals(STRING) || type.asText().equals(DOUBLE)
@@ -300,23 +365,29 @@ public class CWLUtil {
                }
                return true;
        }
-       
+
        /**
         * 
         * This method is for figure out whether the parameter is an array or 
not.
-        * As from CWL document v1.0, array can be defined as "TYPE[]". For 
Example : int[]
-        * This method will look for "[]" sequence of characters in the end of 
the type and is provided type is a valid CWL TYPE or not    
-        * @param type type of the CWL parameter
+        * As from CWL document v1.0, array can be defined as "TYPE[]". For 
Example
+        * : int[] This method will look for "[]" sequence of characters in the 
end
+        * of the type and is provided type is a valid CWL TYPE or not
+        * 
+        * @param type
+        *            type of the CWL parameter
         * @return
         */
-       public boolean isValidArrayType(String type){
-               if(type==null) return false;
-               Pattern pattern= Pattern.compile(ARRAY_SIGNATURE_BRACKETS);
+       public boolean isValidArrayType(String type) {
+               if (type == null)
+                       return false;
+               Pattern pattern = Pattern.compile(ARRAY_SIGNATURE_BRACKETS);
                Matcher matcher = pattern.matcher(type);
                ObjectMapper mapper = new ObjectMapper();
-               ArrayNode node =mapper.createArrayNode();
+               ArrayNode node = mapper.createArrayNode();
                node.add(type.split(ARRAY_SPLIT_BRACKETS)[0]);
-               if(matcher.find() && isValidDataType(node))return true;
-               else return false;
+               if (matcher.find() && isValidDataType(node))
+                       return true;
+               else
+                       return false;
        }
 }

Reply via email to