diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogDetails.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogDetails.java index 8d4c9aa7f45..e8d6d8a9da9 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogDetails.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogDetails.java @@ -146,19 +146,10 @@ private void initAuditModel() { @Override protected AuditEventRecordType load() { - String eventIdentifier = getEventIdentifierParameter(); - AuditEventStageType stageType = getStageTypeParameter(); + Long eventIdentifier = getEventIdentifierParameter(); S_MatchingRuleEntry filter = getPrismContext().queryFor(AuditEventRecordType.class) - .item(AuditEventRecordType.F_EVENT_IDENTIFIER) + .item(AuditEventRecordType.F_REPO_ID) .eq(eventIdentifier); - //TODO: remove when we will be able to query according to "repo id". - // it is here, because there was a bug, that raw (execute_changes_raw) changes - // were executed with same eventIdentifier for both request and execution stage - if (stageType != null) { - filter = filter.and() - .item(AuditEventRecordType.F_EVENT_STAGE) - .eq(stageType); - } ObjectQuery query = filter.build(); OperationResult result = new OperationResult(OPERATION_LOAD_AUDIT_RECORD); SearchResultList records = null; @@ -187,24 +178,12 @@ protected AuditEventRecordType load() { }; } - private String getEventIdentifierParameter() { + private Long getEventIdentifierParameter() { StringValue param = getPageParameters().get(OnePageParameterEncoder.PARAMETER); if (param == null) { return null; } - return param.toString(); - } - - private AuditEventStageType getStageTypeParameter() { - StringValue param = getPageParameters().get(PageAuditLogDetails.PARAMETER_STAGE); - if (param == null) { - return null; - } - String stage = param.toString(); - if (stage == null) { - return null; - } - return AuditEventStageType.fromValue(stage); + return Long.valueOf(param.toString()); } private void initLayout() { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AuditLogViewerPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AuditLogViewerPanel.java index 45e0b9cfe13..b4b0b5cbcd8 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AuditLogViewerPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AuditLogViewerPanel.java @@ -475,11 +475,8 @@ public boolean isEnabled(IModel> rowModel) public void onClick(IModel> rowModel) { AuditEventRecordType record = unwrapModel(rowModel); PageParameters parameters = new PageParameters(); - parameters.add(OnePageParameterEncoder.PARAMETER, record.getEventIdentifier()); - if (AuditEventTypeType.EXECUTE_CHANGES_RAW == record.getEventType()) { - parameters.add(PageAuditLogDetails.PARAMETER_STAGE, record.getEventStage().value()); - } - getPageBase().navigateToNext(new PageAuditLogDetails(parameters)); + parameters.add(OnePageParameterEncoder.PARAMETER, record.getRepoId()); + getPageBase().navigateToNext(PageAuditLogDetails.class, parameters); } }; } diff --git a/infra/schema/src/main/resources/xml/ns/public/common/audit-3.xsd b/infra/schema/src/main/resources/xml/ns/public/common/audit-3.xsd index 1d5fbb86346..170a2f499b7 100644 --- a/infra/schema/src/main/resources/xml/ns/public/common/audit-3.xsd +++ b/infra/schema/src/main/resources/xml/ns/public/common/audit-3.xsd @@ -389,6 +389,17 @@ + + + + Repository ID. This is the ID generated by and stored in DB. + + + 4.3.1 + AuditEventRecordType.repoId + + + diff --git a/repo/audit-api/src/main/java/com/evolveum/midpoint/audit/api/AuditEventRecord.java b/repo/audit-api/src/main/java/com/evolveum/midpoint/audit/api/AuditEventRecord.java index 4dd55a74034..0295bd32965 100644 --- a/repo/audit-api/src/main/java/com/evolveum/midpoint/audit/api/AuditEventRecord.java +++ b/repo/audit-api/src/main/java/com/evolveum/midpoint/audit/api/AuditEventRecord.java @@ -6,7 +6,6 @@ */ package com.evolveum.midpoint.audit.api; -import java.beans.Transient; import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.*; @@ -451,7 +450,6 @@ public void setParameter(String parameter) { this.parameter = parameter; } - @Transient public Long getRepoId() { return repoId; } @@ -542,6 +540,7 @@ public AuditEventRecordType createAuditEventRecordType() { public AuditEventRecordType createAuditEventRecordType(boolean tolerateInconsistencies) { AuditEventRecordType auditRecordType = new AuditEventRecordType(); + auditRecordType.setRepoId(repoId); auditRecordType.setChannel(channel); auditRecordType.setEventIdentifier(eventIdentifier); auditRecordType.setEventStage(AuditEventStage.toSchemaValue(eventStage)); @@ -615,6 +614,7 @@ public AuditEventRecordType createAuditEventRecordType(boolean tolerateInconsist @SuppressWarnings("MethodDoesntCallSuperMethod") // it's wrong, but intended public AuditEventRecord clone() { AuditEventRecord clone = new AuditEventRecord(); + clone.repoId = this.repoId; clone.channel = this.channel; clone.deltas.addAll(MiscSchemaUtil.cloneObjectDeltaOperationCollection(this.deltas)); clone.eventIdentifier = this.eventIdentifier; 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 dab9f69e87d..75836acfd8e 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 @@ -59,6 +59,7 @@ public class AuditSearchTest extends BaseSQLRepoTest { private String targetOid; private String targetOwnerOid; private String record1EventIdentifier; + private Long record1RepoId; @Override public void initSystem() throws Exception { @@ -204,7 +205,9 @@ public void test110SearchByEventIdentifier() throws SchemaException { then("all audit events are returned"); assertThat(result).hasSize(1); - assertThat(result.get(0).getEventIdentifier()).isEqualTo(record1EventIdentifier); + AuditEventRecordType auditEventRecord1 = result.get(0); + assertThat(auditEventRecord1.getEventIdentifier()).isEqualTo(record1EventIdentifier); + record1RepoId = auditEventRecord1.getRepoId(); } @Test @@ -1233,6 +1236,18 @@ public void test558SearchByCustomColumnPropertyWithNullValue() throws SchemaExce .isEmpty(); } + @Test + public void test600SearchById() throws SchemaException { + when("searching audit using ALL filter"); + SearchResultList result = searchObjects( + prismContext.queryFor(AuditEventRecordType.class) + .item(AuditEventRecordType.F_REPO_ID).eq(record1RepoId) + .build()); + + assertThat(result).hasSize(1); + assertThat(result.get(0).getEventIdentifier()).isEqualTo(record1EventIdentifier); + } + @Test public void test800SearchWithAllFilter() throws SchemaException { when("searching audit using ALL filter"); diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/audit/mapping/AuditEventRecordSqlTransformer.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/audit/mapping/AuditEventRecordSqlTransformer.java index b1985940fd9..dbca9ac7ccd 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/audit/mapping/AuditEventRecordSqlTransformer.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/audit/mapping/AuditEventRecordSqlTransformer.java @@ -62,6 +62,7 @@ public AuditEventRecordType toSchemaObject(MAuditEventRecord row) throws SchemaE private AuditEventRecordType mapSimpleAttributes(MAuditEventRecord row) { // prismContext in constructor ensures complex type definition return new AuditEventRecordType(transformerSupport.prismContext()) + .repoId(row.id) .channel(row.channel) .eventIdentifier(row.eventIdentifier) .eventStage(auditEventStageTypeFromRepo(row.eventStage)) 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 849ce954093..b764c2352a7 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 @@ -37,6 +37,7 @@ private QAuditEventRecordMapping() { super(TABLE_NAME, DEFAULT_ALIAS_NAME, AuditEventRecordType.class, QAuditEventRecord.class); + addItemMapping(F_REPO_ID, longMapper(q -> q.id)); addItemMapping(F_CHANNEL, stringMapper(q -> q.channel)); addItemMapping(F_EVENT_IDENTIFIER, stringMapper(q -> q.eventIdentifier)); addItemMapping(F_EVENT_STAGE, EnumOrdinalItemFilterProcessor.mapper( 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 64567a5b031..e6da4e258af 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 @@ -121,6 +121,17 @@ public ItemSqlMapper integerMapper( new SimpleItemFilterProcessor<>(ctx, rootToQueryItem), rootToQueryItem); } + /** + * Returns the mapper creating the long filter processor from context. + * + * @param mapped schema type, see javadoc for the class + */ + public ItemSqlMapper longMapper( + Function> rootToQueryItem) { + return new ItemSqlMapper<>(ctx -> + new SimpleItemFilterProcessor<>(ctx, rootToQueryItem), rootToQueryItem); + } + /** * Returns the mapper creating the boolean filter processor from context. *