Search in sources :

Example 26 with TaskAssigningSolution

use of org.kie.server.services.taskassigning.core.model.TaskAssigningSolution in project droolsjbpm-integration by kiegroup.

the class RemoveTaskProblemFactChangeTest method removeTaskProblemFactChange.

private void removeTaskProblemFactChange(TaskAssigningSolution solution, List<Long> taskIds) throws Exception {
    List<ProgrammedProblemFactChange<RemoveTaskProblemFactChange>> programmedChanges = taskIds.stream().map(id -> findTaskOrCreate(solution, id)).map(task -> new ProgrammedProblemFactChange<>(new RemoveTaskProblemFactChange(task))).collect(Collectors.toList());
    // each partial solution must have the change that was applied on it.
    executeSequentialChanges(solution, programmedChanges);
    programmedChanges.forEach(change -> assertRemoveTaskProblemFactChangeWasProduced(change.getChange(), change.getSolutionAfterChange()));
    // finally the last solution must have the result of all the changes.
    TaskAssigningSolution lastSolution = programmedChanges.get(programmedChanges.size() - 1).getSolutionAfterChange();
    programmedChanges.forEach(change -> assertRemoveTaskProblemFactChangeWasProduced(change.getChange(), lastSolution));
}
Also used : Arrays(java.util.Arrays) Test(org.junit.Test) Collectors(java.util.stream.Collectors) ArrayList(java.util.ArrayList) Objects(java.util.Objects) SET_OF_50TASKS_5USERS_SOLUTION(org.kie.server.services.taskassigning.core.TestDataSet.SET_OF_50TASKS_5USERS_SOLUTION) List(java.util.List) SET_OF_100TASKS_5USERS_SOLUTION(org.kie.server.services.taskassigning.core.TestDataSet.SET_OF_100TASKS_5USERS_SOLUTION) Assert.assertFalse(org.junit.Assert.assertFalse) TaskAssigningSolution(org.kie.server.services.taskassigning.core.model.TaskAssigningSolution) SET_OF_500TASKS_20USERS_SOLUTION(org.kie.server.services.taskassigning.core.TestDataSet.SET_OF_500TASKS_20USERS_SOLUTION) Task(org.kie.server.services.taskassigning.core.model.Task) SET_OF_24TASKS_8USERS_SOLUTION(org.kie.server.services.taskassigning.core.TestDataSet.SET_OF_24TASKS_8USERS_SOLUTION) TaskAssigningSolution(org.kie.server.services.taskassigning.core.model.TaskAssigningSolution)

Example 27 with TaskAssigningSolution

use of org.kie.server.services.taskassigning.core.model.TaskAssigningSolution in project droolsjbpm-integration by kiegroup.

the class PlanningBuilderTest method build.

