package org.lucci.madhoc.script;


import java.util.Collection;
import java.util.Iterator;

import org.lucci.config.TypedConfiguration;
import org.lucci.madhoc.simulation.MadhocSimulation;
import org.lucci.madhoc.simulation.Monitor;
import org.lucci.madhoc.simulation.measure.Sensor;
import org.lucci.madhoc.util.Utilities;

/*
 * Created on Dec 3, 2004
 */

/**
 * @author luc.hogie
 */
public class PrintAvailableSensors
{
    public static void main(String[] args)
        throws Throwable
    {
        TypedConfiguration config = Utilities.getConfiguration(args);
        
        Iterator keyIterator = config.getKeys().iterator();

        while (keyIterator.hasNext())
        {
            String key = (String) keyIterator.next();
            
            if (key.endsWith("_measures_regex"))
            {
                config.getRelation().remove(key);
                config.add(key, ".*");
            }
        }
        
        MadhocSimulation simulation = Utilities.getSimulation(config);
        Iterator appIterator = simulation.getNetwork().getMonitorMap().values().iterator();

        while (appIterator.hasNext())
        {
            Monitor app = (Monitor) appIterator.next();
            showMeasures(app);
            
            if (appIterator.hasNext())
            {
                System.out.println("\n");
            }
        }
    }

    public static void showMeasures(Monitor app)
    {
        Collection measures = app.getSensorMap().values();
        System.out.println("Application '" + app.getName() + "' defines " + measures.size() + " sensors.");
        
        if (!measures.isEmpty())
        {

            Iterator measureIterator = measures.iterator();

            while (measureIterator.hasNext())
            {
                Sensor measure = (Sensor) measureIterator.next();
                showMeasure(measure);
            }
        }
    }
    
    public static void showMeasure(Sensor m)
    {
        System.out.println("\t" + m.getName());
    }
}