use of org.kie.kogito.taskassigning.core.TaskAssigningRuntimeException in project kogito-apps by kiegroup.
the class AddTaskProblemFactChange method doChange.
@Override
public void doChange(ScoreDirector<TaskAssigningSolution> scoreDirector) {
TaskAssigningSolution solution = scoreDirector.getWorkingSolution();
TaskAssignment workingTaskAssignment = scoreDirector.lookUpWorkingObjectOrReturnNull(taskAssignment);
if (workingTaskAssignment != null) {
throw new TaskAssigningRuntimeException(String.format("A task assignment with the given identifier id: %s already exists", taskAssignment.getId()));
}
scoreDirector.beforeEntityAdded(taskAssignment);
// Planning entity lists are already cloned by the SolutionCloner, no need to clone.
solution.getTaskAssignmentList().add(taskAssignment);
scoreDirector.afterEntityAdded(taskAssignment);
scoreDirector.triggerVariableListeners();
}
use of org.kie.kogito.taskassigning.core.TaskAssigningRuntimeException in project kogito-apps by kiegroup.
the class TaskInfoChangeProblemFactChange method doChange.
@Override
public void doChange(ScoreDirector<TaskAssigningSolution> scoreDirector) {
TaskAssignment workingTaskAssignment = scoreDirector.lookUpWorkingObjectOrReturnNull(taskAssignment);
if (workingTaskAssignment == null) {
throw new TaskAssigningRuntimeException(String.format("Expected task assignment: %s was not found in current working solution", taskAssignment));
}
scoreDirector.beforeProblemPropertyChanged(workingTaskAssignment);
Task currentTask = workingTaskAssignment.getTask();
Task clonedTask = cloneByUnmodifiableFields(currentTask);
setModifiableFields(clonedTask, taskInfo);
workingTaskAssignment.setTask(clonedTask);
scoreDirector.afterProblemPropertyChanged(workingTaskAssignment);
scoreDirector.triggerVariableListeners();
}
use of org.kie.kogito.taskassigning.core.TaskAssigningRuntimeException in project kogito-apps by kiegroup.
the class AddUserProblemFactChange method doChange.
@Override
public void doChange(ScoreDirector<TaskAssigningSolution> scoreDirector) {
final TaskAssigningSolution workingSolution = scoreDirector.getWorkingSolution();
final User workingUser = scoreDirector.lookUpWorkingObjectOrReturnNull(user);
if (workingUser != null) {
throw new TaskAssigningRuntimeException(String.format("A user with the given identifier id: %s already exists", user.getId()));
}
// Shallow clone the user list so only workingSolution is affected, not bestSolution
workingSolution.setUserList(new ArrayList<>(workingSolution.getUserList()));
// Add the problem fact itself
scoreDirector.beforeProblemFactAdded(user);
workingSolution.getUserList().add(user);
scoreDirector.afterProblemFactAdded(user);
scoreDirector.triggerVariableListeners();
}
use of org.kie.kogito.taskassigning.core.TaskAssigningRuntimeException in project kogito-apps by kiegroup.
the class AssignTaskProblemFactChange method lookupOrAddWorkingUser.
private static User lookupOrAddWorkingUser(User user, ScoreDirector<TaskAssigningSolution> scoreDirector, boolean addIfNotExists) {
TaskAssigningSolution solution = scoreDirector.getWorkingSolution();
User workingUser = scoreDirector.lookUpWorkingObjectOrReturnNull(user);
if (workingUser == null) {
if (!addIfNotExists) {
throw new TaskAssigningRuntimeException(String.format("Expected user: %s was not found in current working solution", user));
} else {
// Shallow clone the user list so only workingSolution is affected, not bestSolution
solution.setUserList(new ArrayList<>(solution.getUserList()));
// Ensure that the nextElement value calculated by OptaPlanner doesn't have any out-side manually
// assigned value.
user.setNextElement(null);
scoreDirector.beforeProblemFactAdded(user);
solution.getUserList().add(user);
scoreDirector.afterProblemFactAdded(user);
workingUser = user;
}
}
return workingUser;
}
Aggregations