@Test
public void build() {
    List<Task> user1Tasks = mockTasks(USER1_TOTAL_TASKS, USER1_PINNED_TASKS, "container1", 1L);
    User user1 = mockUser(1, user1Tasks);
    List<Task> user2Tasks = mockTasks(USER2_TOTAL_TASKS, USER2_PINNED_TASKS, "container2", 2L);
    User user2 = mockUser(2, user2Tasks);
    List<Task> user3Tasks = mockTasks(USER3_TOTAL_TASKS, USER3_PINNED_TASKS, "container3", 3L);
    User user3 = mockUser(3, user3Tasks);
    List<Task> user4Tasks = mockTasks(USER4_TOTAL_TASKS, USER4_PINNED_TASKS, "container4", 4L);
    User user4 = mockUser(4, user4Tasks);
    List<Task> user5Tasks = mockTasks(USER5_TOTAL_TASKS, USER5_PINNED_TASKS, "container5", 5L);
    User user5 = mockUser(5, user5Tasks);
    List<Task> user6Tasks = mockTasks(USER6_TOTAL_TASKS, USER6_PINNED_TASKS, "container6", 6L);
    User user6 = mockUser(6, user6Tasks);
    List<Task> planningUserTasks = mockTasks(PLANNING_USER_TASKS, 0, "container7", 7L);
    User planningUser = initializeUser(new User(-1, PLANNING_USER_ID), planningUserTasks);
    List<Task> totalTasks = new ArrayList<>();
    totalTasks.addAll(user1Tasks);
    totalTasks.addAll(user2Tasks);
    totalTasks.addAll(user3Tasks);
    totalTasks.addAll(user4Tasks);
    totalTasks.addAll(user5Tasks);
    totalTasks.addAll(user6Tasks);
    totalTasks.addAll(planningUserTasks);
    List<User> totalUsers = Arrays.asList(user1, user2, user3, user4, user5, user6, planningUser);
    TaskAssigningSolution solution = new TaskAssigningSolution(1, totalUsers, totalTasks);
    List<PlanningItem> planningItems = PlanningBuilder.create().withPublishWindowSize(publishWindowSize).withSolution(solution).build();
    assertPlanningItems(user1, publishWindowSize, planningItems);
    assertPlanningItems(user2, publishWindowSize, planningItems);
    assertPlanningItems(user3, publishWindowSize, planningItems);
    assertPlanningItems(user4, publishWindowSize, planningItems);
    assertPlanningItems(user5, publishWindowSize, planningItems);
    assertPlanningItems(user6, publishWindowSize, planningItems);
    assertPlanningUserPlanningItems(planningUser, publishWindowSize, planningItems);
}
Also used : Task(org.kie.server.services.taskassigning.core.model.Task) TestUtil.mockUser(org.kie.server.services.taskassigning.planning.TestUtil.mockUser) User(org.kie.server.services.taskassigning.core.model.User) TestUtil.initializeUser(org.kie.server.services.taskassigning.planning.TestUtil.initializeUser) ArrayList(java.util.ArrayList) TaskAssigningSolution(org.kie.server.services.taskassigning.core.model.TaskAssigningSolution) PlanningItem(org.kie.server.api.model.taskassigning.PlanningItem) Test(org.junit.Test)

Example 28 with TaskAssigningSolution

use of org.kie.server.services.taskassigning.core.model.TaskAssigningSolution in project droolsjbpm-integration by kiegroup.

the class SolutionBuilderTest method buildAndCheckTaskWithNoPlanningTaskWasProcessedCorrect.

private void buildAndCheckTaskWithNoPlanningTaskWasProcessedCorrect(TaskData taskData, boolean pinned) {
    List<org.kie.server.services.taskassigning.user.system.api.User> externalUsers = buildExternalUsers();
    TaskAssigningSolution solution = SolutionBuilder.create().withTasks(Collections.singletonList(taskData)).withUsers(externalUsers).withContext(context).build();
    assertEquals(2, solution.getTaskList().size());
    assertContainsAssignedTask(taskData, taskData.getActualOwner(), pinned, solution);
    assertTaskChangeWasProcessed(taskData.getTaskId(), taskData.getLastModificationDate());
}
Also used : User(org.kie.server.services.taskassigning.core.model.User) TestUtil.mockExternalUser(org.kie.server.services.taskassigning.planning.TestUtil.mockExternalUser) TaskAssigningSolution(org.kie.server.services.taskassigning.core.model.TaskAssigningSolution)

Example 29 with TaskAssigningSolution

use of org.kie.server.services.taskassigning.core.model.TaskAssigningSolution in project droolsjbpm-integration by kiegroup.

the class AbstractTaskAssigningCoreTest method readTaskAssigningSolution.

protected TaskAssigningSolution readTaskAssigningSolution(String resource) throws IOException {
    int index = resource.lastIndexOf("/");
    String prefix = resource;
    if (index >= 0) {
        prefix = resource.substring(index + 1);
    }
    File f = File.createTempFile(prefix, null);
    InputStream resourceAsStream = getClass().getResourceAsStream(resource);
    FileUtils.copyInputStreamToFile(resourceAsStream, f);
    XStreamSolutionFileIO<TaskAssigningSolution> solutionFileIO = new XStreamSolutionFileIO<>(TaskAssigningSolution.class);
    return solutionFileIO.read(f);
}
Also used : XStreamSolutionFileIO(org.optaplanner.persistence.xstream.impl.domain.solution.XStreamSolutionFileIO) InputStream(java.io.InputStream) TaskAssigningSolution(org.kie.server.services.taskassigning.core.model.TaskAssigningSolution) File(java.io.File)

Example 30 with TaskAssigningSolution

