From 254ee6f47eebfc00462c10756a92066e82cc1a96 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Tue, 21 Jun 2011 15:46:02 +0200 Subject: Initial commit --- .../com/c2kernel/lifecycle/instance/JobPusher.java | 69 ++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100755 source/com/c2kernel/lifecycle/instance/JobPusher.java (limited to 'source/com/c2kernel/lifecycle/instance/JobPusher.java') 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 -- cgit v1.2.3