Search in sources :

Example 1 with InPort

use of org.apache.airavata.workflow.core.dag.port.InPort in project airavata by apache.

the class JsonWorkflowParser method buildWorkflowGraph.

private void buildWorkflowGraph() throws Exception {
    // TODO construct runtime model
    Queue<WorkflowNode> queue = new LinkedList<>();
    queue.addAll(inputs);
    Map<String, List<Link>> linkMap = getEdgesMap(links);
    Map<String, InPort> nodeInportMap = getNodeInPortsMap(getApplicationNodes());
    nodeInportMap.putAll(getNodeInPortMap(getOutputNodes()));
    Set<String> processedNodes = new HashSet<>();
    while (!queue.isEmpty()) {
        WorkflowNode node = queue.poll();
        if (processedNodes.contains(node.getId())) {
            continue;
        }
        if (node instanceof InputNode) {
            InputNode input = ((InputNode) node);
            OutPort outPort = ((OutPort) node);
            Map<String, Edge> edgeMap = addEdges(outPort, linkMap.get(outPort.getNodeId() + "," + outPort.getId()));
            for (Map.Entry<String, Edge> entry : edgeMap.entrySet()) {
                InPort inPort = nodeInportMap.get(entry.getKey());
                if (inPort != null) {
                    // inPort.addEdge(entry.getValue());
                    entry.getValue().setToPort(inPort);
                    queue.add(inPort.getNode());
                }
            }
        } else if (node instanceof ApplicationNode) {
            ApplicationNode appNode = ((ApplicationNode) node);
            for (OutPort outPort : appNode.getOutputPorts()) {
                outPort.setNode(appNode);
                Map<String, Edge> edgeMap = addEdges(outPort, linkMap.get(outPort.getNodeId() + "," + outPort.getId()));
                for (Map.Entry<String, Edge> entry : edgeMap.entrySet()) {
                    InPort inPort = nodeInportMap.get(entry.getKey());
                    if (inPort != null) {
                        // inPort.addEdge(entry.getValue());
                        entry.getValue().setToPort(inPort);
                        queue.add(inPort.getNode());
                    }
                }
            }
        } else if (node instanceof OutputNode) {
            OutputNode outputNode = ((OutputNode) node);
            InPort inPort = ((InPort) node);
            outputNode.setInputObject(inPort.getInputObject());
        }
        // marke node as precessed node, we don't need to process it again.
        processedNodes.add(node.getId());
    }
}
Also used : InputNode(org.apache.airavata.workflow.core.dag.nodes.InputNode) OutputNode(org.apache.airavata.workflow.core.dag.nodes.OutputNode) InPort(org.apache.airavata.workflow.core.dag.port.InPort) ApplicationNode(org.apache.airavata.workflow.core.dag.nodes.ApplicationNode) WorkflowNode(org.apache.airavata.workflow.core.dag.nodes.WorkflowNode) LinkedList(java.util.LinkedList) OutPort(org.apache.airavata.workflow.core.dag.port.OutPort) ArrayList(java.util.ArrayList) LinkedList(java.util.LinkedList) List(java.util.List) DirectedEdge(org.apache.airavata.workflow.core.dag.edge.DirectedEdge) Edge(org.apache.airavata.workflow.core.dag.edge.Edge) HashMap(java.util.HashMap) Map(java.util.Map) HashSet(java.util.HashSet)

Example 2 with InPort

use of org.apache.airavata.workflow.core.dag.port.InPort in project airavata by apache.

the class JsonWorkflowParser method readApplicationInputs.

