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());
}
}
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;
}
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;
}
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;
}
Aggregations