package fr.openwide.core.wicket.more.condition; public enum BooleanOperator { AND { @Override protected boolean isDecisiveOperand(boolean operand) { return operand == false; } @Override protected boolean getResultWhenDecisiveOperandMet() { return false; } }, OR { @Override protected boolean isDecisiveOperand(boolean operand) { return operand == true; } @Override protected boolean getResultWhenDecisiveOperandMet() { return true; } }, NOR { @Override protected boolean isDecisiveOperand(boolean operand) { return operand == true; } @Override protected boolean getResultWhenDecisiveOperandMet() { return false; } }, NAND { @Override protected boolean isDecisiveOperand(boolean operand) { return operand == false; } @Override protected boolean getResultWhenDecisiveOperandMet() { return true; } }; protected abstract boolean isDecisiveOperand(boolean operand); protected abstract boolean getResultWhenDecisiveOperandMet(); public boolean apply(Iterable<? extends Condition> conditions) { for (Condition condition : conditions) { if (isDecisiveOperand(condition.applies())) { return getResultWhenDecisiveOperandMet(); } } return !getResultWhenDecisiveOperandMet(); } }