package hu.swankey.ammo.common.yggdrasil.basics;

import hu.swankey.ammo.common.script.yunits.FieldClass;



public class YAttribute extends YObject {

    /** Value of the field */
    private Object value;

    /** Instantiate a general field */
    public YAttribute(String name) {
        this(name, yclass(), null);
    }

    /** Instantiate a general field */
    public YAttribute(String name, FieldClass type, Object value) {
        super(name, type);
        
        if (value == null)
        		setValue(getYClass().getDefaultValue());
        else
        	setValue(value);
    }
    
    public static FieldClass yclass(){
    	return FieldClass.singleton();
    }

//    public Object getDefaultValue() {
//        return ((FieldType)getType()).getDefaultValue();
//    }

    /** Set the field's value */
    public void setValue(Object value) {
        if (value == null) {
            throw new NullPointerException("A Field's value cannot be null.");
        }
        
        if (container != null)
            container.reportChangedElement(this);

        this.value = value;
    }

    /** Get the field's value */
    public Object getValue() {
        return value;
    }

//    @Override
//    public boolean equals(Object o){
//		if (!(o instanceof Field))
//			return false;
//		
//		return ((Field)o).getValue().equals(getValue());
//    }
    
    public int hashCode(){
    	return value.hashCode();
    }
    
	@Override
	public String toString() {
		return value.toString();
	}


//    PUBLIC ELEMENT COMPUTE(MAP<STRING, ELEMENT> ENVRIONMENT) THROWS AMMOSCRIPTEXCEPTION {
//        RETURN THIS;
//    }
//    
    public FieldClass getYClass(){
        return (FieldClass) super.getYClass();
    }
            
}