public static void assign(final ActivityInstanceUUID taskUUID) throws TaskNotFoundException {
final TaskInstance task = getTask(taskUUID);
final ProcessDefinitionUUID processUUID = task.getProcessDefinitionUUID();
final ActivityDefinition activityDefinition = getActivityDefinition(processUUID, task.getActivityName());
final Set<Performer> performers = getPerformers(activityDefinition);
Set<String> candidates = getCandidates(performers, task);
String userId = null;
final Performer performer = performers.iterator().next();
if (performer.getFilterDefinition() != null) {
candidates = executeFilter(task, candidates, performer);
if (candidates.size() == 1) {
userId = candidates.iterator().next();
}
}
if (LOG.isLoggable(Level.FINE)) {
LOG.fine("Assigning: " + task);
}
if (userId != null) {
assign(task, null, userId);
} else {
assign(task, candidates, null);
}
if (LOG.isLoggable(Level.FINE)) {
LOG.fine("Assigned: " + task);
}
}