/**
* 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 randomly assigns.
*/
public class RandomAssignmentAlgorithmImpl
extends AbstractAssignmentAlgorithm {
/**
* The serialization id.
*/
private static final long serialVersionUID = -4126354662422491343L;
/**
* Constructor.
*/
public RandomAssignmentAlgorithmImpl() {
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 = (int) Math.floor(allowedManagers.size() * Math.random());
return new AssignmentResult(allowedManagers.get(selection).getUser(), null);
}
/**
* @see org.esupportail.helpdesk.domain.assignment.AssignmentAlgorithm#getDescription(java.util.Locale)
*/
@Override
public String getDescription(final Locale locale) {
return getI18nService().getString("DOMAIN.ASSIGNMENT_ALGORITHM.RANDOM", locale);
}
}