Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,12 @@
import com.ritense.audit.service.AuditService;
import com.ritense.authorization.AuthorizationService;
import com.ritense.document.service.impl.JsonSchemaDocumentService;
import com.ritense.processdocument.service.DocumentAuditEventProvider;
import com.ritense.processdocument.service.ProcessDocumentAuditService;
import com.ritense.processdocument.service.impl.DefaultDocumentAuditEventProvider;
import com.ritense.processdocument.service.impl.OperatonProcessJsonSchemaDocumentAuditService;
import com.ritense.processdocument.web.rest.ProcessDocumentAuditResource;
import java.util.List;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
Expand All @@ -32,17 +35,25 @@
@ConditionalOnClass(AuditSearchService.class)
public class ProcessDocumentAuditAutoConfiguration {

@Bean
@ConditionalOnMissingBean(DefaultDocumentAuditEventProvider.class)
public DefaultDocumentAuditEventProvider defaultDocumentAuditEventProvider() {
return new DefaultDocumentAuditEventProvider();
}

@Bean
@ConditionalOnMissingBean(ProcessDocumentAuditService.class)
public OperatonProcessJsonSchemaDocumentAuditService processDocumentAuditService(
AuditService auditService,
JsonSchemaDocumentService documentService,
AuthorizationService authorizationService
AuthorizationService authorizationService,
List<DocumentAuditEventProvider> auditEventProviders
) {
return new OperatonProcessJsonSchemaDocumentAuditService(
auditService,
documentService,
authorizationService
authorizationService,
auditEventProviders
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,24 +25,10 @@
import com.ritense.authorization.request.EntityAuthorizationRequest;
import com.ritense.document.domain.Document;
import com.ritense.document.domain.impl.JsonSchemaDocument;
import com.ritense.document.domain.impl.event.JsonSchemaDocumentCreatedEvent;
import com.ritense.document.domain.impl.event.JsonSchemaDocumentModifiedEvent;
import com.ritense.document.event.DocumentAssigneeChangedEvent;
import com.ritense.document.event.DocumentRetentionPeriodSetEvent;
import com.ritense.document.event.DocumentRetentionPeriodUnsetEvent;
import com.ritense.document.event.DocumentUnassignedEvent;
import com.ritense.document.service.impl.JsonSchemaDocumentService;
import com.ritense.processdocument.event.BesluitAddedEvent;
import com.ritense.processdocument.service.DocumentAuditEventProvider;
import com.ritense.processdocument.service.ProcessDocumentAuditService;
import com.ritense.valtimo.operaton.processaudit.ProcessEndedEvent;
import com.ritense.valtimo.operaton.processaudit.ProcessStartedEvent;
import com.ritense.valtimo.contract.audit.AuditEvent;
import com.ritense.valtimo.contract.document.event.DocumentRelatedFileAddedEvent;
import com.ritense.valtimo.contract.document.event.DocumentRelatedFileRemovedEvent;
import com.ritense.valtimo.contract.documentgeneration.event.DossierDocumentGeneratedEvent;
import com.ritense.valtimo.contract.event.TaskAssignedEvent;
import com.ritense.valtimo.contract.event.TaskCompletedEvent;
import com.ritense.valtimo.contract.event.TaskDueDateSetEvent;
import java.util.List;
import java.util.UUID;
import org.springframework.data.domain.Page;
Expand All @@ -52,41 +38,29 @@ public class OperatonProcessJsonSchemaDocumentAuditService implements ProcessDoc

private final AuditService auditService;
private final JsonSchemaDocumentService documentService;

private final AuthorizationService authorizationService;
private final List<DocumentAuditEventProvider> auditEventProviders;

public OperatonProcessJsonSchemaDocumentAuditService(
AuditService auditService,
JsonSchemaDocumentService documentService,
AuthorizationService authorizationService
AuthorizationService authorizationService,
List<DocumentAuditEventProvider> auditEventProviders
) {
this.auditService = auditService;
this.documentService = documentService;
this.authorizationService = authorizationService;
this.auditEventProviders = auditEventProviders;
}

@Override
public Page<AuditRecord> getAuditLog(
final Document.Id id,
final Pageable pageable
) {
final List<Class<? extends AuditEvent>> eventTypes = List.of(
JsonSchemaDocumentCreatedEvent.class,
JsonSchemaDocumentModifiedEvent.class,
DocumentRetentionPeriodSetEvent.class,
DocumentRetentionPeriodUnsetEvent.class,
TaskAssignedEvent.class,
TaskCompletedEvent.class,
ProcessStartedEvent.class,
ProcessEndedEvent.class,
DossierDocumentGeneratedEvent.class,
DocumentRelatedFileAddedEvent.class,
DocumentRelatedFileRemovedEvent.class,
BesluitAddedEvent.class,
DocumentAssigneeChangedEvent.class,
DocumentUnassignedEvent.class,
TaskDueDateSetEvent.class
);
final List<Class<? extends AuditEvent>> eventTypes = auditEventProviders.stream()
.flatMap(provider -> provider.getAuditEventTypes().stream())
.toList();

final var document = documentService.getDocumentBy(id);
authorizationService.requirePermission(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*
* Copyright 2015-2024 Ritense BV, the Netherlands.
*
* Licensed under EUPL, Version 1.2 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.ritense.processdocument.service

import com.ritense.valtimo.contract.audit.AuditEvent

fun interface DocumentAuditEventProvider {
fun getAuditEventTypes(): List<Class<out AuditEvent>>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* Copyright 2015-2024 Ritense BV, the Netherlands.
*
* Licensed under EUPL, Version 1.2 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.ritense.processdocument.service.impl

import com.ritense.document.domain.impl.event.JsonSchemaDocumentCreatedEvent
import com.ritense.document.domain.impl.event.JsonSchemaDocumentModifiedEvent
import com.ritense.document.event.DocumentAssigneeChangedEvent
import com.ritense.document.event.DocumentRetentionPeriodSetEvent
import com.ritense.document.event.DocumentRetentionPeriodUnsetEvent
import com.ritense.document.event.DocumentUnassignedEvent
import com.ritense.processdocument.event.BesluitAddedEvent
import com.ritense.processdocument.service.DocumentAuditEventProvider
import com.ritense.valtimo.contract.audit.AuditEvent
import com.ritense.valtimo.contract.document.event.DocumentRelatedFileAddedEvent
import com.ritense.valtimo.contract.document.event.DocumentRelatedFileRemovedEvent
import com.ritense.valtimo.contract.documentgeneration.event.DossierDocumentGeneratedEvent
import com.ritense.valtimo.contract.event.TaskAssignedEvent
import com.ritense.valtimo.contract.event.TaskCompletedEvent
import com.ritense.valtimo.contract.event.TaskDueDateSetEvent
import com.ritense.valtimo.operaton.processaudit.ProcessEndedEvent
import com.ritense.valtimo.operaton.processaudit.ProcessStartedEvent

class DefaultDocumentAuditEventProvider : DocumentAuditEventProvider {
override fun getAuditEventTypes(): List<Class<out AuditEvent>> = listOf(
JsonSchemaDocumentCreatedEvent::class.java,
JsonSchemaDocumentModifiedEvent::class.java,
DocumentRetentionPeriodSetEvent::class.java,
DocumentRetentionPeriodUnsetEvent::class.java,
TaskAssignedEvent::class.java,
TaskCompletedEvent::class.java,
ProcessStartedEvent::class.java,
ProcessEndedEvent::class.java,
DossierDocumentGeneratedEvent::class.java,
DocumentRelatedFileAddedEvent::class.java,
DocumentRelatedFileRemovedEvent::class.java,
BesluitAddedEvent::class.java,
DocumentAssigneeChangedEvent::class.java,
DocumentUnassignedEvent::class.java,
TaskDueDateSetEvent::class.java,
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
/*
* Copyright 2015-2024 Ritense BV, the Netherlands.
*
* Licensed under EUPL, Version 1.2 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.ritense.processdocument.service.impl

import com.ritense.document.domain.impl.event.JsonSchemaDocumentCreatedEvent
import com.ritense.document.domain.impl.event.JsonSchemaDocumentModifiedEvent
import com.ritense.document.event.DocumentAssigneeChangedEvent
import com.ritense.document.event.DocumentRetentionPeriodSetEvent
import com.ritense.document.event.DocumentRetentionPeriodUnsetEvent
import com.ritense.document.event.DocumentUnassignedEvent
import com.ritense.processdocument.event.BesluitAddedEvent
import com.ritense.valtimo.contract.document.event.DocumentRelatedFileAddedEvent
import com.ritense.valtimo.contract.document.event.DocumentRelatedFileRemovedEvent
import com.ritense.valtimo.contract.documentgeneration.event.DossierDocumentGeneratedEvent
import com.ritense.valtimo.contract.event.TaskAssignedEvent
import com.ritense.valtimo.contract.event.TaskCompletedEvent
import com.ritense.valtimo.contract.event.TaskDueDateSetEvent
import com.ritense.valtimo.operaton.processaudit.ProcessEndedEvent
import com.ritense.valtimo.operaton.processaudit.ProcessStartedEvent
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test

internal class DefaultDocumentAuditEventProviderTest {

private val provider = DefaultDocumentAuditEventProvider()

@Test
fun `should return exactly 15 event types`() {
assertThat(provider.getAuditEventTypes()).hasSize(15)
}

@Test
fun `should return all expected event types`() {
val eventTypes = provider.getAuditEventTypes()

assertThat(eventTypes).containsExactlyInAnyOrder(
JsonSchemaDocumentCreatedEvent::class.java,
JsonSchemaDocumentModifiedEvent::class.java,
DocumentRetentionPeriodSetEvent::class.java,
DocumentRetentionPeriodUnsetEvent::class.java,
TaskAssignedEvent::class.java,
TaskCompletedEvent::class.java,
ProcessStartedEvent::class.java,
ProcessEndedEvent::class.java,
DossierDocumentGeneratedEvent::class.java,
DocumentRelatedFileAddedEvent::class.java,
DocumentRelatedFileRemovedEvent::class.java,
BesluitAddedEvent::class.java,
DocumentAssigneeChangedEvent::class.java,
DocumentUnassignedEvent::class.java,
TaskDueDateSetEvent::class.java,
)
}
}
Loading
Loading