You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oodt.apache.org by bf...@apache.org on 2011/03/03 01:29:04 UTC

svn commit: r1076468 - /oodt/branches/wengine-branch/wengine/src/main/java/org/apache/oodt/cas/workflow/server/action/TraceWorkflow.java

Author: bfoster
Date: Thu Mar  3 00:29:04 2011
New Revision: 1076468

URL: http://svn.apache.org/viewvc?rev=1076468&view=rev
Log:

- updates to TraceWorkflow 

----------------------------

Modified:
    oodt/branches/wengine-branch/wengine/src/main/java/org/apache/oodt/cas/workflow/server/action/TraceWorkflow.java

Modified: oodt/branches/wengine-branch/wengine/src/main/java/org/apache/oodt/cas/workflow/server/action/TraceWorkflow.java
URL: http://svn.apache.org/viewvc/oodt/branches/wengine-branch/wengine/src/main/java/org/apache/oodt/cas/workflow/server/action/TraceWorkflow.java?rev=1076468&r1=1076467&r2=1076468&view=diff
==============================================================================
--- oodt/branches/wengine-branch/wengine/src/main/java/org/apache/oodt/cas/workflow/server/action/TraceWorkflow.java (original)
+++ oodt/branches/wengine-branch/wengine/src/main/java/org/apache/oodt/cas/workflow/server/action/TraceWorkflow.java Thu Mar  3 00:29:04 2011
@@ -25,7 +25,7 @@ import org.apache.oodt.cas.metadata.Meta
 import org.apache.oodt.cas.workflow.engine.WorkflowEngineClient;
 import org.apache.oodt.cas.workflow.exceptions.EngineException;
 import org.apache.oodt.cas.workflow.instance.WorkflowConnectTaskInstance;
-import org.apache.oodt.cas.workflow.processor.ProcessorStub;
+import org.apache.oodt.cas.workflow.processor.ProcessorSkeleton;
 
 /**
  * @author bfoster
@@ -45,40 +45,63 @@ public class TraceWorkflow extends Workf
 	public void performAction(WorkflowEngineClient weClient) throws Exception {
 		System.out.println("Workflow Trace [InstanceId='" + this.instanceId + "']");
 		if (this.mode.equals(Mode.COMPLETE) || this.mode.equals(Mode.RELATIVES)) {
-			Vector<String> parents = new Vector<String>();
+			Vector<String> parentInstanceIds = new Vector<String>();
 			String currentInstanceId = this.instanceId;
 			String parentWorkflowInstanceId = null;
 			do {
 				if (parentWorkflowInstanceId != null) {
 					currentInstanceId = parentWorkflowInstanceId;
-					parents.add(parentWorkflowInstanceId);
+					parentInstanceIds.add(parentWorkflowInstanceId);
 				}
 				parentWorkflowInstanceId = weClient.getWorkflowMetadata(currentInstanceId).getMetadata(WorkflowConnectTaskInstance.SPAWNED_BY_WORKFLOW);
 			}while(parentWorkflowInstanceId != null);
 			if (this.mode.equals(Mode.RELATIVES)) {
+				ProcessorSkeleton parentSkeleton = null;
 				String indent = "";
-				for (String parent : parents) {
-					ProcessorStub stub = weClient.getWorkflowStub(parent);
-					System.out.println(indent + " - InstanceId = '" + parent + "' : ModelId = '" + stub.getModelId() + "' : State = '" + stub.getState().getName() + "'");
+				for (String parentInstanceId : parentInstanceIds) {
+					ProcessorSkeleton skeleton = weClient.getWorkflow(parentInstanceId);
+					System.out.println(indent + " - InstanceId = '" + instanceId + "' : ModelId = '" + skeleton.getModelId() + "' : State = '" + skeleton.getState().getName() + "'" + (parentSkeleton != null ? " : SpawnedBy = '" + this.findSpawnedBy(parentSkeleton, parentInstanceId) + "'" : ""));
+					parentSkeleton = skeleton;
 					indent += "  ";
 				}
-				this.printTree(weClient, currentInstanceId, indent);
+				this.printTree(weClient, currentInstanceId, (parentSkeleton != null ? parentSkeleton.getModelId() : null), indent);
 			}else if (this.mode.equals(Mode.COMPLETE)) {
-				this.printTree(weClient, currentInstanceId, "");
+				this.printTree(weClient, currentInstanceId, null, "");
 			}			
 		}else if (this.mode.equals(Mode.CHILDREN)){
-			this.printTree(weClient, this.instanceId, "");
+			this.printTree(weClient, this.instanceId, null, "");
 		}
 	}
 	
-	private void printTree(WorkflowEngineClient weClient, String instanceId, String indent) throws EngineException {
-		ProcessorStub stub = weClient.getWorkflowStub(instanceId);
-		System.out.println(indent + " - InstanceId = '" + instanceId + "' : ModelId = '" + stub.getModelId() + "' : State = '" + stub.getState().getName() + "'");
+	private void printTree(WorkflowEngineClient weClient, String instanceId, String parentModelId, String indent) throws EngineException {
+		ProcessorSkeleton skeleton = weClient.getWorkflow(instanceId);
+		System.out.println(indent + " - InstanceId = '" + instanceId + "' : ModelId = '" + skeleton.getModelId() + "' : State = '" + skeleton.getState().getName() + "'" + (parentModelId != null ? " : SpawnedBy = '" + parentModelId + "'" : ""));
 		Metadata metadata = weClient.getWorkflowMetadata(instanceId);
 		List<String> spawnedWorkflows = metadata.getAllMetadata(WorkflowConnectTaskInstance.SPAWNED_WORKFLOWS);
-		if (spawnedWorkflows != null)
-			for (String child : spawnedWorkflows)
-				this.printTree(weClient, child, indent + "  ");
+		if (spawnedWorkflows != null) 
+			for (String child : spawnedWorkflows) 
+				this.printTree(weClient, child, this.findSpawnedBy(skeleton, child).getModelId(), indent + "  ");
+	}
+	
+	private ProcessorSkeleton findSpawnedBy(ProcessorSkeleton skeleton, String spawnedInstanceId) {
+		List<String> spawnedWorkflows = skeleton.getDynamicMetadata().getAllMetadata(WorkflowConnectTaskInstance.SPAWNED_WORKFLOWS);
+		if (skeleton.getSubProcessors().isEmpty() && spawnedWorkflows.contains(spawnedInstanceId)) {
+			return skeleton;
+		}else {
+			ProcessorSkeleton result = null;
+			if (skeleton.getPreConditions() != null)
+				result = findSpawnedBy(skeleton.getPreConditions(), spawnedInstanceId);
+			if (result == null && skeleton.getPostConditions() != null)
+				result = findSpawnedBy(skeleton.getPostConditions(), spawnedInstanceId);
+			if (result == null) {
+				for (ProcessorSkeleton ps : skeleton.getSubProcessors()) {
+					result = findSpawnedBy(ps, spawnedInstanceId);
+					if (result != null)
+						break;
+				}
+			}
+			return result;
+		}
 	}
 	
 	public void setInstanceId(String instanceId) {