package eu.aniketos.pdplib; import org.jdom.Element; import security.iit.pdp.EnvException; import security.iit.pdp.VarEnvironment; import eu.aniketos.spec.BExp; import eu.aniketos.spec.IOp; import eu.aniketos.spec.AExp; import eu.aniketos.spec.SGuard; import eu.aniketos.spec.Tag; import eu.aniketos.pdplib.AExpPDP; public class IExpOpPDP extends AExpPDP{ protected IOp iop; public IExpOpPDP(String tag, AExp e1, AExp e2) { iop = new IOp(tag, e1, e2); } public IExpOpPDP(Element e){ iop = new IOp(e); } public Element toElement() { return iop.toElement(); } public IExpOpPDP(AExp aexp){ iop= new IOp(((IOp) aexp).type, ((IOp) aexp).exp1, ((IOp) aexp).exp2); } @Override public int eval(VarEnvironment env) throws EnvException { AExpPDP l = AExpPDP.generateAExpPDP(iop.exp1); AExpPDP r = AExpPDP.generateAExpPDP(iop.exp2); if(iop.type.equals(Tag.sum_tag)){ return l.eval(env) + r.eval(env); } else if(iop.type.equals(Tag.dif_tag)) return l.eval(env) - r.eval(env); else if(iop.type.equals(Tag.mul_tag)) return l.eval(env) * r.eval(env); else if(iop.type.equals(Tag.mod_tag)) return l.eval(env) % r.eval(env); else throw new EnvException("Type of IOperation not recognized"); } }