From da731d2bb81666b9c697d9099da632e7dfcdc0f7 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Tue, 9 Sep 2014 12:13:21 +0200 Subject: Replaced int sysKey Item identifier with UUID, which is now portable. ItemPath objects are now used to identify Items throughout the kernel, replacing ints and Integers. --- .../c2kernel/entity/agent/AgentImplementation.java | 83 ++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/main/java/com/c2kernel/entity/agent/AgentImplementation.java (limited to 'src/main/java/com/c2kernel/entity/agent/AgentImplementation.java') diff --git a/src/main/java/com/c2kernel/entity/agent/AgentImplementation.java b/src/main/java/com/c2kernel/entity/agent/AgentImplementation.java new file mode 100644 index 0000000..0406387 --- /dev/null +++ b/src/main/java/com/c2kernel/entity/agent/AgentImplementation.java @@ -0,0 +1,83 @@ +package com.c2kernel.entity.agent; + +import com.c2kernel.common.CannotManageException; +import com.c2kernel.common.ObjectCannotBeUpdated; +import com.c2kernel.common.ObjectNotFoundException; +import com.c2kernel.common.SystemKey; +import com.c2kernel.entity.AgentOperations; +import com.c2kernel.entity.ItemImplementation; +import com.c2kernel.lifecycle.instance.predefined.PredefinedStepContainer; +import com.c2kernel.lifecycle.instance.predefined.agent.AgentPredefinedStepContainer; +import com.c2kernel.lookup.AgentPath; +import com.c2kernel.lookup.ItemPath; +import com.c2kernel.lookup.RolePath; +import com.c2kernel.process.Gateway; +import com.c2kernel.utils.Logger; + +public class AgentImplementation extends ItemImplementation implements + AgentOperations { + + private JobList currentJobs; + private final AgentPath mAgentPath; + + public AgentImplementation(AgentPath path) { + super(path); + mAgentPath = path; + } + + /** + * Called by an activity when it reckons we need to update our joblist for it + */ + + @Override + public synchronized void refreshJobList(SystemKey sysKey, String stepPath, String newJobs) { + try { + ItemPath itemPath = new ItemPath(sysKey); + JobArrayList newJobList = (JobArrayList)Gateway.getMarshaller().unmarshall(newJobs); + + // get our joblist + if (currentJobs == null) + currentJobs = new JobList( itemPath, null); + + // remove old jobs for this item + currentJobs.removeJobsForStep( itemPath, stepPath ); + + // merge new jobs in + for (Object name : newJobList.list) { + Job newJob = (Job)name; + Logger.msg(6, "Adding job for "+newJob.getItemPath()+"/"+newJob.getStepPath()+":"+newJob.getTransition().getId()); + currentJobs.addJob(newJob); + } + + } catch (Throwable ex) { + Logger.error("Could not refresh job list."); + Logger.error(ex); + } + + } + + @Override + public void addRole(String roleName) throws CannotManageException, ObjectNotFoundException { + RolePath newRole = Gateway.getLookup().getRolePath(roleName); + try { + newRole.addAgent(mAgentPath); + } catch (ObjectCannotBeUpdated ex) { + throw new CannotManageException("Could not update role"); + } + } + + @Override + public void removeRole(String roleName) throws CannotManageException, ObjectNotFoundException { + RolePath rolePath = Gateway.getLookup().getRolePath(roleName); + try { + rolePath.removeAgent(mAgentPath); + } catch (ObjectCannotBeUpdated ex) { + throw new CannotManageException("Could not update role"); + } + } + + @Override + protected PredefinedStepContainer getNewPredefStepContainer() { + return new AgentPredefinedStepContainer(); + } +} -- cgit v1.2.3