package apz.pirichat.server;
import java.util.Vector;
import apz.pirichat.shared.PiriException;
import apz.pirichat.shared.PiriNotFoundException;
import apz.pirichat.shared.PiriZeroLengthException;

public class Command
{
    private String mCommand;
    private Vector<Parameter> mParam;

    public Command(String pCommand, Parameter[] pParam)
    {
        // Create our variables
        mCommand = pCommand;
        mParam = new Vector<Parameter>();
        // If user specified parameters, create them
        if (pParam != null)
            for(int i=0; i<pParam.length; i++)
                setParameter(pParam[i].getName(), pParam[i].getValue());
    }

    public String getCommand()
    {
        return mCommand;
    }

    public boolean doesParameterExist(String pName)
    {
        return (lookupParameterIndex(pName) != (-1));
    }

    public Parameter[] getParameters()
    {
        Parameter[] tempArray = new Parameter[mParam.size()];
        for(int i=0; i<mParam.size(); i++)
            tempArray[i] = (Parameter)mParam.elementAt(i);
        return tempArray;
    }

    public String getParameter(String pName)// throws PiriNotFoundException
    {
        // Returns the value of the specified parameter
        // Or exception if parameter not found
        int index = lookupParameterIndex(pName);
        if (index == (-1))
            return null;
//            throw new PiriNotFoundException(pName);
        return ((Parameter)mParam.elementAt(index)).getValue();
    }

    public void setParameter(String pName, String pValue)
    {
        // If attribute with that name already exists, overwrite
        // Otherwise, create a new attribute
        int index = lookupParameterIndex(pName);
        if (index == (-1))
        {
            mParam.add(new Parameter(pName, pValue));
        }
        else
        {
            ((Parameter)mParam.elementAt(index)).setValue(pValue);
        }
    }

    private int lookupParameterIndex(String pName)
    {
        for(int i=0; i<mParam.size(); i++)
            if (((Parameter)mParam.elementAt(i)).getName().equals(pName))
                return i;
        return (-1);
    }

    public class Parameter
    {
        private String mName;
        private String mValue;

        public Parameter(String pName, String pValue)
        {
            mName = pName;
            mValue = pValue;
        }

        public String getName()
        {
            return mName;
        }

        public String getValue()
        {
            return mValue;
        }

        public void setValue(String pValue)
        {
            mValue = pValue;
        }
    }
}
