Search in sources :

Example 1 with Experimental

use of com.evolveum.midpoint.util.annotation.Experimental in project midpoint by Evolveum.

the class LinkedObjectsFunctions method createLinkedSource.

// todo clean up!
@Experimental
public <T extends AssignmentHolderType> T createLinkedSource(String linkTypeName) throws SchemaException, ConfigurationException {
    OperationResult currentResult = midpointFunctions.getCurrentResult();
    LensFocusContext<?> focusContext = (LensFocusContext<?>) midpointFunctions.getFocusContext();
    if (focusContext == null) {
        throw new IllegalStateException("No focus context");
    }
    LinkTypeDefinitionType definition = focusContext.getSourceLinkTypeDefinition(linkTypeName, linkManager, currentResult);
    if (definition == null) {
        throw new IllegalStateException("No definition for source link type " + linkTypeName + " for " + focusContext);
    }
    LinkedObjectSelectorType selector = definition.getSelector();
    if (selector == null) {
        throw new IllegalStateException("Couldn't create new linked source object without a selector");
    }
    if (selector.getType() == null) {
        throw new IllegalStateException("Couldn't create new linked source object without explicit type in the selector");
    }
    SchemaRegistry schemaRegistry = prismContext.getSchemaRegistry();
    Class<?> objectClass = schemaRegistry.getCompileTimeClassForObjectType(selector.getType());
    if (objectClass == null) {
        throw new IllegalStateException("No object class for type " + selector.getType());
    }
    if (Modifier.isAbstract(objectClass.getModifiers())) {
        throw new IllegalStateException("Class " + objectClass + " cannot be instantiated because it is abstract");
    }
    T newObject;
    try {
        // noinspection unchecked
        newObject = (T) objectClass.getConstructor(PrismContext.class).newInstance(prismContext);
    } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
        throw new SystemException("Couldn't instantiate " + objectClass);
    }
    newObject.beginAssignment().targetRef(focusContext.getOid(), schemaRegistry.determineTypeForClassRequired(focusContext.getObjectTypeClass()));
    ObjectReferenceType archetypeRef = MiscUtil.extractSingleton(selector.getArchetypeRef(), () -> new IllegalStateException("Couldn't instantiate object from selector with multiple archetypes"));
    if (archetypeRef != null) {
        newObject.beginAssignment().targetRef(archetypeRef.clone());
    }
    // TODO other things from the selector
    return newObject;
}
Also used : PrismContext(com.evolveum.midpoint.prism.PrismContext) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) InvocationTargetException(java.lang.reflect.InvocationTargetException) LensFocusContext(com.evolveum.midpoint.model.impl.lens.LensFocusContext) SchemaRegistry(com.evolveum.midpoint.prism.schema.SchemaRegistry) Experimental(com.evolveum.midpoint.util.annotation.Experimental)

Example 2 with Experimental

use of com.evolveum.midpoint.util.annotation.Experimental in project midpoint by Evolveum.

the class LinkedObjectsFunctions method findLinkedTargets.

