/**
* ESUP-Portail Helpdesk - Copyright (c) 2004-2009 ESUP-Portail consortium.
*/
package org.esupportail.helpdesk.domain.departmentSelection;
import java.net.InetAddress;
import java.util.ArrayList;
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;
/**
* The rules container.
*/
public class Rules {
/**
* The serialization id.
*/
private static final long serialVersionUID = -3905947268071280203L;
/**
* The rules themselves.
*/
private List<Rule> rules;
/**
* Constructor.
*/
public Rules() {
super();
rules = new ArrayList<Rule>();
}
/**
* Add a rule.
* @param userDefinedConditions
* @param rule
* @throws DepartmentSelectionCompileError
*/
public void compileAndAdd(
final UserDefinedConditions userDefinedConditions,
final Rule rule)
throws DepartmentSelectionCompileError {
rule.compile(userDefinedConditions);
rules.add(rule);
}
/**
* Evaluate the rules.
* @param domainService
* @param user the user
* @param client the client
* @param type
* @return a set of departments.
*/
public Set<Department> eval(
final DomainService domainService,
final User user,
final InetAddress client,
final int type) {
Result result = new Result();
for (Rule rule : rules) {
rule.eval(domainService, user, client, result, type);
if (!result.evaluateNextRule()) {
break;
}
}
return result.getDepartments();
}
/**
* @see java.util.AbstractCollection#toString()
*/
@Override
public String toString() {
String str = "<rules>";
for (Rule rule : rules) {
str += rule;
}
str += "</rules>";
return str;
}
/**
* @return the rules
*/
public List<Rule> getRules() {
return rules;
}
}