From c79027ab9ec37cf131bc722d9f9b17e274385af9 Mon Sep 17 00:00:00 2001 From: Richard Richter Date: Fri, 26 Jun 2020 13:31:45 +0200 Subject: [PATCH] MID-6319: AuditService#search will return result of AuditEventRecordType --- .../midpoint/audit/api/AuditService.java | 3 +- .../audit/impl/LoggerAuditServiceImpl.java | 3 +- .../midpoint/repo/sql/AuditSearchTest.java | 5 +- .../repo/sql/SqlAuditServiceImpl.java | 19 ++- .../midpoint/repo/sql/pure/SqlGeneration.java | 159 +++++++++--------- .../repo/sql/pure/SqlQueryExecutor.java | 46 ++++- .../sql/pure/metamodel/QAuditEventRecord.java | 28 +-- .../midpoint/test/DummyAuditService.java | 3 +- .../midpoint/init/AuditServiceProxy.java | 7 +- 9 files changed, 156 insertions(+), 117 deletions(-) diff --git a/repo/audit-api/src/main/java/com/evolveum/midpoint/audit/api/AuditService.java b/repo/audit-api/src/main/java/com/evolveum/midpoint/audit/api/AuditService.java index 134a83c2950..f77370d6685 100644 --- a/repo/audit-api/src/main/java/com/evolveum/midpoint/audit/api/AuditService.java +++ b/repo/audit-api/src/main/java/com/evolveum/midpoint/audit/api/AuditService.java @@ -19,6 +19,7 @@ import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.util.exception.SchemaException; +import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordType; import com.evolveum.midpoint.xml.ns._public.common.common_3.CleanupPolicyType; import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationAuditType; @@ -76,7 +77,7 @@ long countObjects(ObjectQuery query, throws SchemaException; @NotNull - SearchResultList searchObjects(ObjectQuery query, + SearchResultList searchObjects(ObjectQuery query, Collection> options, OperationResult parentResult) throws SchemaException; } diff --git a/repo/audit-impl/src/main/java/com/evolveum/midpoint/audit/impl/LoggerAuditServiceImpl.java b/repo/audit-impl/src/main/java/com/evolveum/midpoint/audit/impl/LoggerAuditServiceImpl.java index 39a57da9655..f79cea0b15c 100644 --- a/repo/audit-impl/src/main/java/com/evolveum/midpoint/audit/impl/LoggerAuditServiceImpl.java +++ b/repo/audit-impl/src/main/java/com/evolveum/midpoint/audit/impl/LoggerAuditServiceImpl.java @@ -31,6 +31,7 @@ import com.evolveum.midpoint.schema.SelectorOptions; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.task.api.Task; +import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordType; import com.evolveum.midpoint.xml.ns._public.common.common_3.CleanupPolicyType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; @@ -193,7 +194,7 @@ public long countObjects(ObjectQuery query, @Override @NotNull - public SearchResultList searchObjects(ObjectQuery query, + public SearchResultList searchObjects(ObjectQuery query, Collection> options, OperationResult parentResult) { throw new UnsupportedOperationException("searchObjects not supported"); } diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/AuditSearchTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/AuditSearchTest.java index b94e6c08df5..3087c45f16e 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/AuditSearchTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/AuditSearchTest.java @@ -11,7 +11,6 @@ import org.springframework.test.context.ContextConfiguration; import org.testng.annotations.Test; -import com.evolveum.midpoint.audit.api.AuditEventRecord; import com.evolveum.midpoint.prism.query.ObjectQuery; import com.evolveum.midpoint.schema.SearchResultList; import com.evolveum.midpoint.tools.testng.UnusedTestElement; @@ -34,7 +33,7 @@ public void initSystem() throws Exception { public void test100SearchAllAuditEvents() throws SchemaException { when("Searching audit with query without any conditions"); ObjectQuery query = prismContext.queryFor(AuditEventRecordType.class).build(); - SearchResultList prismObjects = + SearchResultList prismObjects = auditService.searchObjects(query, null, null); then("All audit events are returned"); @@ -48,7 +47,7 @@ public void test110SearchAllAuditEventsOfSomeType() throws SchemaException { ObjectQuery query = prismContext.queryFor(AuditEventRecordType.class) .item(AuditEventRecordType.F_EVENT_TYPE).eq(AuditEventTypeType.ADD_OBJECT) .build(); - SearchResultList prismObjects = + SearchResultList prismObjects = auditService.searchObjects(query, null, null); then("only audit events of a particular type are returned"); diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/SqlAuditServiceImpl.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/SqlAuditServiceImpl.java index 8fce5adc0de..a80bfb91c5f 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/SqlAuditServiceImpl.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/SqlAuditServiceImpl.java @@ -53,7 +53,10 @@ import com.evolveum.midpoint.repo.sql.util.GetObjectResult; import com.evolveum.midpoint.repo.sql.util.RUtil; import com.evolveum.midpoint.repo.sql.util.TemporaryTableDialect; -import com.evolveum.midpoint.schema.*; +import com.evolveum.midpoint.schema.GetOperationOptions; +import com.evolveum.midpoint.schema.ObjectDeltaOperation; +import com.evolveum.midpoint.schema.SearchResultList; +import com.evolveum.midpoint.schema.SelectorOptions; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.util.DebugUtil; @@ -913,16 +916,20 @@ public long countObjects(ObjectQuery query, @Override @NotNull - public SearchResultList searchObjects( + public SearchResultList searchObjects( ObjectQuery query, Collection> options, OperationResult parentResult) { // TODO MID-6319 // support for options, skipped for now // do something with the OperationResult... skipped for now // TODO why the duality of AuditEventRecordType and AuditEventRecord? - SearchResultList result = - sqlQueryExecutor.list(AuditEventRecordType.class, query); - - return result; + SearchResultList result = + null; + try { + return sqlQueryExecutor.list(AuditEventRecordType.class, query); + } catch (SQLException e) { + // TODO + throw new RuntimeException(e); + } } } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/pure/SqlGeneration.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/pure/SqlGeneration.java index 9ed63fab7c3..77f2ea23192 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/pure/SqlGeneration.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/pure/SqlGeneration.java @@ -16,10 +16,11 @@ import com.querydsl.core.types.Path; import com.querydsl.core.types.Projections; import com.querydsl.core.types.QMap; +import com.querydsl.sql.Configuration; import com.querydsl.sql.RelationalPath; import com.querydsl.sql.SQLQuery; -import com.querydsl.sql.SQLQueryFactory; import com.querydsl.sql.SQLTemplates; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import com.evolveum.midpoint.repo.sql.pure.metamodel.QAuditEventRecord; @@ -28,6 +29,7 @@ @Deprecated public class SqlGeneration { + public static void main(String[] args) throws Exception { org.h2.Driver.load(); /* this requires querydsl-sql-codegen @@ -39,54 +41,52 @@ public static void main(String[] args) throws Exception { exporter.export(conn.getMetaData()); */ - SQLQueryFactory queryFactory = new SQLQueryFactory( - SQLTemplates.DEFAULT, () -> getConnection()); - - QAuditEventRecord.EXTENSION_COLUMNS.registerExtensionColumn(QAuditEventRecord.EVENT_TYPE); + try (Connection connection = getConnection()) { + QAuditEventRecord.EXTENSION_COLUMNS.registerExtensionColumn(QAuditEventRecord.EVENT_TYPE); - QAuditEventRecord aer = new QAuditEventRecord("aer"); - SQLQuery query = queryFactory.select(aer.all()) - .from(aer) - ; + QAuditEventRecord aer = new QAuditEventRecord("aer"); + SQLQuery query = newQuery(connection) + .select(aer.all()) + .from(aer); - System.out.println(query); + System.out.println(query); - List result = query.limit(3).fetch(); - System.out.println("\nresult = " + result); - Object o = ((Tuple) result.get(0)).get(2, Object.class); - System.out.println("o = " + o); - System.out.println("class = " + o.getClass()); + List result = query.limit(3).fetch(); + System.out.println("\nresult = " + result); + Object o = ((Tuple) result.get(0)).get(2, Object.class); + System.out.println("o = " + o); + System.out.println("class = " + o.getClass()); + } } - private static void extensionExperiments1() { - SQLQueryFactory queryFactory = new SQLQueryFactory( - SQLTemplates.DEFAULT, () -> getConnection()); + private static void extensionExperiments1() throws SQLException { + try (Connection conn = getConnection()) { + QAuditEventRecord aer = new QAuditEventRecord("aer"); + System.out.println("M_AUDIT_EVENT.meta.size = " + M_AUDIT_EVENT.all().length); + System.out.println("M_AUDIT_DELTA.meta.size = " + M_AUDIT_DELTA.all().length); - QAuditEventRecord aer = new QAuditEventRecord("aer"); - System.out.println("M_AUDIT_EVENT.meta.size = " + M_AUDIT_EVENT.all().length); - System.out.println("M_AUDIT_DELTA.meta.size = " + M_AUDIT_DELTA.all().length); - - QMap auditDelta = Projections.map(M_AUDIT_DELTA.all()); - QMap auditEvent = Projections.map(M_AUDIT_EVENT.all()); + QMap auditDelta = Projections.map(M_AUDIT_DELTA.all()); + QMap auditEvent = Projections.map(M_AUDIT_EVENT.all()); // List result = queryFactory - List result = queryFactory - // this way we don't use M-beans, which is more flexible, and still get close to "select whole entity A+B" + List result = newQuery(conn) + // this way we don't use M-beans, which is more flexible, and still get close to "select whole entity A+B" // .select(expand(M_AUDIT_EVENT.id, M_AUDIT_DELTA)) - // This is also interesting, we instruct to create map for auditDelta paths. - // .all() above is necessary, otherwise the map contains only one M-bean, which we want to avoid - // Also, we want to extract this expression as variable, so we can use it later, e.g. to get from a tuple, or mapOneToMany processing, etc. + // This is also interesting, we instruct to create map for auditDelta paths. + // .all() above is necessary, otherwise the map contains only one M-bean, which we want to avoid + // Also, we want to extract this expression as variable, so we can use it later, e.g. to get from a tuple, or mapOneToMany processing, etc. // .select(M_AUDIT_EVENT.id, auditDelta) - .select(M_AUDIT_EVENT) - .from(M_AUDIT_EVENT) + .select(M_AUDIT_EVENT) + .from(M_AUDIT_EVENT) // .leftJoin(M_AUDIT_EVENT._auditDeltaFk, M_AUDIT_DELTA) - .fetch(); + .fetch(); // Map, ?>>> mapResult = // mapOneToMany(result, M_AUDIT_EVENT.id, auditDelta); // System.out.println("result = " + Joiner.on("\n").withKeyValueSeparator(" = ").join(mapResult)); // System.out.println(mapResult.size()); - System.out.println(result); + System.out.println(result); + } } /** @@ -109,55 +109,57 @@ private static Expression[] expand(Path... paths) { return pathsCombined.toArray(new Expression[0]); } - private static void examples() { - System.out.println(M_AUDIT_EVENT); - System.out.println("\nColumns: " + M_AUDIT_EVENT.getColumns()); - System.out.println("\nAnnotated element: " + M_AUDIT_EVENT.getAnnotatedElement()); - System.out.println("\nFKs: " + M_AUDIT_EVENT.getForeignKeys()); - System.out.println("\nInverse FKs: " + M_AUDIT_EVENT.getInverseForeignKeys()); - System.out.println(); - - SQLQueryFactory queryFactory = new SQLQueryFactory( - SQLTemplates.DEFAULT, () -> getConnection()); - - System.out.println("audit size = " + queryFactory.selectFrom(M_AUDIT_EVENT).fetchCount()); - - SQLQuery query = queryFactory - .select(M_AUDIT_EVENT, M_AUDIT_DELTA) + private static void examples() throws SQLException { + try (Connection conn = getConnection()) { + System.out.println(M_AUDIT_EVENT); + System.out.println("\nColumns: " + M_AUDIT_EVENT.getColumns()); + System.out.println("\nAnnotated element: " + M_AUDIT_EVENT.getAnnotatedElement()); + System.out.println("\nFKs: " + M_AUDIT_EVENT.getForeignKeys()); + System.out.println("\nInverse FKs: " + M_AUDIT_EVENT.getInverseForeignKeys()); + System.out.println(); + + System.out.println("audit size = " + newQuery(conn) + .select(M_AUDIT_EVENT) + .from(M_AUDIT_EVENT) + .fetchCount()); + + SQLQuery query = newQuery(conn) + .select(M_AUDIT_EVENT, M_AUDIT_DELTA) // .select(M_AUDIT_EVENT.id, M_AUDIT_DELTA.checksum) // .from(M_AUDIT_EVENT) - // leftJoin if we want also events without deltas + // leftJoin if we want also events without deltas // .join(M_AUDIT_EVENT._auditDeltaFk, M_AUDIT_DELTA) - // alternatively: - // .join(M_AUDIT_DELTA).on(M_AUDIT_DELTA.recordId.eq(M_AUDIT_EVENT.id)) + // alternatively: + // .join(M_AUDIT_DELTA).on(M_AUDIT_DELTA.recordId.eq(M_AUDIT_EVENT.id)) // .orderBy(M_AUDIT_EVENT.id.asc()) - .from(M_AUDIT_EVENT, M_AUDIT_DELTA) - .where(M_AUDIT_EVENT.id.eq(M_AUDIT_DELTA.recordId)) // this replaces "join-on", but only inner - .where(M_AUDIT_EVENT.id.eq(452L)); // "Works on my computer! :-)" - - List result = query.fetch(); - System.out.println("result = " + result); - System.out.println("\nsize: " + result.size()); - - System.out.println("\ncount: " + query.transform(groupBy(M_AUDIT_EVENT.id).as(M_AUDIT_DELTA.count()))); - Map transform = query.transform(GroupBy.groupBy(M_AUDIT_EVENT.id).as(GroupBy.list(M_AUDIT_DELTA))); - System.out.println("transform = " + transform); - - // "manual" transformation of one-to-many to proper graph - List plainResult = queryFactory - .select(M_AUDIT_EVENT, M_AUDIT_DELTA) - .from(M_AUDIT_EVENT) - .leftJoin(M_AUDIT_EVENT._auditDeltaFk, M_AUDIT_DELTA) - // alternatively: - // .leftJoin(M_AUDIT_DELTA).on(M_AUDIT_DELTA.recordId.eq(M_AUDIT_EVENT.id)) + .from(M_AUDIT_EVENT, M_AUDIT_DELTA) + .where(M_AUDIT_EVENT.id.eq(M_AUDIT_DELTA.recordId)) // this replaces "join-on", but only inner + .where(M_AUDIT_EVENT.id.eq(452L)); // "Works on my computer! :-)" + + List result = query.fetch(); + System.out.println("result = " + result); + System.out.println("\nsize: " + result.size()); + + System.out.println("\ncount: " + query.transform(groupBy(M_AUDIT_EVENT.id).as(M_AUDIT_DELTA.count()))); + Map transform = query.transform(GroupBy.groupBy(M_AUDIT_EVENT.id).as(GroupBy.list(M_AUDIT_DELTA))); + System.out.println("transform = " + transform); + + // "manual" transformation of one-to-many to proper graph + List plainResult = newQuery(conn) + .select(M_AUDIT_EVENT, M_AUDIT_DELTA) + .from(M_AUDIT_EVENT) + .leftJoin(M_AUDIT_EVENT._auditDeltaFk, M_AUDIT_DELTA) + // alternatively: + // .leftJoin(M_AUDIT_DELTA).on(M_AUDIT_DELTA.recordId.eq(M_AUDIT_EVENT.id)) // .orderBy(M_AUDIT_EVENT.id.asc()) - .where(M_AUDIT_EVENT.id.eq(452L)) - .fetch(); - Map> resultMap = - mapOneToMany(plainResult, M_AUDIT_EVENT, M_AUDIT_DELTA, (o, m) -> o.addDelta(m)); - System.out.println("\nFinal result" + resultMap); + .where(M_AUDIT_EVENT.id.eq(452L)) + .fetch(); + Map> resultMap = + mapOneToMany(plainResult, M_AUDIT_EVENT, M_AUDIT_DELTA, (o, m) -> o.addDelta(m)); + System.out.println("\nFinal result" + resultMap); - System.out.println("deltas for 1st item: " + resultMap.keySet().iterator().next().deltas); + System.out.println("deltas for 1st item: " + resultMap.keySet().iterator().next().deltas); + } } /** @@ -224,4 +226,9 @@ private static Connection getConnection() { throw new RuntimeException(e); } } + + @NotNull + public static SQLQuery newQuery(Connection connection) { + return new SQLQuery<>(connection, SqlQueryExecutor.QUERYDSL_CONFIGURATION); + } } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/pure/SqlQueryExecutor.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/pure/SqlQueryExecutor.java index 422f09f2470..206df7357f4 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/pure/SqlQueryExecutor.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/pure/SqlQueryExecutor.java @@ -1,14 +1,21 @@ package com.evolveum.midpoint.repo.sql.pure; +import java.sql.Connection; +import java.sql.SQLException; import java.util.ArrayList; -import javax.sql.DataSource; +import java.util.List; +import com.querydsl.sql.Configuration; +import com.querydsl.sql.SQLQuery; +import com.querydsl.sql.SQLTemplates; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.evolveum.midpoint.audit.api.AuditEventRecord; import com.evolveum.midpoint.prism.Containerable; import com.evolveum.midpoint.prism.query.ObjectQuery; +import com.evolveum.midpoint.repo.sql.DataSourceFactory; +import com.evolveum.midpoint.repo.sql.pure.metamodel.QAuditEventRecord; import com.evolveum.midpoint.schema.SearchResultList; import com.evolveum.midpoint.schema.SearchResultMetadata; @@ -18,20 +25,45 @@ @Component public class SqlQueryExecutor { + // TODO configuration should reflect the used DB of course + public static final Configuration QUERYDSL_CONFIGURATION = + new Configuration(SQLTemplates.DEFAULT); + @Autowired - private DataSource dataSource; + private DataSourceFactory dataSourceFactory; - public SearchResultList list( - Class prismType, ObjectQuery query) { + public SearchResultList list( + Class prismType, // ignored for the moment + ObjectQuery query) throws SQLException { // TODO: what if we declare AuditEventRecordType, but we want transformed result? // some mapping function as an argument? // some builder to construct the whole definition that will be an argument? + List records = executeQuery(); + SearchResultMetadata metadata = new SearchResultMetadata(); - SearchResultList result = new SearchResultList<>( + return new SearchResultList<>( new ArrayList<>(), metadata); + } + + public List executeQuery() throws SQLException { + try (Connection connection = getConnection()) { + QAuditEventRecord aer = new QAuditEventRecord(); + return newQuery(connection) + .select(aer) + .from(aer) + .limit(3) + .fetch(); + } + } + + private Connection getConnection() throws SQLException { + return dataSourceFactory.getDataSource().getConnection(); + } - return result; + @NotNull + public SQLQuery newQuery(Connection connection) { + return new SQLQuery<>(connection, QUERYDSL_CONFIGURATION); } } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/pure/metamodel/QAuditEventRecord.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/pure/metamodel/QAuditEventRecord.java index ba82c246995..ad566545034 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/pure/metamodel/QAuditEventRecord.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/pure/metamodel/QAuditEventRecord.java @@ -10,8 +10,6 @@ import java.sql.Types; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathMetadata; import com.querydsl.core.types.dsl.DateTimePath; import com.querydsl.core.types.dsl.NumberPath; import com.querydsl.core.types.dsl.StringPath; @@ -144,9 +142,16 @@ public class QAuditEventRecord extends FlexibleRelationalPathBase _auditRefValueFk = createInvForeignKey(id, "RECORD_ID"); public final com.querydsl.sql.ForeignKey _auditResourceFk = createInvForeignKey(id, "RECORD_ID"); + /** + * Creates default alias, don't use multiple times in a single query. + * Use {@link #QAuditEventRecord(String)} to distinguish between multiple aliases in one query. + */ + public QAuditEventRecord() { + this("aer"); + } + public QAuditEventRecord(String variable) { - super(MAuditEventRecord.class, forVariable(variable), "PUBLIC", "M_AUDIT_EVENT"); - applyExtensions(EXTENSION_COLUMNS); + this(variable, "PUBLIC", "M_AUDIT_EVENT"); } public QAuditEventRecord(String variable, String schema, String table) { @@ -154,21 +159,6 @@ public QAuditEventRecord(String variable, String schema, String table) { applyExtensions(EXTENSION_COLUMNS); } - public QAuditEventRecord(String variable, String schema) { - super(MAuditEventRecord.class, forVariable(variable), schema, "M_AUDIT_EVENT"); - applyExtensions(EXTENSION_COLUMNS); - } - - public QAuditEventRecord(Path path) { - super(path.getType(), path.getMetadata(), "PUBLIC", "M_AUDIT_EVENT"); - applyExtensions(EXTENSION_COLUMNS); - } - - public QAuditEventRecord(PathMetadata metadata) { - super(MAuditEventRecord.class, metadata, "PUBLIC", "M_AUDIT_EVENT"); - applyExtensions(EXTENSION_COLUMNS); - } - @Override protected SqlTableMetamodel getTableMetamodel() { return METAMODEL; diff --git a/repo/repo-test-util/src/main/java/com/evolveum/midpoint/test/DummyAuditService.java b/repo/repo-test-util/src/main/java/com/evolveum/midpoint/test/DummyAuditService.java index b6feb07dd9d..9c825e26c4d 100644 --- a/repo/repo-test-util/src/main/java/com/evolveum/midpoint/test/DummyAuditService.java +++ b/repo/repo-test-util/src/main/java/com/evolveum/midpoint/test/DummyAuditService.java @@ -34,6 +34,7 @@ import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.util.DebugDumpable; import com.evolveum.midpoint.util.DebugUtil; +import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordType; import com.evolveum.midpoint.xml.ns._public.common.common_3.CleanupPolicyType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; @@ -545,7 +546,7 @@ public long countObjects(ObjectQuery query, @Override @NotNull - public SearchResultList searchObjects(ObjectQuery query, + public SearchResultList searchObjects(ObjectQuery query, Collection> options, OperationResult parentResult) { throw new UnsupportedOperationException("searchObjects not supported"); } diff --git a/repo/system-init/src/main/java/com/evolveum/midpoint/init/AuditServiceProxy.java b/repo/system-init/src/main/java/com/evolveum/midpoint/init/AuditServiceProxy.java index dc4ac7e6a2d..a227ab4ca2f 100644 --- a/repo/system-init/src/main/java/com/evolveum/midpoint/init/AuditServiceProxy.java +++ b/repo/system-init/src/main/java/com/evolveum/midpoint/init/AuditServiceProxy.java @@ -39,6 +39,7 @@ import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordType; import com.evolveum.midpoint.xml.ns._public.common.common_3.CleanupPolicyType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationAuditType; @@ -276,14 +277,14 @@ public long countObjects(ObjectQuery query, @Override @NotNull - public SearchResultList searchObjects(ObjectQuery query, + public SearchResultList searchObjects(ObjectQuery query, Collection> options, OperationResult parentResult) throws SchemaException { // TODO: MID-6319 - does it even make sense to merge multiple results for audit? - SearchResultList result = new SearchResultList<>(); + SearchResultList result = new SearchResultList<>(); for (AuditService service : services) { if (service.supportsRetrieval()) { - SearchResultList oneResult = + SearchResultList oneResult = service.searchObjects(query, options, parentResult); if (!oneResult.isEmpty()) { result.addAll(oneResult);