Search in sources :

Example 16 with Holder

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

the class MidpointFunctionsImpl method isUniqueAccountValue.

private <T> boolean isUniqueAccountValue(ResourceType resourceType, final ShadowType shadowType, QName attributeName, T attributeValue, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException, CommunicationException, ConfigurationException, SecurityViolationException, ExpressionEvaluationException {
    Validate.notNull(resourceType, "Null resource");
    Validate.notNull(shadowType, "Null shadow");
    Validate.notNull(attributeName, "Null attribute name");
    Validate.notNull(attributeValue, "Null attribute value");
    ObjectQuery query = createAttributeQuery(resourceType, attributeName, attributeValue);
    LOGGER.trace("Determining uniqueness of attribute {} using query:\n{}", attributeName, query.debugDumpLazily());
    final Holder<Boolean> isUniqueHolder = new Holder<>(true);
    ResultHandler<ShadowType> handler = (object, parentResult) -> {
        if (shadowType.getOid() == null) {
            // We have found a conflicting object
            isUniqueHolder.setValue(false);
            return false;
        } else {
            if (shadowType.getOid().equals(object.getOid())) {
                // We have found ourselves. No conflict (yet). Just go on.
                return true;
            } else {
                // We have found someone else. Conflict.
                isUniqueHolder.setValue(false);
                return false;
            }
        }
    };
    modelObjectResolver.searchIterative(ShadowType.class, query, createReadOnlyCollection(), handler, task, result);
    return isUniqueHolder.getValue();
}
Also used : GetOperationOptions.createReadOnlyCollection(com.evolveum.midpoint.schema.GetOperationOptions.createReadOnlyCollection) ObjectDeltaType(com.evolveum.prism.xml.ns._public.types_3.ObjectDeltaType) StringUtils(org.apache.commons.lang.StringUtils) SynchronizationServiceUtils(com.evolveum.midpoint.model.impl.sync.SynchronizationServiceUtils) ObjectTypeUtil.createObjectRef(com.evolveum.midpoint.schema.util.ObjectTypeUtil.createObjectRef) XMLInputFactory(javax.xml.stream.XMLInputFactory) SecurityContextManager(com.evolveum.midpoint.security.api.SecurityContextManager) Autowired(org.springframework.beans.factory.annotation.Autowired) ModelExpressionThreadLocalHolder(com.evolveum.midpoint.model.common.expression.ModelExpressionThreadLocalHolder) com.evolveum.midpoint.util.exception(com.evolveum.midpoint.util.exception) OperationResultStatus(com.evolveum.midpoint.schema.result.OperationResultStatus) XMLStreamConstants(javax.xml.stream.XMLStreamConstants) RecomputeTriggerHandler(com.evolveum.midpoint.model.impl.trigger.RecomputeTriggerHandler) LensContext(com.evolveum.midpoint.model.impl.lens.LensContext) ByteArrayInputStream(java.io.ByteArrayInputStream) XMLEvent(javax.xml.stream.events.XMLEvent) XMLStreamException(javax.xml.stream.XMLStreamException) MidpointFunctions(com.evolveum.midpoint.model.api.expr.MidpointFunctions) com.evolveum.midpoint.prism(com.evolveum.midpoint.prism) XmlTypeConverter(com.evolveum.midpoint.prism.xml.XmlTypeConverter) Holder(com.evolveum.midpoint.util.Holder) Experimental(com.evolveum.midpoint.util.annotation.Experimental) PasswordCapabilityType(com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.PasswordCapabilityType) ScriptExpressionEvaluationContext(com.evolveum.midpoint.model.common.expression.script.ScriptExpressionEvaluationContext) Producer(com.evolveum.midpoint.util.Producer) Task(com.evolveum.midpoint.task.api.Task) Collectors(java.util.stream.Collectors) ConstantsManager(com.evolveum.midpoint.model.common.ConstantsManager) StandardCharsets(java.nio.charset.StandardCharsets) ExpressionFactory(com.evolveum.midpoint.repo.common.expression.ExpressionFactory) PolyStringType(com.evolveum.prism.xml.ns._public.types_3.PolyStringType) ProvisioningService(com.evolveum.midpoint.provisioning.api.ProvisioningService) com.evolveum.midpoint.prism.delta(com.evolveum.midpoint.prism.delta) QName(javax.xml.namespace.QName) NotNull(org.jetbrains.annotations.NotNull) Validate(org.apache.commons.lang.Validate) ProtectedStringType(com.evolveum.prism.xml.ns._public.types_3.ProtectedStringType) com.evolveum.midpoint.schema(com.evolveum.midpoint.schema) java.util(java.util) ArchetypeManager(com.evolveum.midpoint.model.common.ArchetypeManager) TriggerCreatorGlobalState(com.evolveum.midpoint.model.impl.expr.triggerSetter.TriggerCreatorGlobalState) com.evolveum.midpoint.xml.ns._public.common.common_3(com.evolveum.midpoint.xml.ns._public.common.common_3) ModelBeans(com.evolveum.midpoint.model.impl.ModelBeans) SchemaConstants(com.evolveum.midpoint.schema.constants.SchemaConstants) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) OptimizingTriggerCreatorImpl(com.evolveum.midpoint.model.impl.expr.triggerSetter.OptimizingTriggerCreatorImpl) BooleanUtils(org.apache.commons.lang3.BooleanUtils) Trace(com.evolveum.midpoint.util.logging.Trace) TaskManager(com.evolveum.midpoint.task.api.TaskManager) LocalizationService(com.evolveum.midpoint.common.LocalizationService) MessageWrapper(com.evolveum.midpoint.schema.messaging.MessageWrapper) EncryptionException(com.evolveum.midpoint.prism.crypto.EncryptionException) CredentialsCapabilityType(com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.CredentialsCapabilityType) com.evolveum.midpoint.model.api(com.evolveum.midpoint.model.api) com.evolveum.midpoint.model.api.context(com.evolveum.midpoint.model.api.context) Qualifier(org.springframework.beans.factory.annotation.Qualifier) EndElement(javax.xml.stream.events.EndElement) SynchronizationExpressionsEvaluator(com.evolveum.midpoint.model.impl.sync.SynchronizationExpressionsEvaluator) LocalizableMessage(com.evolveum.midpoint.util.LocalizableMessage) StartElement(javax.xml.stream.events.StartElement) RepositoryService(com.evolveum.midpoint.repo.api.RepositoryService) PATH_CREDENTIALS_PASSWORD(com.evolveum.midpoint.schema.constants.SchemaConstants.PATH_CREDENTIALS_PASSWORD) RUNNABLE(com.evolveum.midpoint.xml.ns._public.common.common_3.TaskExecutionStateType.RUNNABLE) PATH_CREDENTIALS_PASSWORD_VALUE(com.evolveum.midpoint.schema.constants.SchemaConstants.PATH_CREDENTIALS_PASSWORD_VALUE) PolyString(com.evolveum.midpoint.prism.polystring.PolyString) XMLEventReader(javax.xml.stream.XMLEventReader) OptimizingTriggerCreator(com.evolveum.midpoint.model.api.expr.OptimizingTriggerCreator) IOException(java.io.IOException) SynchronizationContext(com.evolveum.midpoint.model.impl.sync.SynchronizationContext) ResourceObjectTypeDefinition(com.evolveum.midpoint.schema.processor.ResourceObjectTypeDefinition) ItemPath(com.evolveum.midpoint.prism.path.ItemPath) S_ItemEntry(com.evolveum.midpoint.prism.delta.builder.S_ItemEntry) Component(org.springframework.stereotype.Component) LensProjectionContext(com.evolveum.midpoint.model.impl.lens.LensProjectionContext) MidPointPrincipal(com.evolveum.midpoint.security.api.MidPointPrincipal) ItemName(com.evolveum.midpoint.prism.path.ItemName) com.evolveum.midpoint.schema.processor(com.evolveum.midpoint.schema.processor) HttpConnectionInformation(com.evolveum.midpoint.security.api.HttpConnectionInformation) Protector(com.evolveum.midpoint.prism.crypto.Protector) SecurityUtil(com.evolveum.midpoint.security.api.SecurityUtil) Characters(javax.xml.stream.events.Characters) MidPointConstants(com.evolveum.midpoint.schema.constants.MidPointConstants) ModelObjectResolver(com.evolveum.midpoint.model.impl.ModelObjectResolver) LensFocusContext(com.evolveum.midpoint.model.impl.lens.LensFocusContext) ObjectQuery(com.evolveum.midpoint.prism.query.ObjectQuery) Collections(java.util.Collections) TraceManager(com.evolveum.midpoint.util.logging.TraceManager) InputStream(java.io.InputStream) com.evolveum.midpoint.schema.util(com.evolveum.midpoint.schema.util) ModelExpressionThreadLocalHolder(com.evolveum.midpoint.model.common.expression.ModelExpressionThreadLocalHolder) Holder(com.evolveum.midpoint.util.Holder) ObjectQuery(com.evolveum.midpoint.prism.query.ObjectQuery)

