/** * 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 java.util.Set; import org.esupportail.helpdesk.domain.DomainService; import org.esupportail.helpdesk.domain.beans.Department; import org.esupportail.helpdesk.domain.beans.User; import org.esupportail.helpdesk.domain.departmentSelection.Rule; import org.esupportail.helpdesk.domain.departmentSelection.Rules; import org.esupportail.helpdesk.web.beans.AbstractFirstLastNode; /** * The node of rules. */ public class RulesNode extends AbstractFirstLastNode { /** * The serialization id. */ private static final long serialVersionUID = -6119701834161480488L; /** * The rules. */ private Rules rules; /** * The result of the evaluation. */ private Set<Department> evalResult; /** * Bean constructor. * @param rules */ @SuppressWarnings("unchecked") public RulesNode( final Rules rules) { super("rules", "", true); this.rules = rules; int index = 0; for (Rule rule : rules.getRules()) { getChildren().add(new RuleNode(index, rule)); setLeaf(false); index++; } markFirstAndLastChildNodes(); } /** * @return the sub nodes */ @SuppressWarnings({ "unchecked", "cast" }) public List<RuleNode> getRuleNodes() { return (List<RuleNode>) getChildren(); } /** * Evaluate the rules. * @param domainService * @param user * @param client * @param type */ public void eval( final DomainService domainService, final User user, final InetAddress client, final int type) { evalResult = rules.eval(domainService, user, client, type); for (RuleNode ruleNode : getRuleNodes()) { ruleNode.eval(domainService, user, client, type); if (ruleNode.getEvalResult() != null && !ruleNode.getEvalResult().evaluateNextRule()) { break; } } } /** * Reset the evaluation. */ public void resetEval() { evalResult = null; for (RuleNode ruleNode : getRuleNodes()) { ruleNode.resetEval(); } } /** * @return the evalResult */ public Set<Department> getEvalResult() { return evalResult; } /** * @param evalResult the evalResult to set */ protected void setEvalResult(final Set<Department> evalResult) { this.evalResult = evalResult; } }