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));
}
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);
}
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());
}
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);
}
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;
}
Aggregations