Search in sources :

Example 1 with MObject

use of com.evolveum.midpoint.repo.sqale.qmodel.object.MObject in project midpoint by Evolveum.

the class SqaleRepositoryService method executeOverwriteObject.

/**
 * Overwrite is more like update than add.
 */
private <T extends ObjectType> String executeOverwriteObject(@NotNull PrismObject<T> newObject) throws SchemaException, RepositoryException, ObjectAlreadyExistsException {
    String oid = newObject.getOid();
    UUID oidUuid = checkOid(oid);
    long opHandle = registerOperationStart(OP_ADD_OBJECT_OVERWRITE, newObject);
    try (JdbcSession jdbcSession = sqlRepoContext.newJdbcSession().startTransaction()) {
        try {
            // noinspection ConstantConditions
            RootUpdateContext<T, QObject<MObject>, MObject> updateContext = prepareUpdateContext(jdbcSession, newObject.getCompileTimeClass(), oidUuid);
            PrismObject<T> prismObject = updateContext.getPrismObject();
            // no precondition check for overwrite
            invokeConflictWatchers(w -> w.beforeModifyObject(prismObject));
            newObject.setUserData(RepositoryService.KEY_ORIGINAL_OBJECT, prismObject.clone());
            ObjectDelta<T> delta = prismObject.diff(newObject, EquivalenceStrategy.LITERAL);
            Collection<? extends ItemDelta<?, ?>> modifications = delta.getModifications();
            logger.trace("overwriteAddObjectAttempt: originalOid={}, modifications={}", oid, modifications);
            Collection<? extends ItemDelta<?, ?>> executedModifications = updateContext.execute(modifications, false);
            replaceObject(updateContext, updateContext.getPrismObject());
            if (!executedModifications.isEmpty()) {
                invokeConflictWatchers((w) -> w.afterModifyObject(oid));
            }
            logger.trace("OBJECT after:\n{}", prismObject.debugDumpLazily());
        } catch (ObjectNotFoundException e) {
            // so it is just plain addObject after all
            new AddObjectContext<>(sqlRepoContext, newObject).execute(jdbcSession);
            invokeConflictWatchers((w) -> w.afterAddObject(oid, newObject));
        }
        jdbcSession.commit();
        return oid;
    } catch (RuntimeException e) {
        SqaleUtils.handlePostgresException(e);
        throw e;
    } finally {
        registerOperationFinish(opHandle);
    }
}
Also used : Connection(java.sql.Connection) com.evolveum.midpoint.prism.query(com.evolveum.midpoint.prism.query) com.evolveum.midpoint.repo.sqlbase(com.evolveum.midpoint.repo.sqlbase) QOrgClosure(com.evolveum.midpoint.repo.sqale.qmodel.org.QOrgClosure) Autowired(org.springframework.beans.factory.annotation.Autowired) QueryTableMapping(com.evolveum.midpoint.repo.sqlbase.mapping.QueryTableMapping) com.evolveum.midpoint.util.exception(com.evolveum.midpoint.util.exception) InternalsConfig(com.evolveum.midpoint.schema.internals.InternalsConfig) OperationResultStatus(com.evolveum.midpoint.schema.result.OperationResultStatus) S_MatchingRuleEntry(com.evolveum.midpoint.prism.query.builder.S_MatchingRuleEntry) com.evolveum.midpoint.repo.api(com.evolveum.midpoint.repo.api) com.evolveum.midpoint.prism(com.evolveum.midpoint.prism) ObjectQueryUtil(com.evolveum.midpoint.schema.util.ObjectQueryUtil) XmlTypeConverter(com.evolveum.midpoint.prism.xml.XmlTypeConverter) S_ConditionEntry(com.evolveum.midpoint.prism.query.builder.S_ConditionEntry) ObjectDelta(com.evolveum.midpoint.prism.delta.ObjectDelta) RootUpdateContext(com.evolveum.midpoint.repo.sqale.update.RootUpdateContext) Collectors(java.util.stream.Collectors) StandardCharsets(java.nio.charset.StandardCharsets) Objects(java.util.Objects) Nullable(org.jetbrains.annotations.Nullable) Expressions(com.querydsl.core.types.dsl.Expressions) MObject(com.evolveum.midpoint.repo.sqale.qmodel.object.MObject) PropertyDelta(com.evolveum.midpoint.prism.delta.PropertyDelta) QName(javax.xml.namespace.QName) NotNull(org.jetbrains.annotations.NotNull) FocusTypeUtil(com.evolveum.midpoint.schema.util.FocusTypeUtil) Tuple(com.querydsl.core.Tuple) FlexibleRelationalPathBase(com.evolveum.midpoint.repo.sqlbase.querydsl.FlexibleRelationalPathBase) com.evolveum.midpoint.schema(com.evolveum.midpoint.schema) java.util(java.util) com.evolveum.midpoint.xml.ns._public.common.common_3(com.evolveum.midpoint.xml.ns._public.common.common_3) ObjectFilterExpressionEvaluator(com.evolveum.midpoint.repo.api.query.ObjectFilterExpressionEvaluator) AddObjectContext(com.evolveum.midpoint.repo.sqale.update.AddObjectContext) CryptoUtil(com.evolveum.midpoint.common.crypto.CryptoUtil) SchemaConstants(com.evolveum.midpoint.schema.constants.SchemaConstants) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) ItemDeltaCollectionsUtil(com.evolveum.midpoint.prism.delta.ItemDeltaCollectionsUtil) Trace(com.evolveum.midpoint.util.logging.Trace) ObjectUtils.defaultIfNull(org.apache.commons.lang3.ObjectUtils.defaultIfNull) Path(com.querydsl.core.types.Path) PrettyPrinter(com.evolveum.midpoint.util.PrettyPrinter) QOrgMapping(com.evolveum.midpoint.repo.sqale.qmodel.org.QOrgMapping) ItemDelta(com.evolveum.midpoint.prism.delta.ItemDelta) QObjectReferenceMapping(com.evolveum.midpoint.repo.sqale.qmodel.ref.QObjectReferenceMapping) Strings(com.google.common.base.Strings) SQLException(java.sql.SQLException) EquivalenceStrategy(com.evolveum.midpoint.prism.equivalence.EquivalenceStrategy) ObjectTypeUtil(com.evolveum.midpoint.schema.util.ObjectTypeUtil) MObjectType(com.evolveum.midpoint.repo.sqale.qmodel.object.MObjectType) SQLQuery(com.querydsl.sql.SQLQuery) QObjectReference(com.evolveum.midpoint.repo.sqale.qmodel.ref.QObjectReference) PolyString(com.evolveum.midpoint.prism.polystring.PolyString) SqaleTableMapping(com.evolveum.midpoint.repo.sqale.mapping.SqaleTableMapping) QObject(com.evolveum.midpoint.repo.sqale.qmodel.object.QObject) ObjectArrays(com.google.common.collect.ObjectArrays) InternalMonitor(com.evolveum.midpoint.schema.internals.InternalMonitor) QOrg(com.evolveum.midpoint.repo.sqale.qmodel.org.QOrg) SqlPerformanceMonitorImpl(com.evolveum.midpoint.repo.sqlbase.perfmon.SqlPerformanceMonitorImpl) ItemPath(com.evolveum.midpoint.prism.path.ItemPath) Consumer(java.util.function.Consumer) Validate(org.apache.commons.lang3.Validate) Driver(java.sql.Driver) SearchFilterType(com.evolveum.prism.xml.ns._public.query_3.SearchFilterType) DriverManager(java.sql.DriverManager) AddObjectContext(com.evolveum.midpoint.repo.sqale.update.AddObjectContext) MObject(com.evolveum.midpoint.repo.sqale.qmodel.object.MObject) PolyString(com.evolveum.midpoint.prism.polystring.PolyString) QObject(com.evolveum.midpoint.repo.sqale.qmodel.object.QObject)

