Search in sources :

Example 1 with User

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

the class TaskByGroupAndSkillsChangeMoveFilter method accept.

@Override
public boolean accept(ScoreDirector<TaskAssigningSolution> scoreDirector, ChangeMove<TaskAssigningSolution> changeMove) {
    final TaskAssignment assignmentToMove = (TaskAssignment) changeMove.getEntity();
    final ChainElement chainElement = (ChainElement) changeMove.getToPlanningValue();
    final User user = chainElement.isTaskAssignment() ? ((TaskAssignment) chainElement).getUser() : (User) chainElement;
    return user != null && user.isEnabled() && (ModelConstants.IS_PLANNING_USER.test(user.getId()) || (isPotentialOwner(assignmentToMove.getTask(), user) && hasAllLabels(assignmentToMove.getTask(), user, DefaultLabels.SKILLS.name())));
}
Also used : ChainElement(org.kie.kogito.taskassigning.core.model.ChainElement) User(org.kie.kogito.taskassigning.core.model.User) TaskAssignment(org.kie.kogito.taskassigning.core.model.TaskAssignment)

Example 2 with User

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

the class AssignTaskProblemFactChange method doChange.

@Override
public void doChange(ScoreDirector<TaskAssigningSolution> scoreDirector) {
    User workingUser = lookupOrAddWorkingUser(user, scoreDirector, addIfNotExists);
    TaskAssignment workingTaskAssignment = lookupOrPrepareTaskAssignment(taskAssignment, scoreDirector);
    ChainElement insertPosition = findInsertPosition(workingUser);
    TaskAssignment insertPositionNextTask = insertPosition.getNextElement();
    if (taskAssignment == workingTaskAssignment) {
        processNewTaskAssignment(workingTaskAssignment, insertPosition, insertPositionNextTask, scoreDirector);
    } else if (insertPosition != workingTaskAssignment) {
        // in cases where insertPosition == workingTaskAssignment there's nothing to do, since the workingTaskAssignment
        // is already pinned and belongs to user. (see findInsertPosition)
        processExistingTaskAssignment(workingTaskAssignment, insertPosition, insertPositionNextTask, scoreDirector);
    }
}
Also used : ChainElement(org.kie.kogito.taskassigning.core.model.ChainElement) User(org.kie.kogito.taskassigning.core.model.User) ProblemFactChangeUtil.unlinkTaskAssignment(org.kie.kogito.taskassigning.core.model.solver.realtime.ProblemFactChangeUtil.unlinkTaskAssignment) TaskAssignment(org.kie.kogito.taskassigning.core.model.TaskAssignment)

Example 3 with User

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

the class DisableUserProblemFactChange method doChange.

@Override
public void doChange(ScoreDirector<TaskAssigningSolution> scoreDirector) {
    final User workingUser = scoreDirector.lookUpWorkingObjectOrReturnNull(user);
    if (workingUser == null) {
        return;
    }
    scoreDirector.beforeProblemPropertyChanged(workingUser);
    workingUser.setEnabled(false);
    scoreDirector.afterProblemPropertyChanged(workingUser);
    releaseNonPinnedTaskAssignments(workingUser, scoreDirector);
    scoreDirector.triggerVariableListeners();
}
Also used : User(org.kie.kogito.taskassigning.core.model.User)

Example 4 with User

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

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

the class TaskAssigningGenerator method createUserList.

private List<User> createUserList(int size, List<Group> groupList) {
    List<User> userList = new ArrayList<>(size);
    userNameGenerator.predictMaximumSizeAndReset(size);
    for (int i = 0; i < size; i++) {
        String userName = userNameGenerator.generateNextValue();
        User user = new User(userName);
        user.setEnabled(true);
        int groupListSize = USER_GROUP_SET_SIZE_MINIMUM + random.nextInt(USER_GROUP_SET_MAXIMUM - USER_GROUP_SET_SIZE_MINIMUM);
        if (groupListSize > groupList.size()) {
            groupListSize = groupList.size();
        }
        Set<Group> groupSet = new LinkedHashSet<>(groupListSize);
        int groupListIndex = random.nextInt(groupList.size());
        for (int j = 0; j < groupListSize; j++) {
            groupSet.add(groupList.get(groupListIndex));
            groupListIndex = (groupListIndex + 1) % groupList.size();
        }
        user.setGroups(groupSet);
        LOGGER.trace("Created user with id: ({}).", userName);
        userList.add(user);
    }
    return userList;
}
Also used : LinkedHashSet(java.util.LinkedHashSet) Group(org.kie.kogito.taskassigning.core.model.Group) User(org.kie.kogito.taskassigning.core.model.User) ArrayList(java.util.ArrayList)

Aggregations

User (org.kie.kogito.taskassigning.core.model.User)70 TaskAssignment (org.kie.kogito.taskassigning.core.model.TaskAssignment)41 Test (org.junit.jupiter.api.Test)32 TaskAssigningSolution (org.kie.kogito.taskassigning.core.model.TaskAssigningSolution)25 TestUtil.mockUser (org.kie.kogito.taskassigning.core.model.TestUtil.mockUser)14 Task (org.kie.kogito.taskassigning.core.model.Task)12 ArrayList (java.util.ArrayList)11 TestUtil.mockTaskAssignment (org.kie.kogito.taskassigning.core.model.TestUtil.mockTaskAssignment)11 AssignTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.AssignTaskProblemFactChange)11 TaskUtil.fromTaskData (org.kie.kogito.taskassigning.service.util.TaskUtil.fromTaskData)10 Group (org.kie.kogito.taskassigning.core.model.Group)9 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)8 AddTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.AddTaskProblemFactChange)8 ReleaseTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.ReleaseTaskProblemFactChange)8 RemoveTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.RemoveTaskProblemFactChange)8 ProblemFactChange (org.optaplanner.core.api.solver.ProblemFactChange)8 HashMap (java.util.HashMap)7 AddUserProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.AddUserProblemFactChange)7 DisableUserProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.DisableUserProblemFactChange)7 RemoveUserProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.RemoveUserProblemFactChange)7