Skip to content
Snippets Groups Projects
Commit 80de451f authored by OZGCloud's avatar OZGCloud
Browse files

OZG-6991 add listener for lock_vorgang event

parent 89bc9787
No related branches found
No related tags found
No related merge requests found
/*
* Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.ozgcloud.command;
public class VorgangLockedEvent extends CommandExecutedEvent {
public VorgangLockedEvent(Command command) {
super(command);
}
}
......@@ -40,6 +40,7 @@ public enum Order {
VORGANG_WIEDEREROEFFNEN,
VORGANG_ZUM_LOESCHEN_MARKIEREN,
VORGANG_LOESCHEN,
VORGANG_LOCK,
ASSIGN_USER,
......
......@@ -35,6 +35,8 @@ import de.ozgcloud.command.Command;
import de.ozgcloud.command.CommandCreatedEvent;
import de.ozgcloud.command.CommandExecutedEvent;
import de.ozgcloud.command.CommandFailedEvent;
import de.ozgcloud.command.CommandRevokeFailedEvent;
import de.ozgcloud.command.RevokeCommandEvent;
import de.ozgcloud.vorgang.command.CommandService;
import de.ozgcloud.vorgang.command.Order;
import de.ozgcloud.vorgang.files.FileService;
......@@ -54,6 +56,9 @@ public class VorgangEventListener {
public static final Predicate<Command> IS_LOESCHEN_COMMAND = command -> Order.VORGANG_LOESCHEN.isMeant(command.getOrder());
public static final Predicate<Command> IS_SET_AKTENZEICHEN_COMMAND = command -> Order.SET_AKTENZEICHEN.isMeant(command.getOrder());
private static final String IS_LOCK_VORGANG_COMMAND = "{T(de.ozgcloud.vorgang.vorgang.VorgangEventListener).IS_LOCK_VORGANG_ORDER.test(event.getSource())}";
public static final Predicate<Command> IS_LOCK_VORGANG_ORDER = command -> Order.VORGANG_LOCK.isMeant(command.getOrder());
@Autowired
private StatusService statusService;
@Autowired
......@@ -111,6 +116,28 @@ public class VorgangEventListener {
}
}
@EventListener(condition = IS_LOCK_VORGANG_COMMAND)
public void onLockVorgang(CommandCreatedEvent event) {
var command = event.getSource();
try {
vorgangService.lockVorgang(command);
} catch (RuntimeException e) {
LOG.error("Error locking vorgang.", e);
publisher.publishEvent(new CommandFailedEvent(command.getId(), e.getMessage()));
}
}
@EventListener(condition = IS_LOCK_VORGANG_COMMAND)
public void onRevokeLockVorgang(RevokeCommandEvent event) {
var command = event.getSource();
try {
vorgangService.unlockVorgang(command);
} catch (RuntimeException e) {
LOG.error("Error unlocking vorgang.", e);
publisher.publishEvent(new CommandRevokeFailedEvent(command.getId(), e.getMessage()));
}
}
void publishEvent(CommandExecutedEvent event) {
LOG.debug("Command {} executed", event.getSource());
publisher.publishEvent(event);
......
......@@ -44,6 +44,7 @@ import org.springframework.validation.annotation.Validated;
import de.ozgcloud.command.Command;
import de.ozgcloud.command.VorgangAssignedEvent;
import de.ozgcloud.command.VorgangCreatedEvent;
import de.ozgcloud.command.VorgangLockedEvent;
import de.ozgcloud.vorgang.clientattribute.ClientAttributeMap;
import de.ozgcloud.vorgang.clientattribute.ClientAttributeReadPermitted;
import de.ozgcloud.vorgang.clientattribute.ClientAttributesMap;
......@@ -223,4 +224,14 @@ public class VorgangService {
Vorgang loadById(String vorgangId) {
return repository.findById(vorgangId).orElseThrow(() -> new NotFoundException(Vorgang.class, vorgangId));
}
public void lockVorgang(Command command) {
publisher.publishEvent(new VorgangLockedEvent(command));
}
public void unlockVorgang(Command command) {
// TODO wird implementiert in OZG-6992
// publisher.publishEvent(new CommandRevokedEvent(command));
throw new UnsupportedOperationException("Not yet implemented");
}
}
\ No newline at end of file
......@@ -46,6 +46,8 @@ import com.thedeanda.lorem.LoremIpsum;
import de.ozgcloud.command.Command;
import de.ozgcloud.command.CommandExecutedEvent;
import de.ozgcloud.command.CommandFailedEvent;
import de.ozgcloud.command.CommandRevokeFailedEvent;
import de.ozgcloud.command.RevokeCommandEvent;
import de.ozgcloud.common.errorhandling.TechnicalException;
import de.ozgcloud.vorgang.command.CommandCreatedEventTestFactory;
import de.ozgcloud.vorgang.command.CommandService;
......@@ -231,4 +233,65 @@ class VorgangEventListenerTest {
}
}
@Nested
class TestLockVorgang {
@Captor
private ArgumentCaptor<CommandFailedEvent> eventCaptor;
@Test
void shouldCallLockVorgang() {
var command = CommandTestFactory.create();
listener.onLockVorgang(CommandCreatedEventTestFactory.create(command));
verify(service).lockVorgang(command);
}
@Test
void shouldPublishCommandFailedEvent() {
var command = CommandTestFactory.create();
var errorMessage = "error message";
doThrow(new RuntimeException(errorMessage)).when(service).lockVorgang(command);
listener.onLockVorgang(CommandCreatedEventTestFactory.create(command));
verify(publisher).publishEvent(eventCaptor.capture());
assertThat(eventCaptor.getValue()).satisfies(event -> {
assertThat(event.getSource()).isEqualTo(CommandTestFactory.ID);
assertThat(event.getErrorMessage()).isEqualTo(errorMessage);
});
}
}
@Nested
class TestRevokeLockVorgang {
@Captor
private ArgumentCaptor<CommandRevokeFailedEvent> eventCaptor;
@Test
void shouldCallUnlockVorgang() {
var command = CommandTestFactory.create();
listener.onRevokeLockVorgang(new RevokeCommandEvent(command));
verify(service).unlockVorgang(command);
}
@Test
void shouldPublishCommandFailedEvent() {
var command = CommandTestFactory.create();
var errorMessage = "error message";
doThrow(new RuntimeException(errorMessage)).when(service).unlockVorgang(command);
listener.onRevokeLockVorgang(new RevokeCommandEvent(command));
verify(publisher).publishEvent(eventCaptor.capture());
assertThat(eventCaptor.getValue()).satisfies(event -> {
assertThat(event.getSource()).isEqualTo(CommandTestFactory.ID);
assertThat(event.getErrorMessage()).isEqualTo(errorMessage);
});
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment