/*******************************************************************************
* Copyright (c)                                                                *
*           2005   Tristan Allwood,                                            *
*           2005   Daniel Burke,                                               *
*           2005   Marc Hull,                                                  *
*           2005   Ekaterina Itskova,                                          *
*           2005   Steve Zymler                                                *
*                                                                              *
* Permission is hereby granted, free of charge, to any person obtaining a      *
* copy of this software and associated documentation files (the                *
* "Software"), to deal in the Software without restriction, including          *
* without limitation the rights to use, copy, modify, merge, publish,          *
* distribute, sublicense, and/or sell copies of the Software, and to           *
* permit persons to whom the Software is furnished to do so, subject to        *
* the following conditions:                                                    *
*                                                                              *
* The above copyright notice and this permission notice shall be included      *
* in all copies or substantial portions of the Software.                       *
*                                                                              *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS      *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF                   *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.       *
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY         *
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,         *
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE            *
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                       *
*******************************************************************************/
/*
 * Created on 11-Nov-2004
 */
package uk.ac.ic.doc.kevlar.hial;

import uk.ac.ic.doc.kevlar.api.programs.IInfoNodeVisitor;
import uk.ac.ic.doc.kevlar.api.programs.IProgramInfoNode;
import uk.ac.ic.doc.kevlar.api.programs.arguments.IBasicArgumentInfo;
import uk.ac.ic.doc.kevlar.api.programs.arguments.IBasicArgumentValue;

/**
 * @author Daniel Burke
 *
 */
public class ArgumentValuePair implements IArgumentValuePair {
	private IBasicArgumentInfo argInfo;
	private IBasicArgumentValue argValue;
	
	public ArgumentValuePair(IBasicArgumentInfo argInfo, IBasicArgumentValue argValue)
	{
		this.argInfo = argInfo;
		this.argValue = argValue;
	}
	
	/**
	 * @return Returns the argInfo.
	 */
	public IBasicArgumentInfo getArgInfo() {
		return argInfo;
	}
	/**
	 * @param argInfo The argInfo to set.
	 */
	public void setArgInfo(IBasicArgumentInfo argInfo) {
		this.argInfo = argInfo;
	}
	/**
	 * @return Returns the argValue.
	 */
	public IBasicArgumentValue getArgValue() {
		return argValue;
	}
	/**
	 * @param argValue The argValue to set.
	 */
	public void setArgValue(IBasicArgumentValue argValue) {
		this.argValue = argValue;
	}

    public String getName() {
        return argInfo.getName();
    }

    public int compareTo(IProgramInfoNode arg0) {
        return getName().compareTo(arg0.getName());
    }
    
    public boolean equals(Object o)
    {
        if(!(o instanceof ArgumentValuePair))
        {
            return false;
        }
        
        ArgumentValuePair other = (ArgumentValuePair)o;
        return argInfo.equals(other.getArgInfo()) &&
        	argValue.equals(other.getArgValue());
            
    }

    public void takeInfoNodeVisitor(IInfoNodeVisitor v) {
        v.argumentValuePair(this);
    }
    
    public String toString()
    {
    	return getName() + " = " + getArgValue();
    }
}
