package org.lucci.madhoc.simulation.projection;

import javax.naming.ConfigurationException;

import org.lucci.madhoc.network.Station;
import org.lucci.madhoc.network.ComputerType;

/*
 * Created on May 3, 2005
 */

/**
 * @author luc.hogie
 */
public class NetworkNodeTypeBaseProjection extends Projection
{
    private ComputerType acceptedComputerType;  
    
    /* (non-Javadoc)
     * @see org.lucci.madhoc.simulation.projection.Projection#acceptComputer(org.lucci.madhoc.network.hardware.Computer)
     */
    public boolean acceptComputer(Station computer)
    {
        return computer.getType() == getAcceptedComputerType();
    }

    /* (non-Javadoc)
     * @see org.lucci.madhoc.simulation.projection.Projection#getName()
     */
    public String getName()
    {
        return getAcceptedComputerType().getName();
    }

    /* (non-Javadoc)
     * @see org.lucci.madhoc.util.Configurable#configure(org.lucci.madhoc.simulation.Simulation)
     */
    public void configure() throws Throwable
    {
        String s = getNetwork().getSimulation().getConfiguration().getConfigurationValue("computer_type_based_relevancy");

        if (s.equalsIgnoreCase("laptop"))
        {
            setAcceptedComputerType(ComputerType.LAPTOP);
        }
        else if (s.equalsIgnoreCase("pager"))
        {
            setAcceptedComputerType(ComputerType.PAGER);
        }
        else if (s.equalsIgnoreCase("mobile_phone"))
        {
            setAcceptedComputerType(ComputerType.MOBILE_PHONE);
        }
        else if (s.equalsIgnoreCase("hotspot"))
        {
            setAcceptedComputerType(ComputerType.HOTSPOT);
        }
        else
        {
            throw new ConfigurationException("Unknown computer type: " + s);
        }
    }


    public ComputerType getAcceptedComputerType()
    {
        return acceptedComputerType;
    }
    public void setAcceptedComputerType(ComputerType acceptedComputerType)
    {
        this.acceptedComputerType = acceptedComputerType;
    }
}