Example 17 with Holder

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

the class ProjectionsLoadOperation method getOrCreateContextForValueToAdd.

private void getOrCreateContextForValueToAdd(PrismReferenceValue refVal, OperationResult result) throws SchemaException, ObjectNotFoundException, CommunicationException, ConfigurationException, ExpressionEvaluationException, SecurityViolationException, PolicyViolationException {
    String oid = refVal.getOid();
    LensProjectionContext projectionContext;
    Holder<Boolean> objectDoesExistInRepoHolder = new Holder<>(false);
    if (oid == null) {
        projectionContext = getOrCreateContextForValueToAddNoOid(refVal, result);
    } else {
        projectionContext = getOrCreateProjectionForValueToAddWithOid(refVal, objectDoesExistInRepoHolder, result);
    }
    if (context.isDoReconciliationForAllProjections() && objectDoesExistInRepoHolder.getValue()) {
        projectionContext.setDoReconciliation(true);
    }
    projectionContext.setFresh(true);
}
Also used : LensProjectionContext(com.evolveum.midpoint.model.impl.lens.LensProjectionContext) Holder(com.evolveum.midpoint.util.Holder)

Example 18 with Holder

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

the class TestConnectorMultiInstance method test125ReadJackDummyYellowTwoBlocking.

/**
 * Block two read operations. Make sure that new connector instance is created.
 */