Example 2 with MObject

use of com.evolveum.midpoint.repo.sqale.qmodel.object.MObject in project midpoint by Evolveum.

the class SqaleRepoModifyObjectTest method test952ReindexFixingColumnsOutOfSync.

@Test
public void test952ReindexFixingColumnsOutOfSync() throws SchemaException, ObjectNotFoundException, ObjectAlreadyExistsException {
    OperationResult result = createOperationResult();
    given("user existing in the repository");
    String name = "user" + getTestNumber();
    UserType user = new UserType(prismContext).name(name).emailAddress(name + "@goodmail.com").subtype("subtype-1").subtype("subtype-2").assignment(new AssignmentType(prismContext).order(1));
    String oid = repositoryService.addObject(user.asPrismObject(), null, result);
    and("object aggregate is modified in the DB (simulating out-of-sync data)");
    QAssignment<MObject> a = QAssignmentMapping.getAssignmentMapping().defaultAlias();
    UUID oidUuid = UUID.fromString(oid);
    try (JdbcSession jdbcSession = startTransaction()) {
        jdbcSession.newInsert(a).set(a.ownerOid, oidUuid).set(a.cid, -1L).set(a.containerType, MContainerType.ASSIGNMENT).set(a.ownerType, MObjectType.USER).set(a.orderValue, // test number, hopefully unique
        952).execute();
        QUser u = QUserMapping.getUserMapping().defaultAlias();
        jdbcSession.newUpdate(u).set(u.emailAddress, "bad@badmail.com").set(u.subtypes, new String[] { "subtype-952" }).set(u.costCenter, "invasive value").where(u.oid.eq(oidUuid)).execute();
        jdbcSession.commit();
    }
    and("search provides obviously bad results");
    assertThat(repositorySearchObjects(UserType.class, prismContext.queryFor(UserType.class).item(UserType.F_EMAIL_ADDRESS).eq(name + "@goodmail.com").build(), result)).isEmpty();
    assertThat(repositorySearchObjects(UserType.class, prismContext.queryFor(UserType.class).item(UserType.F_COST_CENTER).eq("invasive value").build(), result)).hasSize(// can find by bad value, that's wrong
    1);
    assertThat(repositorySearchObjects(UserType.class, prismContext.queryFor(UserType.class).item(UserType.F_ASSIGNMENT, AssignmentType.F_ORDER).eq(952).build(), result)).hasSize(// can find by wrong assignment
    1);
    assertThat(repositorySearchObjects(UserType.class, prismContext.queryFor(UserType.class).item(UserType.F_SUBTYPE).eq("subtype-952").build(), result)).hasSize(// can find by wrong subtype
    1);
    when("reindex is called to fix it");
    repositoryService.modifyObject(UserType.class, oid, Collections.emptyList(), RepoModifyOptions.createForceReindex(), result);
    then("the searches work as expected");
    assertThat(repositorySearchObjects(UserType.class, prismContext.queryFor(UserType.class).item(UserType.F_EMAIL_ADDRESS).eq(name + "@goodmail.com").build(), result)).hasSize(1).extracting(o -> o.getOid()).containsExactlyInAnyOrder(// can find by the original mail, that's good!
    oid);
    assertThat(repositorySearchObjects(UserType.class, prismContext.queryFor(UserType.class).item(UserType.F_COST_CENTER).eq("invasive value").build(), result)).isEmpty();
    assertThat(repositorySearchObjects(UserType.class, prismContext.queryFor(UserType.class).item(UserType.F_ASSIGNMENT, AssignmentType.F_ORDER).eq(952).build(), result)).isEmpty();
    assertThat(repositorySearchObjects(UserType.class, prismContext.queryFor(UserType.class).item(UserType.F_ASSIGNMENT, AssignmentType.F_ORDER).eq(1).build(), result)).extracting(o -> o.getOid()).contains(// good, can have more results, but our user is there too
    oid);
    and("database values are as good as new");
    MUser userRow = selectObjectByOid(QUser.class, oid);
    // tested by search above as well
    assertThat(userRow.emailAddress).isEqualTo(name + "@goodmail.com");
    assertThat(userRow.costCenter).isNull();
    assertThat(userRow.subtypes).containsExactlyInAnyOrder("subtype-1", "subtype-2");
    List<MAssignment> assRows = select(a, a.ownerOid.eq(oidUuid));
    // single row with proper order is returned, wrong row is gone
    assertThat(assRows).hasSize(1);
    assertThat(assRows.get(0).orderValue).isEqualTo(1);
}
Also used : JdbcSession(com.evolveum.midpoint.repo.sqlbase.JdbcSession) QService(com.evolveum.midpoint.repo.sqale.qmodel.role.QService) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) SqaleUtils(com.evolveum.midpoint.repo.sqale.SqaleUtils) MService(com.evolveum.midpoint.repo.sqale.qmodel.role.MService) JdbcSession(com.evolveum.midpoint.repo.sqlbase.JdbcSession) SchemaException(com.evolveum.midpoint.util.exception.SchemaException) Test(org.testng.annotations.Test) BigDecimal(java.math.BigDecimal) Assertions(org.assertj.core.api.Assertions) MReference(com.evolveum.midpoint.repo.sqale.qmodel.ref.MReference) SelectorOptions(com.evolveum.midpoint.schema.SelectorOptions) QUser(com.evolveum.midpoint.repo.sqale.qmodel.focus.QUser) ObjectDelta(com.evolveum.midpoint.prism.delta.ObjectDelta) ObjectNotFoundException(com.evolveum.midpoint.util.exception.ObjectNotFoundException) BeforeClass(org.testng.annotations.BeforeClass) MContainerType(com.evolveum.midpoint.repo.sqale.qmodel.common.MContainerType) MiscUtil(com.evolveum.midpoint.util.MiscUtil) ObjectAlreadyExistsException(com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException) Instant(java.time.Instant) Collectors(java.util.stream.Collectors) StandardCharsets(java.nio.charset.StandardCharsets) MTask(com.evolveum.midpoint.repo.sqale.qmodel.task.MTask) QConnector(com.evolveum.midpoint.repo.sqale.qmodel.connector.QConnector) SystemException(com.evolveum.midpoint.util.exception.SystemException) PolyStringType(com.evolveum.prism.xml.ns._public.types_3.PolyStringType) MObject(com.evolveum.midpoint.repo.sqale.qmodel.object.MObject) QUserMapping(com.evolveum.midpoint.repo.sqale.qmodel.focus.QUserMapping) QName(javax.xml.namespace.QName) NotNull(org.jetbrains.annotations.NotNull) java.util(java.util) com.evolveum.midpoint.xml.ns._public.common.common_3(com.evolveum.midpoint.xml.ns._public.common.common_3) Item(com.evolveum.midpoint.prism.Item) Jsonb(com.evolveum.midpoint.repo.sqale.jsonb.Jsonb) SchemaConstants(com.evolveum.midpoint.schema.constants.SchemaConstants) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) Assert.assertEquals(org.testng.Assert.assertEquals) SqaleRepoBaseTest(com.evolveum.midpoint.repo.sqale.SqaleRepoBaseTest) ItemDelta(com.evolveum.midpoint.prism.delta.ItemDelta) QObjectReferenceMapping(com.evolveum.midpoint.repo.sqale.qmodel.ref.QObjectReferenceMapping) MShadow(com.evolveum.midpoint.repo.sqale.qmodel.shadow.MShadow) Assertions.assertThatThrownBy(org.assertj.core.api.Assertions.assertThatThrownBy) ObjectTypeUtil(com.evolveum.midpoint.schema.util.ObjectTypeUtil) TestUtil(com.evolveum.midpoint.test.util.TestUtil) Comparator.comparing(java.util.Comparator.comparing) RepositoryService(com.evolveum.midpoint.repo.api.RepositoryService) MObjectType(com.evolveum.midpoint.repo.sqale.qmodel.object.MObjectType) QObjectReference(com.evolveum.midpoint.repo.sqale.qmodel.ref.QObjectReference) PolyString(com.evolveum.midpoint.prism.polystring.PolyString) com.evolveum.midpoint.repo.sqale.qmodel.assignment(com.evolveum.midpoint.repo.sqale.qmodel.assignment) PrismObject(com.evolveum.midpoint.prism.PrismObject) QShadow(com.evolveum.midpoint.repo.sqale.qmodel.shadow.QShadow) MUser(com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser) ItemPath(com.evolveum.midpoint.prism.path.ItemPath) ItemName(com.evolveum.midpoint.prism.path.ItemName) RepoModifyOptions(com.evolveum.midpoint.repo.api.RepoModifyOptions) PrismContainerValue(com.evolveum.midpoint.prism.PrismContainerValue) SearchResultList(com.evolveum.midpoint.schema.SearchResultList) GetOperationOptions(com.evolveum.midpoint.schema.GetOperationOptions) Assert.assertTrue(org.testng.Assert.assertTrue) ObjectQuery(com.evolveum.midpoint.prism.query.ObjectQuery) QTask(com.evolveum.midpoint.repo.sqale.qmodel.task.QTask) com.evolveum.midpoint.repo.sqale.qmodel.accesscert(com.evolveum.midpoint.repo.sqale.qmodel.accesscert) QUser(com.evolveum.midpoint.repo.sqale.qmodel.focus.QUser) MObject(com.evolveum.midpoint.repo.sqale.qmodel.object.MObject) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) PolyString(com.evolveum.midpoint.prism.polystring.PolyString) MUser(com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser) Test(org.testng.annotations.Test) SqaleRepoBaseTest(com.evolveum.midpoint.repo.sqale.SqaleRepoBaseTest)

