/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package net.acesinc.data.json.generator; import java.io.IOException; import java.util.ArrayList; import java.util.List; import net.acesinc.data.json.generator.config.SimulationConfig; import net.acesinc.data.json.generator.config.WorkflowConfig; import net.acesinc.data.json.generator.config.JSONConfigReader; import net.acesinc.data.json.generator.log.EventLogger; import net.acesinc.data.json.generator.workflow.Workflow; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * * @author andrewserff */ public class SimulationRunner { private static final Logger log = LogManager.getLogger(SimulationRunner.class); private SimulationConfig config; private List<EventGenerator> eventGenerators; private List<Thread> eventGenThreads; private boolean running; private List<EventLogger> eventLoggers; public SimulationRunner(SimulationConfig config, List<EventLogger> loggers) { this.config = config; this.eventLoggers = loggers; eventGenerators = new ArrayList<EventGenerator>(); eventGenThreads = new ArrayList<Thread>(); setupSimulation(); } private void setupSimulation() { running = false; for (WorkflowConfig workflowConfig : config.getWorkflows()) { try { Workflow w = JSONConfigReader.readConfig(this.getClass().getClassLoader().getResourceAsStream(workflowConfig.getWorkflowFilename()), Workflow.class); final EventGenerator gen = new EventGenerator(w, workflowConfig.getWorkflowName(), eventLoggers); log.info("Adding EventGenerator for [ " + workflowConfig.getWorkflowName()+ "," + workflowConfig.getWorkflowFilename()+ " ]"); eventGenerators.add(gen); eventGenThreads.add(new Thread(gen)); } catch (IOException ex) { log.error("Error reading config: " + workflowConfig.getWorkflowName(), ex); } } } public void startSimulation() { log.info("Starting Simulation"); if (eventGenThreads.size() > 0) { for (Thread t : eventGenThreads) { t.start(); } running = true; } } public void stopSimulation() { log.info("Stopping Simulation"); for (Thread t : eventGenThreads) { t.interrupt(); } for (EventLogger l : eventLoggers) { l.shutdown(); } running = false; } public boolean isRunning() { return running; } }