@Test
public void test125ReadJackDummyYellowTwoBlocking() throws Exception {
    dummyResourceYellow.setBlockOperations(true);
    final Holder<PrismObject<ShadowType>> shadowHolder1 = new Holder<>();
    final Holder<PrismObject<ShadowType>> shadowHolder2 = new Holder<>();
    // WHEN
    Thread t1 = executeInNewThread("get1", () -> {
        PrismObject<ShadowType> shadow = getShadowModel(accountJackYellowOid);
        logger.trace("Got shadow {}", shadow);
        shadowHolder1.setValue(shadow);
    });
    Thread t2 = executeInNewThread("get2", new FailableRunnable() {

        @Override
        public void run() throws Exception {
            PrismObject<ShadowType> shadow = getShadowModel(accountJackYellowOid);
            logger.trace("Got shadow {}", shadow);
            shadowHolder2.setValue(shadow);
        }
    });
    // Give the new threads a chance to get blocked
    Thread.sleep(500);
    assertConnectorInstances("yellow (blocked)", RESOURCE_DUMMY_YELLOW_OID, 2, 0);
    assertNull("Unexpected shadow 1", shadowHolder1.getValue());
    assertNull("Unexpected shadow 2", shadowHolder2.getValue());
    dummyResourceYellow.unblockAll();
    t1.join();
    t2.join();
    // THEN
    dummyResourceYellow.setBlockOperations(false);
    PrismObject<ShadowType> shadowYellow1 = shadowHolder1.getValue();
    assertNotNull("No shadow 1", shadowHolder1.getValue());
    display("Shadow yellow 1", shadowYellow1);
    PrismObject<ShadowType> shadowYellow2 = shadowHolder2.getValue();
    assertNotNull("No shadow 2", shadowHolder2.getValue());
    display("Shadow yellow 2", shadowYellow2);
    assertConnectorInstances("yellow", RESOURCE_DUMMY_YELLOW_OID, 0, 2);
    assertConnectorToStringDifferent(shadowYellow2, dummyResourceCtlYellow, getConnectorToString(shadowYellow1, dummyResourceCtlYellow));
    assertConnectorStaticVal(shadowYellow1, dummyResourceCtlYellow, initialConnectorStaticVal);
    assertConnectorStaticVal(shadowYellow2, dummyResourceCtlYellow, initialConnectorStaticVal);
    assertDummyAccount(RESOURCE_DUMMY_YELLOW_NAME, ACCOUNT_JACK_DUMMY_USERNAME, ACCOUNT_JACK_DUMMY_FULLNAME, true);
}
Also used : PrismObject(com.evolveum.midpoint.prism.PrismObject) FailableRunnable(com.evolveum.midpoint.util.FailableRunnable) ShadowType(com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType) Holder(com.evolveum.midpoint.util.Holder) Test(org.testng.annotations.Test)

