package org.lucci.madhoc.network.monitor;



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

import org.lucci.madhoc.gui.aircraft.AircraftView;
import org.lucci.madhoc.network.monitor.measure.AverageDegreeSensor;
import org.lucci.madhoc.network.monitor.measure.AvgNumberOfBytesBufferizedMeasure;
import org.lucci.madhoc.network.monitor.measure.AvgTimeForRemeeting;
import org.lucci.madhoc.network.monitor.measure.CarCountSensor;
import org.lucci.madhoc.network.monitor.measure.ConnectionAverageAgeSensor;
import org.lucci.madhoc.network.monitor.measure.ConnectionBandwithDistributionMeasure;
import org.lucci.madhoc.network.monitor.measure.ConnectionCountSensor;
import org.lucci.madhoc.network.monitor.measure.ConnectionUsedCountSensor;
import org.lucci.madhoc.network.monitor.measure.CostSensor;
import org.lucci.madhoc.network.monitor.measure.DegreeDistributionMeasure;
import org.lucci.madhoc.network.monitor.measure.DistanceBetweenStationsInRangeMeasure;
import org.lucci.madhoc.network.monitor.measure.LoadDistributionMeasure;
import org.lucci.madhoc.network.monitor.measure.MaximumDegreeSensor;
import org.lucci.madhoc.network.monitor.measure.MinimumDegreeSensor;
import org.lucci.madhoc.network.monitor.measure.NetworkOverload;
import org.lucci.madhoc.network.monitor.measure.NumberOfBluetoothConnections;
import org.lucci.madhoc.network.monitor.measure.NumberOfManualConnections;
import org.lucci.madhoc.network.monitor.measure.NumberOfPartitions;
import org.lucci.madhoc.network.monitor.measure.NumberOfWifiConnections;
import org.lucci.madhoc.network.monitor.measure.OutputBuffersInUseMeasure;
import org.lucci.madhoc.network.monitor.measure.PartitionDistributionMeasure;
import org.lucci.madhoc.network.monitor.measure.PedestrianCountSensor;
import org.lucci.madhoc.network.monitor.measure.RatioOfRedundantConnections;
import org.lucci.madhoc.network.monitor.measure.SizeOfGreatestConnectedComponent;
import org.lucci.madhoc.network.monitor.measure.StationCountSensor;
import org.lucci.madhoc.network.monitor.measure.ThroughputSensor;
import org.lucci.madhoc.simulation.Monitor;


/*
 * Created on Jul 2, 2004
 */

/**
 * @author luc.hogie
 */
public class NetworkMonitor extends Monitor
{
    public NetworkMonitor()
    {
        addMeasure(new StationCountSensor());
        addMeasure(new CarCountSensor());
        addMeasure(new PedestrianCountSensor());
        
        addMeasure(new ConnectionCountSensor());
        addMeasure(new ConnectionUsedCountSensor());
        addMeasure(new RatioOfRedundantConnections());
        addMeasure(new ConnectionAverageAgeSensor());
        
        
        addMeasure(new AverageDegreeSensor());
        addMeasure(new MinimumDegreeSensor());
        addMeasure(new MaximumDegreeSensor());
        addMeasure(new NumberOfPartitions());
        addMeasure(new SizeOfGreatestConnectedComponent());
        addMeasure(new NumberOfManualConnections());

        addMeasure(new OutputBuffersInUseMeasure());
        addMeasure(new AvgNumberOfBytesBufferizedMeasure());
        
        addMeasure(new NetworkOverload());
        addMeasure(new ThroughputSensor());

        addMeasure(new NumberOfWifiConnections());
        addMeasure(new NumberOfBluetoothConnections());
        
        
        addMeasure(new DistanceBetweenStationsInRangeMeasure());

        addMeasure(new DegreeDistributionMeasure());
        addMeasure(new PartitionDistributionMeasure());
        addMeasure(new LoadDistributionMeasure());
        addMeasure(new ConnectionBandwithDistributionMeasure());
        
        addMeasure(new CostSensor());
        addMeasure(new AvgTimeForRemeeting());
    }

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

    /* (non-Javadoc)
     * @see org.lucci.madhoc.simulation.SimulationApplication#getStationApplicationClass()
     */
    public Class getStationApplicationClass()
    {
        return null;
    }

    /* (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#frequencyChanged()
     */
    public void effectiveIterationFrequencyChanged()
    {
    }

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

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

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

    /* (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 "Network";
    }
}