package jadex.bdi.testcases.semiautomatic; import jadex.bdi.OAVBDIModelLoader; import jadex.bdi.model.OAVAgentModel; import jadex.bdi.runtime.interpreter.BDIInterpreter; import jadex.bridge.IComponentAdapter; import jadex.bridge.IComponentAdapterFactory; import jadex.bridge.IComponentDescription; import jadex.bridge.IComponentIdentifier; import jadex.bridge.IComponentInstance; import jadex.bridge.IExternalAccess; import jadex.bridge.IModelInfo; import jadex.commons.Future; import jadex.commons.IFuture; import jadex.commons.concurrent.Executor; import jadex.commons.concurrent.IExecutable; import jadex.commons.concurrent.IResultListener; import jadex.commons.concurrent.ThreadPoolFactory; import jadex.commons.service.BasicServiceContainer; import jadex.commons.service.IServiceContainer; import jadex.commons.service.clock.ClockCreationInfo; import jadex.commons.service.clock.ClockService; import jadex.commons.service.clock.IClock; import jadex.commons.service.threadpool.ThreadPoolService; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.logging.Logger; /** * Test execution of an agent. */ public class InterpreterTest { /** * Main method for testing. * @throws IOException */ public static void main(String[] args) throws IOException { try { String model = "/jadex/bdi/examples/helloworld/HelloWorld.agent.xml"; if(args.length==1) { model = args[0]; } else if(args.length>1) { System.out.println("USAGE: InterpreterTest <model>"); } // Load agent model. Map config = new HashMap(); config.put("messagetype_fipa", new jadex.base.fipa.FIPAMessageType()); config.put("planexecutor_standard", new jadex.bdi.runtime.impl.JavaStandardPlanExecutor( jadex.commons.concurrent.ThreadPoolFactory.createThreadPool())); OAVBDIModelLoader loader = new OAVBDIModelLoader(); OAVAgentModel loaded = loader.loadAgentModel(model, null, null); // Initialize agent interpreter. Future ret = new Future(); ret.addResultListener(new IResultListener() { public void resultAvailable(Object source, Object result) { // interpreter.getAgentAdapter().wakeup(); } public void exceptionOccurred(Object source, Exception exception) { } }); BDIInterpreter interpreter = new BDIInterpreter(null, new ComponentAdapterFactory(), loaded.getState(), loaded, null, null, null, config, ret); interpreter.getAgentAdapter().wakeup(); // System.out.println("Agent execution finished."); // OAVTreeModel.createOAVFrame("Agent State", state, interpreter.getAgentInstanceReference()).setVisible(true); // // RetePanel.createReteFrame("Agent Rules", ((RetePatternMatcherFunctionality)interpreter.getRuleSystem().getMatcherFunctionality()).getReteNode(), // ((RetePatternMatcherState)interpreter.getRuleSystem().getMatcherState()).getReteMemory(), new Object()); } catch(Exception e) { e.printStackTrace(); } } } class ComponentAdapterFactory implements IComponentAdapterFactory { public boolean executeStep(IComponentAdapter adapter) { ((ComponentAdapter)adapter).wakeup(); return false; } public IComponentAdapter createComponentAdapter(IComponentDescription desc, IModelInfo model, IComponentInstance instance, IExternalAccess parent) { return new ComponentAdapter(instance); } } class ComponentAdapter implements IComponentAdapter { final Executor exe; final IServiceContainer container; public ComponentAdapter(final IComponentInstance interpreter) { container = new BasicServiceContainer("platform"); ThreadPoolService tps = new ThreadPoolService(ThreadPoolFactory.createThreadPool(), container); container.addService(tps); ClockService clock = new ClockService(new ClockCreationInfo(IClock.TYPE_SYSTEM, "system"), container); container.addService(clock); exe = new Executor(tps); exe.setExecutable(new IExecutable() { public boolean execute() { // Execute agent. // System.out.println("Executed agent step."); return ((BDIInterpreter)interpreter).executeStep(); } }); } public void wakeup() { exe.execute(); } public void invokeLater(Runnable action) { action.run(); } public IExternalAccess getParent() { // TODO Auto-generated method stub return null; } public IFuture getChildrenAccesses() { // TODO Auto-generated method stub return null; } public IFuture getChildrenIdentifiers() { // TODO Auto-generated method stub return null; } public IServiceContainer getServiceContainer() { return container; } public IComponentIdentifier getComponentIdentifier() { return new IComponentIdentifier() { public String getName() { return "noname"; } public String getLocalName() { return "noname"; } public String getPlatformName() { return "noplatform"; } public String[] getAddresses() { return new String[0]; } }; } public boolean isExternalThread() { return false; } public Logger getLogger() { return Logger.getAnonymousLogger(); } }