// Should be used after assignment evaluation!
@Experimental
@NotNull
<T extends AssignmentHolderType> List<T> findLinkedTargets(String linkTypeName) throws CommunicationException, ObjectNotFoundException, SchemaException, SecurityViolationException, ConfigurationException, ExpressionEvaluationException {
    OperationResult currentResult = midpointFunctions.getCurrentResult();
    LensFocusContext<?> focusContext = (LensFocusContext<?>) midpointFunctions.getFocusContext();
    if (focusContext == null) {
        throw new IllegalStateException("No focus context");
    }
    LinkTypeDefinitionType definition = focusContext.getTargetLinkTypeDefinition(linkTypeName, linkManager, currentResult);
    if (definition == null) {
        throw new IllegalStateException("No definition for target link type " + linkTypeName + " for " + focusContext);
    }
    Class<?> expectedClasses = getExpectedClass(definition.getSelector());
    Set<PrismReferenceValue> membership = getMembership();
    List<PrismReferenceValue> assignedWithMatchingRelation = membership.stream().filter(ref -> relationMatches(ref, definition.getSelector()) && objectTypeMatches(ref, expectedClasses)).collect(Collectors.toList());
    // TODO deduplicate w.r.t. member/manager
    // TODO optimize matching
    List<T> objects = new ArrayList<>(assignedWithMatchingRelation.size());
    for (PrismReferenceValue reference : assignedWithMatchingRelation) {
        ObjectReferenceType ort = new ObjectReferenceType();
        ort.setupReferenceValue(reference);
        T object = midpointFunctions.resolveReferenceInternal(ort, true);
        if (objectMatches(object, definition.getSelector())) {
            objects.add(object);
        }
    }
    return objects;
}
Also used : java.util(java.util) com.evolveum.midpoint.xml.ns._public.common.common_3(com.evolveum.midpoint.xml.ns._public.common.common_3) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) Autowired(org.springframework.beans.factory.annotation.Autowired) Trace(com.evolveum.midpoint.util.logging.Trace) ModelExpressionThreadLocalHolder(com.evolveum.midpoint.model.common.expression.ModelExpressionThreadLocalHolder) com.evolveum.midpoint.util.exception(com.evolveum.midpoint.util.exception) SchemaRegistry(com.evolveum.midpoint.prism.schema.SchemaRegistry) LensContext(com.evolveum.midpoint.model.impl.lens.LensContext) ObjectTypeUtil(com.evolveum.midpoint.schema.util.ObjectTypeUtil) PrismContext(com.evolveum.midpoint.prism.PrismContext) Qualifier(org.springframework.beans.factory.annotation.Qualifier) RelationRegistry(com.evolveum.midpoint.schema.RelationRegistry) EvaluatedAssignmentImpl(com.evolveum.midpoint.model.impl.lens.assignments.EvaluatedAssignmentImpl) RepositoryService(com.evolveum.midpoint.repo.api.RepositoryService) LinkedSelectorToFilterTranslator(com.evolveum.midpoint.repo.common.query.LinkedSelectorToFilterTranslator) Experimental(com.evolveum.midpoint.util.annotation.Experimental) Collections.emptySet(java.util.Collections.emptySet) Objectable(com.evolveum.midpoint.prism.Objectable) MiscUtil(com.evolveum.midpoint.util.MiscUtil) Task(com.evolveum.midpoint.task.api.Task) Collectors(java.util.stream.Collectors) InvocationTargetException(java.lang.reflect.InvocationTargetException) Objects(java.util.Objects) Component(org.springframework.stereotype.Component) ExpressionFactory(com.evolveum.midpoint.repo.common.expression.ExpressionFactory) Modifier(java.lang.reflect.Modifier) LensFocusContext(com.evolveum.midpoint.model.impl.lens.LensFocusContext) LinkManager(com.evolveum.midpoint.model.common.LinkManager) ObjectQuery(com.evolveum.midpoint.prism.query.ObjectQuery) NotNull(org.jetbrains.annotations.NotNull) TraceManager(com.evolveum.midpoint.util.logging.TraceManager) PrismReferenceValue(com.evolveum.midpoint.prism.PrismReferenceValue) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) PrismReferenceValue(com.evolveum.midpoint.prism.PrismReferenceValue) LensFocusContext(com.evolveum.midpoint.model.impl.lens.LensFocusContext) Experimental(com.evolveum.midpoint.util.annotation.Experimental) NotNull(org.jetbrains.annotations.NotNull)

Example 3 with Experimental

use of com.evolveum.midpoint.util.annotation.Experimental in project midpoint by Evolveum.

the class AbstractModelIntegrationTest method waitForTaskProgress.

@Experimental
protected Task waitForTaskProgress(String taskOid, long progressToReach, CheckedProducer<Boolean> extraTest, int timeout, int sleepTime, OperationResult waitResult) throws Exception {
    Checker checker = new Checker() {

        @Override
        public boolean check() throws CommonException {
            Task freshRepoTask = taskManager.getTaskWithResult(taskOid, waitResult);
            displaySingleTask("Repo task while waiting for progress reach " + progressToReach, freshRepoTask);
            Long heartbeat = activityBasedTaskHandler.heartbeat(freshRepoTask);
            if (heartbeat != null) {
                displayValue("Heartbeat", heartbeat);
            }
            long progress = heartbeat != null ? heartbeat : freshRepoTask.getLegacyProgress();
            boolean extraTestSuccess = extraTest != null && Boolean.TRUE.equals(extraTest.get());
            return extraTestSuccess || freshRepoTask.getExecutionState() == TaskExecutionStateType.SUSPENDED || freshRepoTask.getExecutionState() == TaskExecutionStateType.CLOSED || progress >= progressToReach;
        }

        @Override
        public void timeout() {
            try {
                Task freshTask = taskManager.getTaskWithResult(taskOid, waitResult);
                OperationResult result = freshTask.getResult();
                logger.debug("Timed-out task:\n{}", freshTask.debugDump());
                assert false : "Timeout (" + timeout + ") while waiting for " + freshTask + " progress. Last result " + result;
            } catch (ObjectNotFoundException | SchemaException e) {
                logger.error("Exception during task refresh: {}", e, e);
            }
        }
    };
    IntegrationTestTools.waitFor("Waiting for task " + taskOid + " progress reaching " + progressToReach, checker, timeout, sleepTime);
    Task freshTask = taskManager.getTaskWithResult(taskOid, waitResult);
    logger.debug("Final task:\n{}", freshTask.debugDump());
    return freshTask;
}
Also used : Task(com.evolveum.midpoint.task.api.Task) AtomicLong(java.util.concurrent.atomic.AtomicLong) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) Experimental(com.evolveum.midpoint.util.annotation.Experimental)