Example 19 with Holder

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

the class AbstractSecurityTest method dropPowerOfAttorneyAllow.

protected MidPointPrincipal dropPowerOfAttorneyAllow() throws Exception {
    Holder<MidPointPrincipal> principalHolder = new Holder<>();
    assertAllow("assumePowerOfAttorney", (task, result) -> {
        MidPointPrincipal attorneyPrincipal = modelInteractionService.dropPowerOfAttorney(task, result);
        principalHolder.setValue(attorneyPrincipal);
    });
    return principalHolder.getValue();
}
Also used : Holder(com.evolveum.midpoint.util.Holder) MidPointPrincipal(com.evolveum.midpoint.security.api.MidPointPrincipal)

Example 20 with Holder

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

the class ConnectorInstanceConnIdImpl method count.

@Override
public int count(ResourceObjectDefinition objectDefinition, final ObjectQuery query, PagedSearchCapabilityType pagedSearchCapabilityType, UcfExecutionContext ctx, OperationResult parentResult) throws CommunicationException, GenericFrameworkException, SchemaException, UnsupportedOperationException {
    // Result type for this operation
    final OperationResult result = parentResult.createSubresult(ConnectorInstance.class.getName() + ".count");
    result.addArbitraryObjectAsParam("objectClass", objectDefinition);
    result.addContext("connector", connectorType);
    if (objectDefinition == null) {
        result.recordFatalError("Object class not defined");
        throw new IllegalArgumentException("objectClass not defined");
    }
    ObjectClass icfObjectClass = objectClassToConnId(objectDefinition);
    final boolean useConnectorPaging = pagedSearchCapabilityType != null;
    if (!useConnectorPaging) {
        throw new UnsupportedOperationException("ConnectorInstanceIcfImpl.count operation is supported only in combination with connector-implemented paging");
    }
    OperationOptionsBuilder optionsBuilder = new OperationOptionsBuilder();
    optionsBuilder.setAttributesToGet(Name.NAME);
    optionsBuilder.setPagedResultsOffset(1);
    optionsBuilder.setPageSize(1);
    if (pagedSearchCapabilityType.getDefaultSortField() != null) {
        String orderByIcfName = connIdNameMapper.convertAttributeNameToConnId(pagedSearchCapabilityType.getDefaultSortField(), objectDefinition, "(default sorting field)");
        boolean isAscending = pagedSearchCapabilityType.getDefaultSortDirection() != OrderDirectionType.DESCENDING;
        optionsBuilder.setSortKeys(new SortKey(orderByIcfName, isAscending));
    }
    OperationOptions options = optionsBuilder.build();
    // Connector operation cannot create result for itself, so we need to
    // create result for it
    OperationResult icfResult = result.createSubresult(ConnectorFacade.class.getName() + ".search");
    icfResult.addArbitraryObjectAsParam("objectClass", icfObjectClass);
    icfResult.addContext("connector", connIdConnectorFacade.getClass());
    int retval;
    InternalMonitor.recordConnectorOperation("search");
    ConnIdOperation operation = recordIcfOperationStart(ctx, ProvisioningOperation.ICF_SEARCH, objectDefinition);
    try {
        Filter filter = convertFilterToIcf(query, objectDefinition);
        final Holder<Integer> fetched = new Holder<>(0);
        ResultsHandler connIdHandler = new ResultsHandler() {

            @Override
            public boolean handle(ConnectorObject connectorObject) {
                // actually, this should execute at most once
                fetched.setValue(fetched.getValue() + 1);
                return false;
            }

            @Override
            public String toString() {
                return "(midPoint counting result handler)";
            }
        };
        LOGGER.trace("Invoking ConnId search operation (to count objects): {}", operation);
        SearchResult searchResult = connIdConnectorFacade.search(icfObjectClass, filter, connIdHandler, options);
        recordIcfOperationEnd(ctx, operation, null);
        if (searchResult == null || searchResult.getRemainingPagedResults() == -1) {
            throw new UnsupportedOperationException("Connector does not seem to support paged searches or does not provide object count information");
        } else {
            retval = fetched.getValue() + searchResult.getRemainingPagedResults();
        }
        icfResult.recordSuccess();
    } catch (IntermediateException inex) {
        recordIcfOperationEnd(ctx, operation, inex);
        SchemaException ex = (SchemaException) inex.getCause();
        icfResult.recordFatalError(ex);
        result.recordFatalError(ex);
        throw ex;
    } catch (UnsupportedOperationException uoe) {
        recordIcfOperationEnd(ctx, operation, uoe);
        icfResult.recordFatalError(uoe);
        result.recordFatalError(uoe);
        throw uoe;
    } catch (Throwable ex) {
        recordIcfOperationEnd(ctx, operation, ex);
        Throwable midpointEx = processConnIdException(ex, this, icfResult);
        result.computeStatus();
        // exception
        if (midpointEx instanceof CommunicationException) {
            throw (CommunicationException) midpointEx;
        } else if (midpointEx instanceof GenericFrameworkException) {
            throw (GenericFrameworkException) midpointEx;
        } else if (midpointEx instanceof SchemaException) {
            throw (SchemaException) midpointEx;
        } else if (midpointEx instanceof RuntimeException) {
            throw (RuntimeException) midpointEx;
        } else if (midpointEx instanceof Error) {
            throw (Error) midpointEx;
        } else {
            throw new SystemException("Got unexpected exception: " + ex.getClass().getName() + ": " + ex.getMessage(), ex);
        }
    }
    if (result.isUnknown()) {
        result.recordSuccess();
    }
    return retval;
}
Also used : OperationResult(com.evolveum.midpoint.schema.result.OperationResult) AsynchronousOperationResult(com.evolveum.midpoint.schema.result.AsynchronousOperationResult) GuardedString(org.identityconnectors.common.security.GuardedString) ConnIdOperation(com.evolveum.midpoint.schema.reporting.ConnIdOperation) Holder(com.evolveum.midpoint.util.Holder) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Filter(org.identityconnectors.framework.common.objects.filter.Filter) ObjectFilter(com.evolveum.midpoint.prism.query.ObjectFilter)

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