@Override public Result evaluate(Environment environment) { Result result = _expr.evaluate(environment); if (!result.getExit()) { result.setBooleanValue(!result.getBooleanValue()); } return result; }
@Override public Result evaluate(Environment environment) { for (Statement statement : _preStatements) { statement.execute(environment); } Result result = _expr.evaluate(environment); for (Statement statement : _postStatements) { statement.execute(environment); } if (result.getBooleanValue()) { for (Statement statement : _postTrueStatements) { statement.execute(environment); } } return result; }
@Override public Result evaluate(Environment environment) { for (BooleanExpr conjunct : _conjuncts) { Result conjunctResult = conjunct.evaluate(environment); if (conjunctResult.getExit()) { return conjunctResult; } else if (!conjunctResult.getBooleanValue()) { conjunctResult.setReturn(false); return conjunctResult; } } Result result = new Result(); result.setBooleanValue(true); return result; }
@Override public Result evaluate(Environment environment) { for (BooleanExpr disjunct : _disjuncts) { Result disjunctResult = disjunct.evaluate(environment); if (disjunctResult.getExit()) { return disjunctResult; } else if (disjunctResult.getBooleanValue()) { disjunctResult.setReturn(false); return disjunctResult; } } Result result = new Result(); result.setBooleanValue(false); return result; }
@Override public Result execute(Environment environment) { Result exprResult = _guard.evaluate(environment); if (exprResult.getExit()) { return exprResult; } boolean guardVal = exprResult.getBooleanValue(); List<Statement> toExecute = guardVal ? _trueStatements : _falseStatements; for (Statement statement : toExecute) { Result result = statement.execute(environment); if (result.getExit() || result.getReturn()) { return result; } } Result fallThroughResult = new Result(); fallThroughResult.setFallThrough(true); return fallThroughResult; }
@Override public Result evaluate(Environment environment) { Result subroutineResult = new Result(); // By default move on to the next policy subroutineResult.setFallThrough(true); for (BooleanExpr subroutine : _subroutines) { subroutineResult = subroutine.evaluate(environment); if (subroutineResult.getExit()) { // Reached an exit/terminal action. Return regardless of boolean value return subroutineResult; } else if (!subroutineResult.getFallThrough() && !subroutineResult.getBooleanValue()) { // Found first match that returns false, short-circuit here subroutineResult.setReturn(false); return subroutineResult; } } // Check if we are allowed to fall through to the default policy, if not, return last result if (!subroutineResult.getFallThrough()) { return subroutineResult; } else { String defaultPolicy = environment.getDefaultPolicy(); if (defaultPolicy != null) { CallExpr callDefaultPolicy = new CallExpr(environment.getDefaultPolicy()); return callDefaultPolicy.evaluate(environment); } else { throw new BatfishException("Default policy is not set"); } } }
@Override public Result evaluate(Environment environment) { Result subroutineResult = new Result(); // By default move on to the next policy subroutineResult.setFallThrough(true); for (BooleanExpr subroutine : _subroutines) { subroutineResult = subroutine.evaluate(environment); if (subroutineResult.getExit()) { // Reached an exit/terminal action. Return regardless of boolean value return subroutineResult; } else if (!subroutineResult.getFallThrough() && subroutineResult.getBooleanValue()) { // Matched the route, first match that returns true lets us short-circuit subroutineResult.setReturn(true); return subroutineResult; } } // Check if we are allowed to fall through to the default policy, if not, return last result if (!subroutineResult.getFallThrough()) { return subroutineResult; } else { String defaultPolicy = environment.getDefaultPolicy(); if (defaultPolicy != null) { CallExpr callDefaultPolicy = new CallExpr(environment.getDefaultPolicy()); return callDefaultPolicy.evaluate(environment); } else { throw new BatfishException("Default policy is not set"); } } }