package eu.aniketos.pdplib; import org.jdom.Element; import security.iit.pdp.EnvException; import security.iit.pdp.VarEnvironment; import security.iit.pdp.PDP.WHEN; import eu.aniketos.spec.After; import eu.aniketos.spec.When; import eu.aniketos.spec.Before; import eu.aniketos.spec.Declaration; import eu.aniketos.spec.BaseType; public class WhenBeforePDP extends WhenPDP{ public Before before; public WhenBeforePDP(Element e){ before=new Before(e); } public WhenBeforePDP(When whenTmp){ before=new Before(whenTmp.identifier, whenTmp.parameters); //before.identifier=whenTmp.identifier; //before.parameters=whenTmp.parameters; } public Element toElement(){ return before.toElement(); } /** * check if the method passed to the PDP matches the method represented in this before tag */ @Override public boolean matchWhen(VarEnvironment env,WHEN when, String signature, Object[] params, Object returnz) throws EnvException{ // if it is not a before call, return false // if method signatures don't match, return false // if number of parameters doesn't match, return false if (when != WHEN.BEFORE || !signature.equals(before.identifier.identifier) || (params!=null && params.length != before.parameters.size()) || (params==null && before.parameters.size()!=0)) { System.out.println("WHEN doesn't match"); return false; } if(params!=null){ for (int i = 0; i < params.length; i++) { String par1 = before.parameters.get(i).type.t; // if parameters match, continue and insert current parameter in the // environment if (params[i] instanceof Integer && par1.equals(BaseType.INT)) { System.out.println("parameter " + i + " match, bind it"); env.parBind(before.parameters.get(i).identifier.identifier, params[i]); continue; } if (params[i] instanceof Boolean && par1.equals(BaseType.BOOL)) { System.out.println("parameter " + i + " match, bind it"); env.parBind(before.parameters.get(i).identifier.identifier, params[i]); continue; } if (params[i] instanceof String && par1.equals(BaseType.STRING)) { System.out.println("parameter " + i + " match, bind it"); env.parBind(before.parameters.get(i).identifier.identifier, params[i]); continue; } if (params[i] instanceof Double && par1.equals(BaseType.REAL)) { System.out.println("parameter " + i + " match, bind it"); env.parBind(before.parameters.get(i).identifier.identifier, params[i]); continue; } System.out.println("parameter " + i + " doesn't match , return false and remove parameters"); // else, return false and flush parameters just inserted env.flushParHash(); return false; } } System.out.println("WHEN match"); return true; } }