Search in sources :

Example 1 with TaskAssigningRuntimeException

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();
}
Also used : TaskAssigningRuntimeException(org.kie.kogito.taskassigning.core.TaskAssigningRuntimeException) TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution) TaskAssignment(org.kie.kogito.taskassigning.core.model.TaskAssignment)

Example 2 with TaskAssigningRuntimeException

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();
}
Also used : Task(org.kie.kogito.taskassigning.core.model.Task) TaskAssigningRuntimeException(org.kie.kogito.taskassigning.core.TaskAssigningRuntimeException) TaskAssignment(org.kie.kogito.taskassigning.core.model.TaskAssignment)

Example 3 with TaskAssigningRuntimeException

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();
}
Also used : User(org.kie.kogito.taskassigning.core.model.User) TaskAssigningRuntimeException(org.kie.kogito.taskassigning.core.TaskAssigningRuntimeException) TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution)

Example 4 with TaskAssigningRuntimeException

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;
}
Also used : User(org.kie.kogito.taskassigning.core.model.User) TaskAssigningRuntimeException(org.kie.kogito.taskassigning.core.TaskAssigningRuntimeException) TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution)

Aggregations

TaskAssigningRuntimeException (org.kie.kogito.taskassigning.core.TaskAssigningRuntimeException)4 TaskAssigningSolution (org.kie.kogito.taskassigning.core.model.TaskAssigningSolution)3 TaskAssignment (org.kie.kogito.taskassigning.core.model.TaskAssignment)2 User (org.kie.kogito.taskassigning.core.model.User)2 Task (org.kie.kogito.taskassigning.core.model.Task)1