use of org.kie.server.services.taskassigning.core.model.TaskAssigningSolution in project droolsjbpm-integration by kiegroup.

the class SolutionSynchronizer method doInitSolverExecutor.

Pair<Action, Result> doInitSolverExecutor() {
    Pair<Action, Result> nextActionOrResult = Pair.of(null, null);
    try {
        LOGGER.debug("Solution Synchronizer will recover the solution from the jBPM runtime for starting the solver.");
        if (!solverExecutor.isStopped()) {
            LOGGER.debug("Previous solver instance has not yet finished, let's wait for it to stop." + " Next attempt will be in a period of {}.", syncInterval);
            nextActionOrResult = Pair.of(Action.INIT_SOLVER_EXECUTOR, null);
        } else {
            final TaskAssigningSolution recoveredSolution = recoverSolution();
            if (isAlive() && !solverExecutor.isDestroyed()) {
                if (!recoveredSolution.getTaskList().isEmpty()) {
                    solverExecutor.start(recoveredSolution);
                    LOGGER.debug("Solution was successfully recovered. Solver was started for #{} time.", ++solverExecutorStarts);
                    if (solverExecutorStarts > 1) {
                        LOGGER.debug("It looks like it was necessary to restart the solver. It might" + " have been caused due to errors during the solution applying in the jBPM runtime");
                    }
                } else {
                    nextActionOrResult = Pair.of(Action.INIT_SOLVER_EXECUTOR, null);
                    LOGGER.debug("It looks like there are no tasks for recovering the solution at this moment." + " Next attempt will be in a period of {}.", syncInterval);
                }
            }
        }
    } catch (Exception e) {
        final String msg = String.format("An error was produced during solution recovering." + " Next attempt will be in a period of %s, error: %s", syncInterval, e.getMessage());
        LOGGER.warn(msg);
        LOGGER.debug(msg, e);
        nextActionOrResult = Pair.of(Action.INIT_SOLVER_EXECUTOR, null);
    }
    return nextActionOrResult;
}
Also used : TaskAssigningSolution(org.kie.server.services.taskassigning.core.model.TaskAssigningSolution)

Aggregations

TaskAssigningSolution (org.kie.server.services.taskassigning.core.model.TaskAssigningSolution)70 User (org.kie.server.services.taskassigning.core.model.User)29 Test (org.junit.Test)26 Task (org.kie.server.services.taskassigning.core.model.Task)24 ArrayList (java.util.ArrayList)21 TaskPropertyChangeProblemFactChange (org.kie.server.services.taskassigning.core.model.solver.realtime.TaskPropertyChangeProblemFactChange)17 ProblemFactChange (org.optaplanner.core.impl.solver.ProblemFactChange)17 AddTaskProblemFactChange (org.kie.server.services.taskassigning.core.model.solver.realtime.AddTaskProblemFactChange)16 AddUserProblemFactChange (org.kie.server.services.taskassigning.core.model.solver.realtime.AddUserProblemFactChange)16 AssignTaskProblemFactChange (org.kie.server.services.taskassigning.core.model.solver.realtime.AssignTaskProblemFactChange)16 DisableUserProblemFactChange (org.kie.server.services.taskassigning.core.model.solver.realtime.DisableUserProblemFactChange)16 ReleaseTaskProblemFactChange (org.kie.server.services.taskassigning.core.model.solver.realtime.ReleaseTaskProblemFactChange)16 RemoveTaskProblemFactChange (org.kie.server.services.taskassigning.core.model.solver.realtime.RemoveTaskProblemFactChange)16 RemoveUserProblemFactChange (org.kie.server.services.taskassigning.core.model.solver.realtime.RemoveUserProblemFactChange)16 UserPropertyChangeProblemFactChange (org.kie.server.services.taskassigning.core.model.solver.realtime.UserPropertyChangeProblemFactChange)16 TaskData (org.kie.server.api.model.taskassigning.TaskData)15 TaskUtil.fromTaskData (org.kie.server.services.taskassigning.planning.util.TaskUtil.fromTaskData)13 UserUtil.fromExternalUser (org.kie.server.services.taskassigning.planning.util.UserUtil.fromExternalUser)12 PlanningTask (org.kie.server.api.model.taskassigning.PlanningTask)11 List (java.util.List)8