Search in sources :

Example 26 with Holder

use of com.evolveum.midpoint.util.Holder in project midpoint by Evolveum.

the class CompleteBucketOperation method computeCompletionModifications.

@NotNull
private Collection<ItemDelta<?, ?>> computeCompletionModifications(@NotNull TaskType task) {
    ActivityStateType activityState = ActivityStateUtil.getActivityStateRequired(task.getActivityState(), activityPath);
    ActivityBucketingStateType bucketing = activityState.getBucketing();
    List<WorkBucketType> buckets = CloneUtil.cloneCollectionMembers(bucketing.getBucket());
    WorkBucketType bucket = BucketingUtil.findBucketByNumberRequired(buckets, sequentialNumber);
    checkBucketReadyOrDelegated(bucket);
    bucketProgressHolder.accept(new BucketProgressOverviewType().totalBuckets(bucketing.getNumberOfBuckets()).completeBuckets(BucketingUtil.getCompleteBucketsNumber(buckets) + 1));
    ItemPath statePath = ActivityStateUtil.getStateItemPath(task.getActivityState(), activityPath);
    List<ItemDelta<?, ?>> closingMods = bucketStateChangeDeltas(statePath, bucket, WorkBucketStateType.COMPLETE);
    WorkBucketType bucketBeforeCompletion = bucket.clone();
    // needed for compressing buckets
    bucket.setState(WorkBucketStateType.COMPLETE);
    Holder<Boolean> recentlyClosedBucketDeleted = new Holder<>();
    List<ItemDelta<?, ?>> compressingMods = compressCompletedBuckets(statePath, buckets, bucketBeforeCompletion, recentlyClosedBucketDeleted);
    if (Boolean.TRUE.equals(recentlyClosedBucketDeleted.getValue())) {
        return compressingMods;
    } else {
        return ListUtils.union(closingMods, compressingMods);
    }
}
Also used : Holder(com.evolveum.midpoint.util.Holder) ItemDelta(com.evolveum.midpoint.prism.delta.ItemDelta) ItemPath(com.evolveum.midpoint.prism.path.ItemPath) NotNull(org.jetbrains.annotations.NotNull)

Example 27 with Holder

use of com.evolveum.midpoint.util.Holder in project midpoint by Evolveum.

the class NodeFoundDeadHelper method markTaskAsNotRunning.

private void markTaskAsNotRunning(PrismObject<TaskType> task, Set<String> nodes, OperationResult result) throws CommonException {
    Holder<Boolean> changed = new Holder<>();
    repositoryService.modifyObjectDynamically(TaskType.class, task.getOid(), null, currentTask -> {
        changed.setValue(false);
        if (currentTask.getNode() != null && nodes.contains(currentTask.getNode())) {
            S_ItemEntry builder = PrismContext.get().deltaFor(TaskType.class).item(TaskType.F_NODE).replace();
            // The following should be always true. But let's check that just to be sure.
            if (currentTask.getExecutionState() == TaskExecutionStateType.RUNNING) {
                builder = builder.item(TaskType.F_EXECUTION_STATE).replace(TaskExecutionStateType.RUNNABLE);
                changed.setValue(true);
            }
            return builder.asItemDeltas();
        } else {
            return List.of();
        }
    }, null, result);
    // We invoke specific cleanup actions only if the task state was really changed from RUNNING to RUNNABLE by us.
    if (changed.getValue()) {
        Objects.requireNonNull(taskHandlerRegistry.getHandler(task.asObjectable().getHandlerUri()), "No handler").onNodeDown(task.asObjectable(), result);
    }
}
Also used : Holder(com.evolveum.midpoint.util.Holder) S_ItemEntry(com.evolveum.midpoint.prism.delta.builder.S_ItemEntry)

Example 28 with Holder

use of com.evolveum.midpoint.util.Holder in project midpoint by Evolveum.

the class TaskRetriever method getTaskFromRemoteNode.

