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 2012/11/20 17:06:25 UTC
svn commit: r1411717 - in /airavata/trunk/modules:
workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/graph/
workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/graph/impl/
xbaya-gui/src/...
Author: samindaw
Date: Tue Nov 20 16:06:23 2012
New Revision: 1411717
URL: http://svn.apache.org/viewvc?rev=1411717&view=rev
Log:
decouple node body color dependency in workflow execution
Modified:
airavata/trunk/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/graph/Node.java
airavata/trunk/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/graph/impl/NodeImpl.java
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/graph/controller/NodeController.java
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/DoWhileHandler.java
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/StandaloneNotificationSender.java
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpreter.java
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpretorEventListener.java
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/jython/lib/StandaloneServiceNotificationSender.java
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/WorkflowModificationTestCase.java
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/graph/system/DifferedInputConfigurationDialog.java
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/graph/GraphCanvas.java
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/graph/NodeGUI.java
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/monitor/MonitorEventHandler.java
Modified: airavata/trunk/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/graph/Node.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/graph/Node.java?rev=1411717&r1=1411716&r2=1411717&view=diff
==============================================================================
--- airavata/trunk/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/graph/Node.java (original)
+++ airavata/trunk/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/graph/Node.java Tue Nov 20 16:06:23 2012
@@ -24,11 +24,18 @@ package org.apache.airavata.workflow.mod
import java.awt.Point;
import java.util.Collection;
import java.util.List;
+import java.util.Observer;
import org.apache.airavata.workflow.model.component.Component;
public interface Node extends GraphPiece {
+ public static enum NodeExecutionState{
+ WAITING,
+ EXECUTING,
+ FAILED,
+ FINISHED
+ }
/**
* Returns the ID of the node.
*
@@ -194,4 +201,18 @@ public interface Node extends GraphPiece
*/
public boolean getRequireJoin();
+ public NodeExecutionState getState();
+
+ public void setState(NodeExecutionState state);
+
+ public void registerObserver(NodeObserver o);
+ public void removeObserver(NodeObserver o);
+
+ public static enum NodeUpdateType{
+ STATE_CHANGED,
+ OTHER
+ }
+ public static interface NodeObserver{
+ public void nodeUpdated(NodeUpdateType type);
+ }
}
\ No newline at end of file
Modified: airavata/trunk/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/graph/impl/NodeImpl.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/graph/impl/NodeImpl.java?rev=1411717&r1=1411716&r2=1411717&view=diff
==============================================================================
--- airavata/trunk/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/graph/impl/NodeImpl.java (original)
+++ airavata/trunk/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/graph/impl/NodeImpl.java Tue Nov 20 16:06:23 2012
@@ -92,6 +92,10 @@ public abstract class NodeImpl implement
protected String label;
protected transient boolean requireJoin = false;
+
+ private NodeExecutionState state;
+
+ private List<NodeObserver> observers;
/**
* Creates a Node.
@@ -109,6 +113,8 @@ public abstract class NodeImpl implement
this.inputPortIDs = new ArrayList<String>();
this.outputPortIDs = new ArrayList<String>();
this.controlOutPortIDs = new ArrayList<String>();
+
+ observers=new ArrayList<Node.NodeObserver>();
}
protected NodeImpl(Graph graph) {
@@ -674,5 +680,37 @@ public abstract class NodeImpl implement
public boolean getRequireJoin() {
return this.requireJoin;
}
-
+
+ @Override
+ public NodeExecutionState getState() {
+ return state;
+ }
+
+ @Override
+ public void setState(NodeExecutionState state) {
+ this.state = state;
+ triggerNodeObservers(NodeUpdateType.STATE_CHANGED);
+ }
+
+ @Override
+ public void registerObserver(NodeObserver o) {
+ observers.add(o);
+ }
+
+ @Override
+ public void removeObserver(NodeObserver o) {
+ if (observers.contains(o)) {
+ observers.remove(o);
+ }
+ }
+
+ private void triggerNodeObservers(NodeUpdateType type){
+ for (NodeObserver o : observers) {
+ try {
+ o.nodeUpdated(type);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
}
\ No newline at end of file
Modified: airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/graph/controller/NodeController.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/graph/controller/NodeController.java?rev=1411717&r1=1411716&r2=1411717&view=diff
==============================================================================
--- airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/graph/controller/NodeController.java (original)
+++ airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/graph/controller/NodeController.java Tue Nov 20 16:06:23 2012
@@ -28,6 +28,7 @@ import org.apache.airavata.workflow.mode
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;
@@ -80,7 +81,6 @@ import org.apache.airavata.xbaya.ui.grap
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;
-import org.apache.airavata.xbaya.ui.monitor.MonitorEventHandler;
public class NodeController {
private static Map<GraphPiece,GraphPieceGUI> nodeMap=new HashMap<GraphPiece, GraphPieceGUI>();
@@ -185,15 +185,15 @@ public class NodeController {
}
public static boolean isFinished(Node node){
- return ((NodeGUI)getGUI(node)).getBodyColor() == MonitorEventHandler.NodeState.FINISHED.color;
+ return node.getState() == NodeExecutionState.FINISHED;
}
public static boolean isWaiting(Node node){
- return ((NodeGUI)getGUI(node)).getBodyColor() == MonitorEventHandler.NodeState.DEFAULT.color;
+ return node.getState() == NodeExecutionState.WAITING;
}
public static boolean isRunning(Node node){
- return ((NodeGUI)getGUI(node)).getBodyColor() == MonitorEventHandler.NodeState.EXECUTING.color;
+ return node.getState() == NodeExecutionState.EXECUTING;
}
public static boolean isFailed(Node node){
- return ((NodeGUI)getGUI(node)).getBodyColor() == MonitorEventHandler.NodeState.FAILED.color;
+ return node.getState() == NodeExecutionState.FAILED;
}
}
Modified: airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/DoWhileHandler.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/DoWhileHandler.java?rev=1411717&r1=1411716&r2=1411717&view=diff
==============================================================================
--- airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/DoWhileHandler.java (original)
+++ airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/DoWhileHandler.java Tue Nov 20 16:06:23 2012
@@ -38,6 +38,7 @@ import org.apache.airavata.workflow.mode
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;
@@ -47,7 +48,6 @@ import org.apache.airavata.xbaya.ui.moni
import org.apache.airavata.xbaya.util.InterpreterUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.xmlpull.infoset.XmlElement;
public class DoWhileHandler implements Callable<Boolean> {
private static Logger log = LoggerFactory.getLogger(DoWhileHandler.class);
@@ -196,7 +196,7 @@ public class DoWhileHandler implements C
} else if (NodeController.isFailed(donode)) {
log.info("Service " + donode.getName() + " Failed");
runflag = false;
- NodeController.getGUI(dowhilenode).setBodyColor(NodeState.FAILED.color);
+ dowhilenode.setState(NodeExecutionState.FAILED);
this.threadExecutor.shutdown();
return false;
} else if (donode.isBreak()) {
@@ -220,14 +220,13 @@ public class DoWhileHandler implements C
}
Node whileNode = readyNodes.get(0);
- // this.dowhilenode.getGUI().setBodyColor(NodeState.STARTING.color);
log.info("Expression evaluation is true so invoking service again " + whileNode.getName());
this.interpreter.handleWSComponent(whileNode);
}
}
// WS node should be done
- NodeController.getGUI(dowhilenode).setBodyColor(NodeState.FINISHED.color);
+ dowhilenode.setState(NodeExecutionState.FINISHED);
EndDoWhileNode endDoWhileNode = this.dowhilenode.getEndDoWhileNode();
// /////////////////////////////////////////////////////////
@@ -245,7 +244,7 @@ public class DoWhileHandler implements C
this.invokerMap.put(endDoWhileNode, invoker);
// TODO send mail once the iterations have converged
- NodeController.getGUI(endDoWhileNode).setBodyColor(NodeState.FINISHED.color);
+ endDoWhileNode.setState(NodeExecutionState.FINISHED);
this.threadExecutor.shutdown();
return true;
}
Modified: airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/StandaloneNotificationSender.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/StandaloneNotificationSender.java?rev=1411717&r1=1411716&r2=1411717&view=diff
==============================================================================
--- airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/StandaloneNotificationSender.java (original)
+++ airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/StandaloneNotificationSender.java Tue Nov 20 16:06:23 2012
@@ -25,6 +25,7 @@ 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;
@@ -57,7 +58,7 @@ public class StandaloneNotificationSende
public void workflowStarted(PyObject[] args, String[] keywords) {
List<InputNode> inputs = GraphUtil.getInputNodes(this.workflow.getGraph());
for (InputNode inputNode : inputs) {
- NodeController.getGUI(inputNode).setBodyColor(NodeState.FINISHED.color);
+ inputNode.setState(NodeExecutionState.FINISHED);
}
}
@@ -66,7 +67,7 @@ public class StandaloneNotificationSende
public void workflowStarted(Object[] args, String[] keywords) {
List<InputNode> inputs = GraphUtil.getInputNodes(this.workflow.getGraph());
for (InputNode inputNode : inputs) {
- NodeController.getGUI(inputNode).setBodyColor(NodeState.FINISHED.color);
+ inputNode.setState(NodeExecutionState.FINISHED);
}
}
@@ -74,7 +75,7 @@ public class StandaloneNotificationSende
public void workflowFinished(Object[] args, String[] keywords) {
List<OutputNode> outputs = GraphUtil.getOutputNodes(this.workflow.getGraph());
for (OutputNode outputNode : outputs) {
- NodeController.getGUI(outputNode).setBodyColor(NodeState.EXECUTING.color);
+ outputNode.setState(NodeExecutionState.EXECUTING);
}
}
@@ -89,7 +90,7 @@ public class StandaloneNotificationSende
public void workflowFinished(PyObject[] args, String[] keywords) {
List<OutputNode> outputs = GraphUtil.getOutputNodes(this.workflow.getGraph());
for (OutputNode outputNode : outputs) {
- NodeController.getGUI(outputNode).setBodyColor(NodeState.EXECUTING.color);
+ outputNode.setState(NodeExecutionState.EXECUTING);
}
}
Modified: airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpreter.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpreter.java?rev=1411717&r1=1411716&r2=1411717&view=diff
==============================================================================
--- airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpreter.java (original)
+++ airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpreter.java Tue Nov 20 16:06:23 2012
@@ -21,7 +21,6 @@
package org.apache.airavata.xbaya.interpretor;
-import java.awt.Color;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
@@ -43,10 +42,10 @@ import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
-import org.apache.airavata.registry.api.exception.RegistryException;
import org.apache.airavata.common.utils.Pair;
import org.apache.airavata.common.utils.WSDLUtil;
import org.apache.airavata.common.utils.XMLUtil;
+import org.apache.airavata.registry.api.exception.RegistryException;
import org.apache.airavata.registry.api.workflow.WorkflowInstanceStatus.ExecutionStatus;
import org.apache.airavata.workflow.model.component.Component;
import org.apache.airavata.workflow.model.component.amazon.InstanceComponent;
@@ -72,6 +71,7 @@ import org.apache.airavata.workflow.mode
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.amazon.InstanceNode;
import org.apache.airavata.workflow.model.graph.dynamic.BasicTypeMapping;
import org.apache.airavata.workflow.model.graph.dynamic.DynamicNode;
@@ -96,7 +96,6 @@ import org.apache.airavata.ws.monitor.Mo
import org.apache.airavata.ws.monitor.MonitorException;
import org.apache.airavata.xbaya.concurrent.PredicatedTaskRunner;
import org.apache.airavata.xbaya.core.amazon.AmazonCredential;
-import org.apache.airavata.xbaya.graph.controller.NodeController;
import org.apache.airavata.xbaya.invoker.DynamicInvoker;
import org.apache.airavata.xbaya.invoker.EmbeddedGFacInvoker;
import org.apache.airavata.xbaya.invoker.GenericInvoker;
@@ -105,8 +104,6 @@ import org.apache.airavata.xbaya.invoker
import org.apache.airavata.xbaya.invoker.WorkflowInvokerWrapperForGFacInvoker;
import org.apache.airavata.xbaya.provenance.ProvenanceReader;
import org.apache.airavata.xbaya.provenance.ProvenanceWrite;
-import org.apache.airavata.xbaya.ui.graph.NodeGUI;
-import org.apache.airavata.xbaya.ui.monitor.MonitorEventHandler.NodeState;
import org.apache.airavata.xbaya.util.AmazonUtil;
import org.apache.airavata.xbaya.util.InterpreterUtil;
import org.apache.airavata.xbaya.util.XBayaUtil;
@@ -185,7 +182,7 @@ public class WorkflowInterpreter {
String[] keywords = new String[inputNodes.size()];
for (int i = 0; i < inputNodes.size(); ++i) {
Node node = inputNodes.get(i);
- NodeController.getGUI(node).setBodyColor(NodeState.FINISHED.color);
+ node.setState(NodeExecutionState.FINISHED);
notifyViaInteractor(WorkflowExecutionMessage.NODE_STATE_CHANGED, null);
keywords[i] = ((InputNode) node).getName();
values[i] = ((InputNode) node).getDefaultValue();
@@ -353,7 +350,7 @@ public class WorkflowInterpreter {
}
this.invokerMap.put(node, invoker);
- NodeController.getGUI(node).setBodyColor(NodeState.FINISHED.color);
+ node.setState(NodeExecutionState.FINISHED);
return true;
} else {
// writeProvenanceLater(node);
@@ -445,7 +442,7 @@ public class WorkflowInterpreter {
// next run
// even if the next run runs before the notification arrives
- NodeController.getGUI(node).setBodyColor(NodeState.EXECUTING.color);
+ node.setState(NodeExecutionState.EXECUTING);
// OutputNode node = (OutputNode) outputNode;
List<DataPort> inputPorts = node.getInputPorts();
@@ -482,7 +479,7 @@ public class WorkflowInterpreter {
// Templates.
}
}
- NodeController.getGUI(node).setBodyColor(NodeState.FINISHED.color);
+ node.setState(NodeExecutionState.FINISHED);
}
System.out.println("Looping");
}
@@ -496,7 +493,7 @@ public class WorkflowInterpreter {
List<NodeImpl> nodes = this.getGraph().getNodes();
for (Node node : nodes) {
if (node instanceof OutputNode) {
- if (NodeController.getGUI(node.getInputPort(0).getFromNode()).getBodyColor().equals(NodeState.FINISHED.color)) {
+ if (node.getInputPort(0).getFromNode().getState()== NodeExecutionState.FINISHED) {
outoutNodes.add(node);
} else {
// The workflow is incomplete so return without sending
@@ -518,7 +515,7 @@ public class WorkflowInterpreter {
throw new WorkFlowInterpreterException("Unable to find output for the node:" + node.getID());
}
// Some node not yet updated
- if (NodeController.getGUI(node).getBodyColor() != NodeState.FINISHED.color) {
+ if (node.getState() != NodeExecutionState.FINISHED) {
if (this.config.isActOnProvenance()) {
try {
if (val instanceof String) {
@@ -545,7 +542,7 @@ public class WorkflowInterpreter {
} else {
((OutputNode) node).setDescription(val.toString());
}
- NodeController.getGUI(node).setBodyColor(NodeState.FINISHED.color);
+ node.setState(NodeExecutionState.FINISHED);
}
}
@@ -557,7 +554,7 @@ public class WorkflowInterpreter {
}
private void executeDynamically(final Node node) throws WorkflowException {
- NodeController.getGUI(node).setBodyColor(NodeState.EXECUTING.color);
+ node.setState(NodeExecutionState.EXECUTING);
Component component = node.getComponent();
if (component instanceof SubWorkflowComponent) {
handleSubWorkComponent(node);
@@ -597,7 +594,7 @@ public class WorkflowInterpreter {
AmazonUtil.terminateInstances(instanceId);
// set color to done
- NodeController.getGUI(node).setBodyColor(NodeState.FINISHED.color);
+ node.setState(NodeExecutionState.FINISHED);
} else {
throw new WorkFlowInterpreterException("Encountered Node that cannot be executed:" + node);
}
@@ -818,7 +815,7 @@ public class WorkflowInterpreter {
this.invokerMap.put(node, dynamicInvoker);
dynamicInvoker.setup();
dynamicInvoker.invoke();
- NodeController.getGUI(node).setBodyColor(NodeState.FINISHED.color);
+ node.setState(NodeExecutionState.FINISHED);
}
private void handleForEach(Node node) throws WorkflowException {
@@ -888,8 +885,8 @@ public class WorkflowInterpreter {
// Start reading input came for foreach node
int parallelRuns = listOfValues.size() * node1.getOutputPorts().size();
if (listOfValues.size() > 0) {
- NodeController.getGUI(forEachNode).setBodyColor(NodeState.EXECUTING.color);
- NodeController.getGUI(node1).setBodyColor(NodeState.EXECUTING.color);
+ forEachNode.setState(NodeExecutionState.EXECUTING);
+ node1.setState(NodeExecutionState.EXECUTING);
List<DataPort> outputPorts = node1.getOutputPorts();
final AtomicInteger counter = new AtomicInteger();
for (Node endFor : endForEachNodes) {
@@ -935,9 +932,9 @@ public class WorkflowInterpreter {
}
// we have finished execution so end foreach is finished
// todo this has to be done in a separate thread
- NodeController.getGUI(endForEachNode).setBodyColor(NodeState.FINISHED.color);
- NodeController.getGUI(middleNode).setBodyColor(NodeState.FINISHED.color);
- NodeController.getGUI(node).setBodyColor(NodeState.FINISHED.color);
+ endForEachNode.setState(NodeExecutionState.FINISHED);
+ middleNode.setState(NodeExecutionState.FINISHED);
+ node.setState(NodeExecutionState.FINISHED);
} else {
@@ -969,8 +966,8 @@ public class WorkflowInterpreter {
int parallelRuns = createInputValues(listOfValues, inputNumbers).size() * outputPorts1.size();
if (listOfValues.size() > 0) {
- NodeController.getGUI(forEachNode).setBodyColor(NodeState.EXECUTING.color);
- NodeController.getGUI(foreachWSNode).setBodyColor(NodeState.EXECUTING.color);
+ forEachNode.setState(NodeExecutionState.EXECUTING);
+ foreachWSNode.setState(NodeExecutionState.EXECUTING);
List<DataPort> outputPorts = middleNode.getOutputPorts();
final AtomicInteger counter = new AtomicInteger();
for (Node endFor : endForEachNodes) {
@@ -1000,9 +997,9 @@ public class WorkflowInterpreter {
}
// we have finished execution so end foreach is finished
// todo this has to be done in a separate thread
- NodeController.getGUI(middleNode).setBodyColor(NodeState.FINISHED.color);
+ middleNode.setState(NodeExecutionState.FINISHED);
for (Node endForEach : endForEachNodes) {
- NodeController.getGUI(endForEach).setBodyColor(NodeState.FINISHED.color);
+ endForEach.setState(NodeExecutionState.FINISHED);
}
} else {
throw new WorkFlowInterpreterException("No array values found for foreach");
@@ -1053,7 +1050,7 @@ public class WorkflowInterpreter {
}
}
- NodeController.getGUI(node).setBodyColor(NodeState.FINISHED.color);
+ node.setState(NodeExecutionState.FINISHED);
} catch (XPathExpressionException e) {
throw new WorkFlowInterpreterException("Cannot evaluate XPath in If Condition: " + booleanExpression);
@@ -1081,7 +1078,7 @@ public class WorkflowInterpreter {
this.invokerMap.put(node, invoker);
- NodeController.getGUI(node).setBodyColor(NodeState.FINISHED.color);
+ node.setState(NodeExecutionState.FINISHED);
}
private Invoker createInvokerForEachSingleWSNode(Node foreachWSNode, String gfacURLString, WSComponent wsComponent) throws WorkflowException {
@@ -1248,7 +1245,7 @@ public class WorkflowInterpreter {
}
i++;
}
- NodeController.getGUI(forEachNode).setBodyColor(NodeState.FINISHED.color);
+ forEachNode.setState(NodeExecutionState.FINISHED);
}
private void invokeGFacService(LinkedList<String> listOfValues, Node middleNode, Integer[] inputNumber, String input, Invoker invoker)
@@ -1360,8 +1357,8 @@ public class WorkflowInterpreter {
ArrayList<Node> list = new ArrayList<Node>();
List<NodeImpl> nodes = this.getGraph().getNodes();
for (Node node : nodes) {
- if (node instanceof OutputNode && NodeController.getGUI(node).getBodyColor().equals(NodeGUI.DEFAULT_BODY_COLOR)
- && NodeController.getGUI(node.getInputPort(0).getFromNode()).getBodyColor().equals(NodeState.FINISHED.color)) {
+ if (node instanceof OutputNode && node.getState()==NodeExecutionState.WAITING
+ && node.getInputPort(0).getFromNode().getState()== NodeExecutionState.FINISHED) {
list.add(node);
}
@@ -1530,18 +1527,18 @@ public class WorkflowInterpreter {
}
private ArrayList<Node> getFinishedNodesDynamically() {
- return this.getNodesWithBodyColor(NodeState.FINISHED.color);
+ return this.getNodesWithState(NodeExecutionState.FINISHED);
}
private ArrayList<Node> getWaitingNodesDynamically() {
- return this.getNodesWithBodyColor(NodeState.DEFAULT.color);
+ return this.getNodesWithState(NodeExecutionState.WAITING);
}
- private ArrayList<Node> getNodesWithBodyColor(Color color) {
+ private ArrayList<Node> getNodesWithState(NodeExecutionState state) {
ArrayList<Node> list = new ArrayList<Node>();
List<NodeImpl> nodes = getGraph().getNodes();
for (Node node : nodes) {
- if (color.equals(NodeController.getGUI(node).getBodyColor())) {
+ if (state==node.getState()) {
list.add(node);
}
}
Modified: airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpretorEventListener.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpretorEventListener.java?rev=1411717&r1=1411716&r2=1411717&view=diff
==============================================================================
--- airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpretorEventListener.java (original)
+++ airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpretorEventListener.java Tue Nov 20 16:06:23 2012
@@ -31,6 +31,7 @@ import org.apache.airavata.workflow.mode
import org.apache.airavata.workflow.model.graph.Edge;
import org.apache.airavata.workflow.model.graph.Graph;
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.impl.NodeImpl;
import org.apache.airavata.workflow.model.graph.system.InputNode;
@@ -51,8 +52,6 @@ import org.apache.airavata.xbaya.XBayaCo
import org.apache.airavata.xbaya.graph.controller.NodeController;
import org.apache.airavata.xbaya.provenance.WorkflowNodeStatusUpdater;
import org.apache.airavata.xbaya.provenance.WorkflowStatusUpdater;
-import org.apache.airavata.xbaya.ui.graph.NodeGUI;
-import org.apache.airavata.xbaya.ui.monitor.MonitorEventHandler.NodeState;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axis2.addressing.EndpointReference;
import org.slf4j.Logger;
@@ -296,19 +295,19 @@ public class WorkflowInterpretorEventLis
}
private void executeNode(Node node) {
- NodeController.getGUI(node).setBodyColor(NodeState.EXECUTING.color);
+ node.setState(NodeExecutionState.EXECUTING);
}
private void finishNode(Node node) {
- NodeController.getGUI(node).setBodyColor(NodeState.FINISHED.color);
+ node.setState(NodeExecutionState.FINISHED);
}
private void failNode(Node node) {
- NodeController.getGUI(node).setBodyColor(NodeState.FAILED.color);
+ node.setState(NodeExecutionState.FAILED);
}
private void resetNode(Node node) {
- NodeController.getGUI(node).setBodyColor(NodeGUI.DEFAULT_BODY_COLOR);
+ node.setState(NodeExecutionState.WAITING);
NodeController.getGUI(node).resetTokens();
}
Modified: airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/jython/lib/StandaloneServiceNotificationSender.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/jython/lib/StandaloneServiceNotificationSender.java?rev=1411717&r1=1411716&r2=1411717&view=diff
==============================================================================
--- airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/jython/lib/StandaloneServiceNotificationSender.java (original)
+++ airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/jython/lib/StandaloneServiceNotificationSender.java Tue Nov 20 16:06:23 2012
@@ -23,11 +23,10 @@ package org.apache.airavata.xbaya.jython
import java.net.URI;
+import org.apache.airavata.workflow.model.graph.Node;
+import org.apache.airavata.workflow.model.graph.Node.NodeExecutionState;
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.ui.graph.NodeGUI;
-import org.apache.airavata.xbaya.ui.monitor.MonitorEventHandler.NodeState;
import org.apache.axis2.addressing.EndpointReference;
import xsul.wsif.WSIFMessage;
@@ -62,35 +61,35 @@ public class StandaloneServiceNotificati
@Override
public void invokingService(WSIFMessage inputs) {
- getNodeGUI().setBodyColor(NodeState.EXECUTING.color);
+ getNode().setState(NodeExecutionState.EXECUTING);
}
@Override
public void serviceFinished(WSIFMessage outputs) {
- getNodeGUI().setBodyColor(NodeState.FINISHED.color);
+ getNode().setState(NodeExecutionState.FINISHED);
}
@Override
public void invocationFailed(String message, Throwable e) {
- getNodeGUI().setBodyColor(NodeState.FAILED.color);
+ getNode().setState(NodeExecutionState.FAILED);
}
@Override
public void receivedFault(String message) {
- getNodeGUI().setBodyColor(NodeState.FAILED.color);
+ getNode().setState(NodeExecutionState.FAILED);
}
@Override
public void receivedFault(WSIFMessage fault) {
- getNodeGUI().setBodyColor(NodeState.FAILED.color);
+ getNode().setState(NodeExecutionState.FAILED);
}
- private NodeGUI getNodeGUI() {
- return NodeController.getGUI(this.workflow.getGraph().getNode(this.serviceID));
+ private Node getNode() {
+ return this.workflow.getGraph().getNode(this.serviceID);
}
}
Modified: airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/WorkflowModificationTestCase.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/WorkflowModificationTestCase.java?rev=1411717&r1=1411716&r2=1411717&view=diff
==============================================================================
--- airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/WorkflowModificationTestCase.java (original)
+++ airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/WorkflowModificationTestCase.java Tue Nov 20 16:06:23 2012
@@ -40,6 +40,7 @@ import org.apache.airavata.workflow.mode
import org.apache.airavata.workflow.model.gpel.DSCUtil;
import org.apache.airavata.workflow.model.graph.GraphException;
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.NodeImpl;
import org.apache.airavata.workflow.model.graph.ws.WSGraph;
import org.apache.airavata.workflow.model.wf.Workflow;
@@ -60,13 +61,11 @@ import org.apache.airavata.ws.monitor.ev
import org.apache.airavata.xbaya.XBayaConstants;
import org.apache.airavata.xbaya.XBayaEngine;
import org.apache.airavata.xbaya.file.XBayaPathConstants;
-import org.apache.airavata.xbaya.graph.controller.NodeController;
import org.apache.airavata.xbaya.modifier.WorkflowModifier;
import org.apache.airavata.xbaya.test.service.adder.Adder;
import org.apache.airavata.xbaya.test.service.multiplier.Multiplier;
import org.apache.airavata.xbaya.test.util.WorkflowCreator;
import org.apache.airavata.xbaya.ui.graph.GraphCanvas;
-import org.apache.airavata.xbaya.ui.monitor.MonitorEventHandler.NodeState;
import org.apache.xmlbeans.XmlObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -202,9 +201,9 @@ public class WorkflowModificationTestCas
sendNotification(adderWSDL, adder1ID, "add", inputMap1, outputMap1, notifier);
// These are needed because without GUI, the nodes' color won't be
// changed.
- NodeController.getGUI(a).setBodyColor(NodeState.FINISHED.color);
- NodeController.getGUI(b).setBodyColor(NodeState.FINISHED.color);
- NodeController.getGUI(adder).setBodyColor(NodeState.FINISHED.color);
+ a.setState(NodeExecutionState.FINISHED);
+ b.setState(NodeExecutionState.FINISHED);
+ adder.setState(NodeExecutionState.FINISHED);
repaintAndWait(3);
HashMap<String, String> inputMap2 = new HashMap<String, String>();
@@ -214,9 +213,9 @@ public class WorkflowModificationTestCas
outputMap2.put("z", "9");
sendNotification(adderWSDL, adder2ID, "add", inputMap2, outputMap2, notifier);
- NodeController.getGUI(c).setBodyColor(NodeState.FINISHED.color);
- NodeController.getGUI(d).setBodyColor(NodeState.FINISHED.color);
- NodeController.getGUI(adder2).setBodyColor(NodeState.FINISHED.color);
+ c.setState(NodeExecutionState.FINISHED);
+ d.setState(NodeExecutionState.FINISHED);
+ adder2.setState(NodeExecutionState.FINISHED);
repaintAndWait(3);
}
Modified: airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/graph/system/DifferedInputConfigurationDialog.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/graph/system/DifferedInputConfigurationDialog.java?rev=1411717&r1=1411716&r2=1411717&view=diff
==============================================================================
--- airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/graph/system/DifferedInputConfigurationDialog.java (original)
+++ airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/graph/system/DifferedInputConfigurationDialog.java Tue Nov 20 16:06:23 2012
@@ -30,13 +30,13 @@ import javax.xml.namespace.QName;
import org.apache.airavata.common.utils.WSConstants;
import org.apache.airavata.common.utils.XMLUtil;
+import org.apache.airavata.workflow.model.graph.Node.NodeExecutionState;
import org.apache.airavata.workflow.model.graph.system.DifferedInputNode;
import org.apache.airavata.xbaya.graph.controller.NodeController;
import org.apache.airavata.xbaya.lead.LEADTypes;
import org.apache.airavata.xbaya.ui.XBayaGUI;
import org.apache.airavata.xbaya.ui.dialogs.XBayaDialog;
import org.apache.airavata.xbaya.ui.graph.system.DifferedInputNodeGUI;
-import org.apache.airavata.xbaya.ui.monitor.MonitorEventHandler.NodeState;
import org.apache.airavata.xbaya.ui.widgets.GridPanel;
import org.apache.airavata.xbaya.ui.widgets.XBayaLabel;
import org.apache.airavata.xbaya.ui.widgets.XBayaTextArea;
@@ -198,7 +198,7 @@ public class DifferedInputConfigurationD
this.node.setDescription(description);
this.node.setDefaultValue(value);
this.node.setMetadata(metadata);
- NodeController.getGUI(this.node).setBodyColor(NodeState.FINISHED.color);
+ this.node.setState(NodeExecutionState.FINISHED);
hide();
this.xbayaGUI.getGraphCanvas().repaint();
Modified: airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/graph/GraphCanvas.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/graph/GraphCanvas.java?rev=1411717&r1=1411716&r2=1411717&view=diff
==============================================================================
--- airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/graph/GraphCanvas.java (original)
+++ airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/graph/GraphCanvas.java Tue Nov 20 16:06:23 2012
@@ -69,6 +69,7 @@ import org.apache.airavata.workflow.mode
import org.apache.airavata.workflow.model.graph.GraphException;
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.Port.Kind;
import org.apache.airavata.workflow.model.graph.dynamic.DynamicNode;
@@ -1256,7 +1257,7 @@ public class GraphCanvas implements XBay
for (DataPort dataPort : outputPorts) {
exploreNodes.addAll(dataPort.getToNodes());
}
- NodeController.getGUI(node).setBodyColor(NodeGUI.DEFAULT_BODY_COLOR);
+ node.setState(NodeExecutionState.WAITING);
exploreNodes.remove(0);
}
Modified: airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/graph/NodeGUI.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/graph/NodeGUI.java?rev=1411717&r1=1411716&r2=1411717&view=diff
==============================================================================
--- airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/graph/NodeGUI.java (original)
+++ airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/graph/NodeGUI.java Tue Nov 20 16:06:23 2012
@@ -22,7 +22,6 @@
package org.apache.airavata.xbaya.ui.graph;
import java.awt.AlphaComposite;
-import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Composite;
import java.awt.Dimension;
@@ -43,13 +42,15 @@ import java.util.List;
import org.apache.airavata.workflow.model.graph.DataPort;
import org.apache.airavata.workflow.model.graph.Node;
+import org.apache.airavata.workflow.model.graph.Node.NodeObserver;
+import org.apache.airavata.workflow.model.graph.Node.NodeUpdateType;
import org.apache.airavata.workflow.model.graph.Port;
import org.apache.airavata.xbaya.XBayaEngine;
import org.apache.airavata.xbaya.graph.controller.NodeController;
import org.apache.airavata.xbaya.ui.monitor.MonitorEventHandler.NodeState;
import org.apache.airavata.xbaya.ui.utils.DrawUtils;
-public abstract class NodeGUI implements GraphPieceGUI {
+public abstract class NodeGUI implements GraphPieceGUI, NodeObserver {
/**
* BREAK_POINT_BORDER_COLOR
@@ -117,6 +118,7 @@ public abstract class NodeGUI implements
// The followings are just to make sure that it has some size.
this.dimension = new Dimension(MINIMUM_WIDTH, MINIMUM_HEIGHT);
this.paintables = new LinkedList<Paintable>();
+ node.registerObserver(this);
}
/**
@@ -506,4 +508,28 @@ public abstract class NodeGUI implements
return Color.white;
}
+ @Override
+ public void nodeUpdated(NodeUpdateType type) {
+ switch(type){
+ case STATE_CHANGED:
+ updateNodeColor();
+ break;
+ default:
+ break;
+ }
+
+ }
+
+ private void updateNodeColor() {
+ switch(node.getState()){
+ case WAITING:
+ setBodyColor(NodeState.DEFAULT.color); break;
+ case EXECUTING:
+ setBodyColor(NodeState.EXECUTING.color); break;
+ case FAILED:
+ setBodyColor(NodeState.FAILED.color); break;
+ case FINISHED:
+ setBodyColor(NodeState.FINISHED.color); break;
+ }
+ }
}
\ No newline at end of file
Modified: airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/monitor/MonitorEventHandler.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/monitor/MonitorEventHandler.java?rev=1411717&r1=1411716&r2=1411717&view=diff
==============================================================================
--- airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/monitor/MonitorEventHandler.java (original)
+++ airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/monitor/MonitorEventHandler.java Tue Nov 20 16:06:23 2012
@@ -39,6 +39,7 @@ import org.apache.airavata.workflow.mode
import org.apache.airavata.workflow.model.graph.Edge;
import org.apache.airavata.workflow.model.graph.Graph;
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.impl.NodeImpl;
@@ -422,7 +423,7 @@ public class MonitorEventHandler impleme
private void nodeStarted(Node node, boolean forward) {
if (forward) {
- if (!NodeController.getGUI(node).getBodyColor().equals(NodeState.FINISHED.color)) {
+ if (node.getState()!= NodeExecutionState.FINISHED) {
executeNode(node);
finishPredecessorNodes(node);
}
@@ -497,19 +498,19 @@ public class MonitorEventHandler impleme
}
private void executeNode(Node node) {
- NodeController.getGUI(node).setBodyColor(NodeState.EXECUTING.color);
+ node.setState(NodeExecutionState.EXECUTING);
}
private void finishNode(Node node) {
- NodeController.getGUI(node).setBodyColor(NodeState.FINISHED.color);
+ node.setState(NodeExecutionState.FINISHED);
}
private void failNode(Node node) {
- NodeController.getGUI(node).setBodyColor(NodeState.FAILED.color);
+ node.setState(NodeExecutionState.FAILED);
}
private void resetNode(Node node) {
- NodeController.getGUI(node).setBodyColor(NodeState.DEFAULT.color);
+ node.setState(NodeExecutionState.WAITING);
NodeController.getGUI(node).resetTokens();
}