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.IGuard;
import eu.aniketos.spec.RGuard;
import eu.aniketos.spec.Tag;
public class RExpGuardPDP extends BExpPDP {
protected RGuardPDP rGuardPDP;
public RExpGuardPDP(BExp bexp){
if(((RGuard) bexp).exp1==null && ((RGuard) bexp).exp2==null) {rGuardPDP = new RGuardPDP(((RGuard) bexp).type, ((RGuard) bexp).aexp1, ((RGuard) bexp).aexp2);}
else
if(((RGuard) bexp).exp1==null) {rGuardPDP = new RGuardPDP(((RGuard) bexp).type, ((RGuard) bexp).aexp1, ((RGuard) bexp).exp2);}
else
if(((RGuard) bexp).exp2==null) {rGuardPDP = new RGuardPDP(((RGuard) bexp).type, ((RGuard) bexp).exp1, ((RGuard) bexp).aexp2);}
else {rGuardPDP = new RGuardPDP(((RGuard) bexp).type, ((RGuard) bexp).exp1, ((RGuard) bexp).exp2);}
}
@Override
public Element toElement() {
return rGuardPDP.toElement();
}
@Override
public boolean eval(VarEnvironment env) throws EnvException{
if(rGuardPDP.type.equals(Tag.requal_tag))
if(rGuardPDP.rexp1PDP==null && rGuardPDP.rexp2PDP==null) {return rGuardPDP.aexp1PDP.eval(env) == rGuardPDP.aexp2PDP.eval(env);}
else
if(rGuardPDP.rexp1PDP==null) {return rGuardPDP.aexp1PDP.eval(env) == rGuardPDP.rexp2PDP.eval(env);}
else
if(rGuardPDP.rexp2PDP==null) {return rGuardPDP.rexp1PDP.eval(env) == rGuardPDP.aexp2PDP.eval(env);}
////// DOULBE=DOUBLE!
else {return rGuardPDP.rexp1PDP.eval(env) == rGuardPDP.rexp2PDP.eval(env);}
else if(rGuardPDP.type.equals(Tag.rmorethan_tag))
if(rGuardPDP.rexp1PDP==null && rGuardPDP.rexp2PDP==null) {return rGuardPDP.aexp1PDP.eval(env) > rGuardPDP.aexp2PDP.eval(env);}
else
if(rGuardPDP.rexp1PDP==null) {return rGuardPDP.aexp1PDP.eval(env) > rGuardPDP.rexp2PDP.eval(env);}
else
if(rGuardPDP.rexp2PDP==null) {return rGuardPDP.rexp1PDP.eval(env) > rGuardPDP.aexp2PDP.eval(env);}
else {return rGuardPDP.rexp1PDP.eval(env) > rGuardPDP.rexp2PDP.eval(env);}
else if(rGuardPDP.type.equals(Tag.rlessthan_tag))
if(rGuardPDP.rexp1PDP==null && rGuardPDP.rexp2PDP==null) {return rGuardPDP.aexp1PDP.eval(env) < rGuardPDP.aexp2PDP.eval(env);}
else
if(rGuardPDP.rexp1PDP==null) {return rGuardPDP.aexp1PDP.eval(env) < rGuardPDP.rexp2PDP.eval(env);}
else
if(rGuardPDP.rexp2PDP==null) {return rGuardPDP.rexp1PDP.eval(env) < rGuardPDP.aexp2PDP.eval(env);}
else {return rGuardPDP.rexp1PDP.eval(env) < rGuardPDP.rexp2PDP.eval(env);}
else if(rGuardPDP.type.equals(Tag.rlessequalthan_tag))
if(rGuardPDP.rexp1PDP==null && rGuardPDP.rexp2PDP==null) {return rGuardPDP.aexp1PDP.eval(env) <= rGuardPDP.aexp2PDP.eval(env);}
else
if(rGuardPDP.rexp1PDP==null) {return rGuardPDP.aexp1PDP.eval(env) <= rGuardPDP.rexp2PDP.eval(env);}
else
if(rGuardPDP.rexp2PDP==null) {return rGuardPDP.rexp1PDP.eval(env) <= rGuardPDP.aexp2PDP.eval(env);}
else {return rGuardPDP.rexp1PDP.eval(env) <= rGuardPDP.rexp2PDP.eval(env);}
else if(rGuardPDP.type.equals(Tag.rmorequalthan_tag))
if(rGuardPDP.rexp1PDP==null && rGuardPDP.rexp2PDP==null) {return rGuardPDP.aexp1PDP.eval(env) >= rGuardPDP.aexp2PDP.eval(env);}
else
if(rGuardPDP.rexp1PDP==null) {return rGuardPDP.aexp1PDP.eval(env) >= rGuardPDP.rexp2PDP.eval(env);}
else
if(rGuardPDP.rexp2PDP==null) {return rGuardPDP.rexp1PDP.eval(env) >= rGuardPDP.aexp2PDP.eval(env);}
else {return rGuardPDP.rexp1PDP.eval(env) >= rGuardPDP.rexp2PDP.eval(env);}
else
if(rGuardPDP.rexp1PDP==null && rGuardPDP.rexp2PDP==null) {return rGuardPDP.aexp1PDP.eval(env) != rGuardPDP.aexp2PDP.eval(env);}
else
if(rGuardPDP.rexp1PDP==null) {return rGuardPDP.aexp1PDP.eval(env) != rGuardPDP.rexp2PDP.eval(env);}
else
if(rGuardPDP.rexp2PDP==null) {return rGuardPDP.rexp1PDP.eval(env) != rGuardPDP.aexp2PDP.eval(env);}
else {return rGuardPDP.rexp1PDP.eval(env) != rGuardPDP.rexp2PDP.eval(env);}
}
}