From 20ef7b011613b2a77cced3b53528c3c0994c7fb2 Mon Sep 17 00:00:00 2001 From: Richard Richter Date: Mon, 3 May 2021 11:03:55 +0200 Subject: [PATCH] repo-sqale+audit: usage of *RepoContext.getInstance() hidden in mappings --- .../repo/sqale/qmodel/SqaleTableMapping.java | 25 ++++++++------ .../sqale/qmodel/object/QObjectMapping.java | 5 ++- .../sql/audit/mapping/AuditTableMapping.java | 3 +- .../sql/audit/mapping/QAuditDeltaMapping.java | 6 ++-- .../mapping/QAuditEventRecordMapping.java | 6 ++-- .../sqlbase/mapping/QueryTableMapping.java | 34 +++++++++++++++++++ 6 files changed, 56 insertions(+), 23 deletions(-) diff --git a/repo/repo-sqale/src/main/java/com/evolveum/midpoint/repo/sqale/qmodel/SqaleTableMapping.java b/repo/repo-sqale/src/main/java/com/evolveum/midpoint/repo/sqale/qmodel/SqaleTableMapping.java index 5b26fb0fa1b..274b7089838 100644 --- a/repo/repo-sqale/src/main/java/com/evolveum/midpoint/repo/sqale/qmodel/SqaleTableMapping.java +++ b/repo/repo-sqale/src/main/java/com/evolveum/midpoint/repo/sqale/qmodel/SqaleTableMapping.java @@ -66,6 +66,14 @@ protected SqaleTableMapping( super(tableName, defaultAliasName, schemaType, queryType); } + public SqaleRepoContext repositoryContext() { + SqaleRepoContext repositoryContext = (SqaleRepoContext) super.repositoryContext(); + return repositoryContext != null + ? repositoryContext + // TODO remove this branch + : SqaleRepoContext.getInstance(); + } + /** * Returns the mapper creating the string filter/delta processors from context. * @@ -232,8 +240,7 @@ protected ObjectReferenceType objectReferenceType( return new ObjectReferenceType() .oid(oid) - .type(SqaleRepoContext.getInstance() - .schemaClassToQName(repoObjectType.getSchemaType())) + .type(repositoryContext().schemaClassToQName(repoObjectType.getSchemaType())) .description(targetName) .targetName(targetName); } @@ -251,12 +258,12 @@ protected ObjectReferenceType objectReferenceType( } protected @NotNull Integer searchCachedRelationId(QName qName) { - return SqaleRepoContext.getInstance().searchCachedRelationId(qName); + return repositoryContext().searchCachedRelationId(qName); } /** Returns ID for cached URI without going to the database. */ protected Integer resolveUriToId(String uri) { - return SqaleRepoContext.getInstance().resolveUriToId(uri); + return repositoryContext().resolveUriToId(uri); } /** @@ -265,21 +272,20 @@ protected Integer resolveUriToId(String uri) { * Never returns null, returns default ID for configured default relation. */ protected Integer processCacheableRelation(QName qName) { - return SqaleRepoContext.getInstance().processCacheableRelation(qName); + return repositoryContext().processCacheableRelation(qName); } /** Returns ID for URI creating new cache row in DB as needed. */ protected Integer processCacheableUri(String uri) { return uri != null - ? SqaleRepoContext.getInstance().processCacheableUri(uri) + ? repositoryContext().processCacheableUri(uri) : null; } /** Returns ID for URI creating new cache row in DB as needed. */ protected Integer processCacheableUri(QName qName) { return qName != null - ? SqaleRepoContext.getInstance() - .processCacheableUri(QNameUtil.qNameToUri(qName)) + ? repositoryContext().processCacheableUri(QNameUtil.qNameToUri(qName)) : null; } @@ -302,8 +308,7 @@ protected Integer[] processCacheableUris(List uris) { protected MObjectType schemaTypeToObjectType(QName schemaType) { return schemaType == null ? null : - MObjectType.fromSchemaType( - SqaleRepoContext.getInstance().qNameToSchemaClass(schemaType)); + MObjectType.fromSchemaType(repositoryContext().qNameToSchemaClass(schemaType)); } protected void setPolyString(PolyStringType polyString, diff --git a/repo/repo-sqale/src/main/java/com/evolveum/midpoint/repo/sqale/qmodel/object/QObjectMapping.java b/repo/repo-sqale/src/main/java/com/evolveum/midpoint/repo/sqale/qmodel/object/QObjectMapping.java index 2b92bbce8a4..c582382241a 100644 --- a/repo/repo-sqale/src/main/java/com/evolveum/midpoint/repo/sqale/qmodel/object/QObjectMapping.java +++ b/repo/repo-sqale/src/main/java/com/evolveum/midpoint/repo/sqale/qmodel/object/QObjectMapping.java @@ -22,7 +22,6 @@ import com.evolveum.midpoint.prism.PrismConstants; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.SerializationOptions; -import com.evolveum.midpoint.repo.sqale.SqaleRepoContext; import com.evolveum.midpoint.repo.sqale.SqaleUtils; import com.evolveum.midpoint.repo.sqale.qmodel.SqaleTableMapping; import com.evolveum.midpoint.repo.sqale.qmodel.assignment.QAssignmentMapping; @@ -199,7 +198,7 @@ public S toSchemaObject(Tuple row, Q entityPath, String serializedForm = new String(fullObject, StandardCharsets.UTF_8); try { RepositoryObjectParseResult result = - SqaleRepoContext.getInstance().parsePrismObject(serializedForm); + repositoryContext().parsePrismObject(serializedForm); prismObject = result.prismObject; if (result.parsingContext.hasWarnings()) { logger.warn("Object {} parsed with {} warnings", @@ -354,7 +353,7 @@ public byte[] createFullObject(S schemaObject) throws SchemaException { "Serialized object must have assigned OID and version: " + schemaObject); } - return SqaleRepoContext.getInstance().createStringSerializer() + return repositoryContext().createStringSerializer() .itemsToSkip(fullObjectItemsToSkip()) .options(SerializationOptions .createSerializeReferenceNamesForNullOids() diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/audit/mapping/AuditTableMapping.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/audit/mapping/AuditTableMapping.java index 1077a29423c..bd1b6ee3bdf 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/audit/mapping/AuditTableMapping.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/audit/mapping/AuditTableMapping.java @@ -63,8 +63,7 @@ protected ObjectReferenceType objectReferenceType( return new ObjectReferenceType() .oid(oid) - .type(SqlRepoContext.getInstance() - .schemaClassToQName(repoObjectType.getJaxbClass())) + .type(repositoryContext().schemaClassToQName(repoObjectType.getJaxbClass())) .description(targetName) .targetName(targetName); } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/audit/mapping/QAuditDeltaMapping.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/audit/mapping/QAuditDeltaMapping.java index 5baa0d1c207..776e0e41127 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/audit/mapping/QAuditDeltaMapping.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/audit/mapping/QAuditDeltaMapping.java @@ -15,7 +15,6 @@ import com.evolveum.midpoint.repo.sql.audit.beans.MAuditDelta; import com.evolveum.midpoint.repo.sql.audit.querymodel.QAuditDelta; import com.evolveum.midpoint.repo.sql.util.RUtil; -import com.evolveum.midpoint.repo.sqlbase.SqlRepoContext; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectDeltaOperationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.OperationResultType; @@ -44,8 +43,7 @@ protected QAuditDelta newAliasInstance(String alias) { public ObjectDeltaOperationType toSchemaObject(MAuditDelta row) { ObjectDeltaOperationType odo = new ObjectDeltaOperationType(); - SQLTemplates querydslTemplates = - SqlRepoContext.getInstance().getQuerydslTemplates(); + SQLTemplates querydslTemplates = repositoryContext().getQuerydslTemplates(); boolean usingSqlServer = querydslTemplates instanceof SQLServerTemplates; odo.setObjectDelta(parseBytes(row.delta, usingSqlServer, ObjectDeltaType.class)); @@ -70,7 +68,7 @@ private T parseBytes(byte[] bytes, boolean usingSqlServer, Class clazz) { } try { - return SqlRepoContext.getInstance() + return repositoryContext() .createStringParser(RUtil.getSerializedFormFromBytes(bytes, usingSqlServer)) .compat() .parseRealValue(clazz); diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/audit/mapping/QAuditEventRecordMapping.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/audit/mapping/QAuditEventRecordMapping.java index 11bc617d30d..84d889c7d89 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/audit/mapping/QAuditEventRecordMapping.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/audit/mapping/QAuditEventRecordMapping.java @@ -28,7 +28,6 @@ import com.evolveum.midpoint.repo.sql.data.audit.RAuditEventType; import com.evolveum.midpoint.repo.sql.data.common.enums.ROperationResultStatus; import com.evolveum.midpoint.repo.sql.data.common.other.RObjectType; -import com.evolveum.midpoint.repo.sqlbase.SqlRepoContext; import com.evolveum.midpoint.repo.sqlbase.filtering.item.CanonicalItemPathItemFilterProcessor; import com.evolveum.midpoint.repo.sqlbase.filtering.item.DetailTableItemFilterProcessor; import com.evolveum.midpoint.repo.sqlbase.filtering.item.EnumOrdinalItemFilterProcessor; @@ -149,7 +148,7 @@ public AuditEventRecordType toSchemaObject(MAuditEventRecord row) { private AuditEventRecordType mapSimpleAttributes(MAuditEventRecord row) { // prismContext in constructor ensures complex type definition - return new AuditEventRecordType(SqlRepoContext.getInstance().prismContext()) + return new AuditEventRecordType(repositoryContext().prismContext()) .repoId(row.id) .channel(row.channel) .eventIdentifier(row.eventIdentifier) @@ -326,8 +325,7 @@ public MAuditEventRecord toRowObject(AuditEventRecord record) { private Integer targetTypeToRepoOrdinal(PrismReferenceValue targetOwner) { //noinspection rawtypes - Class objectClass = SqlRepoContext.getInstance() - .qNameToSchemaClass(targetOwner.getTargetType()); + Class objectClass = repositoryContext().qNameToSchemaClass(targetOwner.getTargetType()); //noinspection unchecked return MiscUtil.enumOrdinal(RObjectType.getByJaxbType(objectClass)); } diff --git a/repo/repo-sqlbase/src/main/java/com/evolveum/midpoint/repo/sqlbase/mapping/QueryTableMapping.java b/repo/repo-sqlbase/src/main/java/com/evolveum/midpoint/repo/sqlbase/mapping/QueryTableMapping.java index 110f0dd41fc..9b9dd85af01 100644 --- a/repo/repo-sqlbase/src/main/java/com/evolveum/midpoint/repo/sqlbase/mapping/QueryTableMapping.java +++ b/repo/repo-sqlbase/src/main/java/com/evolveum/midpoint/repo/sqlbase/mapping/QueryTableMapping.java @@ -27,6 +27,7 @@ import com.evolveum.midpoint.repo.sqlbase.QueryException; import com.evolveum.midpoint.repo.sqlbase.RepositoryException; import com.evolveum.midpoint.repo.sqlbase.SqlQueryContext; +import com.evolveum.midpoint.repo.sqlbase.SqlRepoContext; import com.evolveum.midpoint.repo.sqlbase.filtering.item.PolyStringItemFilterProcessor; import com.evolveum.midpoint.repo.sqlbase.filtering.item.SimpleItemFilterProcessor; import com.evolveum.midpoint.repo.sqlbase.filtering.item.TimestampItemFilterProcessor; @@ -68,6 +69,7 @@ public abstract class QueryTableMapping schemaType, + @NotNull Class queryType, + @NotNull SqlRepoContext repositoryContext) { + super(schemaType, queryType); + this.tableName = tableName; + this.defaultAliasName = defaultAliasName; + this.repositoryContext = repositoryContext; + } + + /** + * Creates metamodel for the table described by designated type (Q-class) related to schema type. + * Allows registration of any number of columns - typically used for static properties + * (non-extensions). + * + * @param tableName database table name + * @param defaultAliasName default alias name, some short abbreviation, must be unique + * across mapped types + */ + @Deprecated protected QueryTableMapping( @NotNull String tableName, @NotNull String defaultAliasName, @@ -96,6 +120,9 @@ protected QueryTableMapping( super(schemaType, queryType); this.tableName = tableName; this.defaultAliasName = defaultAliasName; + + // TODO remove this constructor, use the one above only + this.repositoryContext = null; } /** @@ -219,6 +246,13 @@ public String defaultAliasName() { return defaultAliasName; } + public SqlRepoContext repositoryContext() { + return repositoryContext != null + ? repositoryContext + // TODO remove this branch + : SqlRepoContext.getInstance(); + } + /** * Creates new alias (entity path instance) with a defined name. * You can also use {@link #defaultAlias()} if one alias in a query is enough.