/** * ESUP-Portail Helpdesk - Copyright (c) 2004-2009 ESUP-Portail consortium. */ package org.esupportail.helpdesk.domain.assignment; import java.util.ArrayList; import java.util.List; import java.util.Locale; import org.esupportail.helpdesk.domain.DomainService; import org.esupportail.helpdesk.domain.beans.DepartmentManager; import org.esupportail.helpdesk.domain.beans.Ticket; import org.esupportail.helpdesk.domain.beans.User; /** * An implementation of AssignmentAlgorithm that cyclically assigns. */ public class CyclicalAssignmentAlgorithmImpl extends AbstractAssignmentAlgorithm { /** * The serialization id. */ private static final long serialVersionUID = 6765929817767678081L; /** * Constructor. */ public CyclicalAssignmentAlgorithmImpl() { super(); } /** * @see org.esupportail.helpdesk.domain.assignment.AbstractAssignmentAlgorithm#getAssignmentResultInternal( * org.esupportail.helpdesk.domain.DomainService, org.esupportail.helpdesk.domain.beans.Ticket, * org.esupportail.helpdesk.domain.beans.User) */ @Override public AssignmentResult getAssignmentResultInternal( final DomainService domainService, final Ticket ticket, final User excludedUser) { List<DepartmentManager> managers = domainService.getEffectiveAvailableDepartmentManagers(ticket.getCategory()); if (managers.isEmpty()) { return null; } List<DepartmentManager> allowedManagers = new ArrayList<DepartmentManager>(); for (DepartmentManager manager : managers) { if (!manager.getUser().equals(excludedUser)) { allowedManagers.add(manager); } } if (allowedManagers.isEmpty()) { return null; } int selection = 0; String algorithmState = ticket.getCategory().getAssignmentAlgorithmState(); if (algorithmState != null) { try { selection = (Integer.parseInt(algorithmState) + 1) % allowedManagers.size(); } catch (NumberFormatException e) { // do nothing } } return new AssignmentResult( allowedManagers.get(selection).getUser(), String.valueOf(selection)); } /** * @see org.esupportail.helpdesk.domain.assignment.AssignmentAlgorithm#getDescription(java.util.Locale) */ @Override public String getDescription(final Locale locale) { return getI18nService().getString("DOMAIN.ASSIGNMENT_ALGORITHM.CYCLICAL", locale); } }