You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ch...@apache.org on 2016/02/08 17:49:08 UTC
[26/50] [abbrv] airavata git commit: Removed old xbaya workflow class
dependency
Removed old xbaya workflow class dependency
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/225f462b
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/225f462b
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/225f462b
Branch: refs/heads/master
Commit: 225f462badbc1bf18c8585f9f1eddd36bb0f8e09
Parents: 9859af3
Author: Shameera Rathnayaka <sh...@gmail.com>
Authored: Mon Feb 1 16:48:00 2016 -0500
Committer: Shameera Rathnayaka <sh...@gmail.com>
Committed: Mon Feb 1 16:48:00 2016 -0500
----------------------------------------------------------------------
.../main/resources/airavata-server.properties | 2 +-
modules/workflow/workflow-core/pom.xml | 5 -
.../core/SimpleWorkflowInterpreter.java | 46 +--
.../airavata/workflow/core/WorkflowBuilder.java | 15 +
.../workflow/core/WorkflowEnactmentService.java | 4 +-
.../airavata/workflow/core/WorkflowFactory.java | 34 ++-
.../workflow/core/WorkflowFactoryImpl.java | 74 -----
.../airavata/workflow/core/WorkflowParser.java | 18 +-
.../workflow/core/dag/nodes/InputNode.java | 37 +++
.../workflow/core/dag/nodes/InputNodeImpl.java | 105 +++++++
.../workflow/core/dag/nodes/OutputNode.java | 37 +++
.../workflow/core/dag/nodes/OutputNodeImpl.java | 108 +++++++
.../core/dag/nodes/WorkflowInputNode.java | 37 ---
.../core/dag/nodes/WorkflowInputNodeImpl.java | 105 -------
.../core/dag/nodes/WorkflowOutputNode.java | 37 ---
.../core/dag/nodes/WorkflowOutputNodeImpl.java | 108 -------
.../core/parser/AiravataWorkflowBuilder.java | 117 ++++++++
.../core/parser/AiravataWorkflowParser.java | 287 -------------------
.../core/parser/JsonWorkflowParser.java | 63 +++-
.../workflow/core/parser/PortContainer.java | 53 ----
.../core/parser/AiravataWorkflowParserTest.java | 119 --------
.../core/parser/JsonWorkflowParserTest.java | 130 +++++++++
22 files changed, 682 insertions(+), 859 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/modules/configuration/server/src/main/resources/airavata-server.properties
----------------------------------------------------------------------
diff --git a/modules/configuration/server/src/main/resources/airavata-server.properties b/modules/configuration/server/src/main/resources/airavata-server.properties
index 78997db..445449c 100644
--- a/modules/configuration/server/src/main/resources/airavata-server.properties
+++ b/modules/configuration/server/src/main/resources/airavata-server.properties
@@ -154,7 +154,7 @@ workflowserver=org.apache.airavata.api.server.WorkflowServer
enactment.thread.pool.size=10
#to define custom workflow parser user following property
-#workflow.parser=org.apache.airavata.workflow.core.parser.AiravataWorkflowParser
+#workflow.parser=org.apache.airavata.workflow.core.parser.AiravataWorkflowBuilder
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/modules/workflow/workflow-core/pom.xml
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/pom.xml b/modules/workflow/workflow-core/pom.xml
index 31e0301..bb1ea79 100644
--- a/modules/workflow/workflow-core/pom.xml
+++ b/modules/workflow/workflow-core/pom.xml
@@ -34,11 +34,6 @@
<!-- Airavata default parser dependency -->
<dependency>
<groupId>org.apache.airavata</groupId>
- <artifactId>airavata-workflow-model-core</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.airavata</groupId>
<artifactId>airavata-registry-cpi</artifactId>
<version>${project.version}</version>
</dependency>
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/SimpleWorkflowInterpreter.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/SimpleWorkflowInterpreter.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/SimpleWorkflowInterpreter.java
index defbad4..01ad6bb 100644
--- a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/SimpleWorkflowInterpreter.java
+++ b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/SimpleWorkflowInterpreter.java
@@ -37,9 +37,9 @@ import org.apache.airavata.registry.cpi.*;
import org.apache.airavata.workflow.core.dag.edge.Edge;
import org.apache.airavata.workflow.core.dag.nodes.ApplicationNode;
import org.apache.airavata.workflow.core.dag.nodes.NodeState;
-import org.apache.airavata.workflow.core.dag.nodes.WorkflowInputNode;
+import org.apache.airavata.workflow.core.dag.nodes.InputNode;
import org.apache.airavata.workflow.core.dag.nodes.WorkflowNode;
-import org.apache.airavata.workflow.core.dag.nodes.WorkflowOutputNode;
+import org.apache.airavata.workflow.core.dag.nodes.OutputNode;
import org.apache.airavata.workflow.core.dag.port.InPort;
import org.apache.airavata.workflow.core.dag.port.OutPort;
import org.slf4j.Logger;
@@ -59,7 +59,7 @@ import java.util.concurrent.ConcurrentHashMap;
class SimpleWorkflowInterpreter{
private static final Logger log = LoggerFactory.getLogger(SimpleWorkflowInterpreter.class);
- private List<WorkflowInputNode> workflowInputNodes;
+ private List<InputNode> inputNodes;
private ExperimentModel experiment;
@@ -72,7 +72,7 @@ class SimpleWorkflowInterpreter{
private Map<String, WorkflowContext> processingQueue = new ConcurrentHashMap<String, WorkflowContext>();
private Map<String, WorkflowContext> completeList = new HashMap<String, WorkflowContext>();
private Registry registry;
- private List<WorkflowOutputNode> completeWorkflowOutputs = new ArrayList<WorkflowOutputNode>();
+ private List<OutputNode> completeWorkflowOutputs = new ArrayList<OutputNode>();
private RabbitMQProcessLaunchPublisher publisher;
private RabbitMQStatusConsumer statusConsumer;
private String consumerId;
@@ -97,20 +97,20 @@ class SimpleWorkflowInterpreter{
* @throws Exception
*/
void launchWorkflow() throws Exception {
- WorkflowFactoryImpl wfFactory = WorkflowFactoryImpl.getInstance();
- WorkflowParser workflowParser = wfFactory.getWorkflowParser(experiment.getExperimentId(), credentialToken);
+ WorkflowBuilder workflowBuilder = WorkflowFactory.getWorkflowBuilder(experiment.getExperimentId(), credentialToken, null);
+
log.debug("Initialized workflow parser");
- setWorkflowInputNodes(workflowParser.parse());
+ setInputNodes(workflowBuilder.build());
log.debug("Parsed the workflow and got the workflow input nodes");
// process workflow input nodes
- processWorkflowInputNodes(getWorkflowInputNodes());
+ processWorkflowInputNodes(getInputNodes());
if (readyList.isEmpty()) {
StringBuilder sb = new StringBuilder();
- for (WorkflowInputNode workflowInputNode : workflowInputNodes) {
+ for (InputNode inputNode : inputNodes) {
sb.append(", ");
- sb.append(workflowInputNode.getInputObject().getName());
+ sb.append(inputNode.getInputObject().getName());
sb.append("=");
- sb.append(workflowInputNode.getInputObject().getValue());
+ sb.append(inputNode.getInputObject().getValue());
}
throw new AiravataException("No workflow application node is in ready state to run with experiment inputs" + sb.toString());
}
@@ -128,8 +128,8 @@ class SimpleWorkflowInterpreter{
throw new AiravataException("No workflow application node is in ready state to run");
}
for (WorkflowNode readyNode : readyList.values()) {
- if (readyNode instanceof WorkflowOutputNode) {
- WorkflowOutputNode wfOutputNode = (WorkflowOutputNode) readyNode;
+ if (readyNode instanceof OutputNode) {
+ OutputNode wfOutputNode = (OutputNode) readyNode;
wfOutputNode.getOutputObject().setValue(wfOutputNode.getInPort().getInputObject().getValue());
addToCompleteOutputNodeList(wfOutputNode);
continue;
@@ -151,7 +151,7 @@ class SimpleWorkflowInterpreter{
private void saveWorkflowOutputs() throws AppCatalogException {
List<OutputDataObjectType> outputDataObjects = new ArrayList<OutputDataObjectType>();
- for (WorkflowOutputNode completeWorkflowOutput : completeWorkflowOutputs) {
+ for (OutputNode completeWorkflowOutput : completeWorkflowOutputs) {
outputDataObjects.add(completeWorkflowOutput.getOutputObject());
}
RegistryFactory.getAppCatalog().getWorkflowCatalog()
@@ -183,9 +183,9 @@ class SimpleWorkflowInterpreter{
executionUnit = ExecutionUnit.APPLICATION;
executionData = ((ApplicationNode) readyNode).getApplicationId();
setupNodeDetailsInput(((ApplicationNode) readyNode), wfNodeDetails);
- } else if (readyNode instanceof WorkflowInputNode) {
+ } else if (readyNode instanceof InputNode) {
executionUnit = ExecutionUnit.INPUT;
- } else if (readyNode instanceof WorkflowOutputNode) {
+ } else if (readyNode instanceof OutputNode) {
executionUnit = ExecutionUnit.OUTPUT;
}
wfNodeDetails.setExecutionUnit(executionUnit);
@@ -206,9 +206,9 @@ class SimpleWorkflowInterpreter{
}
- private void processWorkflowInputNodes(List<WorkflowInputNode> wfInputNodes) {
+ private void processWorkflowInputNodes(List<InputNode> wfInputNodes) {
Set<WorkflowNode> tempNodeSet = new HashSet<WorkflowNode>();
- for (WorkflowInputNode wfInputNode : wfInputNodes) {
+ for (InputNode wfInputNode : wfInputNodes) {
if (wfInputNode.isReady()) {
log.debug("Workflow node : " + wfInputNode.getId() + " is ready to execute");
for (Edge edge : wfInputNode.getOutPort().getOutEdges()) {
@@ -227,12 +227,12 @@ class SimpleWorkflowInterpreter{
}
- public List<WorkflowInputNode> getWorkflowInputNodes() throws Exception {
- return workflowInputNodes;
+ public List<InputNode> getInputNodes() throws Exception {
+ return inputNodes;
}
- public void setWorkflowInputNodes(List<WorkflowInputNode> workflowInputNodes) {
- this.workflowInputNodes = workflowInputNodes;
+ public void setInputNodes(List<InputNode> inputNodes) {
+ this.inputNodes = inputNodes;
}
private Registry getRegistry() throws RegistryException {
@@ -282,7 +282,7 @@ class SimpleWorkflowInterpreter{
}
- private void addToCompleteOutputNodeList(WorkflowOutputNode wfOutputNode) {
+ private void addToCompleteOutputNodeList(OutputNode wfOutputNode) {
completeWorkflowOutputs.add(wfOutputNode);
readyList.remove(wfOutputNode.getId());
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowBuilder.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowBuilder.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowBuilder.java
new file mode 100644
index 0000000..a794282
--- /dev/null
+++ b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowBuilder.java
@@ -0,0 +1,15 @@
+package org.apache.airavata.workflow.core;
+
+import org.apache.airavata.workflow.core.dag.nodes.InputNode;
+
+import java.util.List;
+
+/**
+ * Created by syodage on 2/1/16.
+ */
+public interface WorkflowBuilder {
+
+ public List<InputNode> build() throws Exception;
+
+ public List<InputNode> build(String workflow) throws Exception;
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowEnactmentService.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowEnactmentService.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowEnactmentService.java
index 8ca0706..aaa3073 100644
--- a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowEnactmentService.java
+++ b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowEnactmentService.java
@@ -137,7 +137,7 @@ public class WorkflowEnactmentService {
// output changes it is ok to ignore this.
}
- }else if (msgCtx.getType() == MessageType.TASKOUTPUT) {
+ }else if (msgCtx.getType() == MessageType.PROCESSOUTPUT) {
TaskOutputChangeEvent event = (TaskOutputChangeEvent) msgCtx.getEvent();
TaskIdentifier taskIdentifier = event.getTaskIdentity();
simpleWorkflowInterpreter = getInterpreter(taskIdentifier.getExperimentId());
@@ -150,7 +150,7 @@ public class WorkflowEnactmentService {
throw new IllegalArgumentException("Error while processing TaskOutputChangeEvent, " +
"There is no registered workflow for experiment Id : " + taskIdentifier.getExperimentId());
}
- message = "Received task output change event , expId : " + taskIdentifier.getExperimentId() + ", taskId : " + taskIdentifier.getTaskId() + ", workflow node Id : " + taskIdentifier.getWorkflowNodeId();
+ message = "Received task output change event , expId : " + taskIdentifier.getExperimentId() + ", taskId : " + taskIdentifier.getTaskId();
log.debug(message);
} else {
// not interested, ignores
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowFactory.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowFactory.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowFactory.java
index ee89dd9..f232efa 100644
--- a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowFactory.java
+++ b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowFactory.java
@@ -21,11 +21,41 @@
package org.apache.airavata.workflow.core;
+import org.apache.airavata.common.exception.ApplicationSettingsException;
+import org.apache.airavata.common.utils.ServerSettings;
+import org.apache.airavata.workflow.core.parser.AiravataWorkflowBuilder;
+import org.apache.airavata.workflow.core.parser.JsonWorkflowParser;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.lang.reflect.Constructor;
+
/**
* All classes implement this WorkflowFactory interface, should be abstract or singleton.
*/
-public interface WorkflowFactory {
+public class WorkflowFactory {
+
+ private static final Logger log = LoggerFactory.getLogger(WorkflowFactory.class);
+
+
+ public static WorkflowBuilder getWorkflowBuilder(String experimentId, String credentialToken, String workflowString) throws Exception {
+ return new AiravataWorkflowBuilder(experimentId, credentialToken, getWorkflowParser(workflowString));
+ }
- public WorkflowParser getWorkflowParser(String experimentId, String credentialToken) throws Exception;
+ public static WorkflowParser getWorkflowParser(String workflowString) throws Exception {
+ WorkflowParser workflowParser = null;
+ try {
+ String wfParserClassName = ServerSettings.getWorkflowParser();
+ Class<?> aClass = Class.forName(wfParserClassName);
+ Constructor<?> constructor = aClass.getConstructor(String.class);
+ workflowParser = (WorkflowParser) constructor.newInstance(workflowString);
+ } catch (ApplicationSettingsException e) {
+ log.info("A custom workflow parser is not defined, Use default Airavata JSON workflow parser");
+ }
+ if (workflowParser == null) {
+ workflowParser = new JsonWorkflowParser(workflowString);
+ }
+ return workflowParser;
+ }
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowFactoryImpl.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowFactoryImpl.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowFactoryImpl.java
deleted file mode 100644
index 1df2084..0000000
--- a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowFactoryImpl.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.airavata.workflow.core;
-
-import org.apache.airavata.common.exception.ApplicationSettingsException;
-import org.apache.airavata.common.utils.ServerSettings;
-import org.apache.airavata.workflow.core.parser.AiravataWorkflowParser;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.lang.reflect.Constructor;
-
-/**
- * Singleton class, only one instance can exist in runtime.
- */
-public class WorkflowFactoryImpl implements WorkflowFactory {
-
- private static final Logger log = LoggerFactory.getLogger(WorkflowFactoryImpl.class);
-
- private static WorkflowFactoryImpl workflowFactoryImpl;
-
- private WorkflowFactoryImpl(){
-
- }
-
- public static WorkflowFactoryImpl getInstance() {
- if (workflowFactoryImpl == null) {
- synchronized (WorkflowFactory.class) {
- if (workflowFactoryImpl == null) {
- workflowFactoryImpl = new WorkflowFactoryImpl();
- }
- }
- }
- return workflowFactoryImpl;
- }
-
-
- @Override
- public WorkflowParser getWorkflowParser(String experimentId, String credentialToken) throws Exception {
- WorkflowParser workflowParser = null;
- try {
- String wfParserClassName = ServerSettings.getWorkflowParser();
- Class<?> aClass = Class.forName(wfParserClassName);
- Constructor<?> constructor = aClass.getConstructor(String.class, String.class);
- workflowParser = (WorkflowParser) constructor.newInstance(experimentId, credentialToken);
- } catch (ApplicationSettingsException e) {
- log.info("A custom workflow parser is not defined, Use default Airavata workflow parser");
- }
- if (workflowParser == null) {
- workflowParser = new AiravataWorkflowParser(experimentId, credentialToken);
- }
- return workflowParser;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowParser.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowParser.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowParser.java
index 8d284dd..46bc1d8 100644
--- a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowParser.java
+++ b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/WorkflowParser.java
@@ -21,12 +21,26 @@
package org.apache.airavata.workflow.core;
-import org.apache.airavata.workflow.core.dag.nodes.WorkflowInputNode;
+import org.apache.airavata.workflow.core.dag.edge.Edge;
+import org.apache.airavata.workflow.core.dag.nodes.ApplicationNode;
+import org.apache.airavata.workflow.core.dag.nodes.InputNode;
+import org.apache.airavata.workflow.core.dag.nodes.OutputNode;
+import org.apache.airavata.workflow.core.dag.port.Port;
import java.util.List;
public interface WorkflowParser {
- public List<WorkflowInputNode> parse() throws Exception;
+ public void parse() throws Exception;
+
+ public List<InputNode> getInputNodes() throws Exception;
+
+ public List<OutputNode> getOutputNodes() throws Exception;
+
+ public List<ApplicationNode> getApplicationNodes() throws Exception;
+
+ public List<Port> getPorts() throws Exception;
+
+ public List<Edge> getEdges() throws Exception;
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/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
new file mode 100644
index 0000000..6dec125
--- /dev/null
+++ b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/InputNode.java
@@ -0,0 +1,37 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.airavata.workflow.core.dag.nodes;
+
+import org.apache.airavata.model.application.io.InputDataObjectType;
+import org.apache.airavata.workflow.core.dag.port.OutPort;
+
+public interface InputNode extends WorkflowNode {
+
+ public InputDataObjectType getInputObject();
+
+ public void setInputObject(InputDataObjectType inputObject);
+
+ public OutPort getOutPort();
+
+ public void setOutPort(OutPort outPort);
+
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/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
new file mode 100644
index 0000000..59984d7
--- /dev/null
+++ b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/InputNodeImpl.java
@@ -0,0 +1,105 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+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.application.io.InputDataObjectType;
+import org.apache.airavata.workflow.core.dag.port.OutPort;
+
+public class InputNodeImpl implements InputNode {
+
+ private NodeModel nodeModel;
+ private OutPort outPort;
+ private InputDataObjectType inputDataObjectType;
+
+ public InputNodeImpl(NodeModel nodeModel) {
+ this.nodeModel = nodeModel;
+ }
+
+ @Override
+ public void setNodeModel(NodeModel nodeModel) {
+ this.nodeModel = nodeModel;
+ }
+
+ @Override
+ public NodeModel getNodeModel() {
+ return nodeModel;
+ }
+
+ @Override
+ public String getId() {
+ return getNodeModel().getNodeId();
+ }
+
+ @Override
+ public String getName() {
+ return getNodeModel().getName();
+ }
+
+ @Override
+ public NodeType getType() {
+ return NodeType.WORKFLOW_INPUT;
+ }
+
+ @Override
+ public ComponentState getState() {
+ return getStatus().getState();
+ }
+
+ @Override
+ public ComponentStatus getStatus() {
+ return getNodeModel().getStatus();
+ }
+
+ @Override
+ public void setStatus(ComponentStatus newStatus) {
+ getNodeModel().setStatus(newStatus);
+ }
+
+ @Override
+ public boolean isReady() {
+ return (inputDataObjectType.getValue() != null && !inputDataObjectType.getValue().equals(""))
+ || !inputDataObjectType.isIsRequired();
+ }
+
+ @Override
+ public InputDataObjectType getInputObject() {
+ return this.inputDataObjectType;
+ }
+
+ @Override
+ public void setInputObject(InputDataObjectType inputObject) {
+ this.inputDataObjectType = inputObject;
+ }
+
+ @Override
+ public OutPort getOutPort() {
+ return this.outPort;
+ }
+
+ @Override
+ public void setOutPort(OutPort outPort) {
+ this.outPort = outPort;
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/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
new file mode 100644
index 0000000..7378c96
--- /dev/null
+++ b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/OutputNode.java
@@ -0,0 +1,37 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+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 OutputDataObjectType getOutputObject();
+
+ public void setOutputObject(OutputDataObjectType outputObject);
+
+ public InPort getInPort();
+
+ public void setInPort(InPort inPort);
+
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/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
new file mode 100644
index 0000000..5eada1c
--- /dev/null
+++ b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/OutputNodeImpl.java
@@ -0,0 +1,108 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+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.application.io.OutputDataObjectType;
+import org.apache.airavata.workflow.core.dag.port.InPort;
+
+public class OutputNodeImpl implements OutputNode {
+
+ private NodeModel nodeModel;
+ private OutputDataObjectType outputDataObjectType;
+ private InPort inPort;
+
+ public OutputNodeImpl(NodeModel nodeModel) {
+ this.nodeModel = nodeModel;
+ }
+
+ @Override
+ public void setNodeModel(NodeModel nodeModel) {
+ this.nodeModel = nodeModel;
+ }
+
+ @Override
+ public NodeModel getNodeModel() {
+ return nodeModel;
+ }
+
+ @Override
+ public String getId() {
+ return getNodeModel().getNodeId();
+ }
+
+ @Override
+ public String getName() {
+ return getNodeModel().getName();
+ }
+
+ @Override
+ public NodeType getType() {
+ return NodeType.WORKFLOW_OUTPUT;
+ }
+
+ @Override
+ public ComponentState getState() {
+ return getStatus().getState();
+ }
+
+ @Override
+ public ComponentStatus getStatus() {
+ return getNodeModel().getStatus();
+ }
+
+ @Override
+ public void setStatus(ComponentStatus newStatus) {
+ getNodeModel().setStatus(newStatus);
+ }
+
+
+ @Override
+ public boolean isReady() {
+ return !(inPort.getInputObject() == null || inPort.getInputObject().getValue() == null
+ || inPort.getInputObject().getValue().equals(""));
+ }
+
+ @Override
+ public OutputDataObjectType getOutputObject() {
+ return this.outputDataObjectType;
+ }
+
+ @Override
+ public void setOutputObject(OutputDataObjectType outputObject) {
+ this.outputDataObjectType = outputObject;
+ }
+
+ @Override
+ public InPort getInPort() {
+ return this.inPort;
+ }
+
+ @Override
+ public void setInPort(InPort inPort) {
+ this.inPort = inPort;
+ }
+
+}
+
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/WorkflowInputNode.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/WorkflowInputNode.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/WorkflowInputNode.java
deleted file mode 100644
index 939ba16..0000000
--- a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/WorkflowInputNode.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.airavata.workflow.core.dag.nodes;
-
-import org.apache.airavata.model.application.io.InputDataObjectType;
-import org.apache.airavata.workflow.core.dag.port.OutPort;
-
-public interface WorkflowInputNode extends WorkflowNode {
-
- public InputDataObjectType getInputObject();
-
- public void setInputObject(InputDataObjectType inputObject);
-
- public OutPort getOutPort();
-
- public void setOutPort(OutPort outPort);
-
-}
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/WorkflowInputNodeImpl.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/WorkflowInputNodeImpl.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/WorkflowInputNodeImpl.java
deleted file mode 100644
index 3ecc865..0000000
--- a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/WorkflowInputNodeImpl.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-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.application.io.InputDataObjectType;
-import org.apache.airavata.workflow.core.dag.port.OutPort;
-
-public class WorkflowInputNodeImpl implements WorkflowInputNode {
-
- private NodeModel nodeModel;
- private OutPort outPort;
- private InputDataObjectType inputDataObjectType;
-
- public WorkflowInputNodeImpl(NodeModel nodeModel) {
- this.nodeModel = nodeModel;
- }
-
- @Override
- public void setNodeModel(NodeModel nodeModel) {
- this.nodeModel = nodeModel;
- }
-
- @Override
- public NodeModel getNodeModel() {
- return nodeModel;
- }
-
- @Override
- public String getId() {
- return getNodeModel().getNodeId();
- }
-
- @Override
- public String getName() {
- return getNodeModel().getName();
- }
-
- @Override
- public NodeType getType() {
- return NodeType.WORKFLOW_INPUT;
- }
-
- @Override
- public ComponentState getState() {
- return getStatus().getState();
- }
-
- @Override
- public ComponentStatus getStatus() {
- return getNodeModel().getStatus();
- }
-
- @Override
- public void setStatus(ComponentStatus newStatus) {
- getNodeModel().setStatus(newStatus);
- }
-
- @Override
- public boolean isReady() {
- return (inputDataObjectType.getValue() != null && !inputDataObjectType.getValue().equals(""))
- || !inputDataObjectType.isIsRequired();
- }
-
- @Override
- public InputDataObjectType getInputObject() {
- return this.inputDataObjectType;
- }
-
- @Override
- public void setInputObject(InputDataObjectType inputObject) {
- this.inputDataObjectType = inputObject;
- }
-
- @Override
- public OutPort getOutPort() {
- return this.outPort;
- }
-
- @Override
- public void setOutPort(OutPort outPort) {
- this.outPort = outPort;
- }
-
-
-}
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/WorkflowOutputNode.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/WorkflowOutputNode.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/WorkflowOutputNode.java
deleted file mode 100644
index 1b984be..0000000
--- a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/WorkflowOutputNode.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-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 WorkflowOutputNode extends WorkflowNode {
-
- public OutputDataObjectType getOutputObject();
-
- public void setOutputObject(OutputDataObjectType outputObject);
-
- public InPort getInPort();
-
- public void setInPort(InPort inPort);
-
-}
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/WorkflowOutputNodeImpl.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/WorkflowOutputNodeImpl.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/WorkflowOutputNodeImpl.java
deleted file mode 100644
index 5844753..0000000
--- a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/dag/nodes/WorkflowOutputNodeImpl.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-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.application.io.OutputDataObjectType;
-import org.apache.airavata.workflow.core.dag.port.InPort;
-
-public class WorkflowOutputNodeImpl implements WorkflowOutputNode {
-
- private NodeModel nodeModel;
- private OutputDataObjectType outputDataObjectType;
- private InPort inPort;
-
- public WorkflowOutputNodeImpl(NodeModel nodeModel) {
- this.nodeModel = nodeModel;
- }
-
- @Override
- public void setNodeModel(NodeModel nodeModel) {
- this.nodeModel = nodeModel;
- }
-
- @Override
- public NodeModel getNodeModel() {
- return nodeModel;
- }
-
- @Override
- public String getId() {
- return getNodeModel().getNodeId();
- }
-
- @Override
- public String getName() {
- return getNodeModel().getName();
- }
-
- @Override
- public NodeType getType() {
- return NodeType.WORKFLOW_OUTPUT;
- }
-
- @Override
- public ComponentState getState() {
- return getStatus().getState();
- }
-
- @Override
- public ComponentStatus getStatus() {
- return getNodeModel().getStatus();
- }
-
- @Override
- public void setStatus(ComponentStatus newStatus) {
- getNodeModel().setStatus(newStatus);
- }
-
-
- @Override
- public boolean isReady() {
- return !(inPort.getInputObject() == null || inPort.getInputObject().getValue() == null
- || inPort.getInputObject().getValue().equals(""));
- }
-
- @Override
- public OutputDataObjectType getOutputObject() {
- return this.outputDataObjectType;
- }
-
- @Override
- public void setOutputObject(OutputDataObjectType outputObject) {
- this.outputDataObjectType = outputObject;
- }
-
- @Override
- public InPort getInPort() {
- return this.inPort;
- }
-
- @Override
- public void setInPort(InPort inPort) {
- this.inPort = inPort;
- }
-
-}
-
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/parser/AiravataWorkflowBuilder.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/parser/AiravataWorkflowBuilder.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/parser/AiravataWorkflowBuilder.java
new file mode 100644
index 0000000..e50b245
--- /dev/null
+++ b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/parser/AiravataWorkflowBuilder.java
@@ -0,0 +1,117 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.airavata.workflow.core.parser;
+
+import org.apache.airavata.model.application.io.InputDataObjectType;
+import org.apache.airavata.model.application.io.OutputDataObjectType;
+import org.apache.airavata.model.experiment.ExperimentModel;
+import org.apache.airavata.registry.core.experiment.catalog.impl.RegistryFactory;
+import org.apache.airavata.registry.cpi.*;
+import org.apache.airavata.workflow.core.WorkflowBuilder;
+import org.apache.airavata.workflow.core.WorkflowParser;
+import org.apache.airavata.workflow.core.dag.edge.DirectedEdge;
+import org.apache.airavata.workflow.core.dag.edge.Edge;
+import org.apache.airavata.workflow.core.dag.nodes.ApplicationNode;
+import org.apache.airavata.workflow.core.dag.nodes.ApplicationNodeImpl;
+import org.apache.airavata.workflow.core.dag.nodes.InputNode;
+import org.apache.airavata.workflow.core.dag.nodes.WorkflowNode;
+import org.apache.airavata.workflow.core.dag.nodes.OutputNode;
+import org.apache.airavata.workflow.core.dag.nodes.OutputNodeImpl;
+import org.apache.airavata.workflow.core.dag.port.*;
+
+import java.util.*;
+
+public class AiravataWorkflowBuilder implements WorkflowBuilder {
+
+ private String credentialToken ;
+ private WorkflowParser workflowParser;
+ private ExperimentModel experiment;
+
+
+ public AiravataWorkflowBuilder(String experimentId, String credentialToken, WorkflowParser workflowParser) throws RegistryException {
+ this.experiment = getExperiment(experimentId);
+ this.credentialToken = credentialToken;
+ this.workflowParser = workflowParser;
+ }
+
+ public AiravataWorkflowBuilder(ExperimentModel experiment, String credentialToken , WorkflowParser workflowParser) {
+ this.credentialToken = credentialToken;
+ this.experiment = experiment;
+ this.workflowParser = workflowParser;
+ }
+
+ @Override
+ public List<InputNode> build() throws Exception {
+ return parseWorkflow(getWorkflowFromExperiment(experiment));
+ }
+
+ @Override
+ public List<InputNode> build(String workflow) throws Exception {
+ return parseWorkflow(workflow);
+ }
+
+ public List<InputNode> parseWorkflow(String workflow) throws Exception {
+
+ List<InputNode> inputNodes = workflowParser.getInputNodes();
+ List<ApplicationNode> applicationNodes = workflowParser.getApplicationNodes();
+ List<Port> ports = workflowParser.getPorts();
+ List<Edge> edges = workflowParser.getEdges();
+ List<OutputNode> outputNodes = workflowParser.getOutputNodes();
+
+ // travel breath first and build relation between each workflow component
+ Queue<WorkflowNode> queue = new LinkedList<>();
+ List<InputDataObjectType> experimentInputs = experiment.getExperimentInputs();
+ Map<String,InputDataObjectType> inputDataMap=new HashMap<String, InputDataObjectType>();
+ for (InputDataObjectType dataObjectType : experimentInputs) {
+ inputDataMap.put(dataObjectType.getName(), dataObjectType);
+ }
+
+ return inputNodes;
+ }
+
+
+ private OutputDataObjectType getOutputDataObject(InputDataObjectType inputObject) {
+ OutputDataObjectType outputDataObjectType = new OutputDataObjectType();
+ outputDataObjectType.setApplicationArgument(inputObject.getApplicationArgument());
+ outputDataObjectType.setName(inputObject.getName());
+ outputDataObjectType.setType(inputObject.getType());
+ outputDataObjectType.setValue(inputObject.getValue());
+ return outputDataObjectType;
+ }
+
+ private ExperimentModel getExperiment(String experimentId) throws RegistryException {
+ Registry registry = RegistryFactory.getRegistry();
+ return (ExperimentModel)registry.getExperimentCatalog().get(ExperimentCatalogModelType.EXPERIMENT, experimentId);
+ }
+
+ private String getWorkflowFromExperiment(ExperimentModel experiment) throws RegistryException, AppCatalogException {
+ WorkflowCatalog workflowCatalog = getWorkflowCatalog();
+
+ // FIXME: return workflow string
+ return null;
+ }
+
+ private WorkflowCatalog getWorkflowCatalog() throws AppCatalogException {
+ return RegistryFactory.getAppCatalog().getWorkflowCatalog();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/parser/AiravataWorkflowParser.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/parser/AiravataWorkflowParser.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/parser/AiravataWorkflowParser.java
deleted file mode 100644
index 0844219..0000000
--- a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/parser/AiravataWorkflowParser.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.airavata.workflow.core.parser;
-
-import org.apache.airavata.model.application.io.InputDataObjectType;
-import org.apache.airavata.model.application.io.OutputDataObjectType;
-import org.apache.airavata.model.experiment.ExperimentModel;
-import org.apache.airavata.registry.core.experiment.catalog.impl.RegistryFactory;
-import org.apache.airavata.registry.cpi.*;
-import org.apache.airavata.workflow.core.WorkflowParser;
-import org.apache.airavata.workflow.core.dag.edge.DirectedEdge;
-import org.apache.airavata.workflow.core.dag.edge.Edge;
-import org.apache.airavata.workflow.core.dag.nodes.ApplicationNode;
-import org.apache.airavata.workflow.core.dag.nodes.ApplicationNodeImpl;
-import org.apache.airavata.workflow.core.dag.nodes.WorkflowInputNode;
-import org.apache.airavata.workflow.core.dag.nodes.WorkflowInputNodeImpl;
-import org.apache.airavata.workflow.core.dag.nodes.WorkflowNode;
-import org.apache.airavata.workflow.core.dag.nodes.WorkflowOutputNode;
-import org.apache.airavata.workflow.core.dag.nodes.WorkflowOutputNodeImpl;
-import org.apache.airavata.workflow.core.dag.port.InPort;
-import org.apache.airavata.workflow.core.dag.port.InputPortIml;
-import org.apache.airavata.workflow.core.dag.port.OutPort;
-import org.apache.airavata.workflow.core.dag.port.OutPortImpl;
-import org.apache.airavata.workflow.model.component.ComponentException;
-import org.apache.airavata.workflow.model.component.system.ConstantComponent;
-import org.apache.airavata.workflow.model.component.system.InputComponent;
-import org.apache.airavata.workflow.model.component.system.S3InputComponent;
-import org.apache.airavata.workflow.model.graph.DataEdge;
-import org.apache.airavata.workflow.model.graph.DataPort;
-import org.apache.airavata.workflow.model.graph.GraphException;
-import org.apache.airavata.workflow.model.graph.Node;
-import org.apache.airavata.workflow.model.graph.impl.NodeImpl;
-import org.apache.airavata.workflow.model.graph.system.OutputNode;
-import org.apache.airavata.workflow.model.graph.system.SystemDataPort;
-import org.apache.airavata.workflow.model.graph.ws.WSNode;
-import org.apache.airavata.workflow.model.graph.ws.WSPort;
-import org.apache.airavata.workflow.model.wf.Workflow;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class AiravataWorkflowParser implements WorkflowParser {
-
- private String credentialToken ;
-
- private ExperimentModel experiment;
- private Map<String, WorkflowNode> wfNodes = new HashMap<String, WorkflowNode>();
-
-
- public AiravataWorkflowParser(String experimentId, String credentialToken) throws RegistryException {
- this.experiment = getExperiment(experimentId);
- this.credentialToken = credentialToken;
- }
-
- public AiravataWorkflowParser(ExperimentModel experiment, String credentialToken) {
- this.credentialToken = credentialToken;
- this.experiment = experiment;
- }
-
- @Override
- public List<WorkflowInputNode> parse() throws RegistryException, AppCatalogException,
- ComponentException, GraphException {
- return parseWorkflow(getWorkflowFromExperiment(experiment));
- }
-
- public List<WorkflowInputNode> parseWorkflow(Workflow workflow) {
- List<Node> gNodes = getInputNodes(workflow);
- List<WorkflowInputNode> wfInputNodes = new ArrayList<WorkflowInputNode>();
- List<PortContainer> portContainers = new ArrayList<PortContainer>();
- List<InputDataObjectType> experimentInputs = experiment.getExperimentInputs();
- Map<String,InputDataObjectType> inputDataMap=new HashMap<String, InputDataObjectType>();
- WorkflowInputNode wfInputNode = null;
- for (InputDataObjectType dataObjectType : experimentInputs) {
- inputDataMap.put(dataObjectType.getName(), dataObjectType);
- }
- for (Node gNode : gNodes) {
- wfInputNode = new WorkflowInputNodeImpl(gNode.getID(), gNode.getName());
- wfInputNode.setInputObject(inputDataMap.get(wfInputNode.getId()));
- if (wfInputNode.getInputObject() == null) {
- throw new RuntimeException("Workflow Input object is not set, workflow node id: " + wfInputNode.getId());
- }
- portContainers.addAll(processOutPorts(gNode, wfInputNode));
- wfInputNodes.add(wfInputNode);
- }
-
- // while port container is not empty iterate graph and build the workflow DAG.
- buildModel(portContainers);
-
- return wfInputNodes;
- }
-
- private void buildModel(List<PortContainer> portContainerList) {
- // end condition of recursive call.
- if (portContainerList == null || portContainerList.isEmpty()) {
- return ;
- }
- DataPort dataPort = null;
- InPort inPort = null;
- ApplicationNode wfApplicationNode = null;
- WorkflowOutputNode wfOutputNode = null;
- List<PortContainer> nextPortContainerList = new ArrayList<PortContainer>();
- for (PortContainer portContainer : portContainerList) {
- dataPort = portContainer.getDataPort();
- inPort = portContainer.getInPort();
- Node node = dataPort.getNode();
- if (node instanceof WSNode) {
- WSNode wsNode = (WSNode) node;
- WorkflowNode wfNode = wfNodes.get(wsNode.getID());
- if (wfNode == null) {
- wfApplicationNode = createApplicationNode(wsNode);
- wfNodes.put(wfApplicationNode.getId(), wfApplicationNode);
- nextPortContainerList.addAll(processOutPorts(wsNode, wfApplicationNode));
- } else if (wfNode instanceof ApplicationNode) {
- wfApplicationNode = (ApplicationNode) wfNode;
- } else {
- throw new IllegalArgumentException("Only support for ApplicationNode implementation, but found other type for node implementation");
- }
- inPort.setNode(wfApplicationNode);
- wfApplicationNode.addInPort(inPort);
-
- }else if (node instanceof OutputNode) {
- OutputNode oNode = (OutputNode) node;
- wfOutputNode = createWorkflowOutputNode(oNode);
- wfOutputNode.setInPort(inPort);
- inPort.setNode(wfOutputNode);
- wfNodes.put(wfOutputNode.getId(), wfOutputNode);
- }
- }
- buildModel(nextPortContainerList);
-
- }
-
- private WorkflowOutputNode createWorkflowOutputNode(OutputNode oNode) {
- WorkflowOutputNodeImpl workflowOutputNode = new WorkflowOutputNodeImpl(oNode.getID(), oNode.getName());
- OutputDataObjectType outputDataObjectType = new OutputDataObjectType();
- outputDataObjectType.setType(oNode.getParameterType());
- outputDataObjectType.setName(oNode.getID());
- workflowOutputNode.setOutputObject(outputDataObjectType);
- return workflowOutputNode;
- }
-
- private ApplicationNode createApplicationNode(WSNode wsNode) {
- ApplicationNode applicationNode = new ApplicationNodeImpl(wsNode.getID(),
- wsNode.getComponent().getApplication().getName(),
- wsNode.getComponent().getApplication().getApplicationId());
- return applicationNode;
- }
-
- private List<PortContainer> processOutPorts(Node node, WorkflowNode wfNode) {
- OutPort outPort ;
- Edge edge;
- InPort inPort = null;
- List<PortContainer> portContainers = new ArrayList<PortContainer>();
- for (DataPort dataPort : node.getOutputPorts()) {
- outPort = createOutPort(dataPort);
- for (DataEdge dataEdge : dataPort.getEdges()) {
- edge = new DirectedEdge();
- edge.setFromPort(outPort);
- outPort.addEdge(edge);
- inPort = createInPort(dataEdge.getToPort());
- edge.setToPort(inPort);
- inPort.addEdge(edge);
- portContainers.add(new PortContainer(dataEdge.getToPort(), inPort));
- }
- outPort.setNode(wfNode);
- if (wfNode instanceof WorkflowInputNode) {
- WorkflowInputNode workflowInputNode = (WorkflowInputNode) wfNode;
- workflowInputNode.setOutPort(outPort);
- } else if (wfNode instanceof ApplicationNode) {
- ApplicationNode applicationNode = ((ApplicationNode) wfNode);
- applicationNode.addOutPort(outPort);
- }
- }
- return portContainers;
- }
-
- private OutPort createOutPort(DataPort dataPort) {
- OutPortImpl outPort = new OutPortImpl(dataPort.getID());
- OutputDataObjectType outputDataObjectType = new OutputDataObjectType();
- if (dataPort instanceof WSPort) {
- WSPort wsPort = (WSPort) dataPort;
- outputDataObjectType.setName(wsPort.getComponentPort().getName());
- outputDataObjectType.setType(wsPort.getType());
- }else if (dataPort instanceof SystemDataPort) {
- SystemDataPort sysPort = (SystemDataPort) dataPort;
- outputDataObjectType.setName(sysPort.getFromNode().getName());
- outputDataObjectType.setType(sysPort.getType());
- }
-
- outPort.setOutputObject(outputDataObjectType);
- return outPort;
- }
-
- private InPort createInPort(DataPort toPort) {
- InPort inPort = new InputPortIml(toPort.getID());
- InputDataObjectType inputDataObjectType = new InputDataObjectType();
- if (toPort instanceof WSPort) {
- WSPort wsPort = (WSPort) toPort;
- inputDataObjectType.setName(wsPort.getName());
- inputDataObjectType.setType(wsPort.getType());
- inputDataObjectType.setApplicationArgument(wsPort.getComponentPort().getApplicationArgument());
- inputDataObjectType.setIsRequired(!wsPort.getComponentPort().isOptional());
- inputDataObjectType.setInputOrder(wsPort.getComponentPort().getInputOrder());
-
- inPort.setDefaultValue(wsPort.getComponentPort().getDefaultValue());
- }else if (toPort instanceof SystemDataPort) {
- SystemDataPort sysPort = (SystemDataPort) toPort;
- inputDataObjectType.setName(sysPort.getName());
- inputDataObjectType.setType(sysPort.getType());
- }
- inPort.setInputObject(inputDataObjectType);
- return inPort;
- }
-
- private InputDataObjectType getInputDataObject(DataPort dataPort) {
- InputDataObjectType inputDataObject = new InputDataObjectType();
- inputDataObject.setName(dataPort.getName());
- if (dataPort instanceof WSPort) {
- WSPort port = (WSPort) dataPort;
- inputDataObject.setInputOrder(port.getComponentPort().getInputOrder());
- inputDataObject.setApplicationArgument(port.getComponentPort().getApplicationArgument() == null ?
- "" : port.getComponentPort().getApplicationArgument());
- inputDataObject.setType(dataPort.getType());
- }
- return inputDataObject;
- }
-
- private OutputDataObjectType getOutputDataObject(InputDataObjectType inputObject) {
- OutputDataObjectType outputDataObjectType = new OutputDataObjectType();
- outputDataObjectType.setApplicationArgument(inputObject.getApplicationArgument());
- outputDataObjectType.setName(inputObject.getName());
- outputDataObjectType.setType(inputObject.getType());
- outputDataObjectType.setValue(inputObject.getValue());
- return outputDataObjectType;
- }
-
- private ExperimentModel getExperiment(String experimentId) throws RegistryException {
- Registry registry = RegistryFactory.getRegistry();
- return (ExperimentModel)registry.getExperimentCatalog().get(ExperimentCatalogModelType.EXPERIMENT, experimentId);
- }
-
- private Workflow getWorkflowFromExperiment(ExperimentModel experiment) throws RegistryException, AppCatalogException, GraphException, ComponentException {
- WorkflowCatalog workflowCatalog = getWorkflowCatalog();
- return new Workflow(workflowCatalog.getWorkflow(experiment.getExecutionId()).getGraph());
- }
-
- private WorkflowCatalog getWorkflowCatalog() throws AppCatalogException {
- return RegistryFactory.getAppCatalog().getWorkflowCatalog();
- }
-
- private ArrayList<Node> getInputNodes(Workflow wf) {
- ArrayList<Node> list = new ArrayList<Node>();
- List<NodeImpl> nodes = wf.getGraph().getNodes();
- for (Node node : nodes) {
- String name = node.getComponent().getName();
- if (InputComponent.NAME.equals(name) || ConstantComponent.NAME.equals(name) || S3InputComponent.NAME.equals(name)) {
- list.add(node);
- }
- }
- return list;
- }
-
- public Map<String, WorkflowNode> getWfNodes() {
- return wfNodes;
- }
-}
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/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 6c839e7..59576b3 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
@@ -1,21 +1,76 @@
package org.apache.airavata.workflow.core.parser;
+import com.google.gson.JsonObject;
import org.apache.airavata.workflow.core.WorkflowParser;
-import org.apache.airavata.workflow.core.dag.nodes.WorkflowInputNode;
+import org.apache.airavata.workflow.core.dag.edge.Edge;
+import org.apache.airavata.workflow.core.dag.nodes.ApplicationNode;
+import org.apache.airavata.workflow.core.dag.nodes.InputNode;
+import org.apache.airavata.workflow.core.dag.nodes.OutputNode;
+import org.apache.airavata.workflow.core.dag.port.Port;
import java.util.List;
/**
* Created by syodage on 1/27/16.
*/
-public class JsonWorkflowParser implements WorkflowParser {
+public class JsonWorkflowParser implements WorkflowParser{
- public JsonWorkflowParser(String workflowDescription) {
+ private final String workflow;
+ public JsonWorkflowParser(String jsonWorkflowString) {
+ workflow = jsonWorkflowString;
+ }
+
+
+ @Override
+ public void parse() throws Exception {
+ // TODO parse json string and construct components
+ }
+
+ @Override
+ public List<InputNode> getInputNodes() throws Exception {
+ return null;
}
@Override
- public List<WorkflowInputNode> parse() throws Exception {
+ public List<OutputNode> getOutputNodes() throws Exception {
+ return null;
+ }
+
+ @Override
+ public List<ApplicationNode> getApplicationNodes() throws Exception {
+ return null;
+ }
+
+ @Override
+ public List<Port> getPorts() throws Exception {
+ return null;
+ }
+
+ @Override
+ public List<Edge> getEdges() throws Exception {
+ return null;
+ }
+
+
+ private InputNode createInputNode(JsonObject jNode) {
+ return null;
+ }
+
+ private OutputNode createOutputNode(JsonObject jNode) {
+ return null;
+ }
+
+ private ApplicationNode createApplicationNode(JsonObject jNode) {
+ return null;
+ }
+
+ private Port createPort(JsonObject jPort){
+ return null;
+ }
+
+
+ private Edge createEdge(JsonObject jEdge) {
return null;
}
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/parser/PortContainer.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/parser/PortContainer.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/parser/PortContainer.java
deleted file mode 100644
index 536199c..0000000
--- a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/parser/PortContainer.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.airavata.workflow.core.parser;
-
-import org.apache.airavata.workflow.core.dag.port.InPort;
-import org.apache.airavata.workflow.model.graph.DataPort;
-
-
-public class PortContainer {
- private DataPort dataPort;
- private InPort inPort;
-
-
- public PortContainer(DataPort dataPort, InPort inPort) {
- this.dataPort = dataPort;
- this.inPort = inPort;
- }
-
- public DataPort getDataPort() {
- return dataPort;
- }
-
- public void setDataPort(DataPort dataPort) {
- this.dataPort = dataPort;
- }
-
- public InPort getInPort() {
- return inPort;
- }
-
- public void setInPort(InPort inPort) {
- this.inPort = inPort;
- }
-}
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/modules/workflow/workflow-core/src/test/java/org/apache/airavata/workflow/core/parser/AiravataWorkflowParserTest.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/test/java/org/apache/airavata/workflow/core/parser/AiravataWorkflowParserTest.java b/modules/workflow/workflow-core/src/test/java/org/apache/airavata/workflow/core/parser/AiravataWorkflowParserTest.java
deleted file mode 100644
index 6f35e30..0000000
--- a/modules/workflow/workflow-core/src/test/java/org/apache/airavata/workflow/core/parser/AiravataWorkflowParserTest.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.airavata.workflow.core.parser;
-
-import org.apache.airavata.model.application.io.DataType;
-import org.apache.airavata.model.application.io.InputDataObjectType;
-import org.apache.airavata.model.experiment.ExperimentModel;
-import org.apache.airavata.workflow.core.dag.nodes.ApplicationNode;
-import org.apache.airavata.workflow.core.dag.nodes.WorkflowInputNode;
-import org.apache.airavata.workflow.core.dag.nodes.WorkflowNode;
-import org.apache.airavata.workflow.core.dag.nodes.WorkflowOutputNode;
-import org.apache.airavata.workflow.model.wf.Workflow;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-public class AiravataWorkflowParserTest {
-
- @Before
- public void setUp() throws Exception {
-
- }
-
- @After
- public void tearDown() throws Exception {
-
- }
-
- @Test
- public void testWorkflowParse() throws Exception {
- Assert.assertNotNull("Test file (ComplexMathWorkflow.awf) is missing", getClass().getResource("/ComplexMathWorkflow.awf"));
- InputStreamReader isr = new InputStreamReader(this.getClass().getResourceAsStream("/ComplexMathWorkflow.awf"));
- BufferedReader br = new BufferedReader(isr);
- StringBuffer sb = new StringBuffer();
- String nextLine = br.readLine();
- while (nextLine != null) {
- sb.append(nextLine);
- nextLine = br.readLine();
- }
- Workflow workflow = new Workflow(sb.toString());
- ExperimentModel experiment = new ExperimentModel();
- InputDataObjectType x = new InputDataObjectType();
- x.setValue("6");
- x.setType(DataType.STRING);
- x.setName("x");
-
- InputDataObjectType y = new InputDataObjectType();
- y.setValue("8");
- y.setType(DataType.STRING);
- y.setName("y");
-
- InputDataObjectType z = new InputDataObjectType();
- z.setValue("10");
- z.setType(DataType.STRING);
- z.setName("y_2");
-
- List<InputDataObjectType> inputs = new ArrayList<InputDataObjectType>();
- inputs.add(x);
- inputs.add(y);
- inputs.add(z);
- experiment.setExperimentInputs(inputs);
- // create parser
- AiravataWorkflowParser parser = new AiravataWorkflowParser(experiment, "testCredentialId");
- List<WorkflowInputNode> workflowInputNodes = parser.parseWorkflow(workflow);
- Assert.assertNotNull(workflowInputNodes);
- Assert.assertEquals(3, workflowInputNodes.size());
- for (WorkflowInputNode workflowInputNode : workflowInputNodes) {
- Assert.assertNotNull(workflowInputNode.getOutPort());
- Assert.assertNotNull(workflowInputNode.getInputObject());
- }
-
- Map<String, WorkflowNode> wfNodes = parser.getWfNodes();
- for (String wfId : wfNodes.keySet()) {
- WorkflowNode wfNode = wfNodes.get(wfId);
- if (wfNode instanceof ApplicationNode) {
- ApplicationNode node = (ApplicationNode) wfNode;
- Assert.assertEquals(2, node.getInputPorts().size());
- Assert.assertNotNull(node.getInputPorts().get(0).getInputObject());
- Assert.assertNotNull(node.getInputPorts().get(1).getInputObject());
- Assert.assertNotNull(node.getInputPorts().get(0).getEdge());
- Assert.assertNotNull(node.getInputPorts().get(1).getEdge());
-
- Assert.assertEquals(1, node.getOutputPorts().size());
- Assert.assertEquals(1, node.getOutputPorts().get(0).getOutEdges().size());
- Assert.assertNotNull(node.getOutputPorts().get(0).getOutEdges().get(0));
- } else if (wfNode instanceof WorkflowOutputNode) {
- WorkflowOutputNode workflowOutputNode = (WorkflowOutputNode) wfNode;
- Assert.assertNotNull(workflowOutputNode.getInPort());
- }
- }
-
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/225f462b/modules/workflow/workflow-core/src/test/java/org/apache/airavata/workflow/core/parser/JsonWorkflowParserTest.java
----------------------------------------------------------------------
diff --git a/modules/workflow/workflow-core/src/test/java/org/apache/airavata/workflow/core/parser/JsonWorkflowParserTest.java b/modules/workflow/workflow-core/src/test/java/org/apache/airavata/workflow/core/parser/JsonWorkflowParserTest.java
new file mode 100644
index 0000000..95a2579
--- /dev/null
+++ b/modules/workflow/workflow-core/src/test/java/org/apache/airavata/workflow/core/parser/JsonWorkflowParserTest.java
@@ -0,0 +1,130 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.airavata.workflow.core.parser;
+
+import org.apache.airavata.model.application.io.DataType;
+import org.apache.airavata.model.application.io.InputDataObjectType;
+import org.apache.airavata.model.experiment.ExperimentModel;
+import org.apache.airavata.workflow.core.WorkflowParser;
+import org.apache.airavata.workflow.core.dag.nodes.ApplicationNode;
+import org.apache.airavata.workflow.core.dag.nodes.InputNode;
+import org.apache.airavata.workflow.core.dag.nodes.WorkflowNode;
+import org.apache.airavata.workflow.core.dag.nodes.OutputNode;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class JsonWorkflowParserTest {
+
+ @Before
+ public void setUp() throws Exception {
+
+ }
+
+ @After
+ public void tearDown() throws Exception {
+
+ }
+
+ @Test
+ public void testWorkflowParse() throws Exception {
+ Assert.assertNotNull("Test file (ComplexMathWorkflow.awf) is missing", getClass().getResource("/ComplexMathWorkflow.awf"));
+ InputStreamReader isr = new InputStreamReader(this.getClass().getResourceAsStream("/ComplexMathWorkflow.awf"));
+ BufferedReader br = new BufferedReader(isr);
+ StringBuffer sb = new StringBuffer();
+ String nextLine = br.readLine();
+ while (nextLine != null) {
+ sb.append(nextLine);
+ nextLine = br.readLine();
+ }
+// Workflow workflow = new Workflow(sb.toString());
+ ExperimentModel experiment = new ExperimentModel();
+ InputDataObjectType x = new InputDataObjectType();
+ x.setValue("6");
+ x.setType(DataType.STRING);
+ x.setName("x");
+
+ InputDataObjectType y = new InputDataObjectType();
+ y.setValue("8");
+ y.setType(DataType.STRING);
+ y.setName("y");
+
+ InputDataObjectType z = new InputDataObjectType();
+ z.setValue("10");
+ z.setType(DataType.STRING);
+ z.setName("y_2");
+
+ List<InputDataObjectType> inputs = new ArrayList<InputDataObjectType>();
+ inputs.add(x);
+ inputs.add(y);
+ inputs.add(z);
+ experiment.setExperimentInputs(inputs);
+ // create parser
+ WorkflowParser parser = new JsonWorkflowParser("workflow string");
+ parser.parse();
+ List<InputNode> inputNodes = parser.getInputNodes();
+ Assert.assertNotNull(inputNodes);
+ Assert.assertEquals(3, inputNodes.size());
+ for (InputNode inputNode : inputNodes) {
+ Assert.assertNotNull(inputNode.getOutPort());
+ Assert.assertNotNull(inputNode.getInputObject());
+ }
+
+ Map<String, WorkflowNode> wfNodes = getWorkflowNodeMap(parser.getApplicationNodes());
+ for (String wfId : wfNodes.keySet()) {
+ WorkflowNode wfNode = wfNodes.get(wfId);
+ if (wfNode instanceof ApplicationNode) {
+ ApplicationNode node = (ApplicationNode) wfNode;
+ Assert.assertEquals(2, node.getInputPorts().size());
+ Assert.assertNotNull(node.getInputPorts().get(0).getInputObject());
+ Assert.assertNotNull(node.getInputPorts().get(1).getInputObject());
+ Assert.assertNotNull(node.getInputPorts().get(0).getEdge());
+ Assert.assertNotNull(node.getInputPorts().get(1).getEdge());
+
+ Assert.assertEquals(1, node.getOutputPorts().size());
+ Assert.assertEquals(1, node.getOutputPorts().get(0).getOutEdges().size());
+ Assert.assertNotNull(node.getOutputPorts().get(0).getOutEdges().get(0));
+ } else if (wfNode instanceof OutputNode) {
+ OutputNode outputNode = (OutputNode) wfNode;
+ Assert.assertNotNull(outputNode.getInPort());
+ }
+ }
+
+ }
+
+ private Map<String, WorkflowNode> getWorkflowNodeMap(List<ApplicationNode> applicationNodes) {
+ Map<String, WorkflowNode> map = new HashMap<>();
+ for (ApplicationNode applicationNode : applicationNodes) {
+ map.put(applicationNode.getApplicationId(), applicationNode);
+ }
+
+ return map;
+ }
+}
\ No newline at end of file