You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sh...@apache.org on 2016/02/12 22:51:44 UTC
[1/2] airavata git commit: Build runtime model of workflow graph
after parse the workflow description
Repository: airavata
Updated Branches:
refs/heads/develop d3cf5bc61 -> 24587f9f8
Build runtime model of workflow graph after parse the workflow description
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/38c2c36e
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/38c2c36e
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/38c2c36e
Branch: refs/heads/develop
Commit: 38c2c36e717b7d60e9dbafd6f6bc235f8f52bf9d
Parents: 11ea501
Author: Shameera Rathnayaka <sh...@gmail.com>
Authored: Fri Feb 12 16:51:16 2016 -0500
Committer: Shameera Rathnayaka <sh...@gmail.com>
Committed: Fri Feb 12 16:51:16 2016 -0500
----------------------------------------------------------------------
.../workflow/core/dag/nodes/InputNode.java | 8 +-
.../workflow/core/dag/nodes/InputNodeImpl.java | 110 +++++++++++-
.../workflow/core/dag/nodes/OutputNode.java | 2 +-
.../workflow/core/dag/nodes/OutputNodeImpl.java | 89 +++++++++-
.../workflow/core/dag/port/InputPortIml.java | 17 ++
.../workflow/core/dag/port/OutPortImpl.java | 17 ++
.../airavata/workflow/core/dag/port/Port.java | 7 +
.../core/parser/JsonWorkflowParser.java | 171 +++++++++++++++++--
.../src/test/resources/TestWorkflow.json | 28 +--
9 files changed, 410 insertions(+), 39 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/airavata/blob/38c2c36e/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/InputNode.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/InputNode.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/InputNode.java
index 6dec125..9d26419 100644
--- a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/InputNode.java
+++ b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/InputNode.java
@@ -21,10 +21,12 @@
package org.apache.airavata.workflow.core.dag.nodes;
+import org.apache.airavata.model.application.io.DataType;
import org.apache.airavata.model.application.io.InputDataObjectType;
+import org.apache.airavata.workflow.core.dag.port.InPort;
import org.apache.airavata.workflow.core.dag.port.OutPort;
-public interface InputNode extends WorkflowNode {
+public interface InputNode extends WorkflowNode , OutPort{
public InputDataObjectType getInputObject();
@@ -34,4 +36,8 @@ public interface InputNode extends WorkflowNode {
public void setOutPort(OutPort outPort);
+ public void setValue(String value);
+
+ public String getValue();
+
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/38c2c36e/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/InputNodeImpl.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/InputNodeImpl.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/InputNodeImpl.java
index 59984d7..e8e46e5 100644
--- a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/InputNodeImpl.java
+++ b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/InputNodeImpl.java
@@ -22,17 +22,29 @@ package org.apache.airavata.workflow.core.dag.nodes;
import org.apache.airavata.model.ComponentState;
import org.apache.airavata.model.ComponentStatus;
import org.apache.airavata.model.NodeModel;
+import org.apache.airavata.model.PortModel;
+import org.apache.airavata.model.application.io.DataType;
import org.apache.airavata.model.application.io.InputDataObjectType;
+import org.apache.airavata.model.application.io.OutputDataObjectType;
+import org.apache.airavata.workflow.core.dag.edge.Edge;
import org.apache.airavata.workflow.core.dag.port.OutPort;
+import java.util.ArrayList;
+import java.util.List;
+
public class InputNodeImpl implements InputNode {
private NodeModel nodeModel;
- private OutPort outPort;
private InputDataObjectType inputDataObjectType;
+ private PortModel portModel;
+ private List<Edge> edges = new ArrayList<>();
+ private String value;
+ private DataType dataType;
+
public InputNodeImpl(NodeModel nodeModel) {
this.nodeModel = nodeModel;
+ setPortModel(convert(nodeModel));
}
@Override
@@ -76,14 +88,42 @@ public class InputNodeImpl implements InputNode {
}
@Override
+ public void setPortModel(PortModel portModel) {
+ this.portModel = portModel;
+ }
+
+ @Override
+ public PortModel getPortModel() {
+ return portModel;
+ }
+
+ @Override
public boolean isReady() {
return (inputDataObjectType.getValue() != null && !inputDataObjectType.getValue().equals(""))
|| !inputDataObjectType.isIsRequired();
}
@Override
+ public WorkflowNode getNode() {
+ return this;
+ }
+
+ @Override
+ public void setNode(WorkflowNode workflowNode) {
+ // InputNode itself a workflowNode
+ }
+
+ @Override
public InputDataObjectType getInputObject() {
- return this.inputDataObjectType;
+ if (inputDataObjectType == null) {
+ inputDataObjectType = new InputDataObjectType(getName());
+ inputDataObjectType.setValue(getValue());
+ inputDataObjectType.setType(getDataType());
+ inputDataObjectType.setIsRequired(true);
+ inputDataObjectType.setDataStaged(true);
+ inputDataObjectType.setInputOrder(0);
+ }
+ return inputDataObjectType;
}
@Override
@@ -93,13 +133,75 @@ public class InputNodeImpl implements InputNode {
@Override
public OutPort getOutPort() {
- return this.outPort;
+ return this;
}
@Override
public void setOutPort(OutPort outPort) {
- this.outPort = outPort;
+ // InputNode is a outPort
}
+ @Override
+ public void setValue(String value) {
+ this.value = value;
+ }
+ @Override
+ public DataType getDataType() {
+ return dataType;
+ }
+
+ @Override
+ public void setDataType(DataType dataType) {
+ this.dataType = dataType;
+ }
+
+ @Override
+ public String getNodeId() {
+ return getNode().getId();
+ }
+
+ @Override
+ public String getValue() {
+ return value;
+ }
+
+ @Override
+ public void setOutputObject(OutputDataObjectType outputObject) {
+
+ }
+
+
+ @Override
+ public OutputDataObjectType getOutputObject() {
+ return convert(getInputObject());
+ }
+
+ @Override
+ public List<Edge> getEdges() {
+ return edges;
+ }
+
+ @Override
+ public void addEdge(Edge edge) {
+ edges.add(edge);
+ }
+
+ private PortModel convert(NodeModel nodeModel) {
+ PortModel portModel = new PortModel(nodeModel.getNodeId());
+ portModel.setName(nodeModel.getName());
+ portModel.setDescription(nodeModel.getDescription());
+ return portModel;
+ }
+
+ private OutputDataObjectType convert(InputDataObjectType inputObject) {
+ OutputDataObjectType output = new OutputDataObjectType(inputObject.getName());
+ output.setType(inputObject.getType());
+ output.setValue(inputObject.getValue());
+ output.setIsRequired(inputObject.isIsRequired());
+ output.setApplicationArgument(inputObject.getApplicationArgument());
+ output.setOutputStreaming(false);
+// output.setDataMovement(true);
+ return output;
+ }
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/38c2c36e/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/OutputNode.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/OutputNode.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/OutputNode.java
index 7378c96..6cbf231 100644
--- a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/OutputNode.java
+++ b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/OutputNode.java
@@ -24,7 +24,7 @@ package org.apache.airavata.workflow.core.dag.nodes;
import org.apache.airavata.model.application.io.OutputDataObjectType;
import org.apache.airavata.workflow.core.dag.port.InPort;
-public interface OutputNode extends WorkflowNode {
+public interface OutputNode extends WorkflowNode, InPort {
public OutputDataObjectType getOutputObject();
http://git-wip-us.apache.org/repos/asf/airavata/blob/38c2c36e/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/OutputNodeImpl.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/OutputNodeImpl.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/OutputNodeImpl.java
index 5eada1c..d4c8780 100644
--- a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/OutputNodeImpl.java
+++ b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/OutputNodeImpl.java
@@ -24,14 +24,21 @@ package org.apache.airavata.workflow.core.dag.nodes;
import org.apache.airavata.model.ComponentState;
import org.apache.airavata.model.ComponentStatus;
import org.apache.airavata.model.NodeModel;
+import org.apache.airavata.model.PortModel;
+import org.apache.airavata.model.application.io.DataType;
+import org.apache.airavata.model.application.io.InputDataObjectType;
import org.apache.airavata.model.application.io.OutputDataObjectType;
+import org.apache.airavata.workflow.core.dag.edge.Edge;
import org.apache.airavata.workflow.core.dag.port.InPort;
public class OutputNodeImpl implements OutputNode {
private NodeModel nodeModel;
private OutputDataObjectType outputDataObjectType;
- private InPort inPort;
+ private InputDataObjectType inputDataObjectType;
+ private PortModel portModel;
+ private String value;
+ private DataType dataType;
public OutputNodeImpl(NodeModel nodeModel) {
this.nodeModel = nodeModel;
@@ -53,6 +60,21 @@ public class OutputNodeImpl implements OutputNode {
}
@Override
+ public DataType getDataType() {
+ return dataType;
+ }
+
+ @Override
+ public void setDataType(DataType dataType) {
+ this.dataType = dataType;
+ }
+
+ @Override
+ public String getNodeId() {
+ return getNode().getId();
+ }
+
+ @Override
public String getName() {
return getNodeModel().getName();
}
@@ -79,9 +101,29 @@ public class OutputNodeImpl implements OutputNode {
@Override
+ public void setPortModel(PortModel portModel) {
+ this.portModel = portModel;
+ }
+
+ @Override
+ public PortModel getPortModel() {
+ return portModel;
+ }
+
+ @Override
public boolean isReady() {
- return !(inPort.getInputObject() == null || inPort.getInputObject().getValue() == null
- || inPort.getInputObject().getValue().equals(""));
+ return !(getInputObject() == null || getInputObject().getValue() == null
+ || getInputObject().getValue().equals(""));
+ }
+
+ @Override
+ public WorkflowNode getNode() {
+ return this;
+ }
+
+ @Override
+ public void setNode(WorkflowNode workflowNode) {
+ // OutputNode is a workflow Node.
}
@Override
@@ -96,13 +138,50 @@ public class OutputNodeImpl implements OutputNode {
@Override
public InPort getInPort() {
- return this.inPort;
+ return this;
}
@Override
public void setInPort(InPort inPort) {
- this.inPort = inPort;
+ // outputNode is an inPort.
}
+ @Override
+ public void setInputObject(InputDataObjectType inputObject) {
+ this.inputDataObjectType = inputObject;
+ setOutputObject(convert(inputObject));
+ }
+
+ private OutputDataObjectType convert(InputDataObjectType inputObject) {
+ OutputDataObjectType output = new OutputDataObjectType(getName());
+ output.setValue(inputObject.getValue());
+ output.setType(inputObject.getType());
+ return output;
+ }
+
+ @Override
+ public InputDataObjectType getInputObject() {
+ return inputDataObjectType;
+ }
+
+ @Override
+ public Edge getEdge() {
+ return null;
+ }
+
+ @Override
+ public void addEdge(Edge edge) {
+
+ }
+
+ @Override
+ public String getDefaultValue() {
+ return value;
+ }
+
+ @Override
+ public void setDefaultValue(String defaultValue) {
+ value = defaultValue;
+ }
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/38c2c36e/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/port/InputPortIml.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/port/InputPortIml.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/port/InputPortIml.java
index 3f5d036..8373c4b 100644
--- a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/port/InputPortIml.java
+++ b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/port/InputPortIml.java
@@ -20,6 +20,7 @@
package org.apache.airavata.workflow.core.dag.port;
import org.apache.airavata.model.PortModel;
+import org.apache.airavata.model.application.io.DataType;
import org.apache.airavata.model.application.io.InputDataObjectType;
import org.apache.airavata.workflow.core.dag.edge.Edge;
import org.apache.airavata.workflow.core.dag.nodes.WorkflowNode;
@@ -31,6 +32,7 @@ public class InputPortIml implements InPort {
private Edge edge;
private WorkflowNode node;
private PortModel portModel;
+ private DataType dataType;
public InputPortIml(PortModel portModel) {
this.portModel = portModel;
@@ -98,4 +100,19 @@ public class InputPortIml implements InPort {
return getPortModel().getPortId();
}
+ @Override
+ public DataType getDataType() {
+ return dataType;
+ }
+
+ @Override
+ public void setDataType(DataType dataType) {
+ this.dataType = dataType;
+ }
+
+ @Override
+ public String getNodeId() {
+ return getNode().getId();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/38c2c36e/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/port/OutPortImpl.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/port/OutPortImpl.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/port/OutPortImpl.java
index c261279..e8c8e74 100644
--- a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/port/OutPortImpl.java
+++ b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/port/OutPortImpl.java
@@ -22,6 +22,7 @@
package org.apache.airavata.workflow.core.dag.port;
import org.apache.airavata.model.PortModel;
+import org.apache.airavata.model.application.io.DataType;
import org.apache.airavata.model.application.io.OutputDataObjectType;
import org.apache.airavata.workflow.core.dag.edge.Edge;
import org.apache.airavata.workflow.core.dag.nodes.WorkflowNode;
@@ -36,6 +37,7 @@ public class OutPortImpl implements OutPort {
private boolean isSatisfy = false;
private WorkflowNode node;
private PortModel portModel;
+ private DataType dataType;
public OutPortImpl(PortModel portModel) {
this.portModel = portModel;
@@ -91,4 +93,19 @@ public class OutPortImpl implements OutPort {
public String getId() {
return getPortModel().getPortId();
}
+
+ @Override
+ public DataType getDataType() {
+ return dataType;
+ }
+
+ @Override
+ public void setDataType(DataType dataType) {
+ this.dataType = dataType;
+ }
+
+ @Override
+ public String getNodeId() {
+ return getNode().getId();
+ }
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/38c2c36e/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/port/Port.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/port/Port.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/port/Port.java
index 9fda882..0b37911 100644
--- a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/port/Port.java
+++ b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/port/Port.java
@@ -22,6 +22,7 @@
package org.apache.airavata.workflow.core.dag.port;
import org.apache.airavata.model.PortModel;
+import org.apache.airavata.model.application.io.DataType;
import org.apache.airavata.workflow.core.dag.nodes.WorkflowNode;
public interface Port {
@@ -37,5 +38,11 @@ public interface Port {
public void setNode(WorkflowNode workflowNode);
public String getId();
+
+ public DataType getDataType();
+
+ public void setDataType(DataType dataType);
+
+ public String getNodeId();
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/38c2c36e/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/parser/JsonWorkflowParser.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/parser/JsonWorkflowParser.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/parser/JsonWorkflowParser.java
index 7484f7e..37e82c0 100644
--- a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/parser/JsonWorkflowParser.java
+++ b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/parser/JsonWorkflowParser.java
@@ -27,6 +27,7 @@ import com.google.gson.stream.JsonToken;
import org.apache.airavata.model.EdgeModel;
import org.apache.airavata.model.NodeModel;
import org.apache.airavata.model.PortModel;
+import org.apache.airavata.model.application.io.DataType;
import org.apache.airavata.workflow.core.WorkflowInfo;
import org.apache.airavata.workflow.core.dag.edge.DirectedEdge;
import org.apache.airavata.workflow.core.dag.edge.Edge;
@@ -49,8 +50,12 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Queue;
+import java.util.Set;
public class JsonWorkflowParser implements WorkflowParser {
@@ -110,15 +115,132 @@ public class JsonWorkflowParser implements WorkflowParser {
}
jsonReader.endObject();
- buildWorkflowDAG();
+ buildWorkflowGraph();
return workflowInfo;
}
- private void buildWorkflowDAG() {
+ 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());
+ }
+
+ }
+
+ 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;
+ }
+
+ 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;
+ }
+
+ /**
+ *
+ * @param outPort -
+ * @param links -
+ * @return key: nodeId,inportId value : link
+ */
+ private Map<String, Edge> addEdges(OutPort outPort, List<Link> links) {
+ Map<String, Edge> inPortMap = new HashMap<>();
+ if (links != null) {
+ for (Link link : links) {
+ EdgeModel edgeModel = new EdgeModel(link.getId());
+ Edge edge = new DirectedEdge(edgeModel);
+ edge.setFromPort(outPort);
+ outPort.addEdge(edge);
+ inPortMap.put(link.getTo().getNodeId() + "," + link.getTo().getPortId(), edge);
+ }
+ }
+ return inPortMap;
+ }
+
+ private Map<String, List<Link>> getEdgesMap(List<Link> links) {
+ Map<String, List<Link>> map = new HashMap<>();
+ List<Link> linkList;
+ for (Link link : links) {
+ linkList = map.get(link.from.getNodeId() + "," + link.from.getPortId());
+ if (linkList == null) {
+ linkList = new ArrayList<>();
+ }
+
+ linkList.add(link);
+ map.put(link.from.getNodeId() + "," + link.from.getPortId(), linkList);
+ }
+
+ return map;
}
+
private void readWorkflowInfo(JsonReader jsonReader) throws IOException, ParserException {
jsonReader.beginObject();
String name;
@@ -178,13 +300,15 @@ public class JsonWorkflowParser implements WorkflowParser {
} else if (name.equals(ID)) {
nodeModel.setNodeId(jsonReader.nextString());
} else if (name.equals(DATATYPE)) {
- jsonReader.skipValue();
+ inputNode.setDataType(DataType.valueOf(jsonReader.nextString()));
} else if (name.equals(DESCRIPTION)) {
nodeModel.setDescription(jsonReader.nextString());
} else if (name.equals(POSITION)) {
readPosition(jsonReader);
} else if (name.equals(NODE_ID)) {
nodeModel.setNodeId(jsonReader.nextString());
+ } else if (name.equals(DEFAULT_VALUE)) {
+ inputNode.setValue(jsonReader.nextString());
} else {
jsonReader.skipValue();
}
@@ -263,7 +387,7 @@ public class JsonWorkflowParser implements WorkflowParser {
private Link readLink(JsonReader jsonReader) throws IOException {
jsonReader.beginObject();
String name = null;
- Link link = new Link(null, null);
+ Link link = new Link();
while (jsonReader.hasNext()) {
name = jsonReader.nextName();
if (name.equals(DESCRIPTION)) {
@@ -272,6 +396,8 @@ public class JsonWorkflowParser implements WorkflowParser {
link.setFrom(readLinkHelper(jsonReader));
} else if (name.equals(TO)) {
link.setTo(readLinkHelper(jsonReader));
+ } else if (name.equals(ID)) {
+ link.setId(jsonReader.nextString());
} else {
jsonReader.skipValue();
}
@@ -288,8 +414,8 @@ public class JsonWorkflowParser implements WorkflowParser {
name = jsonReader.nextName();
if (name.equals(NODE_ID)) {
helper.setNodeId(jsonReader.nextString());
- } else if (name.equals(OUTPUT_ID)) {
- helper.setOutputId(jsonReader.nextString());
+ } else if (name.equals(OUTPUT_ID) || name.equals(INPUT_ID)) {
+ helper.setPortId(jsonReader.nextString());
} else {
jsonReader.skipValue();
}
@@ -549,17 +675,14 @@ public class JsonWorkflowParser implements WorkflowParser {
public static final String FROM = "from";
public static final String TO = "to";
public static final String OUTPUT_ID = "outputId";
+ public static final String INPUT_ID = "inputId";
class Link {
private LinkHelper from;
private LinkHelper to;
private String description;
-
- public Link(LinkHelper from, LinkHelper to) {
- this.from = from;
- this.to = to;
- }
+ private String id;
public String getDescription() {
return description;
@@ -576,11 +699,27 @@ public class JsonWorkflowParser implements WorkflowParser {
public void setTo(LinkHelper to) {
this.to = to;
}
+
+ public LinkHelper getFrom() {
+ return from;
+ }
+
+ public LinkHelper getTo() {
+ return to;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
}
class LinkHelper {
private String nodeId;
- private String outputId;
+ private String portId;
public String getNodeId() {
return nodeId;
@@ -590,12 +729,12 @@ public class JsonWorkflowParser implements WorkflowParser {
this.nodeId = nodeId;
}
- public String getOutputId() {
- return outputId;
+ public String getPortId() {
+ return portId;
}
- public void setOutputId(String outputId) {
- this.outputId = outputId;
+ public void setPortId(String portId) {
+ this.portId = portId;
}
}
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/38c2c36e/modules/workflow/workflow-core/src/test/resources/TestWorkflow.json
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/test/resources/TestWorkflow.json b/modules/workflow/workflow-core/src/test/resources/TestWorkflow.json
index 0dd4b35..d9c3a0c 100644
--- a/modules/workflow/workflow-core/src/test/resources/TestWorkflow.json
+++ b/modules/workflow/workflow-core/src/test/resources/TestWorkflow.json
@@ -68,18 +68,22 @@
"nodeId" : "defaultOutputNodeId_2" }
],
"links" : [
- { "description" : "link desc",
- "from" : { "nodeId" : "" , "outputId" : "" },
- "to" : { "nodeId" : "" , "outputId" : "" }},
- { "description" : "link desc",
- "from" : { "nodeId" : "" , "outputId" : "" },
- "to" : { "nodeId" : "" , "outputId" : "" }},
- { "description" : "link desc",
- "from" : { "nodeId" : "" , "outputId" : "" },
- "to" : { "nodeId" : "" , "outputId" : "" }},
- { "description" : "link desc",
- "from" : { "nodeId" : "" , "outputId" : "" },
- "to" : { "nodeId" : "" , "outputId" : "" }}
+ { "id" : "link_1",
+ "description" : "link desc",
+ "from" : { "nodeId" : "" , "outputId" : "" },
+ "to" : { "nodeId" : "" , "inputId" : "" }},
+ { "id" : "link_2",
+ "description" : "link desc",
+ "from" : { "nodeId" : "" , "outputId" : "" },
+ "to" : { "nodeId" : "" , "inputId" : "" }},
+ { "id" : "link_3",
+ "description" : "link desc",
+ "from" : { "nodeId" : "" , "outputId" : "" },
+ "to" : { "nodeId" : "" , "inputId" : "" }},
+ { "id" : "link_4",
+ "description" : "link desc",
+ "from" : { "nodeId" : "" , "outputId" : "" },
+ "to" : { "nodeId" : "" , "inputId" : "" }}
]
}
}
[2/2] airavata git commit: Merge branch 'develop' of
https://git-wip-us.apache.org/repos/asf/airavata into develop
Posted by sh...@apache.org.
Merge branch 'develop' of https://git-wip-us.apache.org/repos/asf/airavata into develop
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/24587f9f
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/24587f9f
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/24587f9f
Branch: refs/heads/develop
Commit: 24587f9f88172c276f354c7fb2d92f1017d180a3
Parents: 38c2c36 d3cf5bc
Author: Shameera Rathnayaka <sh...@gmail.com>
Authored: Fri Feb 12 16:51:29 2016 -0500
Committer: Shameera Rathnayaka <sh...@gmail.com>
Committed: Fri Feb 12 16:51:29 2016 -0500
----------------------------------------------------------------------
.../server/handler/AiravataServerHandler.java | 18 +-
.../java/org/apache/airavata/api/Airavata.java | 268 ++++++++++++++-----
.../main/resources/lib/airavata/Airavata.cpp | 193 +++++++------
.../src/main/resources/lib/airavata/Airavata.h | 37 +--
.../lib/airavata/Airavata_server.skeleton.cpp | 5 +-
.../resources/lib/Airavata/API/Airavata.php | 53 +++-
.../lib/apache/airavata/api/Airavata-remote | 8 +-
.../lib/apache/airavata/api/Airavata.py | 56 ++--
.../apache/airavata/model/ComponentStatus.java | 2 +-
.../org/apache/airavata/model/EdgeModel.java | 2 +-
.../org/apache/airavata/model/NodeModel.java | 2 +-
.../org/apache/airavata/model/PortModel.java | 2 +-
.../apache/airavata/model/WorkflowModel.java | 2 +-
.../apache/airavata/model/WorkflowStatus.java | 2 +-
.../ApplicationDeploymentDescription.java | 2 +-
.../appdeployment/ApplicationModule.java | 2 +-
.../appcatalog/appdeployment/CommandObject.java | 2 +-
.../appcatalog/appdeployment/SetEnvPaths.java | 2 +-
.../ApplicationInterfaceDescription.java | 2 +-
.../appcatalog/computeresource/BatchQueue.java | 2 +-
.../computeresource/CloudJobSubmission.java | 2 +-
.../ComputeResourceDescription.java | 2 +-
.../computeresource/GlobusJobSubmission.java | 2 +-
.../computeresource/JobSubmissionInterface.java | 2 +-
.../computeresource/LOCALSubmission.java | 2 +-
.../computeresource/ResourceJobManager.java | 2 +-
.../computeresource/SSHJobSubmission.java | 2 +-
.../computeresource/UnicoreJobSubmission.java | 2 +-
.../ComputeResourcePreference.java | 2 +-
.../gatewayprofile/GatewayResourceProfile.java | 2 +-
.../gatewayprofile/StoragePreference.java | 2 +-
.../StorageResourceDescription.java | 2 +-
.../application/io/InputDataObjectType.java | 2 +-
.../application/io/OutputDataObjectType.java | 2 +-
.../airavata/model/commons/ErrorModel.java | 2 +-
.../model/commons/ValidationResults.java | 2 +-
.../airavata/model/commons/ValidatorResult.java | 2 +-
.../data/movement/DataMovementInterface.java | 2 +-
.../data/movement/GridFTPDataMovement.java | 2 +-
.../model/data/movement/LOCALDataMovement.java | 2 +-
.../model/data/movement/SCPDataMovement.java | 2 +-
.../data/movement/UnicoreDataMovement.java | 2 +-
.../data/resource/DataReplicaLocationModel.java | 2 +-
.../model/data/resource/DataResourceModel.java | 2 +-
.../model/error/AiravataClientException.java | 2 +-
.../model/error/AiravataSystemException.java | 2 +-
.../model/error/AuthenticationException.java | 2 +-
.../model/error/AuthorizationException.java | 2 +-
.../error/ExperimentNotFoundException.java | 2 +-
.../model/error/InvalidRequestException.java | 2 +-
.../model/error/LaunchValidationException.java | 2 +-
.../model/error/ProjectNotFoundException.java | 2 +-
.../airavata/model/error/TimedOutException.java | 2 +-
.../airavata/model/error/ValidationResults.java | 2 +-
.../airavata/model/error/ValidatorResult.java | 2 +-
.../model/experiment/ExperimentModel.java | 2 +-
.../model/experiment/ExperimentStatistics.java | 2 +-
.../experiment/ExperimentSummaryModel.java | 2 +-
.../experiment/UserConfigurationDataModel.java | 2 +-
.../org/apache/airavata/model/job/JobModel.java | 2 +-
.../event/ExperimentStatusChangeEvent.java | 2 +-
.../model/messaging/event/JobIdentifier.java | 2 +-
.../messaging/event/JobStatusChangeEvent.java | 2 +-
.../event/JobStatusChangeRequestEvent.java | 2 +-
.../airavata/model/messaging/event/Message.java | 2 +-
.../messaging/event/ProcessIdentifier.java | 2 +-
.../event/ProcessStatusChangeEvent.java | 2 +-
.../event/ProcessStatusChangeRequestEvent.java | 2 +-
.../messaging/event/ProcessSubmitEvent.java | 2 +-
.../messaging/event/ProcessTerminateEvent.java | 2 +-
.../model/messaging/event/TaskIdentifier.java | 2 +-
.../messaging/event/TaskOutputChangeEvent.java | 2 +-
.../messaging/event/TaskStatusChangeEvent.java | 2 +-
.../event/TaskStatusChangeRequestEvent.java | 2 +-
.../airavata/model/process/ProcessModel.java | 2 +-
.../ComputationalResourceSchedulingModel.java | 2 +-
.../airavata/model/security/AuthzToken.java | 2 +-
.../airavata/model/status/ExperimentStatus.java | 2 +-
.../apache/airavata/model/status/JobStatus.java | 2 +-
.../airavata/model/status/ProcessStatus.java | 2 +-
.../airavata/model/status/TaskStatus.java | 2 +-
.../model/task/DataStagingTaskModel.java | 2 +-
.../model/task/EnvironmentSetupTaskModel.java | 2 +-
.../model/task/JobSubmissionTaskModel.java | 2 +-
.../airavata/model/task/MonitorTaskModel.java | 2 +-
.../apache/airavata/model/task/TaskModel.java | 2 +-
.../airavata/model/workspace/Gateway.java | 2 +-
.../apache/airavata/model/workspace/Group.java | 2 +-
.../airavata/model/workspace/Project.java | 2 +-
.../apache/airavata/model/workspace/User.java | 2 +-
.../server/src/main/resources/gfac-config.yaml | 2 +-
.../gfac/core/cluster/RemoteCluster.java | 3 +
.../airavata/gfac/impl/BESRemoteCluster.java | 6 +
.../org/apache/airavata/gfac/impl/Factory.java | 30 ++-
.../airavata/gfac/impl/HPCRemoteCluster.java | 8 +-
.../airavata/gfac/impl/LocalRemoteCluster.java | 6 +
.../app/catalog/impl/StorageResourceImpl.java | 14 +
.../resources/StorageInterfaceResource.java | 4 +-
.../airavata/registry/cpi/StorageResource.java | 2 +
.../airavata-apis/airavata_api.thrift | 5 +-
100 files changed, 577 insertions(+), 305 deletions(-)
----------------------------------------------------------------------