private List<InPort> readApplicationInputs(JsonReader jsonReader) throws IOException, ParserException {
    List<InPort> inPorts = new ArrayList<>();
    JsonToken peek = jsonReader.peek();
    PortModel portModel;
    InPort inPort;
    String name;
    if (peek == JsonToken.NULL) {
        jsonReader.nextNull();
    } else if (peek == JsonToken.BEGIN_ARRAY) {
        jsonReader.beginArray();
        while (jsonReader.hasNext()) {
            portModel = new PortModel();
            inPort = new InputPortIml(portModel);
            jsonReader.beginObject();
            while (jsonReader.hasNext()) {
                name = jsonReader.nextName();
                if (name.equals(NAME)) {
                    portModel.setName(jsonReader.nextString());
                } else if (name.equals(ID)) {
                    portModel.setPortId(jsonReader.nextString());
                } else if (name.equals(DATATYPE)) {
                    jsonReader.skipValue();
                } else if (name.equals(DEFAULT_VALUE)) {
                    inPort.setDefaultValue(jsonReader.nextString());
                } else if (name.equals(DESCRIPTION)) {
                    portModel.setDescription(jsonReader.nextString());
                } else {
                    jsonReader.skipValue();
                }
            }
            jsonReader.endObject();
            inPorts.add(inPort);
        }
        jsonReader.endArray();
    } else {
        throw new ParserException("Error! reading application inputs, expected " + getTokenString(JsonToken.NULL) + " or " + getTokenString(JsonToken.BEGIN_ARRAY) + " but found " + getTokenString(peek));
    }
    return inPorts;
}
Also used : InPort(org.apache.airavata.workflow.core.dag.port.InPort) PortModel(org.apache.airavata.model.PortModel) ArrayList(java.util.ArrayList) JsonToken(com.google.gson.stream.JsonToken) InputPortIml(org.apache.airavata.workflow.core.dag.port.InputPortIml)

Example 3 with InPort

use of org.apache.airavata.workflow.core.dag.port.InPort in project airavata by apache.

the class JsonWorkflowParser method getNodeInPortMap.

private Map<String, InPort> getNodeInPortMap(List<OutputNode> outputNodes) {
    Map<String, InPort> nodeInPortsMap = new HashMap<>();
    if (outputNodes != null) {
        for (OutputNode outputNode : outputNodes) {
            InPort inPort = outputNode.getInPort();
            inPort.setNode(outputNode);
            nodeInPortsMap.put(outputNode.getId() + "," + inPort.getId(), inPort);
        }
    }
    return nodeInPortsMap;
}
Also used : OutputNode(org.apache.airavata.workflow.core.dag.nodes.OutputNode) InPort(org.apache.airavata.workflow.core.dag.port.InPort) HashMap(java.util.HashMap)

Example 4 with InPort

use of org.apache.airavata.workflow.core.dag.port.InPort in project airavata by apache.

the class JsonWorkflowParser method getNodeInPortsMap.

private Map<String, InPort> getNodeInPortsMap(List<ApplicationNode> applicationNodes) {
    Map<String, InPort> nodeInPortsMap = new HashMap<>();
    if (applicationNodes != null) {
        for (ApplicationNode applicationNode : applicationNodes) {
            for (InPort inPort : applicationNode.getInputPorts()) {
                inPort.setNode(applicationNode);
                nodeInPortsMap.put(applicationNode.getId() + "," + inPort.getId(), inPort);
            }
        }
    }
    return nodeInPortsMap;
}
Also used : InPort(org.apache.airavata.workflow.core.dag.port.InPort) HashMap(java.util.HashMap) ApplicationNode(org.apache.airavata.workflow.core.dag.nodes.ApplicationNode)

Aggregations

InPort (org.apache.airavata.workflow.core.dag.port.InPort)4 HashMap (java.util.HashMap)3 ArrayList (java.util.ArrayList)2 ApplicationNode (org.apache.airavata.workflow.core.dag.nodes.ApplicationNode)2 OutputNode (org.apache.airavata.workflow.core.dag.nodes.OutputNode)2 JsonToken (com.google.gson.stream.JsonToken)1 HashSet (java.util.HashSet)1 LinkedList (java.util.LinkedList)1 List (java.util.List)1 Map (java.util.Map)1 PortModel (org.apache.airavata.model.PortModel)1 DirectedEdge (org.apache.airavata.workflow.core.dag.edge.DirectedEdge)1 Edge (org.apache.airavata.workflow.core.dag.edge.Edge)1 InputNode (org.apache.airavata.workflow.core.dag.nodes.InputNode)1 WorkflowNode (org.apache.airavata.workflow.core.dag.nodes.WorkflowNode)1 InputPortIml (org.apache.airavata.workflow.core.dag.port.InputPortIml)1 OutPort (org.apache.airavata.workflow.core.dag.port.OutPort)1