From 2ee70f55b0463ca9b7ea68244bae92890746302e Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Thu, 12 Dec 2024 14:14:00 +0100 Subject: [PATCH 1/5] OZG-7037 create archivierung package --- .../ArchiveEventListener.java | 8 +- .../archive/archivierung/ArchiveService.java | 59 ++++ .../archive/export/ExportService.java | 43 --- .../ArchiveEventListenerITCase.java | 2 +- .../ArchiveEventListenerTest.java | 9 +- .../archivierung/ArchiveServiceTest.java | 256 ++++++++++++++++++ .../archive/export/ExportServiceTest.java | 221 --------------- 7 files changed, 325 insertions(+), 273 deletions(-) rename archive-manager-server/src/main/java/de/ozgcloud/archive/{vorgang => archivierung}/ArchiveEventListener.java (96%) create mode 100644 archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveService.java rename archive-manager-server/src/test/java/de/ozgcloud/archive/{vorgang => archivierung}/ArchiveEventListenerITCase.java (98%) rename archive-manager-server/src/test/java/de/ozgcloud/archive/{vorgang => archivierung}/ArchiveEventListenerTest.java (96%) create mode 100644 archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveServiceTest.java diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/vorgang/ArchiveEventListener.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveEventListener.java similarity index 96% rename from archive-manager-server/src/main/java/de/ozgcloud/archive/vorgang/ArchiveEventListener.java rename to archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveEventListener.java index e863cb3..d2577b6 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/vorgang/ArchiveEventListener.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveEventListener.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.archive.vorgang; +package de.ozgcloud.archive.archivierung; import java.util.function.Consumer; import java.util.function.Predicate; @@ -39,7 +39,7 @@ import de.ozgcloud.archive.common.callcontext.CallContextUser; import de.ozgcloud.archive.common.callcontext.CurrentUserService; import de.ozgcloud.archive.common.command.CommandService; import de.ozgcloud.archive.common.errorhandling.TimeoutException; -import de.ozgcloud.archive.export.ExportService; +import de.ozgcloud.archive.vorgang.VorgangService; import de.ozgcloud.command.Command; import de.ozgcloud.command.CommandCreatedEvent; import de.ozgcloud.command.CommandFailedEvent; @@ -77,7 +77,7 @@ class ArchiveEventListener { private final ApplicationEventPublisher eventPublisher; private final CommandService commandService; - private final ExportService exportService; + private final ArchiveService archiveService; @EventListener(condition = IS_ARCHIVE_VORGANG_EVENT) void onArchiveVorgangEvent(CommandCreatedEvent event) { @@ -92,7 +92,7 @@ class ArchiveEventListener { @EventListener(condition = IS_LOCKED_BY_ARCHIVE_MANAGER_EVENT) public void onVorgangLockedEvent(VorgangLockedEvent event) { waitForPendingCommandsToFinish(event.getCommand().getVorgangId(), WAIT_INTERVAL); - runWithSecurityContext(event.getCommand(), exportService::archiveVorgang); + runWithSecurityContext(event.getCommand(), archiveService::archiveVorgang); } void waitForPendingCommandsToFinish(String vorgangId, long waitIntervalInMillis) { diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveService.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveService.java new file mode 100644 index 0000000..5f2bdc2 --- /dev/null +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveService.java @@ -0,0 +1,59 @@ +package de.ozgcloud.archive.archivierung; + +import java.io.File; +import java.io.IOException; +import java.util.UUID; + +import jakarta.activation.DataHandler; +import jakarta.activation.FileDataSource; + +import org.springframework.stereotype.Service; + +import de.ozgcloud.archive.common.xta.XtaService; +import de.ozgcloud.archive.export.ExportService; +import de.ozgcloud.command.Command; +import de.ozgcloud.common.errorhandling.TechnicalException; +import de.ozgcloud.xta.client.model.XtaFile; +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +class ArchiveService { + + private final XtaService xtaService; + private final ExportService exportService; + + public void archiveVorgang(Command command) { + xtaService.sendXdomeaFile(buildXdomeaXtaFile(command.getVorgangId())); + } + + XtaFile buildXdomeaXtaFile(String vorgangId) { + var fileNameId = createFileNameId(); + return XtaFile.builder() + .name(exportService.buildXdomeaFileName(fileNameId)) + .content(createFileContent(vorgangId, fileNameId)) + .contentType("application/zip") + .build(); + } + + String createFileNameId() { + return UUID.randomUUID().toString(); + } + + DataHandler createFileContent(String vorgangId, String fileNameId) { + try { + var tempFile = createTempFile(fileNameId); + var fileDataSource = new FileDataSource(tempFile); + exportService.writeXdomeaFileContent(vorgangId, fileNameId, fileDataSource.getOutputStream()); + return new DataHandler(fileDataSource); + } catch (IOException e) { + throw new TechnicalException("Error on creating file content for xDomea file!", e); + } + } + + File createTempFile(String fileNameId) throws IOException { + var tempFile = File.createTempFile(fileNameId, ".zip"); + tempFile.deleteOnExit(); + return tempFile; + } +} diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/export/ExportService.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/export/ExportService.java index 1aba00a..955842d 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/export/ExportService.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/export/ExportService.java @@ -1,21 +1,16 @@ package de.ozgcloud.archive.export; -import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.nio.charset.StandardCharsets; import java.util.Optional; import java.util.Set; -import java.util.UUID; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; -import jakarta.activation.DataHandler; -import jakarta.activation.FileDataSource; - import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; @@ -23,7 +18,6 @@ import org.springframework.stereotype.Service; import de.ozgcloud.archive.ArchiveManagerConfiguration; import de.ozgcloud.archive.bescheid.ExportBescheidService; import de.ozgcloud.archive.common.ExportFilenameGenerator; -import de.ozgcloud.archive.common.xta.XtaService; import de.ozgcloud.archive.file.ExportFileService; import de.ozgcloud.archive.file.OzgFile; import de.ozgcloud.archive.historie.ExportHistorieService; @@ -33,9 +27,7 @@ import de.ozgcloud.archive.vorgang.Eingang; import de.ozgcloud.archive.vorgang.EingangHeader; import de.ozgcloud.archive.vorgang.VorgangService; import de.ozgcloud.archive.vorgang.VorgangWithEingang; -import de.ozgcloud.command.Command; import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.xta.client.model.XtaFile; import de.xoev.xdomea.AbgabeAbgabe0401; import lombok.RequiredArgsConstructor; @@ -57,46 +49,11 @@ public class ExportService { private final ExportKommentarService exportKommentarService; private final ExportNachrichtService exportNachrichtService; private final ExportBescheidService exportBescheidService; - private final XtaService xtaService; - - public void archiveVorgang(Command command) { - xtaService.sendXdomeaFile(buildXdomeaXtaFile(command.getVorgangId())); - } - - XtaFile buildXdomeaXtaFile(String vorgangId) { - var fileNameId = createFileNameId(); - return XtaFile.builder() - .name(buildXdomeaFileName(fileNameId)) - .content(createFileContent(vorgangId, fileNameId)) - .contentType("application/zip") - .build(); - } - - String createFileNameId() { - return UUID.randomUUID().toString(); - } public String buildXdomeaFileName(String fileNameId) { return String.format(EXPORT_XDOMEA_FILENAME_TEMPLATE, fileNameId); } - DataHandler createFileContent(String vorgangId, String fileNameId) { - try { - var tempFile = createTempFile(fileNameId); - var fileDataSource = new FileDataSource(tempFile); - writeXdomeaFileContent(vorgangId, fileNameId, fileDataSource.getOutputStream()); - return new DataHandler(fileDataSource); - } catch (IOException e) { - throw new TechnicalException("Error on creating file content for xDomea file!", e); - } - } - - File createTempFile(String fileNameId) throws IOException { - var tempFile = File.createTempFile(fileNameId, ".zip"); - tempFile.deleteOnExit(); - return tempFile; - } - public void writeXdomeaFileContent(String vorgangId, String filenameId, OutputStream outputStream) { var exportData = collectExportData(vorgangId, filenameId); writeZipFile(exportData, outputStream); diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/vorgang/ArchiveEventListenerITCase.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveEventListenerITCase.java similarity index 98% rename from archive-manager-server/src/test/java/de/ozgcloud/archive/vorgang/ArchiveEventListenerITCase.java rename to archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveEventListenerITCase.java index e72c634..cffcb26 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/vorgang/ArchiveEventListenerITCase.java +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveEventListenerITCase.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.archive.vorgang; +package de.ozgcloud.archive.archivierung; import static org.mockito.Mockito.*; diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/vorgang/ArchiveEventListenerTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveEventListenerTest.java similarity index 96% rename from archive-manager-server/src/test/java/de/ozgcloud/archive/vorgang/ArchiveEventListenerTest.java rename to archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveEventListenerTest.java index 8f0318b..4648346 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/vorgang/ArchiveEventListenerTest.java +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveEventListenerTest.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.archive.vorgang; +package de.ozgcloud.archive.archivierung; import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; @@ -44,7 +44,8 @@ import de.ozgcloud.archive.attributes.ClientAttributeService; import de.ozgcloud.archive.common.callcontext.CurrentUserService; import de.ozgcloud.archive.common.command.CommandService; import de.ozgcloud.archive.common.errorhandling.TimeoutException; -import de.ozgcloud.archive.export.ExportService; +import de.ozgcloud.archive.vorgang.VorgangService; +import de.ozgcloud.archive.vorgang.VorgangWithEingangTestFactory; import de.ozgcloud.command.Command; import de.ozgcloud.command.CommandCreatedEventTestFactory; import de.ozgcloud.command.CommandFailedEvent; @@ -70,7 +71,7 @@ class ArchiveEventListenerTest { @Mock private CommandService commandService; @Mock - private ExportService exportService; + private ArchiveService archiveService; @Captor private ArgumentCaptor<Consumer<Command>> commandExecutorCapture; @@ -214,7 +215,7 @@ class ArchiveEventListenerTest { verify(eventListener).runWithSecurityContext(eq(command), commandExecutorCapture.capture()); commandExecutorCapture.getValue().accept(command); - verify(exportService).archiveVorgang(command); + verify(archiveService).archiveVorgang(command); } } diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveServiceTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveServiceTest.java new file mode 100644 index 0000000..bd22a52 --- /dev/null +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveServiceTest.java @@ -0,0 +1,256 @@ +package de.ozgcloud.archive.archivierung; + +import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.util.UUID; + +import jakarta.activation.DataHandler; +import jakarta.activation.FileDataSource; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockedConstruction; +import org.mockito.Spy; + +import de.ozgcloud.archive.common.xta.XtaService; +import de.ozgcloud.archive.export.ExportService; +import de.ozgcloud.archive.vorgang.VorgangWithEingangTestFactory; +import de.ozgcloud.archive.vorgang.XdomeaXtaFileTestFactory; +import de.ozgcloud.command.Command; +import de.ozgcloud.command.CommandTestFactory; +import de.ozgcloud.common.errorhandling.TechnicalException; +import de.ozgcloud.xta.client.model.XtaFile; +import lombok.SneakyThrows; + +class ArchiveServiceTest { + + @Spy + @InjectMocks + private ArchiveService service; + + @Mock + private ExportService exportService; + @Mock + private XtaService xtaService; + + @Nested + class TestArchiveVorgang { + + private final Command command = CommandTestFactory.create(); + private final XtaFile xdomeaFile = XdomeaXtaFileTestFactory.create(); + + @BeforeEach + void mock() { + doReturn(xdomeaFile).when(service).buildXdomeaXtaFile(CommandTestFactory.VORGANG_ID); + } + + @Test + void shouldCallBuildXdomeaXtaFile() { + archiveVorgang(); + + verify(service).buildXdomeaXtaFile(CommandTestFactory.VORGANG_ID); + } + + @Test + void shouldCallSendXdomeaFile() { + archiveVorgang(); + + verify(xtaService).sendXdomeaFile(xdomeaFile); + } + + private void archiveVorgang() { + service.archiveVorgang(command); + } + } + + @Nested + class TestBuildXdomeaXtaFile { + + private final String fileNameId = UUID.randomUUID().toString(); + + @BeforeEach + void mock() { + doReturn(fileNameId).when(service).createFileNameId(); + when(exportService.buildXdomeaFileName(any())).thenReturn(XdomeaXtaFileTestFactory.FILE_NAME); + doReturn(XdomeaXtaFileTestFactory.DATA_HANDLER).when(service).createFileContent(VorgangWithEingangTestFactory.ID, fileNameId); + } + + @Test + void shouldCallCreateFileNameId() { + buildXdomeaXtaFile(); + + verify(service).createFileNameId(); + } + + @Test + void shouldCallBuildXdomeaFileName() { + buildXdomeaXtaFile(); + + verify(exportService).buildXdomeaFileName(fileNameId); + } + + @Test + void shouldCallCreateFileContent() { + buildXdomeaXtaFile(); + + verify(service).createFileContent(VorgangWithEingangTestFactory.ID, fileNameId); + } + + @Test + void shouldReturnXdomeaFile() { + var xdomeaFile = buildXdomeaXtaFile(); + + assertThat(xdomeaFile).usingRecursiveComparison().isEqualTo(XdomeaXtaFileTestFactory.create()); + } + + private XtaFile buildXdomeaXtaFile() { + return service.buildXdomeaXtaFile(VorgangWithEingangTestFactory.ID); + } + } + + @Nested + class TestCreateFileNameId { + + private final UUID uuid = UUID.randomUUID(); + + @Test + void shouldReturnRandomUUID() { + try (var mockedStaticUUID = mockStatic(UUID.class)) { + mockedStaticUUID.when(UUID::randomUUID).thenReturn(uuid); + + var returnedFileNameId = service.createFileNameId(); + + assertThat(returnedFileNameId).isEqualTo(uuid.toString()); + } + } + } + + @Nested + class TestCreateFileContent { + + private final String fileNameId = UUID.randomUUID().toString(); + + @Nested + class TestOnNoExceptionThrown { + private MockedConstruction<FileDataSource> fileDataSourceConstruction; + private FileDataSource fileDataSource; + private File dataSourceFile; + + private MockedConstruction<DataHandler> dataHandlerConstruction; + private DataHandler dataHandler; + private FileDataSource dataHandlerSource; + + @Mock + private File tempFile; + @Mock + private OutputStream outputStream; + + @BeforeEach + @SneakyThrows + void setUpMock() { + doReturn(tempFile).when(service).createTempFile(fileNameId); + fileDataSourceConstruction = mockConstruction(FileDataSource.class, + (fileDataSource, context) -> { + dataSourceFile = (File) context.arguments().get(0); + this.fileDataSource = fileDataSource; + when(fileDataSource.getOutputStream()).thenReturn(outputStream); + }); + dataHandlerConstruction = mockConstruction(DataHandler.class, (dataHandler, context) -> { + this.dataHandler = dataHandler; + dataHandlerSource = (FileDataSource) context.arguments().get(0); + }); + } + + @AfterEach + void cleanUp() { + fileDataSourceConstruction.close(); + dataHandlerConstruction.close(); + } + + @Test + @SneakyThrows + void shouldCallCreateTempFile() { + createFileContent(); + + verify(service).createTempFile(fileNameId); + } + + @Test + void shouldCreateFileDataSourceWithTempFile() { + createFileContent(); + + assertThat(dataSourceFile).isEqualTo(tempFile); + } + + @Test + @SneakyThrows + void shouldGetOutputStreamOfFileDataSource() { + createFileContent(); + + verify(fileDataSource).getOutputStream(); + } + + @Test + void shouldWriteXdomeaContentToOutputStream() { + createFileContent(); + + verify(exportService).writeXdomeaFileContent(VorgangWithEingangTestFactory.ID, fileNameId, outputStream); + } + + @Test + void shouldConstructDataHandlerFromFileDataSource() { + createFileContent(); + + assertThat(dataHandlerConstruction.constructed()).hasSize(1); + assertThat(dataHandlerSource).isEqualTo(fileDataSource); + } + + @Test + void shouldReturnDataHandler() { + var resultDataHandler = createFileContent(); + + assertThat(resultDataHandler).isEqualTo(dataHandler); + } + } + + @Nested + class TestOnIOExceptionThrown { + @Test + @SneakyThrows + void shouldThrowTechnicalExcpetion() { + doThrow(IOException.class).when(service).createTempFile(any()); + + assertThrows(TechnicalException.class, () -> createFileContent()); + } + } + + private DataHandler createFileContent() { + return service.createFileContent(VorgangWithEingangTestFactory.ID, fileNameId); + } + } + + @Nested + class TestCreateTempFile { + + private final String fileNameId = UUID.randomUUID().toString(); + + @Test + @SneakyThrows + void shouldReturnFile() { + var file = service.createTempFile(fileNameId); + + assertThat(file).isNotNull().isInstanceOf(File.class); + } + } + +} diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/export/ExportServiceTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/export/ExportServiceTest.java index 128073a..1f79f26 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/export/ExportServiceTest.java +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/export/ExportServiceTest.java @@ -2,11 +2,9 @@ package de.ozgcloud.archive.export; import static de.ozgcloud.archive.common.XDomeaTestUtils.*; import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; -import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.nio.charset.StandardCharsets; @@ -15,9 +13,6 @@ import java.util.UUID; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; -import jakarta.activation.DataHandler; -import jakarta.activation.FileDataSource; - import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -27,7 +22,6 @@ import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.MockedConstruction; import org.mockito.MockedStatic; import org.mockito.Spy; @@ -54,11 +48,7 @@ import de.ozgcloud.archive.vorgang.VorgangService; import de.ozgcloud.archive.vorgang.VorgangTypeTestFactory; import de.ozgcloud.archive.vorgang.VorgangWithEingang; import de.ozgcloud.archive.vorgang.VorgangWithEingangTestFactory; -import de.ozgcloud.archive.vorgang.XdomeaXtaFileTestFactory; -import de.ozgcloud.command.Command; -import de.ozgcloud.command.CommandTestFactory; import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.xta.client.model.XtaFile; import de.xoev.xdomea.AbgabeAbgabe0401; import de.xoev.xdomea.AkteType; import de.xoev.xdomea.DokumentType; @@ -669,215 +659,4 @@ class ExportServiceTest { } } - @Nested - class TestArchiveVorgang { - - private final Command command = CommandTestFactory.create(); - private final XtaFile xdomeaFile = XdomeaXtaFileTestFactory.create(); - - @BeforeEach - void mock() { - doReturn(xdomeaFile).when(service).buildXdomeaXtaFile(CommandTestFactory.VORGANG_ID); - } - - @Test - void shouldCallBuildXdomeaXtaFile() { - archiveVorgang(); - - verify(service).buildXdomeaXtaFile(CommandTestFactory.VORGANG_ID); - } - - @Test - void shouldCallSendXdomeaFile() { - archiveVorgang(); - - verify(xtaService).sendXdomeaFile(xdomeaFile); - } - - private void archiveVorgang() { - service.archiveVorgang(command); - } - } - - @Nested - class TestBuildXdomeaXtaFile { - - private final String fileNameId = UUID.randomUUID().toString(); - - @BeforeEach - void mock() { - doReturn(fileNameId).when(service).createFileNameId(); - doReturn(XdomeaXtaFileTestFactory.FILE_NAME).when(service).buildXdomeaFileName(any()); - doReturn(XdomeaXtaFileTestFactory.DATA_HANDLER).when(service).createFileContent(VorgangWithEingangTestFactory.ID, fileNameId); - } - - @Test - void shouldCallCreateFileNameId() { - buildXdomeaXtaFile(); - - verify(service).createFileNameId(); - } - - @Test - void shouldCallBuildXdomeaFileName() { - buildXdomeaXtaFile(); - - verify(service).buildXdomeaFileName(fileNameId); - } - - @Test - void shouldCallCreateFileContent() { - buildXdomeaXtaFile(); - - verify(service).createFileContent(VorgangWithEingangTestFactory.ID, fileNameId); - } - - @Test - void shouldReturnXdomeaFile() { - var xdomeaFile = buildXdomeaXtaFile(); - - assertThat(xdomeaFile).usingRecursiveComparison().isEqualTo(XdomeaXtaFileTestFactory.create()); - } - - private XtaFile buildXdomeaXtaFile() { - return service.buildXdomeaXtaFile(VorgangWithEingangTestFactory.ID); - } - } - - @Nested - class TestCreateFileNameId { - - private final UUID uuid = UUID.randomUUID(); - - @Test - void shouldReturnRandomUUID() { - try (var mockedStaticUUID = mockStatic(UUID.class)) { - mockedStaticUUID.when(UUID::randomUUID).thenReturn(uuid); - - var returnedFileNameId = service.createFileNameId(); - - assertThat(returnedFileNameId).isEqualTo(uuid.toString()); - } - } - } - - @Nested - class TestCreateFileContent { - - private final String fileNameId = UUID.randomUUID().toString(); - - @Nested - class TestOnNoExceptionThrown { - private MockedConstruction<FileDataSource> fileDataSourceConstruction; - private FileDataSource fileDataSource; - private File dataSourceFile; - - private MockedConstruction<DataHandler> dataHandlerConstruction; - private DataHandler dataHandler; - private FileDataSource dataHandlerSource; - - @Mock - private File tempFile; - @Mock - private OutputStream outputStream; - - @BeforeEach - @SneakyThrows - void setUpMock() { - doReturn(tempFile).when(service).createTempFile(fileNameId); - fileDataSourceConstruction = mockConstruction(FileDataSource.class, - (fileDataSource, context) -> { - dataSourceFile = (File) context.arguments().get(0); - this.fileDataSource = fileDataSource; - when(fileDataSource.getOutputStream()).thenReturn(outputStream); - }); - dataHandlerConstruction = mockConstruction(DataHandler.class, (dataHandler, context) -> { - this.dataHandler = dataHandler; - dataHandlerSource = (FileDataSource) context.arguments().get(0); - }); - doNothing().when(service).writeXdomeaFileContent(any(), any(), any()); - } - - @AfterEach - void cleanUp() { - fileDataSourceConstruction.close(); - dataHandlerConstruction.close(); - } - - @Test - @SneakyThrows - void shouldCallCreateTempFile() { - createFileContent(); - - verify(service).createTempFile(fileNameId); - } - - @Test - void shouldCreateFileDataSourceWithTempFile() { - createFileContent(); - - assertThat(dataSourceFile).isEqualTo(tempFile); - } - - @Test - @SneakyThrows - void shouldGetOutputStreamOfFileDataSource() { - createFileContent(); - - verify(fileDataSource).getOutputStream(); - } - - @Test - void shouldWriteXdomeaContentToOutputStream() { - createFileContent(); - - verify(service).writeXdomeaFileContent(VorgangWithEingangTestFactory.ID, fileNameId, outputStream); - } - - @Test - void shouldConstructDataHandlerFromFileDataSource() { - createFileContent(); - - assertThat(dataHandlerConstruction.constructed()).hasSize(1); - assertThat(dataHandlerSource).isEqualTo(fileDataSource); - } - - @Test - void shouldReturnDataHandler() { - var resultDataHandler = createFileContent(); - - assertThat(resultDataHandler).isEqualTo(dataHandler); - } - } - - @Nested - class TestOnIOExceptionThrown { - @Test - @SneakyThrows - void shouldThrowTechnicalExcpetion() { - doThrow(IOException.class).when(service).createTempFile(any()); - - assertThrows(TechnicalException.class, () -> createFileContent()); - } - } - - private DataHandler createFileContent() { - return service.createFileContent(VorgangWithEingangTestFactory.ID, fileNameId); - } - } - - @Nested - class TestCreateTempFile { - - private final String fileNameId = UUID.randomUUID().toString(); - - @Test - @SneakyThrows - void shouldReturnFile() { - var file = service.createTempFile(fileNameId); - - assertThat(file).isNotNull().isInstanceOf(File.class); - } - } - } \ No newline at end of file -- GitLab From 2bc665076ea8fa1040917239a141b93bf37ddc95 Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Thu, 12 Dec 2024 14:18:40 +0100 Subject: [PATCH 2/5] OZG-7037 rename variable --- .../main/java/de/ozgcloud/archive/vorgang/VorgangService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/vorgang/VorgangService.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/vorgang/VorgangService.java index 497e0a0..3e0f89c 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/vorgang/VorgangService.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/vorgang/VorgangService.java @@ -75,8 +75,8 @@ public class VorgangService { return allgemeineMetadatenType; } - public void lockVorgang(Command command) { - ozgCloudCommandService.addSubCommands(buildCreateSubCommandsRequest(command.getId(), buildLockVorgangSubCommand(command))); + public void lockVorgang(Command parentCommand) { + ozgCloudCommandService.addSubCommands(buildCreateSubCommandsRequest(parentCommand.getId(), buildLockVorgangSubCommand(parentCommand))); } OzgCloudCommand buildLockVorgangSubCommand(Command command) { -- GitLab From 555aa7110b30ffbf2eab286ebdd69ef092a0028b Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Thu, 12 Dec 2024 14:48:06 +0100 Subject: [PATCH 3/5] OZG-7037 move ClientAttributeService into Archive Service --- .../archive/ArchiveManagerConfiguration.java | 1 - .../archivierung/ArchiveEventListener.java | 8 +- .../archive/archivierung/ArchiveService.java | 24 ++++++ .../attributes/ClientAttributeService.java | 61 --------------- .../ArchiveEventListenerTest.java | 5 +- .../archivierung/ArchiveServiceTest.java | 77 +++++++++++++++++++ ...loudBooleanClientAttributeTestFactory.java | 29 +++++++ 7 files changed, 134 insertions(+), 71 deletions(-) delete mode 100644 archive-manager-server/src/main/java/de/ozgcloud/archive/attributes/ClientAttributeService.java create mode 100644 archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/OzgCloudBooleanClientAttributeTestFactory.java diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/ArchiveManagerConfiguration.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/ArchiveManagerConfiguration.java index 2472774..6fdcbf2 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/ArchiveManagerConfiguration.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/ArchiveManagerConfiguration.java @@ -58,7 +58,6 @@ public class ArchiveManagerConfiguration { public static final String CALL_CONTEXT_PROVIDER_NAME = "archive_CallContextProvider"; public static final String CALL_CONTEXT_MAPPER_NAME = "archive_CallContextMapper"; - public static final String CLIENT_ATTRIBUTE_SERVICE_NAME = "archive_ClientAttributeService"; public static final String OZGCLOUD_CLIENT_ATTRIBUTE_SERVICE_NAME = "archive_OzgCloudClientAttributeService"; public static final String KOMMENTAR_SERVICE_NAME = "archive_KommentarService"; diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveEventListener.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveEventListener.java index d2577b6..a9f8f15 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveEventListener.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveEventListener.java @@ -34,7 +34,6 @@ import org.springframework.security.core.context.SecurityContext; import org.springframework.stereotype.Component; import de.ozgcloud.archive.ArchiveManagerConfiguration; -import de.ozgcloud.archive.attributes.ClientAttributeService; import de.ozgcloud.archive.common.callcontext.CallContextUser; import de.ozgcloud.archive.common.callcontext.CurrentUserService; import de.ozgcloud.archive.common.command.CommandService; @@ -69,13 +68,12 @@ class ArchiveEventListener { @Qualifier(ArchiveManagerConfiguration.CURRENT_USER_SERVICE_NAME) // NOSONAR private final CurrentUserService currentUserService; - @Qualifier(ArchiveManagerConfiguration.CLIENT_ATTRIBUTE_SERVICE_NAME) // NOSONAR - private final ClientAttributeService clientAttributeService; - @Qualifier(ArchiveManagerConfiguration.VORGANG_SERVICE_NAME) // NOSONAR private final VorgangService vorgangService; private final ApplicationEventPublisher eventPublisher; + + @Qualifier(ArchiveManagerConfiguration.COMMAND_SERVICE_NAME) // NOSONAR private final CommandService commandService; private final ArchiveService archiveService; @@ -85,7 +83,7 @@ class ArchiveEventListener { } void doLockVorgang(Command command) { - clientAttributeService.setVorgangArchiving(command.getVorgangId()); + archiveService.setVorgangArchiving(command.getVorgangId()); vorgangService.lockVorgang(command); } diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveService.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveService.java index 5f2bdc2..63fca7e 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveService.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveService.java @@ -7,8 +7,15 @@ import java.util.UUID; import jakarta.activation.DataHandler; import jakarta.activation.FileDataSource; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; +import de.ozgcloud.apilib.client_attribute.OzgCloudAccessPermission; +import de.ozgcloud.apilib.client_attribute.OzgCloudBooleanClientAttribute; +import de.ozgcloud.apilib.client_attribute.OzgCloudClientAttributeService; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangIdMapper; +import de.ozgcloud.archive.ArchiveManagerConfiguration; +import de.ozgcloud.archive.common.callcontext.CallContextUser; import de.ozgcloud.archive.common.xta.XtaService; import de.ozgcloud.archive.export.ExportService; import de.ozgcloud.command.Command; @@ -20,8 +27,25 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor class ArchiveService { + public static final String ATTRIBUTE_NAME_ANTRAG_ARCHIVING = "ARCHIVING"; private final XtaService xtaService; private final ExportService exportService; + @Qualifier(ArchiveManagerConfiguration.OZGCLOUD_CLIENT_ATTRIBUTE_SERVICE_NAME) // NOSONAR + private final OzgCloudClientAttributeService ozgCloudAttributesService; + private final OzgCloudVorgangIdMapper vorgangIdMapper; + + public void setVorgangArchiving(String vorgangId) { + ozgCloudAttributesService.setClientAttribute(buildBooleanClientAttribute(true), vorgangIdMapper.fromString(vorgangId)); + } + + OzgCloudBooleanClientAttribute buildBooleanClientAttribute(boolean isArchiving) { + return OzgCloudBooleanClientAttribute.builder() + .clientName(CallContextUser.ARCHIVE_MANAGER_CLIENT_NAME) + .access(OzgCloudAccessPermission.READ_ONLY) + .attributeName(ATTRIBUTE_NAME_ANTRAG_ARCHIVING) + .value(isArchiving) + .build(); + } public void archiveVorgang(Command command) { xtaService.sendXdomeaFile(buildXdomeaXtaFile(command.getVorgangId())); diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/attributes/ClientAttributeService.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/attributes/ClientAttributeService.java deleted file mode 100644 index 21d24f8..0000000 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/attributes/ClientAttributeService.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * 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.archive.attributes; - -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.stereotype.Service; - -import de.ozgcloud.apilib.client_attribute.OzgCloudAccessPermission; -import de.ozgcloud.apilib.client_attribute.OzgCloudBooleanClientAttribute; -import de.ozgcloud.apilib.client_attribute.OzgCloudClientAttributeService; -import de.ozgcloud.apilib.vorgang.OzgCloudVorgangIdMapper; -import de.ozgcloud.archive.ArchiveManagerConfiguration; -import de.ozgcloud.archive.common.callcontext.CallContextUser; -import lombok.RequiredArgsConstructor; - -@Service(ArchiveManagerConfiguration.CLIENT_ATTRIBUTE_SERVICE_NAME) // NOSONAR -@RequiredArgsConstructor -public class ClientAttributeService { - - public static final String ATTRIBUTE_NAME_ANTRAG_ARCHIVING = "ARCHIVING"; - - @Qualifier(ArchiveManagerConfiguration.OZGCLOUD_CLIENT_ATTRIBUTE_SERVICE_NAME) // NOSONAR - private final OzgCloudClientAttributeService ozgCloudAttributesService; - - private final OzgCloudVorgangIdMapper vorgangIdMapper; - - public void setVorgangArchiving(String vorgangId) { - ozgCloudAttributesService.setClientAttribute(buildBooleanClientAttribute(true), vorgangIdMapper.fromString(vorgangId)); - } - - OzgCloudBooleanClientAttribute buildBooleanClientAttribute(boolean isArchiving) { - return OzgCloudBooleanClientAttribute.builder() - .clientName(CallContextUser.ARCHIVE_MANAGER_CLIENT_NAME) - .access(OzgCloudAccessPermission.READ_ONLY) - .attributeName(ATTRIBUTE_NAME_ANTRAG_ARCHIVING) - .value(isArchiving) - .build(); - } - -} diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveEventListenerTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveEventListenerTest.java index 4648346..2e8379e 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveEventListenerTest.java +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveEventListenerTest.java @@ -40,7 +40,6 @@ import org.mockito.Spy; import org.springframework.context.ApplicationEventPublisher; import org.springframework.security.core.context.SecurityContext; -import de.ozgcloud.archive.attributes.ClientAttributeService; import de.ozgcloud.archive.common.callcontext.CurrentUserService; import de.ozgcloud.archive.common.command.CommandService; import de.ozgcloud.archive.common.errorhandling.TimeoutException; @@ -63,8 +62,6 @@ class ArchiveEventListenerTest { @Mock private CurrentUserService currentUserService; @Mock - private ClientAttributeService clientAttributeService; - @Mock private VorgangService vorgangService; @Mock private ApplicationEventPublisher eventPublisher; @@ -103,7 +100,7 @@ class ArchiveEventListenerTest { void shouldCallSetVorgangArchiving() { doLockVorgang(); - verify(clientAttributeService).setVorgangArchiving(CommandTestFactory.VORGANG_ID); + verify(archiveService).setVorgangArchiving(CommandTestFactory.VORGANG_ID); } @Test diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveServiceTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveServiceTest.java index bd22a52..4e1213a 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveServiceTest.java +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveServiceTest.java @@ -17,11 +17,18 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockedConstruction; import org.mockito.Spy; +import de.ozgcloud.apilib.client_attribute.OzgCloudAccessPermission; +import de.ozgcloud.apilib.client_attribute.OzgCloudClientAttributeService; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangIdMapper; +import de.ozgcloud.archive.common.callcontext.CallContextUser; import de.ozgcloud.archive.common.xta.XtaService; import de.ozgcloud.archive.export.ExportService; import de.ozgcloud.archive.vorgang.VorgangWithEingangTestFactory; @@ -42,6 +49,76 @@ class ArchiveServiceTest { private ExportService exportService; @Mock private XtaService xtaService; + @Mock + private OzgCloudClientAttributeService ozgCloudAttributesService; + @Mock + private OzgCloudVorgangIdMapper vorgangIdMapper; + + @Nested + class TestSetVorgangArchiving { + + @Test + void shouldBuildBooleanClientAttribute() { + setVorgangArchiving(); + + verify(service).buildBooleanClientAttribute(true); + } + + @Test + void shouldCallVorgangIdMapper() { + setVorgangArchiving(); + + verify(vorgangIdMapper).fromString(VorgangWithEingangTestFactory.ID); + } + + @Test + void shouldSetClientAttribute() { + var attribute = OzgCloudBooleanClientAttributeTestFactory.create(); + doReturn(attribute).when(service).buildBooleanClientAttribute(true); + when(vorgangIdMapper.fromString(VorgangWithEingangTestFactory.ID)).thenReturn(OzgCloudVorgangId.from(VorgangWithEingangTestFactory.ID)); + + setVorgangArchiving(); + + verify(ozgCloudAttributesService).setClientAttribute(attribute, OzgCloudVorgangId.from(VorgangWithEingangTestFactory.ID)); + } + + private void setVorgangArchiving() { + service.setVorgangArchiving(VorgangWithEingangTestFactory.ID); + } + } + + @Nested + class TestBuildBooleanClientAttribute { + + @Test + void shouldSetClientName() { + var attribute = service.buildBooleanClientAttribute(false); + + assertThat(attribute.getClientName()).isEqualTo(CallContextUser.ARCHIVE_MANAGER_CLIENT_NAME); + } + + @Test + void shouldSetAccess() { + var attribute = service.buildBooleanClientAttribute(false); + + assertThat(attribute.getAccess()).isEqualTo(OzgCloudAccessPermission.READ_ONLY); + } + + @Test + void shouldSetAttributeName() { + var attribute = service.buildBooleanClientAttribute(false); + + assertThat(attribute.getAttributeName()).isEqualTo(ArchiveService.ATTRIBUTE_NAME_ANTRAG_ARCHIVING); + } + + @ParameterizedTest + @ValueSource(booleans = { true, false }) + void shouldSetValue(boolean isArchiving) { + var attribute = service.buildBooleanClientAttribute(isArchiving); + + assertThat(attribute.getValue()).isEqualTo(isArchiving); + } + } @Nested class TestArchiveVorgang { diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/OzgCloudBooleanClientAttributeTestFactory.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/OzgCloudBooleanClientAttributeTestFactory.java new file mode 100644 index 0000000..954b23b --- /dev/null +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/OzgCloudBooleanClientAttributeTestFactory.java @@ -0,0 +1,29 @@ +package de.ozgcloud.archive.archivierung; + +import com.thedeanda.lorem.LoremIpsum; + +import de.ozgcloud.apilib.client_attribute.OzgCloudAccessPermission; +import de.ozgcloud.apilib.client_attribute.OzgCloudBooleanClientAttribute; +import de.ozgcloud.apilib.client_attribute.OzgCloudBooleanClientAttribute.OzgCloudBooleanClientAttributeBuilder; +import de.ozgcloud.archive.common.callcontext.CallContextUserTestFactory; + +public class OzgCloudBooleanClientAttributeTestFactory { + + private static final boolean VALUE = true; + private static final String ATTRIBUTE_NAME = LoremIpsum.getInstance().getWords(1); + private static final OzgCloudAccessPermission ACCESS = OzgCloudAccessPermission.READ_ONLY; + private static final String CLIENT_NAME = CallContextUserTestFactory.CLIENT_NAME; + + public static OzgCloudBooleanClientAttribute create() { + return createBuilder().build(); + } + + private static OzgCloudBooleanClientAttributeBuilder<?, ?> createBuilder() { + return OzgCloudBooleanClientAttribute.builder() + .clientName(CLIENT_NAME) + .access(ACCESS) + .attributeName(ATTRIBUTE_NAME) + .value(VALUE); + } + +} -- GitLab From e74d345561efef95da848ea9e5de35d009dda32d Mon Sep 17 00:00:00 2001 From: Felix Reichenbach <felix.reichenbach@mgm-tp.com> Date: Thu, 2 Jan 2025 16:01:34 +0100 Subject: [PATCH 4/5] OZG-7037 restore licence header --- .../archive/archivierung/ArchiveService.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveService.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveService.java index 63fca7e..bbabead 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveService.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveService.java @@ -1,3 +1,27 @@ +/* + * 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.archive.archivierung; import java.io.File; -- GitLab From afa771120690b4561535d98736806353bf2e1b23 Mon Sep 17 00:00:00 2001 From: Felix Reichenbach <felix.reichenbach@mgm-tp.com> Date: Thu, 2 Jan 2025 16:02:19 +0100 Subject: [PATCH 5/5] OZG-7037 remove empty line --- .../java/de/ozgcloud/archive/archivierung/ArchiveService.java | 1 - 1 file changed, 1 deletion(-) diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveService.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveService.java index bbabead..dc45d25 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveService.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveService.java @@ -21,7 +21,6 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ - package de.ozgcloud.archive.archivierung; import java.io.File; -- GitLab