You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sa...@apache.org on 2014/04/14 20:31:21 UTC
[79/90] [abbrv] AIRAVATA-1124
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gfac/SimpleWSClient.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gfac/SimpleWSClient.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gfac/SimpleWSClient.java
new file mode 100644
index 0000000..9d9b6e2
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/gfac/SimpleWSClient.java
@@ -0,0 +1,134 @@
+/*
+ *
+ * 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.xbaya.gfac;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.apache.airavata.workflow.model.component.ComponentRegistryException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xmlpull.v1.builder.XmlElement;
+import org.xmlpull.v1.builder.XmlInfosetBuilder;
+
+import xsul.XmlConstants;
+import xsul.wsif.WSIFMessage;
+import xsul.wsif.WSIFOperation;
+import xsul.wsif.WSIFPort;
+import xsul.wsif.impl.WSIFMessageElement;
+import xsul.xwsif_runtime.WSIFClient;
+import xsul.xwsif_runtime.WSIFRuntime;
+
+/**
+ * This is a Simple Web Service client for easy SOAP Messages creation
+ *
+ */
+public class SimpleWSClient {
+
+ private static final Logger logger = LoggerFactory.getLogger(SimpleWSClient.class);
+
+ private static final XmlInfosetBuilder builder = XmlConstants.BUILDER;
+
+ private String requestNS = GFacRegistryClient.GFAC_NAMESPACE;
+
+ /**
+ * @param url
+ * @param args
+ * @param opName
+ * @return The output
+ * @throws ComponentRegistryException
+ */
+ public WSIFMessage sendSOAPMessage(String url, Object[][] args, String opName) throws ComponentRegistryException {
+ WSIFClient wclient = WSIFRuntime.newClient(url);
+ return sendSOAPMessage(wclient, args, opName);
+ }
+
+ /**
+ * @param wclient
+ * @param args
+ * @param opName
+ * @return The output
+ * @throws ComponentRegistryException
+ */
+ public WSIFMessage sendSOAPMessage(WSIFClient wclient, Object[][] args, String opName)
+ throws ComponentRegistryException {
+
+ WSIFPort port = wclient.getPort();
+
+ WSIFOperation operation = port.createOperation(opName);
+ WSIFMessage outputMessage = operation.createOutputMessage();
+ WSIFMessage faultMessage = operation.createFaultMessage();
+ String messageName = operation.createInputMessage().getName();
+ XmlElement inputMsgElem = builder.newFragment(this.requestNS, messageName);
+
+ for (int i = 0; i < args.length; i++) {
+ createMessage((String) args[i][0], args[i][1], inputMsgElem);
+ }
+
+ WSIFMessageElement inputMessage = new WSIFMessageElement(inputMsgElem);
+
+ boolean success = operation.executeRequestResponseOperation(inputMessage, outputMessage, faultMessage);
+ if (success) {
+ logger.debug("" + outputMessage);
+ return outputMessage;
+ } else {
+ throw new ComponentRegistryException("Excpetion at server " + faultMessage);
+ }
+ }
+
+ private void createMessage(String paramName, Object value, XmlElement inputMsgElem)
+ throws ComponentRegistryException {
+ XmlElement paramsElem = builder.newFragment(this.requestNS, paramName);
+ if (value instanceof String) {
+ paramsElem.addChild(value);
+ } else if (value instanceof Collection) {
+ Collection list = (Collection) value;
+ Iterator arrayValues = list.iterator();
+ while (arrayValues.hasNext()) {
+ XmlElement item = builder.newFragment("value");
+ item.addChild(arrayValues.next());
+ paramsElem.addChild(item);
+ }
+ } else if (value instanceof ArrayList) {
+ Collection list = (Collection) value;
+ Iterator arrayValues = list.iterator();
+ while (arrayValues.hasNext()) {
+ XmlElement item = builder.newFragment("value");
+ item.addChild(arrayValues.next());
+ paramsElem.addChild(item);
+ }
+ } else if (value instanceof String[]) {
+ String[] list = (String[]) value;
+ for (int i = 0; i < list.length; i++) {
+ XmlElement item = builder.newFragment("value");
+ item.addChild(list[i]);
+ paramsElem.addChild(item);
+ }
+ } else {
+ throw new ComponentRegistryException("Simple WS Client can not handle the value of type " + value);
+ }
+
+ inputMsgElem.addElement(paramsElem);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/globus/FileTransferConstants.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/globus/FileTransferConstants.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/globus/FileTransferConstants.java
new file mode 100644
index 0000000..f40256e
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/globus/FileTransferConstants.java
@@ -0,0 +1,38 @@
+/*
+ *
+ * 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.xbaya.globus;
+
+public class FileTransferConstants {
+ public static final String DATA_TYPE = "DATA_TYPE";
+ public static final String TRANSFER = "transfer";
+ public static final String SUBMISSION_ID = "submission_id";
+ public static final String TRANSFER_ITEM = "transfer_item";
+ public static final String SOURCE_ENDPOINT = "source_endpoint";
+ public static final String SOURCE_PATH = "source_path";
+ public static final String DESTINATION_ENDPOINT = "destination_endpoint";
+ public static final String DESTINATION_PATH = "destination_path";
+ public static final String DATA = "DATA";
+ public static final String SUBMISSION_ID_ENDPOINT = "/transfer/submission_id";
+ public static final String VALUE = "value";
+ public static final String TRANSFER_ENDPOINT = "/transfer";
+ public static final String TASK_ID = "task_id";
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/globus/GridFTPFileTransferClient.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/globus/GridFTPFileTransferClient.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/globus/GridFTPFileTransferClient.java
new file mode 100644
index 0000000..7d6530b
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/globus/GridFTPFileTransferClient.java
@@ -0,0 +1,238 @@
+///*
+// *
+// * 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.xbaya.globus;
+//
+//import org.globusonline.transfer.APIError;
+//import org.globusonline.transfer.BaseTransferAPIClient;
+//import org.globusonline.transfer.JSONTransferAPIClient;
+//import org.json.JSONArray;
+//import org.json.JSONException;
+//import org.json.JSONObject;
+//
+//import java.io.IOException;
+//import java.security.GeneralSecurityException;
+//import java.text.DateFormat;
+//import java.text.SimpleDateFormat;
+//import java.util.Date;
+//import java.util.HashMap;
+//import java.util.Iterator;
+//import java.util.Map;
+//
+//public class GridFTPFileTransferClient {
+// private JSONTransferAPIClient client;
+// private static DateFormat isoDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
+//
+// public GridFTPFileTransferClient(JSONTransferAPIClient client) {
+// this.client = client;
+// }
+//
+// public static void main(String args[]) {
+// String username = "heshan";
+// String caFile = "/home/heshan/Dev/globusonline/transfer-api-client-java.git/trunk/ca/gd-bundle_ca.cert";
+// String certFile = "/tmp/x509up_u780936";
+// String keyFile = "/tmp/x509up_u780936";
+// String baseUrl = null;
+//
+// String sourceEndpoint = "xsede#ranger";
+// String sourceFilePath = "~/tmp.log";
+// String destEndpoint = "xsede#trestles";
+// String destFilePath = "~/tmp.log.copy";
+//
+// // String destEndpoint = "heshan#my_testEndpoint";
+// // String sourceFilePath = "~/var_tables.mod";
+// try {
+// JSONTransferAPIClient c = new JSONTransferAPIClient(username, caFile, certFile, keyFile, baseUrl);
+// System.out.println("base url: " + c.getBaseUrl());
+// GridFTPFileTransferClient e = new GridFTPFileTransferClient(c);
+// e.transfer(sourceEndpoint, sourceFilePath, destEndpoint, destFilePath);
+// } catch (Exception e) {
+// e.printStackTrace();
+// }
+// }
+//
+// /**
+// * Transfers a file from source endpoint to destination endpoint.
+// *
+// * @param sourceEndpoint
+// * Source endpoint
+// * @param sourceFilePath
+// * Source file path
+// * @param destEndpoint
+// * Destination endpoint
+// * @param destFilePath
+// * Destination file path
+// * @throws IOException
+// * IOException
+// * @throws JSONException
+// * JSONException
+// * @throws GeneralSecurityException
+// * GeneralSecurityException
+// * @throws APIError
+// * APIError
+// */
+// public void transfer(String sourceEndpoint, String sourceFilePath, String destEndpoint, String destFilePath)
+// throws IOException, JSONException, GeneralSecurityException, APIError {
+// System.out.println("Starting transfer...");
+//
+// // displayTasksummary();
+// // displayTaskList(60 * 60 * 24 * 7); // tasks at most a week old
+// // displayEndpointList();
+//
+// if (!autoActivate(sourceEndpoint) || !autoActivate(destEndpoint)) {
+// System.err.println("Unable to auto activate go tutorial endpoints, " + " exiting");
+// return;
+// }
+//
+// // displayLs(sourceEndpoint, "~");
+// // displayLs(destEndpoint, "~");
+//
+// JSONTransferAPIClient.Result r = client.getResult(FileTransferConstants.SUBMISSION_ID_ENDPOINT);
+// String submissionId = r.document.getString(FileTransferConstants.VALUE);
+// JSONObject transfer = new JSONObject();
+// transfer.put(FileTransferConstants.DATA_TYPE, FileTransferConstants.TRANSFER);
+// transfer.put(FileTransferConstants.SUBMISSION_ID, submissionId);
+// JSONObject item = new JSONObject();
+// item.put(FileTransferConstants.DATA_TYPE, FileTransferConstants.TRANSFER_ITEM);
+// item.put(FileTransferConstants.SOURCE_ENDPOINT, sourceEndpoint);
+// item.put(FileTransferConstants.SOURCE_PATH, sourceFilePath);
+// item.put(FileTransferConstants.DESTINATION_ENDPOINT, destEndpoint);
+// item.put(FileTransferConstants.DESTINATION_PATH, destFilePath);
+// transfer.append(FileTransferConstants.DATA, item);
+//
+// r = client.postResult(FileTransferConstants.TRANSFER_ENDPOINT, transfer.toString(), null);
+// String taskId = r.document.getString(FileTransferConstants.TASK_ID);
+// if (!waitForTask(taskId, 120)) {
+// System.out.println("Transfer not complete after 2 minutes, exiting");
+// return;
+// }
+//
+// System.out.println("Transfer completed...");
+//
+// // displayTasksummary();
+// // displayLs(destEndpoint, "~");
+// }
+//
+// public void displayTasksummary() throws IOException, JSONException, GeneralSecurityException, APIError {
+// JSONTransferAPIClient.Result r = client.getResult("/tasksummary");
+// System.out.println("Task Summary for " + client.getUsername() + ": ");
+// Iterator keysIter = r.document.sortedKeys();
+// while (keysIter.hasNext()) {
+// String key = (String) keysIter.next();
+// if (!key.equals("DATA_TYPE"))
+// System.out.println(" " + key + ": " + r.document.getString(key));
+// }
+// }
+//
+// public void displayTaskList(long maxAge) throws IOException, JSONException, GeneralSecurityException, APIError {
+// Map<String, String> params = new HashMap<String, String>();
+// if (maxAge > 0) {
+// long minTime = System.currentTimeMillis() - 1000 * maxAge;
+// params.put("filter", "request_time:" + isoDateFormat.format(new Date(minTime)) + ",");
+// }
+// JSONTransferAPIClient.Result r = client.getResult("/task_list", params);
+//
+// int length = r.document.getInt("length");
+// if (length == 0) {
+// System.out.println("No tasks were submitted in the last " + maxAge + " seconds");
+// return;
+// }
+// JSONArray tasksArray = r.document.getJSONArray("DATA");
+// for (int i = 0; i < tasksArray.length(); i++) {
+// JSONObject taskObject = tasksArray.getJSONObject(i);
+// System.out.println("Task " + taskObject.getString("task_id") + ":");
+// displayTask(taskObject);
+// }
+// }
+//
+// private static void displayTask(JSONObject taskObject) throws JSONException {
+// Iterator keysIter = taskObject.sortedKeys();
+// while (keysIter.hasNext()) {
+// String key = (String) keysIter.next();
+// if (!key.equals("DATA_TYPE") && !key.equals("LINKS") && !key.endsWith("_link")) {
+// System.out.println(" " + key + ": " + taskObject.getString(key));
+// }
+// }
+// }
+//
+// public boolean autoActivate(String endpointName) throws IOException, JSONException, GeneralSecurityException,
+// APIError {
+// // Note: in a later release, auto-activation will be done at
+// // /autoactivate instead.
+// String resource = BaseTransferAPIClient.endpointPath(endpointName) + "/autoactivate";
+// JSONTransferAPIClient.Result r = client.postResult(resource, null, null);
+// String code = r.document.getString("code");
+// if (code.startsWith("AutoActivationFailed")) {
+// return false;
+// }
+// return true;
+// }
+//
+// public void displayLs(String endpointName, String path) throws IOException, JSONException,
+// GeneralSecurityException, APIError {
+// Map<String, String> params = new HashMap<String, String>();
+// if (path != null) {
+// params.put("path", path);
+// }
+// String resource = BaseTransferAPIClient.endpointPath(endpointName) + "/ls";
+// JSONTransferAPIClient.Result r = client.getResult(resource, params);
+// System.out.println("Contents of " + path + " on " + endpointName + ":");
+//
+// JSONArray fileArray = r.document.getJSONArray("DATA");
+// for (int i = 0; i < fileArray.length(); i++) {
+// JSONObject fileObject = fileArray.getJSONObject(i);
+// System.out.println(" " + fileObject.getString("name"));
+// Iterator keysIter = fileObject.sortedKeys();
+// while (keysIter.hasNext()) {
+// String key = (String) keysIter.next();
+// if (!key.equals("DATA_TYPE") && !key.equals("LINKS") && !key.endsWith("_link") && !key.equals("name")) {
+// System.out.println(" " + key + ": " + fileObject.getString(key));
+// }
+// }
+// }
+//
+// }
+//
+// public boolean waitForTask(String taskId, int timeout) throws IOException, JSONException, GeneralSecurityException,
+// APIError {
+// String status = "ACTIVE";
+// JSONTransferAPIClient.Result r;
+//
+// String resource = "/task/" + taskId;
+// Map<String, String> params = new HashMap<String, String>();
+// params.put("fields", "status");
+//
+// while (timeout > 0 && status.equals("ACTIVE")) {
+// r = client.getResult(resource, params);
+// status = r.document.getString("status");
+// try {
+// Thread.sleep(10000);
+// } catch (InterruptedException e) {
+// return false;
+// }
+// timeout -= 10;
+// }
+//
+// if (status.equals("ACTIVE"))
+// return false;
+// return true;
+// }
+//}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/graph/controller/NodeController.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/graph/controller/NodeController.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/graph/controller/NodeController.java
new file mode 100644
index 0000000..3ecf54c
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/graph/controller/NodeController.java
@@ -0,0 +1,199 @@
+/*
+ *
+ * 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.xbaya.graph.controller;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.airavata.workflow.model.graph.Edge;
+import org.apache.airavata.workflow.model.graph.Graph;
+import org.apache.airavata.workflow.model.graph.GraphPiece;
+import org.apache.airavata.workflow.model.graph.Node;
+import org.apache.airavata.workflow.model.graph.Node.NodeExecutionState;
+import org.apache.airavata.workflow.model.graph.Port;
+import org.apache.airavata.workflow.model.graph.amazon.InstanceNode;
+import org.apache.airavata.workflow.model.graph.amazon.TerminateInstanceNode;
+import org.apache.airavata.workflow.model.graph.dynamic.DynamicNode;
+import org.apache.airavata.workflow.model.graph.subworkflow.SubWorkflowNode;
+import org.apache.airavata.workflow.model.graph.system.BlockNode;
+import org.apache.airavata.workflow.model.graph.system.ConstantNode;
+import org.apache.airavata.workflow.model.graph.system.DifferedInputNode;
+import org.apache.airavata.workflow.model.graph.system.DoWhileNode;
+import org.apache.airavata.workflow.model.graph.system.EndBlockNode;
+import org.apache.airavata.workflow.model.graph.system.EndDoWhileNode;
+import org.apache.airavata.workflow.model.graph.system.EndForEachNode;
+import org.apache.airavata.workflow.model.graph.system.EndifNode;
+import org.apache.airavata.workflow.model.graph.system.ExitNode;
+import org.apache.airavata.workflow.model.graph.system.ForEachNode;
+import org.apache.airavata.workflow.model.graph.system.IfNode;
+import org.apache.airavata.workflow.model.graph.system.InputNode;
+import org.apache.airavata.workflow.model.graph.system.MemoNode;
+import org.apache.airavata.workflow.model.graph.system.OutputNode;
+import org.apache.airavata.workflow.model.graph.system.ReceiveNode;
+import org.apache.airavata.workflow.model.graph.system.S3InputNode;
+import org.apache.airavata.workflow.model.graph.system.StreamSourceNode;
+import org.apache.airavata.workflow.model.graph.ws.WSNode;
+import org.apache.airavata.workflow.model.graph.ws.WorkflowNode;
+import org.apache.airavata.xbaya.ui.graph.EdgeGUI;
+import org.apache.airavata.xbaya.ui.graph.GraphGUI;
+import org.apache.airavata.xbaya.ui.graph.GraphPieceGUI;
+import org.apache.airavata.xbaya.ui.graph.NodeGUI;
+import org.apache.airavata.xbaya.ui.graph.PortGUI;
+import org.apache.airavata.xbaya.ui.graph.amazon.InstanceNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.amazon.TerminateInstanceNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.dynamic.DynamicNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.subworkflow.SubWorkflowNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.system.BlockNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.system.ConstantNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.system.DifferedInputNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.system.DoWhileNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.system.EndBlockNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.system.EndDoWhileNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.system.EndForEachNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.system.EndifNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.system.ExitNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.system.ForEachNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.system.IfNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.system.InputNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.system.MemoNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.system.OutputNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.system.ReceiveNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.system.S3InputNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.system.StreamSourceNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.ws.WSNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.ws.WorkflowNodeGUI;
+
+public class NodeController {
+ private static Map<GraphPiece,GraphPieceGUI> nodeMap=new HashMap<GraphPiece, GraphPieceGUI>();
+// private static Map<Port,PortGUI> portMap=new HashMap<Port, PortGUI>();
+
+ public static GraphPieceGUI getGUI(GraphPiece node){
+ if (!nodeMap.containsKey(node)){
+ nodeMap.put(node,createNodeGUI(node));
+ }
+ return nodeMap.get(node);
+ }
+
+ public static GraphGUI getGUI(Graph node){
+ return (GraphGUI)getGUI((GraphPiece)node);
+ }
+
+ public static NodeGUI getGUI(Node node){
+ return (NodeGUI)getGUI((GraphPiece)node);
+ }
+
+ public static EdgeGUI getGUI(Edge port){
+ return (EdgeGUI)getGUI((GraphPiece)port);
+ }
+
+ public static PortGUI getGUI(Port port){
+ return (PortGUI)getGUI((GraphPiece)port);
+ }
+
+// public static PortGUI getGUI(Port node){
+// if (!portMap.containsKey(node)){
+// portMap.put(node,createPortGUI(node));
+// }
+// return portMap.get(node);
+// }
+//
+// private static PortGUI createPortGUI(Port port){
+// PortGUI portGUI=new PortGUI(port);
+// return portGUI;
+// }
+
+ private static GraphPieceGUI createNodeGUI(GraphPiece node){
+ GraphPieceGUI nodeGUI=null;
+ if (node instanceof SubWorkflowNode){
+ nodeGUI=new SubWorkflowNodeGUI((SubWorkflowNode)node);
+ } else if (node instanceof DynamicNode){
+ nodeGUI=new DynamicNodeGUI((DynamicNode)node);
+ } else if (node instanceof ConstantNode){
+ nodeGUI=new ConstantNodeGUI((ConstantNode)node);
+ } else if (node instanceof IfNode){
+ nodeGUI=new IfNodeGUI((IfNode)node);
+ } else if (node instanceof ExitNode){
+ nodeGUI=new ExitNodeGUI((ExitNode)node);
+ } else if (node instanceof OutputNode){
+ nodeGUI=new OutputNodeGUI((OutputNode)node);
+ } else if (node instanceof DifferedInputNode){
+ nodeGUI=new DifferedInputNodeGUI((DifferedInputNode)node);
+ } else if (node instanceof BlockNode){
+ nodeGUI=new BlockNodeGUI((BlockNode)node);
+ } else if (node instanceof EndForEachNode){
+ nodeGUI=new EndForEachNodeGUI((EndForEachNode)node);
+ } else if (node instanceof S3InputNode){
+ nodeGUI=new S3InputNodeGUI((S3InputNode)node);
+ } else if (node instanceof ForEachNode){
+ nodeGUI=new ForEachNodeGUI((ForEachNode)node);
+ }else if (node instanceof DoWhileNode){
+ nodeGUI=new DoWhileNodeGUI((DoWhileNode)node);
+ } else if (node instanceof EndDoWhileNode){
+ nodeGUI=new EndDoWhileNodeGUI((EndDoWhileNode)node);
+ } else if (node instanceof MemoNode){
+ nodeGUI=new MemoNodeGUI((MemoNode)node);
+ } else if (node instanceof ReceiveNode){
+ nodeGUI=new ReceiveNodeGUI((ReceiveNode)node);
+ } else if (node instanceof InputNode){
+ nodeGUI=new InputNodeGUI((InputNode)node);
+ } else if (node instanceof EndifNode){
+ nodeGUI=new EndifNodeGUI((EndifNode)node);
+ } else if (node instanceof EndBlockNode){
+ nodeGUI=new EndBlockNodeGUI((EndBlockNode)node);
+ } else if (node instanceof WorkflowNode){
+ nodeGUI=new WorkflowNodeGUI((WorkflowNode)node);
+ } else if (node instanceof WSNode){
+ nodeGUI=new WSNodeGUI((WSNode)node);
+// } else if (node instanceof Graph){
+// nodeGUI=new GraphGUI((Graph)node);
+// } else if (node instanceof GraphPiece){
+// nodeGUI=new GraphPieceGUI((GraphPiece)node);
+ } else if (node instanceof Port){
+ nodeGUI=new PortGUI((Port)node);
+ } else if (node instanceof Edge){
+ nodeGUI=new EdgeGUI((Edge)node);
+ } else if (node instanceof TerminateInstanceNode){
+ nodeGUI=new TerminateInstanceNodeGUI((TerminateInstanceNode)node);
+ } else if (node instanceof InstanceNode){
+ nodeGUI=new InstanceNodeGUI((InstanceNode)node);
+ } else if (node instanceof StreamSourceNode){
+ nodeGUI=new StreamSourceNodeGUI((StreamSourceNode)node);
+ } else if (node instanceof Graph){
+ nodeGUI=new GraphGUI((Graph)node);
+ }
+
+ return nodeGUI;
+ }
+
+ public static boolean isFinished(Node node){
+ return node.getState() == NodeExecutionState.FINISHED;
+ }
+ public static boolean isWaiting(Node node){
+ return node.getState() == NodeExecutionState.WAITING;
+ }
+ public static boolean isRunning(Node node){
+ return node.getState() == NodeExecutionState.EXECUTING;
+ }
+ public static boolean isFailed(Node node){
+ return node.getState() == NodeExecutionState.FAILED;
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/DoWhileHandler.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/DoWhileHandler.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/DoWhileHandler.java
new file mode 100644
index 0000000..a9b1027
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/DoWhileHandler.java
@@ -0,0 +1,251 @@
+/*
+ *
+ * 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.xbaya.interpretor;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
+
+import org.apache.airavata.workflow.model.component.Component;
+import org.apache.airavata.workflow.model.component.ws.WSComponent;
+import org.apache.airavata.workflow.model.exceptions.WorkflowException;
+import org.apache.airavata.workflow.model.exceptions.WorkflowRuntimeException;
+import org.apache.airavata.workflow.model.graph.ControlPort;
+import org.apache.airavata.workflow.model.graph.DataPort;
+import org.apache.airavata.workflow.model.graph.Node;
+import org.apache.airavata.workflow.model.graph.Node.NodeExecutionState;
+import org.apache.airavata.workflow.model.graph.impl.EdgeImpl;
+import org.apache.airavata.workflow.model.graph.system.DoWhileNode;
+import org.apache.airavata.workflow.model.graph.system.EndDoWhileNode;
+import org.apache.airavata.xbaya.graph.controller.NodeController;
+import org.apache.airavata.xbaya.invoker.Invoker;
+import org.apache.airavata.xbaya.ui.monitor.MonitorEventHandler.NodeState;
+import org.apache.airavata.xbaya.util.InterpreterUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DoWhileHandler implements Callable<Boolean> {
+ private static Logger log = LoggerFactory.getLogger(DoWhileHandler.class);
+ private DoWhileNode dowhilenode;
+ private Map<Node, Invoker> invokerMap;
+ private ArrayList<Node> waitingNode;
+ private ArrayList<Node> finishedNodes;
+ private WorkflowInterpreter interpreter;
+ private ExecutorService threadExecutor;
+
+ /**
+ *
+ * Constructs a DoWhileHandler.
+ *
+ * @param node
+ * @param invokerMap
+ * @param waitingNode
+ * @param finishedNodes
+ * @param interpreter
+ */
+
+ public DoWhileHandler(DoWhileNode node, Map<Node, Invoker> invokerMap, ArrayList<Node> waitingNode, ArrayList<Node> finishedNodes,
+ WorkflowInterpreter interpreter, ExecutorService threadExecutor) {
+ this.dowhilenode = node;
+ this.invokerMap = invokerMap;
+ this.waitingNode = waitingNode;
+ this.finishedNodes = finishedNodes;
+ this.interpreter = interpreter;
+ this.threadExecutor = threadExecutor;
+ }
+
+ /**
+ * To evaluate dowhile condition with the input values
+ *
+ * @param doWhileNode
+ * @param inputPorts
+ * @param invokerMap
+ * @return boolean value
+ * @throws WorkFlowInterpreterException
+ * @throws XBayaException
+ */
+ private boolean evaluate(DoWhileNode doWhileNode, List<DataPort> inputPorts, Map<Node, Invoker> invokerMap) throws WorkFlowInterpreterException,
+ WorkflowException {
+ String booleanExpression = doWhileNode.getXpath();
+ if (booleanExpression == null) {
+ throw new WorkFlowInterpreterException("XPath for if cannot be null");
+ }
+
+ int i = 0;
+ for (DataPort port : inputPorts) {
+ Object inputVal1 = InterpreterUtil.findInputFromPort(port, invokerMap);
+ if (null == inputVal1) {
+ throw new WorkFlowInterpreterException("Unable to find inputs for the node:" + doWhileNode.getID());
+ }
+ booleanExpression = booleanExpression.replaceAll("\\$" + i, "'" + inputVal1 + "'");
+ i++;
+ }
+ Boolean result = new Boolean(false);
+ // Now the XPath expression
+ try {
+ XPathFactory xpathFact = XPathFactory.newInstance();
+ XPath xpath = xpathFact.newXPath();
+ result = (Boolean) xpath.evaluate(booleanExpression, booleanExpression, XPathConstants.BOOLEAN);
+ } catch (XPathExpressionException e) {
+ throw new WorkFlowInterpreterException("Cannot evaluate XPath in If Condition: " + booleanExpression);
+ }
+ return result.booleanValue();
+ }
+
+ /**
+ * To get only web service components attached to dowhile
+ *
+ * @param waitingNode
+ * @return list
+ */
+ private ArrayList<Node> handleDowhile(ArrayList<Node> waitingNode, ArrayList<Node> finishedNodes) {
+ ArrayList<Node> list = new ArrayList<Node>();
+ for (Node node : waitingNode) {
+ Component component = node.getComponent();
+ if (component instanceof WSComponent) {
+ ControlPort control = node.getControlInPort();
+ boolean controlDone = true;
+ if (control != null) {
+ for (EdgeImpl edge : control.getEdges()) {
+ controlDone = controlDone && (finishedNodes.contains(edge.getFromPort().getNode())
+ || ((ControlPort) edge.getFromPort()).isConditionMet());
+ }
+ }
+
+ /*
+ * Check for input ports
+ */
+ List<DataPort> inputPorts = node.getInputPorts();
+ boolean inputsDone = true;
+ for (DataPort dataPort : inputPorts) {
+ inputsDone = inputsDone && finishedNodes.contains(dataPort.getFromNode());
+ }
+ if (inputsDone && controlDone) {
+ list.add(node);
+ }
+ }
+ }
+
+ return list;
+ }
+
+ /**
+ * @see java.util.concurrent.Callable#call()
+ */
+ @Override
+ public Boolean call() throws Exception {
+ log.debug("Invoked Dowhile node");
+ SystemComponentInvoker dowhileinvoker = new SystemComponentInvoker();
+ // TODO check for multiple input case
+ Object inputVal1 = InterpreterUtil.findInputFromPort(this.dowhilenode.getInputPort(0), this.invokerMap);
+ dowhileinvoker.addOutput(this.dowhilenode.getOutputPort(0).getID(), inputVal1);
+ this.invokerMap.put(this.dowhilenode, dowhileinvoker);
+ this.finishedNodes.add(this.dowhilenode);
+
+ ArrayList<Node> readyNodes = this.handleDowhile(this.waitingNode, this.finishedNodes);
+
+ // When you are starting 1st time its getting input from 1st node and
+ // invoking all the webservice components
+ if (readyNodes.size() != 1) {
+ throw new WorkflowRuntimeException("More than one dowhile execution not supported");
+ }
+ Node donode = readyNodes.get(0);
+ this.interpreter.handleWSComponent(donode);
+ log.debug("Invoked service " + donode.getName());
+
+ List<DataPort> inputPorts = this.dowhilenode.getInputPorts();
+ boolean runflag = true;
+ while (runflag) {
+ while (true) {
+ if (NodeController.isRunning(donode) || NodeController.isWaiting(donode)) {
+ Thread.sleep(500);
+ log.debug("Service " + donode.getName() + " waiting");
+ } else if (NodeController.isFinished(donode)) {
+ log.debug("Service " + donode.getName() + " Finished");
+ List<DataPort> ports = this.dowhilenode.getOutputPorts();
+ for (int outputPortIndex = 0, inputPortIndex = 1; outputPortIndex < ports.size(); outputPortIndex++) {
+ Object inputValue = InterpreterUtil.findInputFromPort(this.dowhilenode.getInputPort(inputPortIndex), this.invokerMap);
+ dowhileinvoker.addOutput(this.dowhilenode.getOutputPort(outputPortIndex).getID(), inputValue);
+ }
+ break;
+ } else if (NodeController.isFailed(donode)) {
+ log.debug("Service " + donode.getName() + " Failed");
+ runflag = false;
+ dowhilenode.setState(NodeExecutionState.FAILED);
+ this.threadExecutor.shutdown();
+ return false;
+ } else if (donode.isBreak()) {
+ log.debug("Service " + donode.getName() + " set to break");
+ runflag = false;
+ break;
+ } else {
+ log.error("Service " + donode.getName() + " have unknow status");
+ throw new WorkFlowInterpreterException("Unknow status of the node");
+ }
+ }
+
+ this.invokerMap.put(this.dowhilenode, dowhileinvoker);
+ log.debug("Going to evaluate do while expression for " + donode.getName());
+ if (!evaluate(this.dowhilenode, inputPorts, this.invokerMap)) {
+ log.debug("Expression evaluation is false so calling EndDoWhile");
+ runflag = false;
+ } else {
+ if (readyNodes.size() != 1) {
+ throw new WorkFlowInterpreterException("More than one dowhile execution not supported");
+ }
+
+ Node whileNode = readyNodes.get(0);
+ log.debug("Expression evaluation is true so invoking service again " + whileNode.getName());
+
+ this.interpreter.handleWSComponent(whileNode);
+ }
+ }
+ // WS node should be done
+ dowhilenode.setState(NodeExecutionState.FINISHED);
+ EndDoWhileNode endDoWhileNode = this.dowhilenode.getEndDoWhileNode();
+
+ // /////////////////////////////////////////////////////////
+ // // Do WHile finished execution thus we can set the //////
+ // //inputs to the EndDOWHile and resume the executions/////
+ SystemComponentInvoker invoker = new SystemComponentInvoker();
+
+ List<DataPort> inputports = endDoWhileNode.getInputPorts();
+
+ for (int inputPortIndex = 0; inputPortIndex < inputports.size(); inputPortIndex++) {
+ Object inputVal = dowhileinvoker.getOutput(inputports.get(inputPortIndex).getFromPort().getID());
+ invoker.addOutput(endDoWhileNode.getOutputPort(inputPortIndex).getID(), inputVal);
+ }
+
+ this.invokerMap.put(endDoWhileNode, invoker);
+ // TODO send mail once the iterations have converged
+
+ endDoWhileNode.setState(NodeExecutionState.FINISHED);
+ this.threadExecutor.shutdown();
+ return true;
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/ExperimentTemplate.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/ExperimentTemplate.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/ExperimentTemplate.java
new file mode 100644
index 0000000..c08ee34
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/ExperimentTemplate.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.xbaya.interpretor;
+
+import java.util.List;
+
+public class ExperimentTemplate {
+ private List<WorkflowExecutionTemplate> workflowExecutionTemplates;
+
+ public List<WorkflowExecutionTemplate> getWorkflowExecutionTemplates() {
+ return workflowExecutionTemplates;
+ }
+
+ public void setWorkflowExecutionTemplates(
+ List<WorkflowExecutionTemplate> workflowExecutionTemplates) {
+ this.workflowExecutionTemplates = workflowExecutionTemplates;
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/GUIWorkflowInterpreterInteractorImpl.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/GUIWorkflowInterpreterInteractorImpl.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/GUIWorkflowInterpreterInteractorImpl.java
new file mode 100644
index 0000000..526610d
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/GUIWorkflowInterpreterInteractorImpl.java
@@ -0,0 +1,211 @@
+/*
+ *
+ * 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.xbaya.interpretor;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.airavata.workflow.model.graph.Node;
+import org.apache.airavata.workflow.model.graph.ws.WSGraph;
+import org.apache.airavata.workflow.model.wf.Workflow;
+import org.apache.airavata.workflow.model.wf.WorkflowExecutionState;
+import org.apache.airavata.ws.monitor.MonitorException;
+import org.apache.airavata.xbaya.XBayaEngine;
+import org.apache.airavata.xbaya.graph.controller.NodeController;
+import org.apache.airavata.xbaya.ui.XBayaGUI;
+import org.apache.airavata.xbaya.ui.dialogs.WaitDialog;
+import org.apache.airavata.xbaya.ui.graph.subworkflow.SubWorkflowNodeGUI;
+import org.apache.airavata.xbaya.ui.graph.system.DifferedInputHandler;
+import org.apache.airavata.xbaya.ui.utils.Cancelable;
+import org.apache.airavata.xbaya.util.InterpreterUtil;
+
+public class GUIWorkflowInterpreterInteractorImpl implements
+ WorkflowInterpreterInteractor {
+ private XBayaGUI xbayaGUI;
+ private Workflow workflow;
+ private XBayaEngine engine;
+
+ private Map<String, WaitDialog> taskDialogs = new HashMap<String, WaitDialog>();
+
+ public GUIWorkflowInterpreterInteractorImpl(XBayaEngine engine,
+ Workflow workflow) {
+ this.engine = engine;
+ this.xbayaGUI = engine.getGUI();
+ this.setWorkflow(workflow);
+ }
+
+ @Override
+ public boolean notify(WorkflowExecutionMessage messageType, WorkflowInterpreterConfiguration config, Object data) {
+ switch (messageType) {
+ case NODE_STATE_CHANGED:
+ xbayaGUI.getGraphCanvas().repaint();
+ break;
+ case EXECUTION_STATE_CHANGED:
+ WorkflowExecutionState state = (WorkflowExecutionState) data;
+ // if (state==WorkflowExecutionState.PAUSED ||
+ // state==WorkflowExecutionState.STOPPED) {
+ // if (getWorkflow().getExecutionState() ==
+ // WorkflowExecutionState.RUNNING
+ // || getWorkflow().getExecutionState() ==
+ // WorkflowExecutionState.STEP) {
+ // } else {
+ // throw new WorkflowRuntimeException(
+ // "Cannot pause when not running");
+ // }
+ // }
+ getWorkflow().setExecutionState(state);
+ if (state==WorkflowExecutionState.PAUSED){
+ if (config.getWorkflow().getExecutionState() == WorkflowExecutionState.RUNNING
+ || config.getWorkflow().getExecutionState() == WorkflowExecutionState.STEP) {
+ config.getGUI().getToolbar().getPlayAction()
+ .actionPerformed(null);
+ }
+ }
+ break;
+ case EXECUTION_TASK_START:
+ TaskNotification task = (TaskNotification) data;
+ final WaitDialog waitDialog = new WaitDialog(new Cancelable() {
+ @Override
+ public void cancel() {
+ // Do nothing
+ }
+ }, task.messageTitle, task.message, this.xbayaGUI);
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ waitDialog.show();
+ }
+ }).start();
+ taskDialogs.put(task.messageId, waitDialog);
+ break;
+ case EXECUTION_TASK_END:
+ task = (TaskNotification) data;
+ if (taskDialogs.containsKey(task.messageId)) {
+ taskDialogs.get(task.messageId).hide();
+ taskDialogs.remove(task.messageId);
+ }
+ break;
+ case EXECUTION_ERROR:
+ xbayaGUI.getErrorWindow().error((Exception) data);
+ break;
+ case OPEN_SUBWORKFLOW:
+ ((SubWorkflowNodeGUI) NodeController.getGUI((Node) data))
+ .openWorkflowTab(config.getGUI());
+ break;
+ case EXECUTION_CLEANUP:
+ this.engine.resetWorkflowInterpreter();
+ try {
+ config.getMonitor().stop();
+ } catch (MonitorException e) {
+ e.printStackTrace();
+ } finally {
+ this.engine.getMonitor().resetEventData();
+ }
+ break;
+ case HANDLE_DEPENDENT_NODES_DIFFERED_INPUTS:
+ ArrayList<Node> waitingNodes = InterpreterUtil.getWaitingNodesDynamically((WSGraph)data);
+ for (Node readyNode : waitingNodes) {
+ DifferedInputHandler.handleDifferredInputsofDependentNodes(
+ readyNode, config.getGUI());
+ }
+ break;
+ default:
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public Object retrieveData(WorkflowExecutionMessage messageType, WorkflowInterpreterConfiguration config, Object data)
+ throws Exception {
+ Object result = null;
+ switch (messageType) {
+ case INPUT_WORKFLOWINTERPRETER_FOR_WORKFLOW:
+ Workflow subWorkflow= (Workflow) data;
+ WorkflowInterpreterConfiguration workflowInterpreterConfiguration = new WorkflowInterpreterConfiguration(subWorkflow,config.getTopic(),config.getMessageBoxURL(), config.getMessageBrokerURL(), config.getRegistry(), config.getConfiguration(), config.getGUI(), this.engine.getMonitor());
+ workflowInterpreterConfiguration.setActOnProvenance(config.isActOnProvenance());
+ workflowInterpreterConfiguration.setSubWorkflow(true);
+ if (config.isTestMode()){
+ workflowInterpreterConfiguration.setNotifier(new StandaloneNotificationSender(workflowInterpreterConfiguration.getTopic(),workflowInterpreterConfiguration.getWorkflow()));
+ }
+ result = new WorkflowInterpreter(workflowInterpreterConfiguration,
+ new GUIWorkflowInterpreterInteractorImpl(engine,
+ config.getWorkflow()));
+ this.engine.registerWorkflowInterpreter((WorkflowInterpreter)result);
+ break;
+// case INPUT_GSS_CREDENTIAL:
+// MyProxyChecker myProxyChecker = new MyProxyChecker(this.engine);
+// myProxyChecker.loadIfNecessary();
+// MyProxyClient myProxyClient = this.engine.getMyProxyClient();
+// result = myProxyClient.getProxy();
+// break;
+// case INPUT_LEAD_CONTEXT_HEADER:
+// Node node = (Node) data;
+// result = XBayaUtil.buildLeadContextHeader(this.getWorkflow(),
+// config.getConfiguration(),
+// new MonitorConfiguration(config.getMessageBrokerURL(),
+// config.getTopic(), true,
+// config
+// .getMessageBoxURL()), node.getID(),
+// null);
+// break;
+ default:
+ break;
+ }
+ return result;
+ }
+
+ public Workflow getWorkflow() {
+ return workflow;
+ }
+
+ public void setWorkflow(Workflow workflow) {
+ this.workflow = workflow;
+ }
+
+ @Override
+ public void pauseExecution(WorkflowInterpreterConfiguration config) {
+ notify(WorkflowExecutionMessage.EXECUTION_STATE_CHANGED,config, WorkflowExecutionState.PAUSED);
+ }
+
+ @Override
+ public void resumeExecution(WorkflowInterpreterConfiguration config) {
+ notify(WorkflowExecutionMessage.EXECUTION_STATE_CHANGED,config, WorkflowExecutionState.RUNNING);
+ }
+
+ @Override
+ public void terminateExecution(WorkflowInterpreterConfiguration config) {
+ notify(WorkflowExecutionMessage.EXECUTION_STATE_CHANGED,config, WorkflowExecutionState.STOPPED);
+ }
+
+ @Override
+ public boolean isExecutionPaused(WorkflowInterpreterConfiguration config) {
+ return config.getWorkflow().getExecutionState()==WorkflowExecutionState.PAUSED;
+ }
+
+ @Override
+ public boolean isExecutionTerminated(WorkflowInterpreterConfiguration config) {
+ return config.getWorkflow().getExecutionState()==WorkflowExecutionState.STOPPED;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/HeaderConstants.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/HeaderConstants.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/HeaderConstants.java
new file mode 100644
index 0000000..1e0bf7c
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/HeaderConstants.java
@@ -0,0 +1,33 @@
+/*
+ *
+ * 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.xbaya.interpretor;
+
+public interface HeaderConstants {
+
+ public static final String HEADER_ELEMENT_GFAC = "gfac";
+ public static final String HEADER_ELEMENT_REGISTRY = "registry";
+ public static final String HEADER_ELEMENT_PROXYSERVER = "proxyserver";
+ public static final String HEADER_ELEMENT_MSGBOX = "msgbox";
+ public static final String HEADER_ELEMENT_DSC = "dsc";
+ public static final String HEADER_ELEMENT_BROKER = "broker";
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/SSWorkflowInterpreterInteractorImpl.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/SSWorkflowInterpreterInteractorImpl.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/SSWorkflowInterpreterInteractorImpl.java
new file mode 100644
index 0000000..32bd66b
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/SSWorkflowInterpreterInteractorImpl.java
@@ -0,0 +1,118 @@
+/*
+ *
+ * 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.xbaya.interpretor;
+
+import org.apache.airavata.workflow.model.wf.Workflow;
+import org.apache.airavata.workflow.model.wf.WorkflowExecutionState;
+
+public class SSWorkflowInterpreterInteractorImpl implements
+ WorkflowInterpreterInteractor {
+
+ @Override
+ public boolean notify(WorkflowExecutionMessage messageType, WorkflowInterpreterConfiguration config, Object data) {
+ switch (messageType) {
+ case NODE_STATE_CHANGED:
+ break;
+ case EXECUTION_STATE_CHANGED:
+ WorkflowExecutionState state = (WorkflowExecutionState) data;
+ config.getWorkflow().setExecutionState(state);
+// if (state == WorkflowExecutionState.PAUSED
+// || state == WorkflowExecutionState.STOPPED) {
+// config.getWorkflow().setExecutionState(WorkflowExecutionState.STOPPED);
+// }else if (state == WorkflowExecutionState.RUNNING) {
+// config.getWorkflow().setExecutionState(WorkflowExecutionState.RUNNING);
+// }
+ break;
+ case EXECUTION_TASK_START:
+ break;
+ case EXECUTION_TASK_END:
+ break;
+ case OPEN_SUBWORKFLOW:
+ break;
+ case HANDLE_DEPENDENT_NODES_DIFFERED_INPUTS:
+ break;
+ default:
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public Object retrieveData(WorkflowExecutionMessage messageType, WorkflowInterpreterConfiguration config, Object data)
+ throws Exception {
+ Object result = null;
+ switch (messageType) {
+ case INPUT_WORKFLOWINTERPRETER_FOR_WORKFLOW:
+ Workflow subWorkflow= (Workflow) data;
+ WorkflowInterpreterConfiguration workflowInterpreterConfiguration = new WorkflowInterpreterConfiguration(subWorkflow,config.getTopic(),config.getMessageBoxURL(), config.getMessageBrokerURL(), config.getRegistry(), config.getConfiguration(), config.getGUI(), config.getMonitor());
+ if (config.isTestMode()){
+ workflowInterpreterConfiguration.setNotifier(new StandaloneNotificationSender(workflowInterpreterConfiguration.getTopic(),workflowInterpreterConfiguration.getWorkflow()));
+ }
+ result = new WorkflowInterpreter(workflowInterpreterConfiguration
+ ,
+ new SSWorkflowInterpreterInteractorImpl());
+ break;
+// case INPUT_GSS_CREDENTIAL:
+// WorkflowInterpreter w = (WorkflowInterpreter) data;
+// result = SecurityUtil.getGSSCredential(w.getUsername(),
+// w.getPassword(), w.getConfig().getConfiguration().getMyProxyServer());
+// break;
+// case INPUT_LEAD_CONTEXT_HEADER:
+// Node node = (Node) data;
+// result = XBayaUtil.buildLeadContextHeader(config.getWorkflow(), config.getConfiguration(),
+// new MonitorConfiguration(config.getMessageBrokerURL(),
+// config.getTopic(), true,
+// config.getMessageBoxURL()), node.getID(),
+// null);
+// break;
+ default:
+ break;
+ }
+ return result;
+ }
+
+ @Override
+ public void pauseExecution(WorkflowInterpreterConfiguration config) {
+ notify(WorkflowExecutionMessage.EXECUTION_STATE_CHANGED,config, WorkflowExecutionState.PAUSED);
+ }
+
+ @Override
+ public void resumeExecution(WorkflowInterpreterConfiguration config) {
+ notify(WorkflowExecutionMessage.EXECUTION_STATE_CHANGED,config, WorkflowExecutionState.RUNNING);
+ }
+
+ @Override
+ public void terminateExecution(WorkflowInterpreterConfiguration config) {
+ notify(WorkflowExecutionMessage.EXECUTION_STATE_CHANGED,config, WorkflowExecutionState.STOPPED);
+ }
+
+ @Override
+ public boolean isExecutionPaused(WorkflowInterpreterConfiguration config) {
+ return config.getWorkflow().getExecutionState()==WorkflowExecutionState.PAUSED;
+ }
+
+ @Override
+ public boolean isExecutionTerminated(WorkflowInterpreterConfiguration config) {
+ return config.getWorkflow().getExecutionState()==WorkflowExecutionState.STOPPED;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/StandaloneNotificationSender.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/StandaloneNotificationSender.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/StandaloneNotificationSender.java
new file mode 100644
index 0000000..432bc56
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/StandaloneNotificationSender.java
@@ -0,0 +1,135 @@
+/*
+ *
+ * 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.xbaya.interpretor;
+
+import java.net.URI;
+import java.util.List;
+
+import org.apache.airavata.common.utils.StringUtil;
+import org.apache.airavata.workflow.model.graph.Node.NodeExecutionState;
+import org.apache.airavata.workflow.model.graph.system.InputNode;
+import org.apache.airavata.workflow.model.graph.system.OutputNode;
+import org.apache.airavata.workflow.model.graph.util.GraphUtil;
+import org.apache.airavata.workflow.model.wf.Workflow;
+import org.apache.airavata.xbaya.XBayaConstants;
+import org.apache.airavata.xbaya.graph.controller.NodeController;
+import org.apache.airavata.xbaya.jython.lib.ServiceNotifiable;
+import org.apache.airavata.xbaya.jython.lib.StandaloneServiceNotificationSender;
+import org.apache.airavata.xbaya.jython.lib.WorkflowNotifiable;
+import org.apache.airavata.xbaya.ui.monitor.MonitorEventHandler.NodeState;
+import org.apache.axis2.addressing.EndpointReference;
+import org.python.core.PyObject;
+
+public class StandaloneNotificationSender implements WorkflowNotifiable {
+
+ private Workflow workflow;
+ private URI workflowID;
+
+ public StandaloneNotificationSender(String topic, Workflow workflow) {
+ this.workflow = workflow;
+ this.workflowID = URI.create(StringUtil.convertToJavaIdentifier(topic));
+ }
+
+ @Override
+ public EndpointReference getEventSink() {
+ return new EndpointReference(XBayaConstants.DEFAULT_BROKER_URL.toString());
+ }
+
+ @Override
+ public void workflowStarted(PyObject[] args, String[] keywords) {
+ List<InputNode> inputs = GraphUtil.getInputNodes(this.workflow.getGraph());
+ for (InputNode inputNode : inputs) {
+ inputNode.setState(NodeExecutionState.FINISHED);
+ }
+
+ }
+
+ @Override
+ public void workflowStarted(Object[] args, String[] keywords) {
+ List<InputNode> inputs = GraphUtil.getInputNodes(this.workflow.getGraph());
+ for (InputNode inputNode : inputs) {
+ inputNode.setState(NodeExecutionState.FINISHED);
+ }
+ }
+
+ @Override
+ public void workflowFinished(Object[] args, String[] keywords) {
+ List<OutputNode> outputs = GraphUtil.getOutputNodes(this.workflow.getGraph());
+ for (OutputNode outputNode : outputs) {
+ outputNode.setState(NodeExecutionState.EXECUTING);
+ }
+
+ }
+
+ @Override
+ public void sendingPartialResults(Object[] args, String[] keywords) {
+ // noop
+
+ }
+
+ @Override
+ public void workflowFinished(PyObject[] args, String[] keywords) {
+ List<OutputNode> outputs = GraphUtil.getOutputNodes(this.workflow.getGraph());
+ for (OutputNode outputNode : outputs) {
+ outputNode.setState(NodeExecutionState.EXECUTING);
+ }
+
+ }
+
+ @Override
+ public void workflowTerminated() {
+ // noop
+
+ }
+
+ @Override
+ public void workflowFailed(String message) {
+ // noop
+
+ }
+
+ @Override
+ public void workflowFailed(Throwable e) {
+ // noop
+
+ }
+
+ @Override
+ public void workflowFailed(String message, Throwable e) {
+ // noop
+
+ }
+
+ @Override
+ public ServiceNotifiable createServiceNotificationSender(String nodeID) {
+ return new StandaloneServiceNotificationSender(this.workflow, this.workflowID);
+ }
+
+ @Override
+ public void cleanup(){
+
+ }
+
+ public String getTopic() {
+ return this.workflowID.toASCIIString();
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/SystemComponentInvoker.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/SystemComponentInvoker.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/SystemComponentInvoker.java
new file mode 100644
index 0000000..d6a075a
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/SystemComponentInvoker.java
@@ -0,0 +1,114 @@
+/*
+ *
+ * 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.xbaya.interpretor;
+
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.apache.airavata.workflow.model.exceptions.WorkflowException;
+import org.apache.airavata.xbaya.invoker.Invoker;
+
+import xsul.wsif.WSIFMessage;
+import xsul.xwsif_runtime.WSIFClient;
+
+public class SystemComponentInvoker implements Invoker {
+
+ private Map<String, Object> outputs = new Hashtable<String, Object>();
+
+ /**
+ *
+ * @param key
+ * @param value
+ */
+ public void addOutput(String key, Object value) {
+ outputs.put(key, value);
+ }
+
+ /**
+ * @see org.apache.airavata.xbaya.invoker.Invoker#getOutput(java.lang.String)
+ */
+ @Override
+ public Object getOutput(String name) {
+ Object out = null;
+ while (out == null) {
+ try {
+ out = this.outputs.get(name);
+ Thread.sleep(200);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ return out;
+ }
+
+ /**
+ * @see org.apache.airavata.xbaya.invoker.Invoker#getOutputs()
+ */
+ @Override
+ public WSIFMessage getOutputs() {
+ return null;
+ }
+
+ /**
+ * @see org.apache.airavata.xbaya.invoker.Invoker#invoke()
+ */
+ @Override
+ public boolean invoke() {
+ return true;
+ }
+
+ /**
+ * @see org.apache.airavata.xbaya.invoker.Invoker#setInput(java.lang.String, java.lang.Object)
+ */
+ @Override
+ public void setInput(String name, Object value) {
+ }
+
+ /**
+ * @see org.apache.airavata.xbaya.wXPath Operatorsorkflow.Invoker#setOperation(java.lang.String)
+ */
+ @Override
+ public void setOperation(String operationName) {
+ }
+
+ /**
+ * @see org.apache.airavata.xbaya.invoker.Invoker#setup()
+ */
+ @Override
+ public void setup() {
+ }
+
+ @Override
+ public WSIFClient getClient() {
+ return null;
+ }
+
+ @Override
+ public WSIFMessage getInputs() throws WorkflowException {
+ return null;
+ }
+
+ @Override
+ public WSIFMessage getFault() throws WorkflowException {
+ return null;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkFlowInterpreterException.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkFlowInterpreterException.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkFlowInterpreterException.java
new file mode 100644
index 0000000..7ec87e5
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkFlowInterpreterException.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.xbaya.interpretor;
+
+public class WorkFlowInterpreterException extends RuntimeException {
+
+ public WorkFlowInterpreterException() {
+ super();
+ }
+
+ public WorkFlowInterpreterException(String message) {
+ super(message);
+ }
+
+ public WorkFlowInterpreterException(Throwable e) {
+ super(e);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowExecutionMessage.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowExecutionMessage.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowExecutionMessage.java
new file mode 100644
index 0000000..98743a4
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowExecutionMessage.java
@@ -0,0 +1,40 @@
+/*
+ *
+ * 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.xbaya.interpretor;
+
+public enum WorkflowExecutionMessage {
+ NODE_STATE_CHANGED,
+ //this.engine.getGUI().getGraphCanvas().repaint();
+ EXECUTION_STATE_CHANGED,
+ EXECUTION_RESUME,
+ EXECUTION_TASK_START,
+ EXECUTION_TASK_END,
+ EXECUTION_ERROR,
+ EXECUTION_CLEANUP,
+ OPEN_SUBWORKFLOW,
+ HANDLE_DEPENDENT_NODES_DIFFERED_INPUTS,
+ INPUT_WORKFLOWINTERPRETER_FOR_WORKFLOW,
+ INPUT_GSS_CREDENTIAL,
+ INPUT_LEAD_CONTEXT_HEADER,
+ INPUT_GFAC_INVOKER,
+
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowExecutionTemplate.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowExecutionTemplate.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowExecutionTemplate.java
new file mode 100644
index 0000000..4c34032
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowExecutionTemplate.java
@@ -0,0 +1,51 @@
+/*
+ *
+ * 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.xbaya.interpretor;
+
+import java.util.List;
+
+import org.apache.airavata.client.api.ExperimentAdvanceOptions;
+import org.apache.airavata.workflow.model.wf.WorkflowInput;
+
+public class WorkflowExecutionTemplate {
+ private String workflowTemplateName;
+ private List<WorkflowInput> input;
+ private ExperimentAdvanceOptions advanceOptions;
+ public String getWorkflowTemplateName() {
+ return workflowTemplateName;
+ }
+ public void setWorkflowTemplateName(String workflowTemplateName) {
+ this.workflowTemplateName = workflowTemplateName;
+ }
+ public List<WorkflowInput> getInput() {
+ return input;
+ }
+ public void setInput(List<WorkflowInput> input) {
+ this.input = input;
+ }
+ public ExperimentAdvanceOptions getAdvanceOptions() {
+ return advanceOptions;
+ }
+ public void setAdvanceOptions(ExperimentAdvanceOptions advanceOptions) {
+ this.advanceOptions = advanceOptions;
+ }
+}