You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ra...@apache.org on 2012/06/15 17:34:38 UTC
svn commit: r1350656 -
/incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/util/InterpreterUtil.java
Author: raminder
Date: Fri Jun 15 15:34:38 2012
New Revision: 1350656
URL: http://svn.apache.org/viewvc?rev=1350656&view=rev
Log:
commit discussed on mailing list and AIRAVATA-444
Modified:
incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/util/InterpreterUtil.java
Modified: incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/util/InterpreterUtil.java
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/util/InterpreterUtil.java?rev=1350656&r1=1350655&r2=1350656&view=diff
==============================================================================
--- incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/util/InterpreterUtil.java (original)
+++ incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/util/InterpreterUtil.java Fri Jun 15 15:34:38 2012
@@ -17,7 +17,7 @@
* specific language governing permissions and limitations
* under the License.
*
-*/
+ */
package org.apache.airavata.xbaya.util;
import java.awt.Color;
@@ -61,118 +61,90 @@ import xsul5.wsdl.WsdlPort;
import xsul5.wsdl.WsdlService;
public class InterpreterUtil {
- /**
- * This method returns the input values for given foreach node
- * @param forEachNode
- * @param listOfValues
- * @param invokerMap
- * @return
- * @throws WorkflowException
- */
- public static Object getInputsForForEachNode(final ForEachNode forEachNode,
- final LinkedList<String> listOfValues, Map<Node, Invoker> invokerMap) throws WorkflowException {
- List<DataPort> inputPorts = forEachNode.getInputPorts();
-
- Object returnValForProvenance = null;
- for(DataPort inputPort:inputPorts){
-
-
- Node forEachInputNode = inputPort.getFromNode();
- // if input node for for-each is WSNode
- if (forEachInputNode instanceof InputNode) {
- for (DataPort dataPort : forEachNode.getInputPorts()) {
- returnValForProvenance = InterpreterUtil
- .findInputFromPort(dataPort, invokerMap);
- if (null == returnValForProvenance) {
- throw new WorkFlowInterpreterException(
- "Unable to find input for the node:"
- + forEachNode.getID());
- }
- String[] vals = returnValForProvenance.toString().split(",");
- listOfValues.addAll(Arrays.asList(vals));
- }
- } else {
- Invoker workflowInvoker = invokerMap
- .get(forEachInputNode);
- if (workflowInvoker != null) {
- if (workflowInvoker instanceof GenericInvoker) {
-
- returnValForProvenance = ((GenericInvoker) workflowInvoker)
- .getOutputs();
- String message = returnValForProvenance.toString();
-
- XmlElement msgElmt = XmlConstants.BUILDER
- .parseFragmentFromString(message);
- Iterator children = msgElmt.children().iterator();
- while (children.hasNext()) {
- Object object = children.next();
- // foreachWSNode.getInputPort(0).getType()
- if (object instanceof XmlElement) {
- listOfValues.add(XmlConstants.BUILDER
- .serializeToString(object));
- // TODO fix for simple type - Done
- }
+ /**
+ * This method returns the input values for given foreach node
+ *
+ * @param forEachNode
+ * @param listOfValues
+ * @param invokerMap
+ * @return
+ * @throws WorkflowException
+ */
+ public static Object getInputsForForEachNode(final ForEachNode forEachNode, final LinkedList<String> listOfValues, Map<Node, Invoker> invokerMap)
+ throws WorkflowException {
+ List<DataPort> inputPorts = forEachNode.getInputPorts();
+
+ Object returnValForProvenance = null;
+ for (DataPort inputPort : inputPorts) {
+
+ Node inputNode = inputPort.getFromNode();
+ // if input node for for-each is WSNode
+ if (inputNode instanceof InputNode) {
+ for (DataPort dataPort : forEachNode.getInputPorts()) {
+ returnValForProvenance = InterpreterUtil.findInputFromPort(dataPort, invokerMap);
+ if (null == returnValForProvenance) {
+ throw new WorkFlowInterpreterException("Unable to find input for the node:" + forEachNode.getID());
}
- } else if (workflowInvoker instanceof WorkflowInvokerWrapperForGFacInvoker) {
- String outputName = forEachInputNode.getOutputPort(0)
- .getName();
- returnValForProvenance = workflowInvoker
- .getOutput(outputName);
- org.xmlpull.v1.builder.XmlElement msgElmt = (org.xmlpull.v1.builder.XmlElement) returnValForProvenance;
- Iterator children = msgElmt.children();
- while (children.hasNext()) {
- Object object = children.next();
- if (object instanceof org.xmlpull.v1.builder.XmlElement) {
- org.xmlpull.v1.builder.XmlElement child = (org.xmlpull.v1.builder.XmlElement) object;
- Iterator valItr = child.children();
- if (valItr.hasNext()) {
- Object object2 = valItr.next();
- if (object2 instanceof String) {
- listOfValues.add(object2.toString());
+ String[] vals = returnValForProvenance.toString().split(",");
+ listOfValues.addAll(Arrays.asList(vals));
+ }
+ } else {
+ Invoker workflowInvoker = invokerMap.get(inputNode);
+ if (workflowInvoker != null) {
+ if (workflowInvoker instanceof GenericInvoker) {
+
+ String outputName = inputNode.getOutputPort(0).getName();
+ returnValForProvenance = workflowInvoker.getOutput(outputName);
+ org.xmlpull.v1.builder.XmlElement msgElmt = (org.xmlpull.v1.builder.XmlElement) returnValForProvenance;
+ Iterator children = msgElmt.children();
+ while (children.hasNext()) {
+ Object object = children.next();
+ if (object instanceof org.xmlpull.v1.builder.XmlElement) {
+ org.xmlpull.v1.builder.XmlElement child = (org.xmlpull.v1.builder.XmlElement) object;
+ Iterator valItr = child.children();
+ if (valItr.hasNext()) {
+ Object object2 = valItr.next();
+ if (object2 instanceof String) {
+ listOfValues.add(object2.toString());
+ }
}
}
}
- }
- } else if (workflowInvoker instanceof SystemComponentInvoker) {
- int index = forEachInputNode.getOutputPorts().indexOf(inputPort.getEdge(0).getFromPort());
- String outputName = "";
- if(forEachInputNode.getInputPort(index) instanceof SystemDataPort){
- outputName = ((SystemDataPort)forEachInputNode.getInputPort(index)).getWSComponentPort().getName();
- }else if(forEachInputNode.getInputPort(index) instanceof WSPort){
- outputName = ((SystemDataPort)forEachInputNode.getInputPort(
- forEachInputNode.getOutputPorts().indexOf(inputPort.getEdge(0).getFromPort()))).getWSComponentPort().getName();
- }
- returnValForProvenance = workflowInvoker
- .getOutput(outputName);
- XmlElement msgElmt = XmlConstants.BUILDER
- .parseFragmentFromString("<temp>"
- + returnValForProvenance + "</temp>");
- Iterator valItr = msgElmt.children().iterator();
- while (valItr.hasNext()) {
- Object object2 = valItr.next();
- if (object2 instanceof XmlElement) {
- listOfValues.add(((XmlElement) object2).children()
- .iterator().next().toString());
+ } else if (workflowInvoker instanceof SystemComponentInvoker) {
+ int index = inputNode.getOutputPorts().indexOf(inputPort.getEdge(0).getFromPort());
+ String outputName = "";
+ if (inputNode.getInputPort(index) instanceof SystemDataPort) {
+ outputName = ((SystemDataPort) inputNode.getInputPort(index)).getWSComponentPort().getName();
+ } else if (inputNode.getInputPort(index) instanceof WSPort) {
+ outputName = ((SystemDataPort) inputNode.getInputPort(inputNode.getOutputPorts().indexOf(
+ inputPort.getEdge(0).getFromPort()))).getWSComponentPort().getName();
+ }
+ returnValForProvenance = workflowInvoker.getOutput(outputName);
+ XmlElement msgElmt = XmlConstants.BUILDER.parseFragmentFromString("<temp>" + returnValForProvenance + "</temp>");
+ Iterator valItr = msgElmt.children().iterator();
+ while (valItr.hasNext()) {
+ Object object2 = valItr.next();
+ if (object2 instanceof XmlElement) {
+ listOfValues.add(((XmlElement) object2).children().iterator().next().toString());
+ }
}
}
+ } else {
+ throw new WorkFlowInterpreterException("Did not find inputs from WS to foreach");
}
- } else {
- throw new WorkFlowInterpreterException(
- "Did not find inputs from WS to foreach");
}
}
- }
return returnValForProvenance;
}
- /**
- *
- * @param inputPort
- * @param invokerMap
- * @return
- * @throws WorkflowException
- */
- public static Object findInputFromPort(DataPort inputPort, Map<Node,Invoker> invokerMap) throws WorkflowException {
+ /**
+ *
+ * @param inputPort
+ * @param invokerMap
+ * @return
+ * @throws WorkflowException
+ */
+ public static Object findInputFromPort(DataPort inputPort, Map<Node, Invoker> invokerMap) throws WorkflowException {
Object outputVal = null;
Node fromNode = inputPort.getFromNode();
if (fromNode instanceof InputNode) {
@@ -190,43 +162,34 @@ public class InterpreterUtil {
outputVal = "";
Invoker workflowInvoker = invokerMap.get(fromNode);
String outputName = "";
- if (inputPort instanceof SystemDataPort) {
- outputName = ((SystemDataPort) inputPort).getWSComponentPort().getName();
+ if (inputPort instanceof SystemDataPort) {
+ outputName = ((SystemDataPort) inputPort).getWSComponentPort().getName();
- } else if (inputPort instanceof WSPort) {
- outputName = ((SystemDataPort)fromNode.getInputPort(
- fromNode.getOutputPorts().indexOf(inputPort.getEdge(0).getFromPort()))).getWSComponentPort().getName();
- }
- XmlElement msgElmt = XmlConstants.BUILDER
- .parseFragmentFromString("<temp>"
- + workflowInvoker.getOutput(outputName) + "</temp>");
+ } else if (inputPort instanceof WSPort) {
+ outputName = ((SystemDataPort) fromNode.getInputPort(fromNode.getOutputPorts().indexOf(inputPort.getEdge(0).getFromPort())))
+ .getWSComponentPort().getName();
+ }
+ XmlElement msgElmt = XmlConstants.BUILDER.parseFragmentFromString("<temp>" + workflowInvoker.getOutput(outputName) + "</temp>");
Iterator valItr = msgElmt.children().iterator();
while (valItr.hasNext()) {
Object object2 = valItr.next();
if (object2 instanceof XmlElement) {
- if(((XmlElement) object2).children().iterator().hasNext()){
- outputVal = outputVal
- + ","
- + ((XmlElement) object2).children().iterator()
- .next().toString();
- }
+ if (((XmlElement) object2).children().iterator().hasNext()) {
+ outputVal = outputVal + "," + ((XmlElement) object2).children().iterator().next().toString();
+ }
}
}
- if (((String) outputVal).length() == 0) {
- throw new WorkflowException("Empty Output Generated");
- }
- outputVal = ((String) outputVal).substring(1,
- ((String) outputVal).length());
+ if (((String) outputVal).length() == 0) {
+ throw new WorkflowException("Empty Output Generated");
+ }
+ outputVal = ((String) outputVal).substring(1, ((String) outputVal).length());
} else {
Invoker fromInvoker = invokerMap.get(fromNode);
try {
if (fromInvoker != null)
- outputVal = fromInvoker.getOutput(inputPort.getFromPort()
- .getName());
-
-
+ outputVal = fromInvoker.getOutput(inputPort.getFromPort().getName());
} catch (Exception e) {
// if the value is still null look it up from the inputport name
@@ -249,15 +212,15 @@ public class InterpreterUtil {
public static Node findEndForEachFor(ForEachNode node) {
Collection<Node> toNodes = node.getOutputPort(0).getToNodes();
- if(toNodes.size() != 1){
+ if (toNodes.size() != 1) {
throw new WorkflowRuntimeException("ForEach output does not contain single out-edge");
}
Node middleNode = toNodes.iterator().next();
List<DataPort> outputPorts = middleNode.getOutputPorts();
for (DataPort dataPort : outputPorts) {
- if(dataPort.getToNodes().size() == 1){
+ if (dataPort.getToNodes().size() == 1) {
Node possibleEndForEachNode = dataPort.getToNodes().get(0);
- if(possibleEndForEachNode instanceof EndForEachNode){
+ if (possibleEndForEachNode instanceof EndForEachNode) {
return possibleEndForEachNode;
}
}
@@ -265,110 +228,98 @@ public class InterpreterUtil {
throw new WorkflowRuntimeException("EndForEachNode not found");
}
- public static Integer[] getNumberOfInputsForForEachNode(final ForEachNode forEachNode,
- Map<Node,Invoker> invokerMap) throws WorkflowException {
- List<DataPort> inputPorts = forEachNode.getInputPorts();
- Integer[] inputNumbers = new Integer[inputPorts.size()];
- for(DataPort forEachInputPort:inputPorts){
- // if input node for for-each is WSNode
- Node forEachInputNode = forEachInputPort.getFromNode();
- int index = 0;
- Object returnValForProvenance = null;
- if (forEachInputNode instanceof InputNode) {
- returnValForProvenance = InterpreterUtil
- .findInputFromPort(forEachInputPort, invokerMap);
- if (null == returnValForProvenance) {
- throw new WorkFlowInterpreterException(
- "Unable to find input for the node:"
- + forEachNode.getID());
- }
- String[] vals = returnValForProvenance.toString().split(",");
- inputNumbers[inputPorts.indexOf(forEachInputPort)] = vals.length;
- } else {
- Invoker workflowInvoker = invokerMap
- .get(forEachInputNode);
- if (workflowInvoker != null) {
- if (workflowInvoker instanceof GenericInvoker) {
-
- returnValForProvenance = ((GenericInvoker) workflowInvoker)
- .getOutputs();
- String message = returnValForProvenance.toString();
-
- XmlElement msgElmt = XmlConstants.BUILDER
- .parseFragmentFromString(message);
- Iterator children = msgElmt.children().iterator();
- while (children.hasNext()) {
- Object object = children.next();
- // foreachWSNode.getInputPort(0).getType()
- if (object instanceof XmlElement) {
- index++;
+ public static Integer[] getNumberOfInputsForForEachNode(final ForEachNode forEachNode, Map<Node, Invoker> invokerMap) throws WorkflowException {
+ List<DataPort> inputPorts = forEachNode.getInputPorts();
+ Integer[] inputNumbers = new Integer[inputPorts.size()];
+ for (DataPort forEachInputPort : inputPorts) {
+ // if input node for for-each is WSNode
+ Node forEachInputNode = forEachInputPort.getFromNode();
+ int index = 0;
+ Object returnValForProvenance = null;
+ if (forEachInputNode instanceof InputNode) {
+ returnValForProvenance = InterpreterUtil.findInputFromPort(forEachInputPort, invokerMap);
+ if (null == returnValForProvenance) {
+ throw new WorkFlowInterpreterException("Unable to find input for the node:" + forEachNode.getID());
+ }
+ String[] vals = returnValForProvenance.toString().split(",");
+ inputNumbers[inputPorts.indexOf(forEachInputPort)] = vals.length;
+ } else {
+ Invoker workflowInvoker = invokerMap.get(forEachInputNode);
+ if (workflowInvoker != null) {
+ if (workflowInvoker instanceof GenericInvoker) {
+
+ returnValForProvenance = ((GenericInvoker) workflowInvoker).getOutputs();
+ String message = returnValForProvenance.toString();
+
+ XmlElement msgElmt = XmlConstants.BUILDER.parseFragmentFromString(message);
+ Iterator children = msgElmt.children().iterator();
+ while (children.hasNext()) {
+ Object object = children.next();
+ // foreachWSNode.getInputPort(0).getType()
+ if (object instanceof XmlElement) {
+ index++;
+ }
}
- }
- } else if (workflowInvoker instanceof WorkflowInvokerWrapperForGFacInvoker) {
- String outputName = forEachInputNode.getOutputPort(0)
- .getName();
- returnValForProvenance = workflowInvoker
- .getOutput(outputName);
- org.xmlpull.v1.builder.XmlElement msgElmt = (org.xmlpull.v1.builder.XmlElement) returnValForProvenance;
- Iterator children = msgElmt.children();
- while (children.hasNext()) {
- Object object = children.next();
- if (object instanceof org.xmlpull.v1.builder.XmlElement) {
- org.xmlpull.v1.builder.XmlElement child = (org.xmlpull.v1.builder.XmlElement) object;
- Iterator valItr = child.children();
- if (valItr.hasNext()) {
- Object object2 = valItr.next();
- if (object2 instanceof String) {
- index++;
+ } else if (workflowInvoker instanceof WorkflowInvokerWrapperForGFacInvoker) {
+ String outputName = forEachInputNode.getOutputPort(0).getName();
+ returnValForProvenance = workflowInvoker.getOutput(outputName);
+ org.xmlpull.v1.builder.XmlElement msgElmt = (org.xmlpull.v1.builder.XmlElement) returnValForProvenance;
+ Iterator children = msgElmt.children();
+ while (children.hasNext()) {
+ Object object = children.next();
+ if (object instanceof org.xmlpull.v1.builder.XmlElement) {
+ org.xmlpull.v1.builder.XmlElement child = (org.xmlpull.v1.builder.XmlElement) object;
+ Iterator valItr = child.children();
+ if (valItr.hasNext()) {
+ Object object2 = valItr.next();
+ if (object2 instanceof String) {
+ index++;
+ }
}
}
}
- }
- inputNumbers[inputPorts.indexOf(forEachInputPort)] = index;
- } else if (workflowInvoker instanceof SystemComponentInvoker) {
- int portIndex = forEachInputNode.getOutputPorts().indexOf(forEachInputPort.getEdge(0).getFromPort());
- String outputName = "";
- if(forEachInputNode.getInputPort(portIndex) instanceof SystemDataPort){
- outputName = ((SystemDataPort)forEachInputNode.getInputPort(portIndex)).getWSComponentPort().getName();
- }else if(forEachInputNode.getInputPort(portIndex) instanceof WSPort){
- outputName = ((WSPort)forEachInputNode.getInputPort(portIndex)).getComponentPort().getName();
- }
- returnValForProvenance = workflowInvoker
- .getOutput(outputName);
- XmlElement msgElmt = XmlConstants.BUILDER
- .parseFragmentFromString("<temp>"
- + returnValForProvenance + "</temp>");
- Iterator valItr = msgElmt.children().iterator();
- while (valItr.hasNext()) {
- Object object2 = valItr.next();
- if (object2 instanceof XmlElement) {
- index++;
+ inputNumbers[inputPorts.indexOf(forEachInputPort)] = index;
+ } else if (workflowInvoker instanceof SystemComponentInvoker) {
+ int portIndex = forEachInputNode.getOutputPorts().indexOf(forEachInputPort.getEdge(0).getFromPort());
+ String outputName = "";
+ if (forEachInputNode.getInputPort(portIndex) instanceof SystemDataPort) {
+ outputName = ((SystemDataPort) forEachInputNode.getInputPort(portIndex)).getWSComponentPort().getName();
+ } else if (forEachInputNode.getInputPort(portIndex) instanceof WSPort) {
+ outputName = ((WSPort) forEachInputNode.getInputPort(portIndex)).getComponentPort().getName();
}
+ returnValForProvenance = workflowInvoker.getOutput(outputName);
+ XmlElement msgElmt = XmlConstants.BUILDER.parseFragmentFromString("<temp>" + returnValForProvenance + "</temp>");
+ Iterator valItr = msgElmt.children().iterator();
+ while (valItr.hasNext()) {
+ Object object2 = valItr.next();
+ if (object2 instanceof XmlElement) {
+ index++;
+ }
+ }
+ inputNumbers[inputPorts.indexOf(forEachInputPort)] = index;
}
- inputNumbers[inputPorts.indexOf(forEachInputPort)] = index;
- }
- } else {
- throw new WorkFlowInterpreterException(
- "Did not find inputs from WS to foreach");
+ } else {
+ throw new WorkFlowInterpreterException("Did not find inputs from WS to foreach");
+ }
}
- }
- }
- return inputNumbers;
- }
- public static ArrayList<Node> getFinishedNodesDynamically(WSGraph graph) {
- return getNodesWithBodyColor(MonitorEventHandler.NodeState.FINISHED.color,graph);
+ }
+ return inputNumbers;
+ }
+
+ public static ArrayList<Node> getFinishedNodesDynamically(WSGraph graph) {
+ return getNodesWithBodyColor(MonitorEventHandler.NodeState.FINISHED.color, graph);
}
public static ArrayList<Node> getFailedNodesDynamically(WSGraph graph) {
- return getNodesWithBodyColor(MonitorEventHandler.NodeState.FAILED.color,graph);
+ return getNodesWithBodyColor(MonitorEventHandler.NodeState.FAILED.color, graph);
}
public static ArrayList<Node> getWaitingNodesDynamically(WSGraph graph) {
- return getNodesWithBodyColor(NodeGUI.DEFAULT_BODY_COLOR,graph);
+ return getNodesWithBodyColor(NodeGUI.DEFAULT_BODY_COLOR, graph);
}
- public static ArrayList<Node> getNodesWithBodyColor(Color color,WSGraph graph) {
+ public static ArrayList<Node> getNodesWithBodyColor(Color color, WSGraph graph) {
ArrayList<Node> list = new ArrayList<Node>();
List<NodeImpl> nodes = graph.getNodes();
for (Node node : nodes) {
@@ -380,18 +331,18 @@ public class InterpreterUtil {
}
public static int getRunningNodeCountDynamically(WSGraph graph) {
- return getNodeCountWithBodyColor(MonitorEventHandler.NodeState.EXECUTING.color,graph);
+ return getNodeCountWithBodyColor(MonitorEventHandler.NodeState.EXECUTING.color, graph);
}
public static int getFailedNodeCountDynamically(WSGraph graph) {
- return getFailedNodesDynamically(graph).size();
+ return getFailedNodesDynamically(graph).size();
}
public static int getWaitingNodeCountDynamically(WSGraph graph) {
- return getNodeCountWithBodyColor(NodeGUI.DEFAULT_BODY_COLOR,graph);
+ return getNodeCountWithBodyColor(NodeGUI.DEFAULT_BODY_COLOR, graph);
}
- public static int getNodeCountWithBodyColor(Color color,WSGraph graph) {
+ public static int getNodeCountWithBodyColor(Color color, WSGraph graph) {
int sum = 0;
List<NodeImpl> nodes = graph.getNodes();
for (Node node : nodes) {
@@ -402,9 +353,8 @@ public class InterpreterUtil {
return sum;
}
- public static String getEPR(WSNode wsNode) {
- Iterable<WsdlService> services = wsNode.getComponent().getWSDL()
- .services();
+ public static String getEPR(WSNode wsNode) {
+ Iterable<WsdlService> services = wsNode.getComponent().getWSDL().services();
Iterator<WsdlService> iterator = services.iterator();
if (iterator.hasNext()) {
Iterable<WsdlPort> ports = iterator.next().ports();
@@ -416,8 +366,7 @@ public class InterpreterUtil {
while (childIterator.hasNext()) {
Object next = childIterator.next();
if (next instanceof XmlElementWithViewsImpl) {
- org.xmlpull.infoset.XmlAttribute epr = ((XmlElementWithViewsImpl) next)
- .attribute("location");
+ org.xmlpull.infoset.XmlAttribute epr = ((XmlElementWithViewsImpl) next).attribute("location");
return epr.getValue();
}
}