package org.lucci.madhoc.simulation.measure;

import org.lucci.madhoc.simulation.Monitor;
import org.lucci.madhoc.simulation.projection.Projection;

/*
 * Created on Jun 30, 2004
 */

/**
 * @author luc.hogie
 */
public abstract class Sensor
{
    public abstract String getName();
    private Monitor monitor;
    
    public abstract Class getValueClass();
    public abstract Object takeNewValue(Projection projection);

    
    public boolean isValueValid(Object value)
    {
        return value == null || value.getClass() == getValueClass();
    }
    
    public boolean equals(Object o)
    {
        return o.getClass() == getClass() && o.hashCode() == hashCode();
    }
    
    public int hashCode()
    {
        return getName().hashCode();
    }
    
    public MeasureHistory createMeasureHistory()
    {
        MeasureHistory r = new MeasureHistory();
        r.setSensor(this);
        return r;
    }
    
    public Monitor getMonitor()
    {
        return monitor;
    }
    public void setMonitor(Monitor simulationApplication)
    {
        this.monitor = simulationApplication;
    }
}