Search in sources :

Example 1 with TaskAssigningSolution

use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution 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 TaskAssigningSolution

use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.

the class AssignTaskProblemFactChange method processNewTaskAssignment.

private void processNewTaskAssignment(TaskAssignment newTaskAssignment, ChainElement insertPosition, TaskAssignment insertPositionNextTask, ScoreDirector<TaskAssigningSolution> scoreDirector) {
    TaskAssigningSolution solution = scoreDirector.getWorkingSolution();
    newTaskAssignment.setPreviousElement(insertPosition);
    scoreDirector.beforeEntityAdded(newTaskAssignment);
    // Planning entity lists are already cloned by the SolutionCloner, no need to clone.
    solution.getTaskAssignmentList().add(newTaskAssignment);
    scoreDirector.afterEntityAdded(newTaskAssignment);
    setPreviousElementIfApply(insertPositionNextTask, newTaskAssignment, scoreDirector);
    setPinned(newTaskAssignment, scoreDirector);
    scoreDirector.triggerVariableListeners();
}
Also used : TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution)

Example 3 with TaskAssigningSolution

use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.

the class RemoveTaskProblemFactChange method doChange.

@Override
public void doChange(ScoreDirector<TaskAssigningSolution> scoreDirector) {
    TaskAssigningSolution solution = scoreDirector.getWorkingSolution();
    TaskAssignment workingTaskAssignment = scoreDirector.lookUpWorkingObjectOrReturnNull(taskAssignment);
    if (workingTaskAssignment != null) {
        ChainElement previousElement = workingTaskAssignment.getPreviousElement();
        unlinkTaskAssignment(workingTaskAssignment, previousElement, scoreDirector);
        scoreDirector.beforeEntityRemoved(workingTaskAssignment);
        // Planning entity lists are already cloned by the SolutionCloner, no need to clone.
        solution.getTaskAssignmentList().remove(workingTaskAssignment);
        scoreDirector.afterEntityRemoved(workingTaskAssignment);
        scoreDirector.triggerVariableListeners();
    }
}
Also used : ChainElement(org.kie.kogito.taskassigning.core.model.ChainElement) TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution) ProblemFactChangeUtil.unlinkTaskAssignment(org.kie.kogito.taskassigning.core.model.solver.realtime.ProblemFactChangeUtil.unlinkTaskAssignment) TaskAssignment(org.kie.kogito.taskassigning.core.model.TaskAssignment)

Example 4 with TaskAssigningSolution

use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.

the class RemoveUserProblemFactChange method doChange.

@Override
public void doChange(ScoreDirector<TaskAssigningSolution> scoreDirector) {
    final TaskAssigningSolution workingSolution = scoreDirector.getWorkingSolution();
    final User workingUser = scoreDirector.lookUpWorkingObjectOrReturnNull(user);
    if (workingUser == null) {
        return;
    }
    if (workingUser.isEnabled()) {
        scoreDirector.beforeProblemPropertyChanged(workingUser);
        workingUser.setEnabled(false);
        scoreDirector.afterProblemPropertyChanged(workingUser);
    }
    releaseAllTaskAssignments(workingUser, scoreDirector);
    // Shallow clone the user list so only workingSolution is affected, not bestSolution
    workingSolution.setUserList(new ArrayList<>(workingSolution.getUserList()));
    // remove the problem fact itself
    scoreDirector.beforeProblemFactRemoved(workingUser);
    workingSolution.getUserList().remove(workingUser);
    scoreDirector.afterProblemFactRemoved(workingUser);
    scoreDirector.triggerVariableListeners();
}
Also used : User(org.kie.kogito.taskassigning.core.model.User) TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution)

Example 5 with TaskAssigningSolution

use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.

the class AbstractTaskAssigningCoreTest method readTaskAssigningSolution.

protected TaskAssigningSolution readTaskAssigningSolution(String resource) {
    File resourceFile = Paths.get(getClass().getResource(resource).getPath()).toFile();
    XStreamSolutionFileIO<TaskAssigningSolution> solutionFileIO = new XStreamSolutionFileIO<>(TaskAssigningSolution.class);
    return solutionFileIO.read(resourceFile);
}
Also used : XStreamSolutionFileIO(org.optaplanner.persistence.xstream.impl.domain.solution.XStreamSolutionFileIO) TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution) File(java.io.File)

Aggregations

TaskAssigningSolution (org.kie.kogito.taskassigning.core.model.TaskAssigningSolution)65 Test (org.junit.jupiter.api.Test)30 User (org.kie.kogito.taskassigning.core.model.User)24 TaskAssignment (org.kie.kogito.taskassigning.core.model.TaskAssignment)23 ArrayList (java.util.ArrayList)15 AssignTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.AssignTaskProblemFactChange)12 TaskUtil.fromTaskData (org.kie.kogito.taskassigning.service.util.TaskUtil.fromTaskData)12 AddTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.AddTaskProblemFactChange)11 TestUtil.mockTaskData (org.kie.kogito.taskassigning.service.TestUtil.mockTaskData)11 ProblemFactChange (org.optaplanner.core.api.solver.ProblemFactChange)11 RemoveTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.RemoveTaskProblemFactChange)10 AddUserProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.AddUserProblemFactChange)9 DisableUserProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.DisableUserProblemFactChange)7 ReleaseTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.ReleaseTaskProblemFactChange)7 RemoveUserProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.RemoveUserProblemFactChange)7 UserPropertyChangeProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.UserPropertyChangeProblemFactChange)7 List (java.util.List)5 BeforeEach (org.junit.jupiter.api.BeforeEach)5 Task (org.kie.kogito.taskassigning.core.model.Task)5 UserDataEvent (org.kie.kogito.taskassigning.service.event.UserDataEvent)5