package cz.agents.agentpolis.tools.geovisio.spy; import java.sql.SQLException; import java.util.List; import org.apache.log4j.Logger; import org.opengis.referencing.operation.TransformException; import com.google.common.collect.Lists; import com.google.inject.Injector; import cz.agents.agentpolis.simmodel.agent.Agent; import cz.agents.agentpolis.simulator.creator.SimulationCreator; import cz.agents.agentpolis.simulator.creator.SimulationFinishedListener; import cz.agents.agentpolis.simulator.creator.initializator.AgentInitFactory; import cz.agents.agentpolis.tools.geovisio.spy.agentpolis.AgentPolisDataReader; /** * * @author Marek Cuchy * */ public class SpyAgentInitFactory implements AgentInitFactory { private final static Logger logger = Logger.getLogger(SpyAgentInitFactory.class); private final int interval; private final String visName; private final SimulationCreator creator; private AgentPolisDataReader reader; private final AgentPolisDataReaderFactory readerFactory; public SpyAgentInitFactory(int interval, String visName,AgentPolisDataReaderFactory readerFactory, SimulationCreator creator) { super(); this.interval = interval; this.visName = visName; this.creator = creator; this.readerFactory = readerFactory; } public AgentPolisDataReader getReader() { return reader; } public List<Agent> initAllAgentLifeCycles(Injector injector) { try { reader = readerFactory.createAgentPolisReader(injector,visName,interval); reader.initReadingAndRead(); creator.addSimulationFinishedListener(new SimulationFinishedListener() { public void simulationFinished() { try { reader.onSimulationFinished(); logger.info("Indexes for visualization table created."); } catch (SQLException | TransformException e) { logger.error("Indexes not created."); } } }); } catch (ReflectiveOperationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return Lists.newArrayList(); } }