Example 3 with MObject

use of com.evolveum.midpoint.repo.sqale.qmodel.object.MObject in project midpoint by Evolveum.

the class SqaleRepositoryService method readByOid.

/**
 * Read object using provided {@link JdbcSession} as a part of already running transaction.
 */
private <S extends ObjectType> S readByOid(@NotNull JdbcSession jdbcSession, @NotNull Class<S> schemaType, @NotNull UUID oid, Collection<SelectorOptions<GetOperationOptions>> options) throws SchemaException, ObjectNotFoundException {
    SqaleTableMapping<S, QObject<MObject>, MObject> rootMapping = sqlRepoContext.getMappingBySchemaType(schemaType);
    QObject<MObject> root = rootMapping.defaultAlias();
    Tuple result = jdbcSession.newQuery().from(root).select(rootMapping.selectExpressions(root, options)).where(root.oid.eq(oid)).fetchOne();
    if (result == null || result.get(root.fullObject) == null) {
        throw new ObjectNotFoundException(schemaType, oid.toString());
    }
    return rootMapping.toSchemaObject(result, root, options, jdbcSession, false);
}
Also used : MObject(com.evolveum.midpoint.repo.sqale.qmodel.object.MObject) QObject(com.evolveum.midpoint.repo.sqale.qmodel.object.QObject) Tuple(com.querydsl.core.Tuple)

