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 { ...@@ -40,6 +40,7 @@ public enum Order {
VORGANG_WIEDEREROEFFNEN, VORGANG_WIEDEREROEFFNEN,
VORGANG_ZUM_LOESCHEN_MARKIEREN, VORGANG_ZUM_LOESCHEN_MARKIEREN,
VORGANG_LOESCHEN, VORGANG_LOESCHEN,
VORGANG_LOCK,
ASSIGN_USER, ASSIGN_USER,
......
...@@ -35,6 +35,8 @@ import de.ozgcloud.command.Command; ...@@ -35,6 +35,8 @@ import de.ozgcloud.command.Command;
import de.ozgcloud.command.CommandCreatedEvent; import de.ozgcloud.command.CommandCreatedEvent;
import de.ozgcloud.command.CommandExecutedEvent; import de.ozgcloud.command.CommandExecutedEvent;
import de.ozgcloud.command.CommandFailedEvent; 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.CommandService;
import de.ozgcloud.vorgang.command.Order; import de.ozgcloud.vorgang.command.Order;
import de.ozgcloud.vorgang.files.FileService; import de.ozgcloud.vorgang.files.FileService;
...@@ -54,6 +56,9 @@ public class VorgangEventListener { ...@@ -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_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()); 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 @Autowired
private StatusService statusService; private StatusService statusService;
@Autowired @Autowired
...@@ -111,6 +116,28 @@ public class VorgangEventListener { ...@@ -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) { void publishEvent(CommandExecutedEvent event) {
LOG.debug("Command {} executed", event.getSource()); LOG.debug("Command {} executed", event.getSource());
publisher.publishEvent(event); publisher.publishEvent(event);
......
...@@ -44,6 +44,7 @@ import org.springframework.validation.annotation.Validated; ...@@ -44,6 +44,7 @@ import org.springframework.validation.annotation.Validated;
import de.ozgcloud.command.Command; import de.ozgcloud.command.Command;
import de.ozgcloud.command.VorgangAssignedEvent; import de.ozgcloud.command.VorgangAssignedEvent;
import de.ozgcloud.command.VorgangCreatedEvent; import de.ozgcloud.command.VorgangCreatedEvent;
import de.ozgcloud.command.VorgangLockedEvent;
import de.ozgcloud.vorgang.clientattribute.ClientAttributeMap; import de.ozgcloud.vorgang.clientattribute.ClientAttributeMap;
import de.ozgcloud.vorgang.clientattribute.ClientAttributeReadPermitted; import de.ozgcloud.vorgang.clientattribute.ClientAttributeReadPermitted;
import de.ozgcloud.vorgang.clientattribute.ClientAttributesMap; import de.ozgcloud.vorgang.clientattribute.ClientAttributesMap;
...@@ -223,4 +224,14 @@ public class VorgangService { ...@@ -223,4 +224,14 @@ public class VorgangService {
Vorgang loadById(String vorgangId) { Vorgang loadById(String vorgangId) {
return repository.findById(vorgangId).orElseThrow(() -> new NotFoundException(Vorgang.class, 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; ...@@ -46,6 +46,8 @@ import com.thedeanda.lorem.LoremIpsum;
import de.ozgcloud.command.Command; import de.ozgcloud.command.Command;
import de.ozgcloud.command.CommandExecutedEvent; import de.ozgcloud.command.CommandExecutedEvent;
import de.ozgcloud.command.CommandFailedEvent; import de.ozgcloud.command.CommandFailedEvent;
import de.ozgcloud.command.CommandRevokeFailedEvent;
import de.ozgcloud.command.RevokeCommandEvent;
import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.common.errorhandling.TechnicalException;
import de.ozgcloud.vorgang.command.CommandCreatedEventTestFactory; import de.ozgcloud.vorgang.command.CommandCreatedEventTestFactory;
import de.ozgcloud.vorgang.command.CommandService; import de.ozgcloud.vorgang.command.CommandService;
...@@ -231,4 +233,65 @@ class VorgangEventListenerTest { ...@@ -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