private PrismObject<TaskType> getTaskFromRemoteNode(String oid, Collection<SelectorOptions<GetOperationOptions>> options, ClusterStatusInformation csi, OperationResult parentResult) throws SchemaException {
    if (csi == null) {
        // in case no fetch was used...
        return null;
    }
    NodeType runsAt = csi.findNodeInfoForTask(oid);
    if (runsAt == null || clusterManager.isCurrentNode(runsAt.asPrismObject())) {
        return null;
    }
    Holder<PrismObject<TaskType>> taskPrism = new Holder<>();
    clusterExecutionHelper.execute(runsAt, (client, node, opResult) -> {
        Response response = client.path(TaskConstants.GET_TASK_REST_PATH + oid).query("include", GetOperationOptions.toRestIncludeOption(options)).get();
        Response.StatusType statusType = response.getStatusInfo();
        if (statusType.getFamily() == Response.Status.Family.SUCCESSFUL) {
            TaskType taskType = response.readEntity(TaskType.class);
            taskPrism.setValue(taskType.asPrismObject());
        } else {
            LOGGER.warn("Cannot get task from {}", node);
        }
    }, new ClusterExecutionOptions().tryAllNodes(), "load task (cluster)", parentResult);
    return taskPrism.getValue();
}
Also used : Response(javax.ws.rs.core.Response) PrismObject(com.evolveum.midpoint.prism.PrismObject) Holder(com.evolveum.midpoint.util.Holder)

Example 29 with Holder

use of com.evolveum.midpoint.util.Holder in project midpoint by Evolveum.

the class PageDebugView method savePerformed.

public void savePerformed(AjaxRequestTarget target) {
    if (StringUtils.isEmpty(objectViewDtoModel.getObject().getXml())) {
        error(getString("pageDebugView.message.cantSaveEmpty"));
        target.add(getFeedbackPanel());
        return;
    }
    Task task = createSimpleTask(OPERATION_SAVE_OBJECT);
    OperationResult result = task.getResult();
    try {
        PrismObject<? extends ObjectType> oldObject = objectViewDtoModel.getObject().getObject();
        oldObject.revive(getPrismContext());
        Holder<? extends ObjectType> objectHolder = new Holder<>(null);
        validateObject(result, (Holder) objectHolder);
        if (result.isAcceptable()) {
            PrismObject<? extends ObjectType> newObject = objectHolder.getValue().asPrismObject();
            ObjectDelta<? extends ObjectType> delta = oldObject.diff((PrismObject) newObject, EquivalenceStrategy.LITERAL);
            if (delta.getPrismContext() == null) {
                LOGGER.warn("No prism context in delta {} after diff, adding it", delta);
                delta.revive(getPrismContext());
            }
            if (LOGGER.isTraceEnabled()) {
                LOGGER.trace("Delta to be applied:\n{}", delta.debugDump());
            }
            // quick fix for now (MID-1910), maybe it should be somewhere in objectViewModel..
            // if (isReport(oldObject)){
            // ReportTypeUtil.applyConfigurationDefinition((PrismObject)newObject, delta, getPrismContext());
            // }
            Collection<ObjectDelta<? extends ObjectType>> deltas = MiscUtil.createCollection(delta);
            ModelExecuteOptions options = ModelExecuteOptions.create(getPrismContext());
            if (isTrue(DebugViewOptions.ID_SAVE_AS_RAW)) {
                options.raw(true);
            }
            if (isTrue(DebugViewOptions.ID_REEVALUATE_SEARCH_FILTERS)) {
                options.reevaluateSearchFilters(true);
            }
            if (!isTrue(DebugViewOptions.ID_ENCRYPT)) {
                options.noCrypt(true);
            }
            getModelService().executeChanges(deltas, options, task, result);
            result.computeStatus();
        }
    } catch (Exception ex) {
        result.recordFatalError(getString("WebModelUtils.couldntSaveObject"), ex);
    }
    if (result.isError()) {
        showResult(result);
        target.add(getFeedbackPanel());
    } else {
        showResult(result);
        // to handle returning back to list objects page instead of edit object page
        if (getBreadcrumbs().size() >= 3) {
            redirectBack(3);
        } else {
            redirectBack();
        }
    }
}
Also used : ObjectType(com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType) Task(com.evolveum.midpoint.task.api.Task) Holder(com.evolveum.midpoint.util.Holder) ModelExecuteOptions(com.evolveum.midpoint.model.api.ModelExecuteOptions) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) ObjectDelta(com.evolveum.midpoint.prism.delta.ObjectDelta) RestartResponseException(org.apache.wicket.RestartResponseException)

