package cz.agents.agentpolis.darptestbed.simmodel.agent.driver; import com.google.inject.Injector; import cz.agents.agentpolis.darptestbed.siminfrastructure.communication.driver.protocol.DriverCentralizedMessageProtocol; import cz.agents.agentpolis.darptestbed.siminfrastructure.communication.driver.protocol.DriverMessageProtocol; import cz.agents.agentpolis.darptestbed.siminfrastructure.communication.protocol.GeneralMessageProtocol; import cz.agents.agentpolis.darptestbed.siminfrastructure.communication.requestconsumer.protocol.RequestConsumerMessageProtocol; import cz.agents.agentpolis.darptestbed.siminfrastructure.communication.requestconsumer.receiver.RequestConsumerReceiverVisitor; import cz.agents.agentpolis.darptestbed.simmodel.agent.TestbedEntityType; import cz.agents.agentpolis.darptestbed.simmodel.agent.driver.logic.DriverCentralizedLogic; import cz.agents.agentpolis.darptestbed.simmodel.agent.driver.logic.DriverDecentralizedLogic; import cz.agents.agentpolis.darptestbed.simmodel.agent.driver.logic.DriverLogicWithPassengerMessageProtocol; import cz.agents.agentpolis.simmodel.environment.model.query.AgentPositionQuery; /** * The factory for creating a new taxi driver instance * * @author Lukas Canda */ public class DriverAgentFactory { /** * All parameters are required to create a DriverAgent instance. (We usually * set the parameters in an AgentInitFactory when we know the details about * the agents we want to create.) */ public DriverAgent<?> createDriverAgent(String driverId, DriverLogicWithPassengerMessageProtocol logic, Injector injector) { AgentPositionQuery positionQuery = injector.getInstance(AgentPositionQuery.class); DriverAgent<?> driverAgent; if (logic.isDecentralized()) { driverAgent = new DriverDecentralizedAgent(driverId, TestbedEntityType.TAXI_DRIVER, (DriverDecentralizedLogic) logic, positionQuery); injector.getInstance(RequestConsumerMessageProtocol.class).addReceiverVisitor( driverId, (RequestConsumerReceiverVisitor) driverAgent); } else { driverAgent = new DriverCentralizedAgent(driverId, TestbedEntityType.TAXI_DRIVER, (DriverCentralizedLogic) logic, positionQuery); injector.getInstance(DriverCentralizedMessageProtocol.class).addReceiverVisitor(driverId, (DriverCentralizedAgent) driverAgent); } injector.getInstance(DriverMessageProtocol.class).addReceiverVisitor(driverId, driverAgent); injector.getInstance(GeneralMessageProtocol.class).addReceiverVisitor(driverId, driverAgent); return driverAgent; } }