1 package cz.cuni.amis.pogamut.defcon.factory;
2
3 import javabot.PogamutJBotSupport;
4
5 import com.google.inject.AbstractModule;
6 import com.google.inject.Injector;
7 import com.google.inject.name.Names;
8
9 import cz.cuni.amis.pogamut.base.agent.IAgent;
10 import cz.cuni.amis.pogamut.base.agent.IAgentId;
11 import cz.cuni.amis.pogamut.base.agent.IEmbodiedAgent;
12 import cz.cuni.amis.pogamut.base.agent.IObservingAgent;
13 import cz.cuni.amis.pogamut.base.agent.params.impl.AgentParameters;
14 import cz.cuni.amis.pogamut.base.communication.translator.event.IWorldChangeEventOutput;
15 import cz.cuni.amis.pogamut.base.communication.worldview.IWorldView;
16 import cz.cuni.amis.pogamut.base.component.controller.ComponentDependencies;
17 import cz.cuni.amis.pogamut.base.component.controller.ComponentDependencyType;
18 import cz.cuni.amis.pogamut.base.factory.guice.GuiceAgentModule;
19 import cz.cuni.amis.pogamut.base.utils.guice.AdaptableProvider;
20 import cz.cuni.amis.pogamut.defcon.agent.DefConAgent;
21 import cz.cuni.amis.pogamut.defcon.agent.IDefConAgent;
22 import cz.cuni.amis.pogamut.defcon.agent.IDefConAgentController;
23 import cz.cuni.amis.pogamut.defcon.agent.IDefConAgentLogicController;
24 import cz.cuni.amis.pogamut.defcon.communication.translator.DefConMessageProducer;
25 import cz.cuni.amis.pogamut.defcon.communication.worldview.DefConWorldView;
26
27
28
29
30
31
32
33 public class DefConAgentModule extends GuiceAgentModule<AgentParameters> {
34
35 private Class<? extends DefConAgent> defConAgentClass;
36 private Class<? extends IDefConAgentLogicController> defConAgentLogicControllerClass;
37
38 private AdaptableProvider<ComponentDependencies> defConDependenciesProvider =
39 new AdaptableProvider<ComponentDependencies>(null);
40
41 public DefConAgentModule(Class<? extends DefConAgent> defConAgentClass,
42 Class<? extends IDefConAgentLogicController> defConAgentLogicControllerClass) {
43 this.defConAgentClass = defConAgentClass;
44 this.defConAgentLogicControllerClass = defConAgentLogicControllerClass;
45 }
46
47 public Class<? extends DefConAgent> getDefConAgentClass() {
48 return defConAgentClass;
49 }
50
51
52
53
54
55
56
57 public void newBindings(IAgentId agentId) {
58 getAgentScope().clearScope();
59 defConDependenciesProvider.
60 set(new ComponentDependencies(ComponentDependencyType.STARTS_WITH).add(agentId));
61 }
62
63 @Override
64 protected void configureModules() {
65 super.configureModules();
66 PogamutJBotSupport.writeToConsole("DefConAgentModule configure modules()");
67 addModule(new AbstractModule() {
68
69 @Override
70 protected void configure() {
71 bind(IAgent.class).to(IObservingAgent.class);
72 bind(IObservingAgent.class).to(IEmbodiedAgent.class);
73 bind(IEmbodiedAgent.class).to(IDefConAgent.class);
74 bind(IDefConAgent.class).to(DefConAgent.class);
75 if (DefConAgent.class != defConAgentClass)
76 bind(DefConAgent.class).to(defConAgentClass);
77 bind(IWorldView.class).to(DefConWorldView.class);
78 bind(IWorldChangeEventOutput.class).to(DefConMessageProducer.class);
79 bind(IDefConAgentController.class).to(IDefConAgentLogicController.class);
80 bind(IDefConAgentLogicController.class).to(defConAgentLogicControllerClass);
81 bind(ComponentDependencies.class).
82 annotatedWith(Names.named(DefConWorldView.WORLDVIEW_DEPENDENCY)).
83 toProvider(defConDependenciesProvider);
84 }
85
86 });
87 }
88
89 }