Example 4 with MObject

use of com.evolveum.midpoint.repo.sqale.qmodel.object.MObject in project midpoint by Evolveum.

the class SqaleRepositoryService method executeGetVersion.

private <T extends ObjectType> String executeGetVersion(Class<T> type, UUID oid) throws ObjectNotFoundException {
    long opHandle = registerOperationStart(OP_GET_VERSION, type);
    try (JdbcSession jdbcSession = sqlRepoContext.newJdbcSession().startReadOnlyTransaction()) {
        SqaleTableMapping<T, QObject<MObject>, MObject> rootMapping = sqlRepoContext.getMappingBySchemaType(type);
        QObject<MObject> root = rootMapping.defaultAlias();
        Integer version = jdbcSession.newQuery().select(root.version).from(root).where(root.oid.eq(oid)).fetchOne();
        if (version == null) {
            throw new ObjectNotFoundException(type, oid.toString());
        }
        String versionString = version.toString();
        invokeConflictWatchers((w) -> w.afterGetVersion(oid.toString(), versionString));
        return versionString;
    } finally {
        registerOperationFinish(opHandle);
    }
}
Also used : MObject(com.evolveum.midpoint.repo.sqale.qmodel.object.MObject) PolyString(com.evolveum.midpoint.prism.polystring.PolyString) QObject(com.evolveum.midpoint.repo.sqale.qmodel.object.QObject)

