Author: bfoster
Date: Thu Mar  3 01:03:59 2011
New Revision: 1076475

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

- updates to TraceWorkflow 

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

Modified:
    
oodt/branches/wengine-branch/wengine/src/main/java/org/apache/oodt/cas/workflow/server/action/TraceWorkflow.java
    
oodt/branches/wengine-branch/wengine/src/main/java/org/apache/oodt/cas/workflow/util/WorkflowUtils.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=1076475&r1=1076474&r2=1076475&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 01:03:59 2011
@@ -26,6 +26,7 @@ import org.apache.oodt.cas.workflow.engi
 import org.apache.oodt.cas.workflow.exceptions.EngineException;
 import org.apache.oodt.cas.workflow.instance.WorkflowConnectTaskInstance;
 import org.apache.oodt.cas.workflow.processor.ProcessorSkeleton;
+import org.apache.oodt.cas.workflow.util.WorkflowUtils;
 
 /**
  * @author bfoster
@@ -38,13 +39,13 @@ import org.apache.oodt.cas.workflow.proc
 public class TraceWorkflow extends WorkflowEngineServerAction {
 
        private String instanceId;
-       public enum Mode { COMPLETE, RELATIVES, CHILDREN };
+       public enum Mode { COMBINED, COMPLETE, RELATIVES, CHILDREN };
        private Mode mode;
        
        @Override
        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)) {
+               if (this.mode.equals(Mode.COMPLETE) || 
this.mode.equals(Mode.RELATIVES) || this.mode.equals(Mode.COMBINED)) {
                        Vector<String> parentInstanceIds = new Vector<String>();
                        String currentInstanceId = this.instanceId;
                        String parentWorkflowInstanceId = null;
@@ -67,12 +68,29 @@ public class TraceWorkflow extends Workf
                                this.printTree(weClient, currentInstanceId, 
(parentSkeleton != null ? parentSkeleton.getModelId() : null), indent);
                        }else if (this.mode.equals(Mode.COMPLETE)) {
                                this.printTree(weClient, currentInstanceId, 
null, "");
-                       }                       
+                       }else if (this.mode.equals(Mode.COMBINED)) {
+                               ProcessorSkeleton skeleton = 
weClient.getWorkflow(currentInstanceId);
+                               buildMasterWorkflow(weClient, skeleton);
+                               
System.out.println(WorkflowUtils.toString(skeleton));
+                       }
                }else if (this.mode.equals(Mode.CHILDREN)){
                        this.printTree(weClient, this.instanceId, null, "");
                }
        }
        
+       private void buildMasterWorkflow(WorkflowEngineClient weClient, 
ProcessorSkeleton skeleton) throws EngineException {
+               for (ProcessorSkeleton task : WorkflowUtils.getTasks(skeleton)) 
{
+                       List<String> spawnedWorkflows = 
task.getDynamicMetadata().getAllMetadata(WorkflowConnectTaskInstance.SPAWNED_WORKFLOWS);
+                       List<ProcessorSkeleton> subProcessors = new 
Vector<ProcessorSkeleton>();
+                       for (String spawedWorkflow : spawnedWorkflows) {
+                               ProcessorSkeleton workflow = 
weClient.getWorkflow(spawedWorkflow);
+                               buildMasterWorkflow(weClient, workflow);
+                               subProcessors.add(workflow);
+                       }
+                       task.setSubProcessors(subProcessors);
+               }
+       }
+               
        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 + "'" : ""));

Modified: 
oodt/branches/wengine-branch/wengine/src/main/java/org/apache/oodt/cas/workflow/util/WorkflowUtils.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/wengine-branch/wengine/src/main/java/org/apache/oodt/cas/workflow/util/WorkflowUtils.java?rev=1076475&r1=1076474&r2=1076475&view=diff
==============================================================================
--- 
oodt/branches/wengine-branch/wengine/src/main/java/org/apache/oodt/cas/workflow/util/WorkflowUtils.java
 (original)
+++ 
oodt/branches/wengine-branch/wengine/src/main/java/org/apache/oodt/cas/workflow/util/WorkflowUtils.java
 Thu Mar  3 01:03:59 2011
@@ -221,6 +221,26 @@ public class WorkflowUtils {
                }
                return null;
        }
+       
+       public static List<ProcessorSkeleton> getTasks(ProcessorSkeleton 
skeleton) {
+               List<ProcessorSkeleton> options = new 
Vector<ProcessorSkeleton>();
+               options.add(skeleton);
+               List<ProcessorSkeleton> tasks = new Vector<ProcessorSkeleton>();
+               while (!options.isEmpty()) {
+                       ProcessorSkeleton currentOption = options.remove(0);
+                       if (currentOption.getSubProcessors().isEmpty()) {
+                               tasks.add(currentOption);
+                       }else {
+                               if (currentOption.getPreConditions() != null)
+                                       
options.add(currentOption.getPreConditions());
+                               if (currentOption.getPostConditions() != null)
+                                       
options.add(currentOption.getPostConditions());
+                               for (ProcessorSkeleton ps : 
currentOption.getSubProcessors())
+                                       options.add(ps);
+                       }
+               }
+               return tasks;
+       }
 
        public static void validateWorkflowProcessor(WorkflowProcessor wp) {
                if (wp instanceof TaskProcessor) {


Reply via email to