Search in sources :

Example 1 with EvaluatedConstruction

use of com.evolveum.midpoint.model.api.context.EvaluatedConstruction in project midpoint by Evolveum.

the class PageAdminFocus method recomputeAssignmentsPerformed.

public List<AssignmentsPreviewDto> recomputeAssignmentsPerformed(AjaxRequestTarget target) {
    LOGGER.debug("Recompute user assignments");
    Task task = createSimpleTask(OPERATION_RECOMPUTE_ASSIGNMENTS);
    OperationResult result = new OperationResult(OPERATION_RECOMPUTE_ASSIGNMENTS);
    ObjectDelta<F> delta;
    Set<AssignmentsPreviewDto> assignmentDtoSet = new TreeSet<>();
    try {
        reviveModels();
        ObjectWrapper<F> userWrapper = getObjectWrapper();
        delta = userWrapper.getObjectDelta();
        if (userWrapper.getOldDelta() != null) {
            delta = ObjectDelta.summarize(userWrapper.getOldDelta(), delta);
        }
        switch(userWrapper.getStatus()) {
            case ADDING:
                PrismObject<F> focus = delta.getObjectToAdd();
                prepareObjectForAdd(focus);
                getPrismContext().adopt(focus, getCompileTimeClass());
                if (LOGGER.isTraceEnabled()) {
                    LOGGER.trace("Delta before add user:\n{}", new Object[] { delta.debugDump(3) });
                }
                if (!delta.isEmpty()) {
                    delta.revive(getPrismContext());
                } else {
                    result.recordSuccess();
                }
                break;
            case MODIFYING:
                prepareObjectDeltaForModify(delta);
                if (LOGGER.isTraceEnabled()) {
                    LOGGER.trace("Delta before modify user:\n{}", new Object[] { delta.debugDump(3) });
                }
                List<ObjectDelta<? extends ObjectType>> accountDeltas = getShadowModifyDeltas(result);
                Collection<ObjectDelta<? extends ObjectType>> deltas = new ArrayList<>();
                if (!delta.isEmpty()) {
                    delta.revive(getPrismContext());
                    deltas.add(delta);
                }
                for (ObjectDelta accDelta : accountDeltas) {
                    if (!accDelta.isEmpty()) {
                        accDelta.revive(getPrismContext());
                        deltas.add(accDelta);
                    }
                }
                break;
            default:
                error(getString("pageAdminFocus.message.unsupportedState", userWrapper.getStatus()));
        }
        ModelContext<UserType> modelContext = null;
        try {
            modelContext = getModelInteractionService().previewChanges(WebComponentUtil.createDeltaCollection(delta), null, task, result);
        } catch (NoFocusNameSchemaException e) {
            info(getString("pageAdminFocus.message.noUserName"));
            target.add(getFeedbackPanel());
            return null;
        }
        DeltaSetTriple<? extends EvaluatedAssignment> evaluatedAssignmentTriple = modelContext.getEvaluatedAssignmentTriple();
        Collection<? extends EvaluatedAssignment> evaluatedAssignments = evaluatedAssignmentTriple.getNonNegativeValues();
        if (evaluatedAssignments.isEmpty()) {
            info(getString("pageAdminFocus.message.noAssignmentsAvailable"));
            target.add(getFeedbackPanel());
            return null;
        }
        for (EvaluatedAssignment<UserType> evaluatedAssignment : evaluatedAssignments) {
            if (!evaluatedAssignment.isValid()) {
                continue;
            }
            // roles and orgs
            DeltaSetTriple<? extends EvaluatedAssignmentTarget> evaluatedRolesTriple = evaluatedAssignment.getRoles();
            Collection<? extends EvaluatedAssignmentTarget> evaluatedRoles = evaluatedRolesTriple.getNonNegativeValues();
            for (EvaluatedAssignmentTarget role : evaluatedRoles) {
                if (role.isEvaluateConstructions()) {
                    assignmentDtoSet.add(createAssignmentsPreviewDto(role, task, result));
                }
            }
            // all resources
            DeltaSetTriple<EvaluatedConstruction> evaluatedConstructionsTriple = evaluatedAssignment.getEvaluatedConstructions(task, result);
            Collection<EvaluatedConstruction> evaluatedConstructions = evaluatedConstructionsTriple.getNonNegativeValues();
            for (EvaluatedConstruction construction : evaluatedConstructions) {
                assignmentDtoSet.add(createAssignmentsPreviewDto(construction));
            }
        }
        return new ArrayList<>(assignmentDtoSet);
    } catch (Exception e) {
        LoggingUtils.logUnexpectedException(LOGGER, "Could not create assignments preview.", e);
        error("Could not create assignments preview. Reason: " + e);
        target.add(getFeedbackPanel());
    }
    return null;
}
Also used : Task(com.evolveum.midpoint.task.api.Task) AssignmentsPreviewDto(com.evolveum.midpoint.web.page.admin.users.component.AssignmentsPreviewDto) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) EvaluatedAssignmentTarget(com.evolveum.midpoint.model.api.context.EvaluatedAssignmentTarget) EvaluatedConstruction(com.evolveum.midpoint.model.api.context.EvaluatedConstruction)

Aggregations

EvaluatedAssignmentTarget (com.evolveum.midpoint.model.api.context.EvaluatedAssignmentTarget)1 EvaluatedConstruction (com.evolveum.midpoint.model.api.context.EvaluatedConstruction)1 OperationResult (com.evolveum.midpoint.schema.result.OperationResult)1 Task (com.evolveum.midpoint.task.api.Task)1 AssignmentsPreviewDto (com.evolveum.midpoint.web.page.admin.users.component.AssignmentsPreviewDto)1