Example 5 with MObject

use of com.evolveum.midpoint.repo.sqale.qmodel.object.MObject in project midpoint by Evolveum.

the class OrgFilterProcessor method process.

@Override
public Predicate process(OrgFilter filter) throws QueryException {
    // necessary for lazy refresh of org closure
    context.markContainsOrgFilter();
    FlexibleRelationalPathBase<?> path = context.root();
    if (!(path instanceof QObject)) {
        throw new QueryException("Org filter can only be used for objects," + " not for path " + path + " of type " + path.getClass());
    }
    QObject<?> objectPath = (QObject<?>) path;
    if (filter.isRoot()) {
        QObjectReference<MObject> ref = getNewRefAlias();
        return subQuery(ref).where(ref.ownerOid.eq(objectPath.oid)).notExists();
    }
    if (filter.getOrgRef() == null) {
        throw new QueryException("No organization reference defined in the search query.");
    }
    String oidParam = filter.getOrgRef().getOid();
    if (oidParam == null) {
        throw new QueryException("No oid specified in organization reference " + filter.getOrgRef().debugDump());
    }
    QName relation = filter.getOrgRef().getRelation();
    // null means ANY (not "default") here, so we only search/normalize non-nulls
    Integer relationId = relation != null ? context.repositoryContext().searchCachedRelationId(relation) : null;
    if (filter.getScope() == OrgFilter.Scope.ONE_LEVEL) {
        QObjectReference<MObject> ref = getNewRefAlias();
        SQLQuery<?> subQuery = subQuery(ref).where(ref.ownerOid.eq(objectPath.oid).and(ref.targetOid.eq(UUID.fromString(oidParam))));
        if (relationId != null) {
            subQuery.where(ref.relationId.eq(relationId));
        }
        return subQuery.exists();
    } else if (filter.getScope() == OrgFilter.Scope.SUBTREE) {
        QObjectReference<MObject> ref = getNewRefAlias();
        QOrgClosure oc = getNewClosureAlias();
        SQLQuery<?> subQuery = subQuery(ref).join(oc).on(oc.descendantOid.eq(ref.targetOid)).where(ref.ownerOid.eq(objectPath.oid).and(oc.ancestorOid.eq(UUID.fromString(oidParam))));
        if (relationId != null) {
            subQuery.where(ref.relationId.eq(relationId));
        }
        return subQuery.exists();
    } else if (filter.getScope() == OrgFilter.Scope.ANCESTORS) {
        QOrgClosure oc = getNewClosureAlias();
        return subQuery(oc).where(oc.ancestorOid.eq(objectPath.oid).and(oc.descendantOid.eq(UUID.fromString(oidParam))).and(oc.ancestorOid.ne(oc.descendantOid))).exists();
    } else {
        throw new QueryException("Unknown scope if org filter: " + filter);
    }
}
Also used : QName(javax.xml.namespace.QName) MObject(com.evolveum.midpoint.repo.sqale.qmodel.object.MObject) SQLQuery(com.querydsl.sql.SQLQuery) QObject(com.evolveum.midpoint.repo.sqale.qmodel.object.QObject) QOrgClosure(com.evolveum.midpoint.repo.sqale.qmodel.org.QOrgClosure) QueryException(com.evolveum.midpoint.repo.sqlbase.QueryException) QObjectReference(com.evolveum.midpoint.repo.sqale.qmodel.ref.QObjectReference)

