public Map process()

in taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/YAMLHelper.java [230:338]


    public Map<String, Integer> process(JsonNode inputs) {

        Map<String, Integer> result = new HashMap<>();

        if (inputs == null)
            return result;

        if (inputs.getClass() == ArrayNode.class) {
            Iterator<JsonNode> iterator = inputs.iterator();

            while (iterator.hasNext()) {
                JsonNode input = iterator.next();
                String currentInputId = input.get(ID).asText();

                JsonNode typeConfigurations;
                try {

                    typeConfigurations = input.get(TYPE);
                    // if type :single argument
                    if (typeConfigurations.getClass() == TextNode.class) {
                        // 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);
                        // 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) || 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);
                        }

                    }

                } catch (ClassCastException e) {

                    System.out.println("Class cast exception !!!");
                }

            }
        } else if (inputs.getClass() == ObjectNode.class) {

            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 or int?
                    else
                        result.put(currentInputId, DEPTH_0);

                } else if (typeConfigurations.getClass() == ObjectNode.class) {

                    if (typeConfigurations.has(TYPE)) {
                        JsonNode inputType = typeConfigurations.get(TYPE);
                        // inputs:
                        /// input_1:
                        //// type: [int,"null"]
                        if (inputType.getClass() == ArrayNode.class) {
                            if (isValidDataType(inputType))
                                result.put(currentInputId, DEPTH_0);
                        } else {
                            // inputs:
                            /// input_1:
                            //// type: array or int[]
                            if (inputType.asText().equals(ARRAY) || isValidArrayType(inputType.asText()))
                                result.put(currentInputId, DEPTH_1);
                                // inputs:
                                /// input_1:
                                //// type: int or int?
                            else
                                result.put(currentInputId, DEPTH_0);
                        }
                    }
                }
            }

        }
        return result;
    }