View Javadoc

1   package cz.cuni.amis.pogamut.ut2004.factory.direct.remoteagent;
2   
3   import java.util.logging.Level;
4   
5   import cz.cuni.amis.pogamut.base.communication.command.IAct;
6   import cz.cuni.amis.pogamut.base.communication.command.ICommandSerializer;
7   import cz.cuni.amis.pogamut.base.communication.command.impl.Act;
8   import cz.cuni.amis.pogamut.base.communication.command.impl.StringCommandSerializer;
9   import cz.cuni.amis.pogamut.base.communication.connection.impl.socket.ISocketConnectionAddress;
10  import cz.cuni.amis.pogamut.base.communication.connection.impl.socket.SocketConnection;
11  import cz.cuni.amis.pogamut.base.communication.mediator.IMediator;
12  import cz.cuni.amis.pogamut.base.communication.mediator.impl.Mediator;
13  import cz.cuni.amis.pogamut.base.communication.parser.IWorldMessageParser;
14  import cz.cuni.amis.pogamut.base.communication.parser.impl.yylex.IYylexObserver;
15  import cz.cuni.amis.pogamut.base.communication.translator.IWorldMessageTranslator;
16  import cz.cuni.amis.pogamut.base.communication.translator.event.IWorldChangeEventOutput;
17  import cz.cuni.amis.pogamut.base.communication.translator.impl.WorldMessageTranslator;
18  import cz.cuni.amis.pogamut.base.component.bus.ComponentBus;
19  import cz.cuni.amis.pogamut.base.component.bus.IComponentBus;
20  import cz.cuni.amis.pogamut.base.component.controller.ComponentDependencies;
21  import cz.cuni.amis.pogamut.base.component.controller.ComponentDependencyType;
22  import cz.cuni.amis.pogamut.base.factory.IAgentFactory;
23  import cz.cuni.amis.pogamut.base.utils.logging.AgentLogger;
24  import cz.cuni.amis.pogamut.ut2004.agent.params.UT2004AgentParameters;
25  import cz.cuni.amis.pogamut.ut2004.communication.messages.ItemTypeTranslator;
26  import cz.cuni.amis.pogamut.ut2004.communication.messages.UT2004ItemTypeTranslator;
27  import cz.cuni.amis.pogamut.ut2004.communication.messages.UnrealIdTranslator;
28  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.Yylex;
29  import cz.cuni.amis.pogamut.ut2004.communication.parser.UT2004Parser;
30  import cz.cuni.amis.pogamut.ut2004.communication.translator.itemdescriptor.ItemTranslator;
31  import cz.cuni.amis.pogamut.ut2004.communication.translator.observer.ObserverFSM;
32  import cz.cuni.amis.pogamut.ut2004.communication.worldview.UT2004WorldView;
33  import cz.cuni.amis.pogamut.ut2004.factory.guice.remoteagent.UT2004ObserverModule;
34  import cz.cuni.amis.pogamut.ut2004.observer.impl.UT2004Observer;
35  import cz.cuni.amis.utils.exception.PogamutException;
36  
37  /**
38   * Factory that uses direct instantiation (plain old Java style) of the {@link UT2004Observer} class.
39   * <p><p>
40   * Can't be used to instantiate other classes!
41   * <p><p>
42   * If you need to instantiate own {@link UT2004Observer} descendant, use {@link cz.cuni.amis.pogamut.ut2004.factory.guice.remoteagent.UT2004ObserverFactory}
43   * and define own descendant of {@link UT2004ObserverModule}.
44   * @author Jimmy
45   *
46   * @param <PARAMS>
47   */
48  public class UT2004ObserverFactory<PARAMS extends UT2004AgentParameters> implements IAgentFactory<UT2004Observer, PARAMS> {
49  		
50  	@Override
51  	public UT2004Observer newAgent(PARAMS agentParameters) throws PogamutException {		
52  		// setup loger
53          AgentLogger logger = new AgentLogger(agentParameters.getAgentId());
54  
55          // Since default agent logger doesn't write anything, platform can be exposed to silent fail
56          // i.e. RuntimeException that is thrown, something happens and whole thing stops working
57          // without user knowing what the error message was.
58          logger.setLevel(Level.SEVERE);
59          logger.addDefaultConsoleHandler();
60          
61          IComponentBus eventBus = new ComponentBus(logger);
62  
63          ///////////////////////////////
64          ///      WORLD -> AGENT     ///
65          ///////////////////////////////
66          
67          // create connection to the world
68          SocketConnection socketConnection = new SocketConnection((ISocketConnectionAddress)agentParameters.getWorldAddress(), new ComponentDependencies(ComponentDependencyType.STARTS_WITH).add(agentParameters.getAgentId()), eventBus, logger);
69          
70          UnrealIdTranslator unrealIdTranslator = new UnrealIdTranslator();
71          ItemTypeTranslator itemTypeTranslator = new UT2004ItemTypeTranslator();
72          ItemTranslator itemTranslator = new ItemTranslator(itemTypeTranslator);
73          
74          
75          // parser for translating text messages into Java objects
76          IWorldMessageParser parser = new UT2004Parser(unrealIdTranslator, itemTranslator,itemTypeTranslator, socketConnection, new Yylex(), new IYylexObserver.LogObserver(logger), eventBus, logger);
77  
78          // translates sets of messages wrapped in Java objects into agregared messages
79          IWorldMessageTranslator messageTranslator = new ObserverFSM(itemTranslator, logger);
80          IWorldChangeEventOutput producer = new WorldMessageTranslator(parser, messageTranslator, eventBus, logger);
81  
82          IMediator mediator = new Mediator(producer, eventBus, logger);
83          
84          UT2004WorldView worldView = new UT2004WorldView(new ComponentDependencies(ComponentDependencyType.STARTS_WITH).add(agentParameters.getAgentId()), mediator, eventBus, logger);
85          
86          ///////////////////////////////
87          ///      AGENT -> WORLD     ///
88          ///////////////////////////////
89  
90          ICommandSerializer<String> commandSerializer = new StringCommandSerializer();
91          IAct act = new Act(socketConnection, commandSerializer, eventBus, logger);
92          
93          ///////////////////////////////
94          ///   AGENT INITIALIZATION  ///
95          ///////////////////////////////
96          
97          UT2004Observer observer = new UT2004Observer(agentParameters, eventBus, logger, worldView, act);        
98          return observer;
99  	}
100 
101 }