package org.lucci.madhoc.simulation.monitor;

import java.util.Collection;
import java.util.Vector;

import org.lucci.madhoc.simulation.Monitor;
import org.lucci.madhoc.simulation.monitor.sensor.AccelerationMeasure;
import org.lucci.madhoc.simulation.monitor.sensor.ConnectionsUpdateDuration;
import org.lucci.madhoc.simulation.monitor.sensor.FreeMemoryMeasure;
import org.lucci.madhoc.simulation.monitor.sensor.IterationDurationMeasure;
import org.lucci.madhoc.simulation.monitor.sensor.IterationFrequencyMeasure;
import org.lucci.madhoc.simulation.monitor.sensor.IterationNumberSensor;
import org.lucci.madhoc.simulation.monitor.sensor.MeasureTakingMeasure;
import org.lucci.madhoc.simulation.monitor.sensor.MessageTransferDuration;
import org.lucci.madhoc.simulation.monitor.sensor.MobilityUpdateDuration;
import org.lucci.madhoc.simulation.monitor.sensor.SimulatedTimeSensor;
import org.lucci.madhoc.simulation.monitor.sensor.StationActivityDuration;
import org.lucci.madhoc.simulation.monitor.sensor.TimeBaseSensor;
import org.lucci.madhoc.simulation.monitor.sensor.TimeMeasure;
import org.lucci.madhoc.simulation.monitor.sensor.TotalMemoryMeasure;
import org.lucci.madhoc.simulation.monitor.sensor.UsedMemoryMeasure;

/*
 * Created on Jul 6, 2004
 */

/**
 * @author luc.hogie
 */
public class SimulationMonitor extends Monitor
{

    /* (non-Javadoc)
     * @see org.lucci.madhoc.simulation.SimulationApplication#initMeasuresAndViews()
     */
    public SimulationMonitor()
    {
        addMeasure(new IterationNumberSensor());
        addMeasure(new SimulatedTimeSensor());
        addMeasure(new TimeBaseSensor());

        addMeasure(new IterationFrequencyMeasure());
        addMeasure(new AccelerationMeasure());
        addMeasure(new TotalMemoryMeasure());
        addMeasure(new FreeMemoryMeasure());
        addMeasure(new UsedMemoryMeasure());
        addMeasure(new IterationDurationMeasure());
        addMeasure(new ConnectionsUpdateDuration());
        addMeasure(new MobilityUpdateDuration());
        addMeasure(new MessageTransferDuration());
        addMeasure(new MeasureTakingMeasure());
        addMeasure(new StationActivityDuration());
        addMeasure(new TimeMeasure());
    }

    /* (non-Javadoc)
     * @see org.lucci.madhoc.simulation.SimulationApplication#getName()
     */
    public String getName()
    {
        return "simulation_monitor";
    }

    /* (non-Javadoc)
     * @see org.lucci.madhoc.simulation.SimulationListener#preIteration()
     */
    public void preIteration()
    {
    }

    /* (non-Javadoc)
     * @see org.lucci.madhoc.simulation.SimulationListener#postIteration()
     */
    public void postIteration()
    {
    }

    /* (non-Javadoc)
     * @see org.lucci.madhoc.simulation.SimulationListener#effectiveIterationFrequencyChanged()
     */
    public void effectiveIterationFrequencyChanged()
    {
    }

    /* (non-Javadoc)
     * @see org.lucci.madhoc.simulation.SimulationListener#secondElapsed()
     */
    public void secondElapsed()
    {
    }

    /* (non-Javadoc)
     * @see org.lucci.madhoc.simulation.SimulationListener#iterationScopedValuesReinitializationRequired()
     */
    public void iterationScopedValuesReinitializationRequired()
    {
    }

    /* (non-Javadoc)
     * @see org.lucci.madhoc.simulation.SimulationApplication#initViews()
     */
    public Collection<Class> getMonitorViewClasses()
    {
        Collection<Class> c = new Vector<Class>();
        c.add(NumericalMeasuresTableView.class);
        c.add(NumericalMeasures2DGraphicalView.class);
        c.add(DistributionMeasure2DGraphicalView.class);
        return c;
    }

    /* (non-Javadoc)
     * @see org.lucci.madhoc.simulation.SimulationApplication#resetIterationScopedValues()
     */
    public void resetIterationScopedValues()
    {
    }

    /* (non-Javadoc)
     * @see org.lucci.madhoc.simulation.SimulationApplication#getPublicName()
     */
    public String getFriendlyName()
    {
        return "General tools";
    }
}