Aggregations

MObject (com.evolveum.midpoint.repo.sqale.qmodel.object.MObject)6 QObject (com.evolveum.midpoint.repo.sqale.qmodel.object.QObject)4 PolyString (com.evolveum.midpoint.prism.polystring.PolyString)3 MObjectType (com.evolveum.midpoint.repo.sqale.qmodel.object.MObjectType)3 QObjectReference (com.evolveum.midpoint.repo.sqale.qmodel.ref.QObjectReference)3 OperationResult (com.evolveum.midpoint.schema.result.OperationResult)3 ItemDelta (com.evolveum.midpoint.prism.delta.ItemDelta)2 ObjectDelta (com.evolveum.midpoint.prism.delta.ObjectDelta)2 ItemPath (com.evolveum.midpoint.prism.path.ItemPath)2 ObjectQuery (com.evolveum.midpoint.prism.query.ObjectQuery)2 SqaleRepoBaseTest (com.evolveum.midpoint.repo.sqale.SqaleRepoBaseTest)2 QOrgClosure (com.evolveum.midpoint.repo.sqale.qmodel.org.QOrgClosure)2 QObjectReferenceMapping (com.evolveum.midpoint.repo.sqale.qmodel.ref.QObjectReferenceMapping)2 QName (javax.xml.namespace.QName)2 Test (org.testng.annotations.Test)2 CryptoUtil (com.evolveum.midpoint.common.crypto.CryptoUtil)1 com.evolveum.midpoint.prism (com.evolveum.midpoint.prism)1 Item (com.evolveum.midpoint.prism.Item)1 PrismContainerValue (com.evolveum.midpoint.prism.PrismContainerValue)1 PrismObject (com.evolveum.midpoint.prism.PrismObject)1