View Javadoc

1   package cz.cuni.amis.pogamut.ut2004multi.factory.guice.remoteagent;
2   
3   import com.google.inject.AbstractModule;
4   import com.google.inject.Provider;
5   import com.google.inject.name.Names;
6   
7   import cz.cuni.amis.pogamut.base.agent.IAgent;
8   import cz.cuni.amis.pogamut.base.communication.translator.IWorldMessageTranslator;
9   import cz.cuni.amis.pogamut.base.communication.worldview.ILockableWorldView;
10  import cz.cuni.amis.pogamut.base.communication.worldview.IWorldView;
11  import cz.cuni.amis.pogamut.base.component.bus.IComponentBus;
12  import cz.cuni.amis.pogamut.base.component.controller.ComponentDependencies;
13  import cz.cuni.amis.pogamut.base.component.lifecyclebus.ILifecycleBus;
14  import cz.cuni.amis.pogamut.base.component.lifecyclebus.LifecycleBus;
15  import cz.cuni.amis.pogamut.base.utils.guice.AdaptableProvider;
16  import cz.cuni.amis.pogamut.base3d.ILockableVisionWorldView;
17  import cz.cuni.amis.pogamut.base3d.agent.IAgent3D;
18  import cz.cuni.amis.pogamut.base3d.worldview.IVisionWorldView;
19  import cz.cuni.amis.pogamut.multi.agent.ITeamedAgentId;
20  import cz.cuni.amis.pogamut.multi.agent.impl.TeamedAgentId;
21  import cz.cuni.amis.pogamut.multi.communication.worldview.ISharedWorldView;
22  import cz.cuni.amis.pogamut.multi.communication.worldview.impl.BatchAwareLocalWorldView;
23  import cz.cuni.amis.pogamut.multi.communication.worldview.impl.LocalWorldViewAdapter;
24  import cz.cuni.amis.pogamut.ut2004.bot.IUT2004Bot;
25  import cz.cuni.amis.pogamut.ut2004.bot.IUT2004BotController;
26  import cz.cuni.amis.pogamut.ut2004.bot.impl.UT2004Bot;
27  import cz.cuni.amis.pogamut.ut2004.bot.params.UT2004BotParameters;
28  import cz.cuni.amis.pogamut.ut2004.communication.translator.bot.BotFSM;
29  import cz.cuni.amis.pogamut.ut2004.factory.guice.remoteagent.UT2004BotModule;
30  import cz.cuni.amis.pogamut.ut2004multi.communication.worldview.UT2004BatchAwareSharedWorldView;
31  import cz.cuni.amis.pogamut.ut2004multi.communication.worldview.UT2004LockableLocalWorldView;
32  
33  /**
34   * Implements a bot module using shared WorldView
35   * @author srlok
36   *
37   */
38  public class UT2004MultiBotModule<PARAMS extends UT2004BotParameters> extends UT2004BotModule<PARAMS>
39  {
40  	
41  	private Class<? extends IUT2004BotController> botControllerClass;
42  	
43  	protected UT2004MultiBotModule() 
44  	{
45  	}
46  	
47  	public UT2004MultiBotModule(Class<? extends IUT2004BotController> botControllerClass) {
48  		this.botControllerClass = botControllerClass;
49  	}
50  	
51  	@Override
52  	public void prepareNewAgent(PARAMS agentParameters)
53  	{
54  		super.prepareNewAgent(agentParameters);
55  		teamedIdProvider.set( (TeamedAgentId)agentParameters.getAgentId());
56  	}
57  	
58  	protected AdaptableProvider<TeamedAgentId> teamedIdProvider = new AdaptableProvider<TeamedAgentId>();
59  	
60  	protected Provider<TeamedAgentId> getTeamedAgentIdProvider()
61  	{
62  		return this.teamedIdProvider;
63  	}
64  	
65  	@Override
66  	protected void configureModules() {
67  		super.configureModules();
68  		addModule(new AbstractModule() {
69  
70  			@Override
71  			public void configure() {	
72  				
73  				bind(IWorldMessageTranslator.class).to(BotFSM.class);
74  				bind(IWorldView.class).to(IVisionWorldView.class);
75  				bind(IVisionWorldView.class).to(ILockableVisionWorldView.class);
76  				bind(ILockableWorldView.class).to(ILockableVisionWorldView.class);
77  				bind(ILockableVisionWorldView.class).to(LocalWorldViewAdapter.class);
78  				bind(BatchAwareLocalWorldView.class).to(UT2004LockableLocalWorldView.class);
79  				bind(ISharedWorldView.class).to(UT2004BatchAwareSharedWorldView.class);
80  				
81  				bind(IComponentBus.class).to(ILifecycleBus.class);
82  				bind(ILifecycleBus.class).to(LifecycleBus.class);
83  				
84  				bind(ITeamedAgentId.class).to(TeamedAgentId.class);
85  				bind(TeamedAgentId.class).toProvider( getTeamedAgentIdProvider());
86  				
87  				bind(ComponentDependencies.class).annotatedWith(Names.named(UT2004LockableLocalWorldView.WORLDVIEW_DEPENDENCY)).toProvider(worldViewDependenciesProvider);
88  				bind(IAgent.class).to(IAgent3D.class);
89  				bind(IAgent3D.class).to(IUT2004Bot.class);
90  				bind(IUT2004Bot.class).to(UT2004Bot.class);
91  				
92  				if (botControllerClass != null) {
93  					bind(IUT2004BotController.class).to(botControllerClass);
94  				}
95  				
96  			}
97  			
98  		});
99  	}
100 
101 }