Example 4 with Experimental

use of com.evolveum.midpoint.util.annotation.Experimental in project midpoint by Evolveum.

the class ActivityItemProcessingStatistics method updateStatisticsForSimpleClients.

/**
 * Very ugly hack. We create our own operation result (!!).
 */
@Experimental
private void updateStatisticsForSimpleClients() {
    try {
        activityState.updateProgressAndStatisticsNoCommit();
        if (System.currentTimeMillis() > lastStatisticsUpdatedForSimpleClients + STATISTICS_UPDATE_INTERVAL) {
            lastStatisticsUpdatedForSimpleClients = System.currentTimeMillis();
            activityState.flushPendingTaskModificationsChecked(new OperationResult(OP_UPDATE_STATISTICS_FOR_SIMPLE_CLIENT));
        }
    } catch (ActivityRunException e) {
        LoggingUtils.logUnexpectedException(LOGGER, "Couldn't update statistics for a simple client in {}", e, this);
    }
}
Also used : ActivityRunException(com.evolveum.midpoint.repo.common.activity.run.ActivityRunException) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) Experimental(com.evolveum.midpoint.util.annotation.Experimental)

Example 5 with Experimental

use of com.evolveum.midpoint.util.annotation.Experimental in project midpoint by Evolveum.

the class UcfChangeUtil method createFromAsyncProvisioningRequest.

/**
 * Creates {@link UcfChangeType} from {@link JsonAsyncProvisioningRequest}. Assumes standard change representation.
 * (I.e. not storing replaced values in attributes map.)
 */
@Experimental
public static UcfChangeType createFromAsyncProvisioningRequest(JsonAsyncProvisioningRequest request, String defaultNamespace, PrismContext prismContext) throws SchemaException {
    String operation = request.getOperation();
    QName objectClass = uriToQName(request.getObjectClass(), defaultNamespace);
    if (request.isAdd()) {
        return UcfChangeUtil.createForNewObject(objectClass, getAttributes(request, defaultNamespace), prismContext);
    } else if (request.isModify()) {
        return UcfChangeUtil.create(objectClass, getIdentifiers(request, defaultNamespace), createModifyDelta(request, defaultNamespace, prismContext), prismContext);
    } else if (request.isDelete()) {
        return UcfChangeUtil.create(objectClass, getIdentifiers(request, defaultNamespace), createDeleteDelta(), prismContext);
    } else {
        throw new IllegalArgumentException("Unsupported operation: " + request.getOperation());
    }
}
Also used : QNameUtil.uriToQName(com.evolveum.midpoint.util.QNameUtil.uriToQName) QName(javax.xml.namespace.QName) Experimental(com.evolveum.midpoint.util.annotation.Experimental)

Aggregations

Experimental (com.evolveum.midpoint.util.annotation.Experimental)10 OperationResult (com.evolveum.midpoint.schema.result.OperationResult)6 Task (com.evolveum.midpoint.task.api.Task)4 NotNull (org.jetbrains.annotations.NotNull)4 LensFocusContext (com.evolveum.midpoint.model.impl.lens.LensFocusContext)3 PrismContext (com.evolveum.midpoint.prism.PrismContext)3 SchemaRegistry (com.evolveum.midpoint.prism.schema.SchemaRegistry)3 ObjectTypeUtil (com.evolveum.midpoint.schema.util.ObjectTypeUtil)3 com.evolveum.midpoint.util.exception (com.evolveum.midpoint.util.exception)3 Trace (com.evolveum.midpoint.util.logging.Trace)3 TraceManager (com.evolveum.midpoint.util.logging.TraceManager)3 com.evolveum.midpoint.xml.ns._public.common.common_3 (com.evolveum.midpoint.xml.ns._public.common.common_3)3 java.util (java.util)3 Collectors (java.util.stream.Collectors)3 Autowired (org.springframework.beans.factory.annotation.Autowired)3 LinkManager (com.evolveum.midpoint.model.common.LinkManager)2 ModelExpressionThreadLocalHolder (com.evolveum.midpoint.model.common.expression.ModelExpressionThreadLocalHolder)2 LensContext (com.evolveum.midpoint.model.impl.lens.LensContext)2 EvaluatedAssignmentImpl (com.evolveum.midpoint.model.impl.lens.assignments.EvaluatedAssignmentImpl)2 Objectable (com.evolveum.midpoint.prism.Objectable)2