/* * JABM - Java Agent-Based Modeling Toolkit * Copyright (C) 2013 Steve Phelps * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. */ package net.sourceforge.jabm.report; import java.util.Map; import net.sourceforge.jabm.event.SimEvent; import net.sourceforge.jabm.event.SimulationFinishedEvent; import net.sourceforge.jabm.event.SimulationStartingEvent; import org.springframework.beans.factory.annotation.Required; public class SimEventReport implements Report { protected SimEvent eventPrototype; protected ReportVariables reportVariables; @Override public void eventOccurred(SimEvent event) { if (event instanceof SimulationStartingEvent) { onSimulationStarting(event); } else if (event instanceof SimulationFinishedEvent) { onSimulationFinished(event); } else if (event.getClass().isAssignableFrom(eventPrototype.getClass())) { onEventPrototype(event); } } public void onEventPrototype(SimEvent event) { reportVariables.compute(event); } public void onSimulationStarting(SimEvent event) { reportVariables.initialise(event); } public void onSimulationFinished(SimEvent event) { reportVariables.dispose(event); } @Override public Map<Object, Number> getVariableBindings() { return reportVariables.getVariableBindings(); } public ReportVariables getReportVariables() { return reportVariables; } @Required public void setReportVariables(ReportVariables reportVariables) { this.reportVariables = reportVariables; } public SimEvent getEventPrototype() { return eventPrototype; } @Required public void setEventPrototype(SimEvent eventPrototype) { this.eventPrototype = eventPrototype; } @Override public String getName() { return getClass().getName(); } }