// ** This class was generated with DemFGen !!

package gen;

import edu.neu.ccs.demeterf.demfgen.lib.*;




public class Derivative{
    public String name;
    public PlayerID seller;
    public Option<PlayerID> optbuyer;
    public Price price;
    public Type type;
    public Option<RawMaterial> optraw;
    public Option<FinishedProduct> optfinished;

    public Derivative(String name, PlayerID seller, Option<PlayerID> optbuyer, Price price, Type type, Option<RawMaterial> optraw, Option<FinishedProduct> optfinished){
        this.name = name;
        this.seller = seller;
        this.optbuyer = optbuyer;
        this.price = price;
        this.type = type;
        this.optraw = optraw;
        this.optfinished = optfinished;
    }
    public boolean equals(Object o){
        if(!(o instanceof Derivative))return false;
        Derivative oo = (Derivative)o;
        return (((Object)name).equals(oo.name))&&(((Object)seller).equals(oo.seller))&&(((Object)optbuyer).equals(oo.optbuyer))&&(((Object)price).equals(oo.price))&&(((Object)type).equals(oo.type))&&(((Object)optraw).equals(oo.optraw))&&(((Object)optfinished).equals(oo.optfinished));
    }
    public static Derivative parse(String inpt) throws ParseException{
        return new TheParser(new java.io.StringBufferInputStream(inpt)).parse_Derivative();
    }
    public static Derivative parse(java.io.InputStream inpt) throws ParseException{
        return new TheParser(inpt).parse_Derivative();
    }
    public static Derivative parse(java.io.Reader inpt) throws ParseException{
        return new TheParser(inpt).parse_Derivative();
    }

    public static class name extends edu.neu.ccs.demeterf.control.Fields.any{}
    public static class seller extends edu.neu.ccs.demeterf.control.Fields.any{}
    public static class optbuyer extends edu.neu.ccs.demeterf.control.Fields.any{}
    public static class price extends edu.neu.ccs.demeterf.control.Fields.any{}
    public static class type extends edu.neu.ccs.demeterf.control.Fields.any{}
    public static class optraw extends edu.neu.ccs.demeterf.control.Fields.any{}
    public static class optfinished extends edu.neu.ccs.demeterf.control.Fields.any{}

    public String print(){
        return new edu.neu.ccs.demeterf.Traversal(new Print()).<Print._LT>traverse(this).toString();
    }

}