Example 30 with Holder

use of com.evolveum.midpoint.util.Holder in project midpoint by Evolveum.

the class PageResourceEdit method savePerformed.

private void savePerformed(AjaxRequestTarget target) {
    ObjectViewDto dto = model.getObject();
    if (StringUtils.isEmpty(dto.getXml())) {
        error(getString("pageResourceEdit.message.emptyXml"));
        target.add(getFeedbackPanel());
        return;
    }
    Task task = createSimpleTask(OPERATION_SAVE_RESOURCE);
    OperationResult result = task.getResult();
    try {
        Holder<PrismObject<ResourceType>> objectHolder = new Holder<PrismObject<ResourceType>>(null);
        validateObject(dto.getXml(), objectHolder, PrismContext.LANG_XML, false, result);
        if (result.isAcceptable()) {
            PrismObject<ResourceType> newResource = objectHolder.getValue();
            updateConnectorRef(newResource, task, result);
            if (!isEditing()) {
                //we're adding new resource
                ObjectDelta delta = ObjectDelta.createAddDelta(newResource);
                getModelService().executeChanges(WebComponentUtil.createDeltaCollection(delta), null, task, result);
            } else {
                //we're editing existing resource
                PrismObject<ResourceType> oldResource = dto.getObject();
                ObjectDelta<ResourceType> delta = oldResource.diff(newResource);
                getModelService().executeChanges(WebComponentUtil.createDeltaCollection(delta), ModelExecuteOptions.createRaw(), task, result);
            }
            result.computeStatus();
        }
    } catch (Exception ex) {
        LoggingUtils.logUnexpectedException(LOGGER, "Couldn't save resource", ex);
        result.recordFatalError("Couldn't save resource.", ex);
    }
    if (WebComponentUtil.isSuccessOrHandledError(result)) {
        showResult(result);
        setResponsePage(new PageResources(false));
    } else {
        showResult(result);
        target.add(getFeedbackPanel());
    }
}
Also used : PrismObject(com.evolveum.midpoint.prism.PrismObject) Task(com.evolveum.midpoint.task.api.Task) Holder(com.evolveum.midpoint.util.Holder) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) ResourceType(com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType) ObjectDelta(com.evolveum.midpoint.prism.delta.ObjectDelta) ObjectViewDto(com.evolveum.midpoint.web.page.admin.dto.ObjectViewDto) RestartResponseException(org.apache.wicket.RestartResponseException)

Aggregations

Holder (com.evolveum.midpoint.util.Holder)45 OperationResult (com.evolveum.midpoint.schema.result.OperationResult)27 PrismObject (com.evolveum.midpoint.prism.PrismObject)16 Task (com.evolveum.midpoint.task.api.Task)13 Test (org.testng.annotations.Test)13 SchemaException (com.evolveum.midpoint.util.exception.SchemaException)12 ObjectNotFoundException (com.evolveum.midpoint.util.exception.ObjectNotFoundException)9 ItemPath (com.evolveum.midpoint.prism.path.ItemPath)8 QName (javax.xml.namespace.QName)8 SystemException (com.evolveum.midpoint.util.exception.SystemException)7 LensContext (com.evolveum.midpoint.model.impl.lens.LensContext)6 ObjectQuery (com.evolveum.midpoint.prism.query.ObjectQuery)6 ShadowType (com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType)6 NotNull (org.jetbrains.annotations.NotNull)6 AbstractUninitializedCertificationTest (com.evolveum.midpoint.certification.test.AbstractUninitializedCertificationTest)5 ObjectDelta (com.evolveum.midpoint.prism.delta.ObjectDelta)5 CommunicationException (com.evolveum.midpoint.util.exception.CommunicationException)5 Trace (com.evolveum.midpoint.util.logging.Trace)5 TraceManager (com.evolveum.midpoint.util.logging.TraceManager)5 com.evolveum.midpoint.xml.ns._public.common.common_3 (com.evolveum.midpoint.xml.ns._public.common.common_3)5