package jadex.tools.daemon; import jadex.bridge.IComponentIdentifier; import jadex.bridge.IComponentStep; import jadex.bridge.IExternalAccess; import jadex.bridge.IInternalAccess; import jadex.commons.Future; import jadex.commons.IFuture; import jadex.commons.concurrent.DelegationResultListener; import jadex.commons.service.BasicService; import jadex.micro.IMicroExternalAccess; /** * The daemon service. */ public class DaemonService extends BasicService implements IDaemonService { //-------- attributes -------- /** The agent. */ protected IMicroExternalAccess agent; //-------- constructors -------- /** * Create a new helpline service. */ public DaemonService(IExternalAccess agent) { super(agent.getServiceProvider().getId(), IDaemonService.class, null); this.agent = (IMicroExternalAccess)agent; } //-------- methods -------- /** * Start a platform using a configuration. * @param args The arguments. */ public IFuture startPlatform(final StartOptions opt) { final Future ret = new Future(); agent.scheduleStep(new IComponentStep() { public Object execute(IInternalAccess ia) { DaemonAgent agent = (DaemonAgent)ia; agent.startPlatform(opt).addResultListener(new DelegationResultListener(ret)); return null; } }); return ret; } /** * Shutdown a platform. * @param cid The platform id. */ public IFuture shutdownPlatform(final IComponentIdentifier cid) { final Future ret = new Future(); agent.scheduleStep(new IComponentStep() { public Object execute(IInternalAccess ia) { DaemonAgent agent = (DaemonAgent)ia; agent.shutdownPlatform(cid).addResultListener(new DelegationResultListener(ret)); return null; } }); return ret; } /** * Get the component identifiers of all (managed) platforms. * @return Collection of platform ids. */ public IFuture getPlatforms() { final Future ret = new Future(); agent.scheduleStep(new IComponentStep() { public Object execute(IInternalAccess ia) { DaemonAgent agent = (DaemonAgent)ia; agent.getPlatforms().addResultListener(new DelegationResultListener(ret)); return null; } }); return ret; } /** * Add a change listener. * @param listener The change listener. */ public void addChangeListener(final IRemoteChangeListener listener) { agent.scheduleStep(new IComponentStep() { public Object execute(IInternalAccess ia) { DaemonAgent agent = (DaemonAgent)ia; agent.addChangeListener(listener); return null; } }); } /** * Remove a change listener. * @param listener The change listener. */ public void removeChangeListener(final IRemoteChangeListener listener) { agent.scheduleStep(new IComponentStep() { public Object execute(IInternalAccess ia) { DaemonAgent agent = (DaemonAgent)ia; agent.removeChangeListener(listener); return null; } }); } }