diff options
Diffstat (limited to 'source/com/c2kernel/lifecycle/instance/JobPusher.java')
| -rwxr-xr-x | source/com/c2kernel/lifecycle/instance/JobPusher.java | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/source/com/c2kernel/lifecycle/instance/JobPusher.java b/source/com/c2kernel/lifecycle/instance/JobPusher.java new file mode 100755 index 0000000..e58170d --- /dev/null +++ b/source/com/c2kernel/lifecycle/instance/JobPusher.java @@ -0,0 +1,69 @@ +package com.c2kernel.lifecycle.instance;
+
+import java.util.Enumeration;
+import java.util.Iterator;
+
+import com.c2kernel.entity.Agent;
+import com.c2kernel.entity.AgentHelper;
+import com.c2kernel.entity.agent.Job;
+import com.c2kernel.entity.agent.JobArrayList;
+import com.c2kernel.lifecycle.instance.stateMachine.Transitions;
+import com.c2kernel.lookup.AgentPath;
+import com.c2kernel.lookup.RolePath;
+import com.c2kernel.utils.CastorXMLUtility;
+import com.c2kernel.utils.Logger;
+
+final class JobPusher extends Thread {
+ private final Activity activity;
+ private final RolePath myRole;
+
+ JobPusher(Activity activity, RolePath role) {
+ this.activity = activity;
+ this.myRole = role;
+ }
+
+ public void run()
+ {
+ Thread.currentThread().setName("Agent job pusher for "+activity.getName()+" to role "+myRole);
+ for (Enumeration e = myRole.getChildren(); e.hasMoreElements();)
+ {
+ AgentPath nextAgent = (AgentPath)e.nextElement();
+ Logger.msg(7, "Activity.pushJobsToAgents() - Calculating jobs for " + nextAgent.getAgentName());
+ try
+ {
+ // get joblist for user
+ JobArrayList jobList = new JobArrayList(this.activity.calculateJobs(nextAgent, false));
+ // only transmit start, complete and resume jobs
+ for (Iterator element = jobList.list.iterator(); element.hasNext();)
+ {
+ Job thisJob = (Job) element.next();
+ if (thisJob.getPossibleTransition() != Transitions.START
+ && thisJob.getPossibleTransition() != Transitions.COMPLETE
+ && thisJob.getPossibleTransition() != Transitions.RESUME
+ && thisJob.getPossibleTransition() != Transitions.SUSPEND
+ && thisJob.getPossibleTransition() != Transitions.REASSIGN)
+ element.remove();
+ }
+ Logger.msg(7, "Activity.pushJobsToAgents() - User will receive " + jobList.list.size() + " jobs");
+ String stringJobs = CastorXMLUtility.marshall(jobList);
+ // push it to the agent
+ org.omg.CORBA.Object agentIOR = nextAgent.getIOR();
+ Agent thisAgent = AgentHelper.narrow(agentIOR);
+ Logger.debug("Calling agent "+thisAgent.getSystemKey()+" from "+activity.getPath());
+ thisAgent.refreshJobList(this.activity.getItemEntityPath().getSysKey(), activity.getPath(), stringJobs);
+ }
+ catch (Exception ex)
+ {
+ Logger.error(
+ "Agent "
+ + nextAgent.getAgentName()
+ + " of role "
+ + myRole
+ + " could not be found to be informed of a change in "
+ + this.activity.getItemEntityPath().getSysKey());
+ Logger.error(ex);
+ }
+ }
+
+ }
+}
\ No newline at end of file |
