/** * ESUP-Portail Helpdesk - Copyright (c) 2004-2009 ESUP-Portail consortium. */ package org.esupportail.helpdesk.web.beans.departmentSelection; import java.net.InetAddress; import java.util.List; import org.esupportail.helpdesk.domain.DomainService; import org.esupportail.helpdesk.domain.beans.User; import org.esupportail.helpdesk.domain.departmentSelection.conditions.AndCondition; import org.esupportail.helpdesk.domain.departmentSelection.conditions.Condition; import org.esupportail.helpdesk.domain.departmentSelection.conditions.OrCondition; import org.esupportail.helpdesk.web.beans.AbstractFirstLastNode; /** * The node of a condition. */ public class ConditionNode extends AbstractFirstLastNode { /** * The serialization id. */ private static final long serialVersionUID = 496103317490409378L; /** * The condition. */ private Condition condition; /** * The result of the evualuation of the condition. */ private Boolean evalResult; /** * Bean constructor. * @param condition */ @SuppressWarnings("unchecked") public ConditionNode( final Condition condition) { super(condition.getNodeType(), "", true); this.condition = condition; this.evalResult = null; if (condition.getSubConditions() != null) { for (Condition subCondition : condition.getSubConditions()) { getChildren().add(new ConditionNode(subCondition)); setLeaf(false); } markFirstAndLastChildNodes(); } } /** * @return the sub nodes */ @SuppressWarnings({ "unchecked", "cast" }) protected List<ConditionNode> getSubConditionNodes() { return (List<ConditionNode>) getChildren(); } /** * Evaluate the associated condition. * @param domainService * @param user * @param client */ public void eval( final DomainService domainService, final User user, final InetAddress client) { evalResult = condition.isMatched(domainService, user, client); if (condition.getSubConditions() != null) { for (ConditionNode subConditionNode : getSubConditionNodes()) { subConditionNode.eval(domainService, user, client); if (condition instanceof OrCondition && subConditionNode.getEvalResult()) { return; } if (condition instanceof AndCondition && !subConditionNode.getEvalResult()) { return; } } } } /** * Reset the evaluation. */ public void resetEval() { evalResult = null; for (ConditionNode subConditionNode : getSubConditionNodes()) { subConditionNode.resetEval(); } } /** * @return the condition */ public Condition getCondition() { return condition; } /** * @param condition the condition to set */ protected void setCondition(final Condition condition) { this.condition = condition; } /** * @return the evalResult */ public Boolean getEvalResult() { return evalResult; } /** * @param evalResult the evalResult to set */ protected void setEvalResult(final Boolean evalResult) { this.evalResult = evalResult; } }