diff --git a/.gitignore b/.gitignore index 41f692f8929306bf0430e65bcc8eccb01e92fd02..c10edf4e5214be3a14fbe0fa4512f95f87fd6662 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ .factorypath target + +.idea +*.iml diff --git a/kop-common-lib/src/main/java/de/itvsh/kop/common/binaryfile/GrpcFileUploadUtils.java b/kop-common-lib/src/main/java/de/itvsh/kop/common/binaryfile/GrpcFileUploadUtils.java deleted file mode 100644 index b06f858334184616993106402f712b2580458fd1..0000000000000000000000000000000000000000 --- a/kop-common-lib/src/main/java/de/itvsh/kop/common/binaryfile/GrpcFileUploadUtils.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (C) 2022 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.itvsh.kop.common.binaryfile; - -import java.io.BufferedInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.Optional; -import java.util.concurrent.CompletableFuture; -import java.util.function.Function; - -import org.apache.commons.io.IOUtils; - -import de.itvsh.kop.common.errorhandling.TechnicalException; -import io.grpc.stub.CallStreamObserver; -import io.grpc.stub.StreamObserver; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import lombok.NonNull; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class GrpcFileUploadUtils { - - static final int CHUNK_SIZE = 255 * 1024; - - /* - * Q = Request Type; S = Response Type - */ - public static <Q, S> FileSender<Q, S> createSender(Function<byte[], Q> chunkBuilder, InputStream inputStream, - Function<StreamObserver<S>, CallStreamObserver<Q>> reqObserverBuilder) { - return new FileSender<>(chunkBuilder, reqObserverBuilder, inputStream); - } - - public static class FileSender<Q, S> { - private final Function<byte[], Q> chunkBuilder; - private final InputStream inputStream; - - private final CompletableFuture<S> resultFuture = new CompletableFuture<>(); - private final StreamObserver<S> responseObserver = BinaryFileUploadStreamObserver.<S>create(resultFuture); - private final CallStreamObserver<Q> requestObserver; - - private Optional<Q> metaData = Optional.empty(); - - FileSender(Function<byte[], Q> chunkBuilder, Function<StreamObserver<S>, CallStreamObserver<Q>> reqObserverBuilder, InputStream inputStream) { - this.chunkBuilder = chunkBuilder; - this.inputStream = inputStream; - - requestObserver = reqObserverBuilder.apply(responseObserver); - } - - public FileSender<Q, S> withMetaData(@NonNull Q metaData) { - this.metaData = Optional.of(metaData); - return this; - } - - public CompletableFuture<S> send() { - sendMetaData(); - sendAsChunks(); - requestObserver.onCompleted(); - - return resultFuture; - } - - void sendAsChunks() { - try (var bufferUploadStream = getAsBufferedStream(inputStream)) { - while (hasDataToRead(bufferUploadStream)) { - sendNextChunk(bufferUploadStream); - } - } catch (IOException e) { - throw new TechnicalException("Error on closing input file stream", e); - } - } - - BufferedInputStream getAsBufferedStream(InputStream fileContent) { - return IOUtils.buffer(fileContent); - } - - boolean hasDataToRead(BufferedInputStream uploadStream) throws IOException { - return uploadStream.available() > 0; - } - - void sendNextChunk(BufferedInputStream uploadStream) { - if (requestObserver.isReady()) { - sendChunk(uploadStream); - } - } - - void sendChunk(BufferedInputStream uploadStream) { - byte[] content = readFromStream(uploadStream, CHUNK_SIZE); - - var chunk = chunkBuilder.apply(content); - - requestObserver.onNext(chunk); - } - - private byte[] readFromStream(BufferedInputStream uploadStream, int size) { - try { - return uploadStream.readNBytes(size); - } catch (IOException e) { - throw new TechnicalException("Error on sending a single chunk", e); - } - } - - private void sendMetaData() { - metaData.ifPresent(requestObserver::onNext); - } - } - -} \ No newline at end of file diff --git a/kop-common-lib/src/test/java/de/itvsh/kop/common/binaryfile/GrpcFileUploadUtilsTest.java b/kop-common-lib/src/test/java/de/itvsh/kop/common/binaryfile/GrpcFileUploadUtilsTest.java deleted file mode 100644 index 4ba9e9a444eecff0d3b3783246dcb17e210abc5e..0000000000000000000000000000000000000000 --- a/kop-common-lib/src/test/java/de/itvsh/kop/common/binaryfile/GrpcFileUploadUtilsTest.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright (C) 2022 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.itvsh.kop.common.binaryfile; - -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.BufferedInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.concurrent.CompletableFuture; -import java.util.function.Function; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.itvsh.kop.common.binaryfile.BinaryFileTestFactory.TestRequestType; -import de.itvsh.kop.common.binaryfile.BinaryFileTestFactory.TestResponseType; -import de.itvsh.kop.common.binaryfile.GrpcFileUploadUtils.FileSender; -import de.itvsh.kop.common.errorhandling.TechnicalException; -import io.grpc.stub.CallStreamObserver; -import io.grpc.stub.StreamObserver; - -class GrpcFileUploadUtilsTest { - - @Spy - private GrpcFileUploadUtils service; - - @Mock - private Function<byte[], TestRequestType> chunkBuilder; - @Mock - private Function<StreamObserver<TestResponseType>, CallStreamObserver<TestRequestType>> reqObserverBuilder; - @Mock - private CallStreamObserver<TestRequestType> requestObserver; - @Mock - private InputStream inputStream; - - private FileSender<TestRequestType, TestResponseType> fileSender; - - @Mock - private TestRequestType metaData; - - @BeforeEach - void init() { - when(reqObserverBuilder.apply(any())).thenReturn(requestObserver); - fileSender = spy(GrpcFileUploadUtils.createSender(chunkBuilder, inputStream, reqObserverBuilder)); - } - - @Nested - class TestCreateFileSender { - - @Test - void shouldCreateRequestObserver() { - GrpcFileUploadUtils.createSender(chunkBuilder, inputStream, reqObserverBuilder); - - verify(reqObserverBuilder, atLeastOnce()).apply(notNull()); - } - } - - @Nested - class TestSendBinaryFile { - - @BeforeEach - void mockSendAsChunks() { - doNothing().when(fileSender).sendAsChunks(); - } - - @Test - void shouldCallNextWithMetaData() { - fileSender.withMetaData(metaData).send(); - - verify(requestObserver).onNext(metaData); - } - - @Test - void shouldSendChunks() { - callService(); - - verify(fileSender).sendAsChunks(); - } - - @Test - void shouldCallOnComplete() { - callService(); - - verify(requestObserver).onCompleted(); - } - - @Test - void shouldReturnFuture() { - var result = callService(); - - assertThat(result).isNotNull(); - } - - private CompletableFuture<TestResponseType> callService() { - return fileSender.send(); - } - } - - @Nested - class TestSendAsChunks { - - @Mock - private BufferedInputStream bufferedUploadStream; - - @BeforeEach - void mock() { - doReturn(bufferedUploadStream).when(fileSender).getAsBufferedStream(any(InputStream.class)); - } - - @Test - void shouldCallHasDataToRead() throws IOException { - callService(); - - verify(fileSender).hasDataToRead(bufferedUploadStream); - } - - @Test - void shouldSendNextChunk() throws IOException { - doNothing().when(fileSender).sendNextChunk(any()); - doReturn(true, false).when(fileSender).hasDataToRead(any()); - - callService(); - - verify(fileSender, atLeastOnce()).sendNextChunk(bufferedUploadStream); - } - - @Test - void shouldThrowException() throws IOException { - doThrow(IOException.class).when(fileSender).hasDataToRead(any()); - - assertThrows(TechnicalException.class, () -> callService()); - } - - private void callService() { - fileSender.sendAsChunks(); - } - } - - @Nested - class TestSendNextChunk { - - @Mock - private BufferedInputStream bufferedUploadStream; - - @Test - void shouldSendNextChunk() { - doNothing().when(fileSender).sendChunk(any()); - when(requestObserver.isReady()).thenReturn(true); - - callService(); - - verify(fileSender).sendChunk(bufferedUploadStream); - } - - @Test - void shouldNotSendNextChunkWhenNotReady() { - when(requestObserver.isReady()).thenReturn(false); - - callService(); - - verify(fileSender, never()).sendChunk(bufferedUploadStream); - } - - private void callService() { - fileSender.sendNextChunk(bufferedUploadStream); - } - } - - @Nested - class TestSendChunk { - - @Mock - private BufferedInputStream uploadStream; - - private final byte[] chunkPart = "ChunkPartContent".getBytes(); - - @Test - void shouldApplyBuildChunk() throws IOException { - doReturn(chunkPart).when(uploadStream).readNBytes(anyInt()); - - callService(); - - verify(chunkBuilder).apply(chunkPart); - } - - @Test - void shouldCallOnNext() throws IOException { - doReturn(chunkPart).when(uploadStream).readNBytes(anyInt()); - - callService(); - - verify(requestObserver).onNext(any()); - } - - @Test - void shouldThrowException() throws IOException { - doThrow(IOException.class).when(uploadStream).readNBytes(anyInt()); - - assertThrows(TechnicalException.class, () -> callService()); - } - - private void callService() { - fileSender.sendChunk(uploadStream); - } - } -} \ No newline at end of file diff --git a/lombok.config b/lombok.config index c39610edca34274113f8d831fac9b279fcfe4f4f..81661f0fd9c5f6e2f40f39aa9ee13f7017fc2726 100644 --- a/lombok.config +++ b/lombok.config @@ -1,28 +1,30 @@ -# Copyright (C) 2022 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: +# 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 # -# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# 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. # -# 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. lombok.log.fieldName=LOG lombok.log.slf4j.flagUsage = ERROR lombok.log.log4j.flagUsage = ERROR lombok.data.flagUsage = ERROR lombok.nonNull.exceptionType = IllegalArgumentException -lombok.addLombokGeneratedAnnotation = true +lombok.addLombokGeneratedAnnotation = true \ No newline at end of file diff --git a/kop-common-dependencies/pom.xml b/ozgcloud-common-dependencies/pom.xml similarity index 57% rename from kop-common-dependencies/pom.xml rename to ozgcloud-common-dependencies/pom.xml index e3e9a6cb0ef70b7a92f5d570f9060e4306a0212e..64967a3b453890bdf3e57309db3a025f606218c8 100644 --- a/kop-common-dependencies/pom.xml +++ b/ozgcloud-common-dependencies/pom.xml @@ -1,6 +1,6 @@ <!-- - Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + 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 @@ -23,48 +23,58 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <groupId>de.itvsh.kop.common</groupId> - <artifactId>kop-common</artifactId> - <version>1.3.0</version> + <groupId>de.ozgcloud.common</groupId> + <artifactId>ozgcloud-common</artifactId> + <version>3.0.1</version> </parent> - <artifactId>kop-common-dependencies</artifactId> - <name>Kop Common - Dependencies</name> + <artifactId>ozgcloud-common-dependencies</artifactId> + <name>OzgCloud Common - Dependencies</name> <packaging>pom</packaging> - <description>Dependenencies management for kop projects</description> + <description>Dependenencies management for ozgcloud projects</description> <properties> - <pluto.version>0.31.0</pluto.version> + <vorgang-manager.version>2.1.0</vorgang-manager.version> + <license.version>1.6.0</license.version> <java.version>17</java.version> - <maven.compiler.source>${java.version}</maven.compiler.source> - <maven.compiler.target>${java.version}</maven.compiler.target> + <maven.compiler.source>17</maven.compiler.source> + <maven.compiler.target>17</maven.compiler.target> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - <spring-boot.version>2.7.3</spring-boot.version> - <spring.version>5.3.23</spring.version> + <spring-boot.version>3.1.8</spring-boot.version> + <spring.version>6.0.16</spring.version> - <grpc.spring-boot-starter.version>2.13.1.RELEASE</grpc.spring-boot-starter.version> - <grpc.version>1.48.1</grpc.version> + <grpc.spring-boot-starter.version>5.0.0</grpc.spring-boot-starter.version> - <mapstruct.version>1.5.3.Final</mapstruct.version> - <commons-io.version>2.11.0</commons-io.version> + <net.devh.grpc.spring-boot-server-starter.version>2.14.0.RELEASE</net.devh.grpc.spring-boot-server-starter.version> + <net.devh.grpc.spring-boot-client-starter.version>2.14.0.RELEASE</net.devh.grpc.spring-boot-client-starter.version> + <grpc.version>1.59.0</grpc.version> + + + <protoc-jar-plugin.version>3.11.4</protoc-jar-plugin.version> + + <protobuf.version>3.25.1</protobuf.version> + <protoc-gen.version>1.59.0</protoc-gen.version> + + <mapstruct.version>1.5.5.Final</mapstruct.version> + <commons-io.version>2.15.0</commons-io.version> <commons-beanutils.version>1.9.4</commons-beanutils.version> - <commons-lang3.version>3.12.0</commons-lang3.version> + <commons-lang3.version>3.14.0</commons-lang3.version> <commons-collections.version>4.4</commons-collections.version> - <java-jwt.version>4.2.1</java-jwt.version> - <jjwt.version>0.11.5</jjwt.version> + <java-jwt.version>4.4.0</java-jwt.version> + <jjwt.version>0.12.3</jjwt.version> -<!--TODO update - welche version verwendet ops --> - <keycloak-adapter.version>18.0.0</keycloak-adapter.version> - <keycloak-spring-boot-starter.version>18.0.0</keycloak-spring-boot-starter.version> <jakarta.version>2.1.0</jakarta.version> - - <protoc-jar-plugin.version>3.11.4</protoc-jar-plugin.version> + + <quarkus.platform.version>3.5.3</quarkus.platform.version> <!-- Test --> <lorem.version>2.1</lorem.version> @@ -84,39 +94,44 @@ <!-- own projects --> <dependency> - <groupId>de.itvsh.kop.common</groupId> - <artifactId>kop-common-lib</artifactId> - <version>${kop-common.version}</version> + <groupId>de.ozgcloud.common</groupId> + <artifactId>ozgcloud-common-lib</artifactId> + <version>${ozgcloud-common.version}</version> </dependency> <dependency> - <groupId>de.itvsh.kop.common</groupId> - <artifactId>kop-common-test</artifactId> - <version>${kop-common.version}</version> + <groupId>de.ozgcloud.common</groupId> + <artifactId>ozgcloud-common-test</artifactId> + <version>${ozgcloud-common.version}</version> <scope>test</scope> </dependency> <dependency> - <groupId>de.itvsh.kop.common</groupId> - <artifactId>kop-common-license</artifactId> - <version>${kop-common.version}</version> + <groupId>de.ozgcloud.common</groupId> + <artifactId>ozgcloud-common-license</artifactId> + <version>${license.version}</version> </dependency> <dependency> - <groupId>de.itvsh.ozg.pluto</groupId> - <artifactId>pluto-interface</artifactId> - <version>${pluto.version}</version> + <groupId>de.ozgcloud.vorgang-manager</groupId> + <artifactId>vorgang-manager-interface</artifactId> + <version>${vorgang-manager.version}</version> </dependency> <dependency> - <groupId>de.itvsh.ozg.pluto</groupId> - <artifactId>pluto-utils</artifactId> - <version>${pluto.version}</version> + <groupId>de.ozgcloud.vorgang-manager</groupId> + <artifactId>vorgang-manager-utils</artifactId> + <version>${vorgang-manager.version}</version> </dependency> <dependency> - <groupId>de.itvsh.ozg.pluto</groupId> - <artifactId>pluto-utils</artifactId> + <groupId>de.ozgcloud.vorgang-manager</groupId> + <artifactId>vorgang-manager-utils</artifactId> <type>test-jar</type> - <version>${pluto.version}</version> + <version>${vorgang-manager.version}</version> <scope>test</scope> </dependency> + <dependency> + <groupId>de.ozgcloud.vorgang-manager</groupId> + <artifactId>vorgang-manager-command</artifactId> + <version>${vorgang-manager.version}</version> + </dependency> <!-- spring --> <dependency> @@ -156,15 +171,26 @@ <!-- grpc --> <dependency> - <groupId>net.devh</groupId> + <groupId>io.github.lognet</groupId> + <artifactId>grpc-spring-boot-starter</artifactId> + <version>${grpc.spring-boot-starter.version}</version> + </dependency> + <dependency> + <groupId>io.github.lognet</groupId> <artifactId>grpc-client-spring-boot-starter</artifactId> <version>${grpc.spring-boot-starter.version}</version> </dependency> + <dependency> + <groupId>net.devh</groupId> + <artifactId>grpc-client-spring-boot-starter</artifactId> + <version>${net.devh.grpc.spring-boot-client-starter.version}</version> + </dependency> <dependency> <groupId>net.devh</groupId> <artifactId>grpc-server-spring-boot-starter</artifactId> - <version>${grpc.spring-boot-starter.version}</version> + <version>${net.devh.grpc.spring-boot-server-starter.version}</version> </dependency> + <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-stub</artifactId> @@ -175,6 +201,17 @@ <artifactId>grpc-protobuf</artifactId> <version>${grpc.version}</version> </dependency> + <!-- protobuf --> + <dependency> + <groupId>com.google.protobuf</groupId> + <artifactId>protobuf-java</artifactId> + <version>${protobuf.version}</version> + </dependency> + <dependency> + <groupId>com.google.protobuf</groupId> + <artifactId>protobuf-java-util</artifactId> + <version>${protobuf.version}</version> + </dependency> <!-- keycloak --> <dependency> @@ -204,6 +241,17 @@ <artifactId>jjwt-api</artifactId> <version>${jjwt.version}</version> </dependency> + <dependency> + <groupId>io.jsonwebtoken</groupId> + <artifactId>jjwt-impl</artifactId> + <version>${jjwt.version}</version> + </dependency> + <dependency> + <groupId>io.jsonwebtoken</groupId> + <artifactId>jjwt-jackson</artifactId> + <version>${jjwt.version}</version> + <scope>runtime</scope> + </dependency> <!-- TODO legacy - pleace remove --> <dependency> <groupId>io.jsonwebtoken</groupId> @@ -235,6 +283,15 @@ <version>${faker.version}</version> <scope>test</scope> </dependency> + + <!-- Quarkus --> + <dependency> + <groupId>io.quarkus.platform</groupId> + <artifactId>quarkus-bom</artifactId> + <version>${quarkus.platform.version}</version> + <type>pom</type> + <scope>import</scope> + </dependency> </dependencies> </dependencyManagement> @@ -250,5 +307,12 @@ <url>https://nexus.ozg-sh.de/repository/ozg-snapshots/</url> </snapshotRepository> </distributionManagement> + <dependencies> + <dependency> + <groupId>org.glassfish.jaxb</groupId> + <artifactId>jaxb-runtime</artifactId> + <scope>runtime</scope> + </dependency> + </dependencies> -</project> \ No newline at end of file +</project> diff --git a/kop-common-lib/pom.xml b/ozgcloud-common-lib/pom.xml similarity index 82% rename from kop-common-lib/pom.xml rename to ozgcloud-common-lib/pom.xml index bd1ba53ffdf7e47cb8d0ff77e3e9ff066d78ba8b..8efcc254a982914ce481aad0e701f6852bf5e070 100644 --- a/kop-common-lib/pom.xml +++ b/ozgcloud-common-lib/pom.xml @@ -1,6 +1,6 @@ <!-- - Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + 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 @@ -28,26 +28,27 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <groupId>de.itvsh.kop.common</groupId> - <artifactId>kop-common</artifactId> - <version>1.3.0</version> + <groupId>de.ozgcloud.common</groupId> + <artifactId>ozgcloud-common</artifactId> + <version>3.0.1</version> </parent> - <artifactId>kop-common-lib</artifactId> - <name>Kop Common - Shared Lib</name> + <artifactId>ozgcloud-common-lib</artifactId> + <name>OzgCloud Common - Shared Lib</name> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> - <mockito.version>4.8.1</mockito.version> + <mockito.version>5.7.0</mockito.version> + </properties> <dependencyManagement> <dependencies> <dependency> - <groupId>de.itvsh.kop.common</groupId> - <artifactId>kop-common-dependencies</artifactId> - <version>${kop-common.version}</version> + <groupId>de.ozgcloud.common</groupId> + <artifactId>ozgcloud-common-dependencies</artifactId> + <version>${ozgcloud-common.version}</version> <type>pom</type> <scope>import</scope> </dependency> @@ -70,6 +71,11 @@ <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> + <dependency> + <groupId>org.glassfish.jaxb</groupId> + <artifactId>jaxb-runtime</artifactId> + <scope>runtime</scope> + </dependency> <!-- grpc --> <dependency> <groupId>io.grpc</groupId> @@ -94,6 +100,14 @@ <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-core</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-databind</artifactId> + </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> @@ -133,13 +147,11 @@ <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> - <version>${mockito.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-junit-jupiter</artifactId> - <version>${mockito.version}</version> <scope>test</scope> </dependency> <dependency> diff --git a/kop-common-lib/src/main/java/de/itvsh/kop/common/binaryfile/BinaryFileUploadStreamObserver.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/BinaryFileUploadStreamObserver.java similarity index 63% rename from kop-common-lib/src/main/java/de/itvsh/kop/common/binaryfile/BinaryFileUploadStreamObserver.java rename to ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/BinaryFileUploadStreamObserver.java index 250f52bdda9f4292d0aa15c8cd55474fafd0044a..cdef78110d420b352910afcdc61a877352d19ea5 100644 --- a/kop-common-lib/src/main/java/de/itvsh/kop/common/binaryfile/BinaryFileUploadStreamObserver.java +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/BinaryFileUploadStreamObserver.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,27 +21,36 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.binaryfile; +package de.ozgcloud.common.binaryfile; import java.util.concurrent.CompletableFuture; -import io.grpc.stub.StreamObserver; +import io.grpc.stub.ClientCallStreamObserver; +import io.grpc.stub.ClientResponseObserver; import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +@Log4j2 @RequiredArgsConstructor(access = AccessLevel.PRIVATE) -public class BinaryFileUploadStreamObserver<R> implements StreamObserver<R> { +public class BinaryFileUploadStreamObserver<ReqT, R> implements ClientResponseObserver<ReqT, R> { private final CompletableFuture<R> future; + private final Runnable onReadyHandler; - public static <R> BinaryFileUploadStreamObserver<R> create(CompletableFuture<R> future) { - return new BinaryFileUploadStreamObserver<>(future); + public static <ReqT, R> BinaryFileUploadStreamObserver<ReqT, R> create(CompletableFuture<R> future, Runnable onReadyHandler) { + return new BinaryFileUploadStreamObserver<>(future, onReadyHandler); } @Getter private R response; + @Override + public void beforeStart(ClientCallStreamObserver<ReqT> requestStream) { + requestStream.setOnReadyHandler(onReadyHandler); + } + @Override public void onNext(R response) { this.response = response; @@ -49,11 +58,14 @@ public class BinaryFileUploadStreamObserver<R> implements StreamObserver<R> { @Override public void onError(Throwable t) { + LOG.error("Error on uploading file. Completing Future.", t); future.completeExceptionally(t); } @Override public void onCompleted() { + LOG.debug("Complete future..."); future.complete(response); } + } \ No newline at end of file diff --git a/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/FileDataDeserializer.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/FileDataDeserializer.java new file mode 100644 index 0000000000000000000000000000000000000000..6eb1727b64e083a28cb8dee8ce4e1ff01ae65c20 --- /dev/null +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/FileDataDeserializer.java @@ -0,0 +1,56 @@ +/* + * 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.common.binaryfile; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; + +import lombok.SneakyThrows; + +public class FileDataDeserializer extends StdDeserializer<File> { + + protected FileDataDeserializer() { + super(File.class); + } + + @SneakyThrows + @Override + public File deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException { + var tempFile = TempFileUtils.createTmpFile(); + + try (var out = new FileOutputStream(tempFile.toFile())) { + p.readBinaryValue(out); + out.flush(); + } + + return tempFile.toFile(); + } + +} diff --git a/kop-common-lib/src/main/java/de/itvsh/kop/common/binaryfile/FileId.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/FileId.java similarity index 82% rename from kop-common-lib/src/main/java/de/itvsh/kop/common/binaryfile/FileId.java rename to ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/FileId.java index 2bf5619710d525457beff5584ca950c0180178f3..090d4203158ea13ec36ce8d97f561e3ccdbff3b0 100644 --- a/kop-common-lib/src/main/java/de/itvsh/kop/common/binaryfile/FileId.java +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/FileId.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,11 +21,12 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.binaryfile; +package de.ozgcloud.common.binaryfile; +import java.util.Objects; import java.util.UUID; -import de.itvsh.kop.common.datatype.StringBasedValue; +import de.ozgcloud.common.datatype.StringBasedValue; import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @@ -42,6 +43,9 @@ public class FileId extends StringBasedValue { } public static FileId from(String fileId) { - return new FileId(fileId); + if (Objects.nonNull(fileId)) { + return new FileId(fileId); + } + return null; } } \ No newline at end of file diff --git a/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/GrpcFileUploadUtils.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/GrpcFileUploadUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..b12a237ed6169be35307be45b372cb515221ce6f --- /dev/null +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/GrpcFileUploadUtils.java @@ -0,0 +1,223 @@ +/* + * 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.common.binaryfile; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Objects; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.BiFunction; +import java.util.function.Function; + +import org.apache.commons.io.IOUtils; + +import de.ozgcloud.common.errorhandling.TechnicalException; +import io.grpc.stub.CallStreamObserver; +import io.grpc.stub.StreamObserver; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; + +@Log4j2 +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class GrpcFileUploadUtils { + + static final int CHUNK_SIZE = 4 * 1024; + + /* + * Q = Request Type; S = Response Type + */ + public static <Q, S> FileSender<Q, S> createSender(BiFunction<byte[], Integer, Q> chunkBuilder, InputStream inputStream, + Function<StreamObserver<S>, CallStreamObserver<Q>> reqObserverBuilder) { + return new FileSender<>(chunkBuilder, reqObserverBuilder, inputStream); + } + + public static class FileSender<Q, S> { + private final BiFunction<byte[], Integer, Q> chunkBuilder; + private final InputStream inputStream; + + @Getter + private final CompletableFuture<S> resultFuture = new CompletableFuture<>(); + private final Function<StreamObserver<S>, CallStreamObserver<Q>> reqObserverBuilder; + private CallStreamObserver<Q> requestObserver; + + private Optional<Q> metaData = Optional.empty(); + private final AtomicBoolean metaDataSent = new AtomicBoolean(false); + private final AtomicBoolean done = new AtomicBoolean(false); + + private final StreamReader streamReader; + + FileSender(BiFunction<byte[], Integer, Q> chunkBuilder, Function<StreamObserver<S>, CallStreamObserver<Q>> reqObserverBuilder, + InputStream inputStream) { + this.chunkBuilder = chunkBuilder; + this.inputStream = inputStream; + this.reqObserverBuilder = reqObserverBuilder; + + this.streamReader = new StreamReader(this.inputStream); + } + + public FileSender<Q, S> withMetaData(@NonNull Q metaData) { + this.metaData = Optional.of(metaData); + return this; + } + + public FileSender<Q, S> send() { + LOG.debug("Start sending File."); + var responseObserver = BinaryFileUploadStreamObserver.create(resultFuture, this::sendNext); + requestObserver = reqObserverBuilder.apply(responseObserver); + + return this; + } + + public void cancelOnTimeout() { + LOG.warn("File transfer canceled on timeout"); + resultFuture.cancel(true); + requestObserver.onError(new TechnicalException("Timeout on waiting for upload.")); + } + + public void cancelOnError(Throwable t) { + LOG.error("File tranfer canceled on error.", t); + resultFuture.cancel(true); + requestObserver.onError(t); + } + + void sendNext() { + if (!done.get()) { + waitForOberver(); + sendMetaData(); + do { + LOG.debug("Sending next chunk."); + sendNextChunk(); + } while (!done.get() && isReady()); + LOG.debug("Finished or waiting to become ready."); + } + } + + private boolean isReady() { + return requestObserver.isReady(); + } + + private void waitForOberver() { + synchronized (this) { + while (Objects.isNull(requestObserver)) { + try { + LOG.debug("wait for observer"); + wait(300); + } catch (InterruptedException e) { + LOG.error("Error on waiting for request Observer.", e); + Thread.currentThread().interrupt(); + } + } + } + + } + + long sendNextChunk() { + byte[] contentToSend = streamReader.getNextData(); + + if (streamReader.getLastReadSize() > 0) { + sendChunk(contentToSend, streamReader.getLastReadSize()); + } else { + endTransfer(); + } + return contentToSend.length; + } + + private void endTransfer() { + requestObserver.onCompleted(); + done.set(true); + LOG.debug("File Transfer done. Closing stream."); + IOUtils.closeQuietly(inputStream); + streamReader.close(); + } + + void sendChunk(byte[] content, int length) { + LOG.debug("Sending {} byte Data.", length); + var chunk = chunkBuilder.apply(content, length); + requestObserver.onNext(chunk); + } + + byte[] readFromStream() { + try { + return inputStream.readNBytes(CHUNK_SIZE); + } catch (IOException e) { + throw new TechnicalException("Error on sending a single chunk", e); + } + } + + void sendMetaData() { + metaData.filter(md -> !metaDataSent.get()).ifPresent(this::doSendMetaData); + } + + private void doSendMetaData(Q metadata) { + LOG.debug("Sending Metadata."); + requestObserver.onNext(metadata); + metaDataSent.set(true); + } + + void checkForEndOfStream(long sentSize) { + if (sentSize < CHUNK_SIZE) { + LOG.debug("File Transfer done. Closing stream."); + IOUtils.closeQuietly(inputStream); + requestObserver.onCompleted(); + done.set(true); + } else { + LOG.debug("File Transfer not jet done - need to tranfer another chunk."); + } + } + + @RequiredArgsConstructor + private class StreamReader { + private final InputStream inStream; + private final byte[] buffer = new byte[CHUNK_SIZE]; + @Getter + private int lastReadSize = 0; + @Getter + private final AtomicBoolean done = new AtomicBoolean(false); + + byte[] getNextData() { + readNext(); + return buffer; + } + + void close() { + IOUtils.closeQuietly(inStream); + } + + void readNext() { + try { + lastReadSize = inStream.read(buffer, 0, CHUNK_SIZE); + } catch (IOException e) { + throw new TechnicalException("Error on reading a single chunk", e); + } + } + } + } + +} \ No newline at end of file diff --git a/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/TempFileUtils.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/TempFileUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..adb78c0f43441cd239bf164578d0686ae75dcffb --- /dev/null +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/TempFileUtils.java @@ -0,0 +1,97 @@ +/* + * 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.common.binaryfile; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; + +import org.apache.commons.io.FileUtils; + +import de.ozgcloud.common.errorhandling.TechnicalException; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class TempFileUtils { + static final String TMP_FILE_PREFIX = "filecached-inputstream"; + static final String TMP_FILE_SUFFIX = ".ozg-cloud.tmp"; + + private static final String ERROR_MSG = "Error writing file to temp file."; + + public static File writeTmpFile(InputStream contentStream) { + try { + var tmpFile = createTmpFile(); + + Files.copy(contentStream, tmpFile, StandardCopyOption.REPLACE_EXISTING); + contentStream.close(); + return tmpFile.toFile(); + } catch (IOException e) { + throw new TechnicalException(ERROR_MSG, e); + } + } + + public static File writeTmpFile(String stringData) { + try { + Path tmpFile = createTmpFile(); + + try (var writer = new FileWriter(tmpFile.toFile())) { + writer.write(stringData); + writer.flush(); + } + + return tmpFile.toFile(); + } catch (IOException e) { + throw new TechnicalException(ERROR_MSG, e); + } + } + + public static File writeTmpFile(byte[] data) { + try { + Path tmpFile = createTmpFile(); + + FileUtils.writeByteArrayToFile(tmpFile.toFile(), data); + + return tmpFile.toFile(); + } catch (IOException e) { + throw new TechnicalException(ERROR_MSG, e); + } + + } + + public static Path createTmpFile() { + try { + var tmpFile = Files.createTempFile(TMP_FILE_PREFIX, TMP_FILE_SUFFIX); + tmpFile.toFile().deleteOnExit(); + return tmpFile; + } catch (IOException e) { + throw new TechnicalException("Error creating temporary file.", e); + } + + } +} diff --git a/kop-common-lib/src/main/java/de/itvsh/kop/common/datatype/StringBasedValue.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/datatype/StringBasedValue.java similarity index 93% rename from kop-common-lib/src/main/java/de/itvsh/kop/common/datatype/StringBasedValue.java rename to ozgcloud-common-lib/src/main/java/de/ozgcloud/common/datatype/StringBasedValue.java index 6ae9794d8a188dea381db69cb5f7f16cb0befcbf..f30743ea2be1e2ef2c0876abafa729fb817f90fc 100644 --- a/kop-common-lib/src/main/java/de/itvsh/kop/common/datatype/StringBasedValue.java +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/datatype/StringBasedValue.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.datatype; +package de.ozgcloud.common.datatype; import java.io.Serializable; @@ -52,5 +52,4 @@ public abstract class StringBasedValue implements Serializable { public String toString() { return value; } - } diff --git a/kop-common-lib/src/main/java/de/itvsh/kop/common/errorhandling/ExceptionUtil.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/errorhandling/ExceptionUtil.java similarity index 92% rename from kop-common-lib/src/main/java/de/itvsh/kop/common/errorhandling/ExceptionUtil.java rename to ozgcloud-common-lib/src/main/java/de/ozgcloud/common/errorhandling/ExceptionUtil.java index 4a96957772d60ce8e7892f31962ca1afdc831089..6f0a35c2f64ae4e35b9e164ec33151f0e1dfe9ae 100644 --- a/kop-common-lib/src/main/java/de/itvsh/kop/common/errorhandling/ExceptionUtil.java +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/errorhandling/ExceptionUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.errorhandling; +package de.ozgcloud.common.errorhandling; import lombok.AccessLevel; import lombok.NoArgsConstructor; diff --git a/kop-common-lib/src/main/java/de/itvsh/kop/common/errorhandling/FunctionalErrorCode.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/errorhandling/FunctionalErrorCode.java similarity index 90% rename from kop-common-lib/src/main/java/de/itvsh/kop/common/errorhandling/FunctionalErrorCode.java rename to ozgcloud-common-lib/src/main/java/de/ozgcloud/common/errorhandling/FunctionalErrorCode.java index a9c2d478af739f3f6505573107c5923f1635dc06..76989dd6ed782ad37f9070728813f7f9c99c6156 100644 --- a/kop-common-lib/src/main/java/de/itvsh/kop/common/errorhandling/FunctionalErrorCode.java +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/errorhandling/FunctionalErrorCode.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.errorhandling; +package de.ozgcloud.common.errorhandling; import java.io.Serializable; diff --git a/kop-common-lib/src/main/java/de/itvsh/kop/common/errorhandling/IdentifiableException.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/errorhandling/IdentifiableException.java similarity index 90% rename from kop-common-lib/src/main/java/de/itvsh/kop/common/errorhandling/IdentifiableException.java rename to ozgcloud-common-lib/src/main/java/de/ozgcloud/common/errorhandling/IdentifiableException.java index 774dc68c7a1f626f5115dc949712dad346ff8f26..2f6fd602a468a14ebb1ccc7a11fd89091e25dd80 100644 --- a/kop-common-lib/src/main/java/de/itvsh/kop/common/errorhandling/IdentifiableException.java +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/errorhandling/IdentifiableException.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.errorhandling; +package de.ozgcloud.common.errorhandling; public interface IdentifiableException { diff --git a/kop-common-lib/src/main/java/de/itvsh/kop/common/errorhandling/TechnicalException.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/errorhandling/TechnicalException.java similarity index 93% rename from kop-common-lib/src/main/java/de/itvsh/kop/common/errorhandling/TechnicalException.java rename to ozgcloud-common-lib/src/main/java/de/ozgcloud/common/errorhandling/TechnicalException.java index 9c99d9b9fdde4e4626708a4a6a4240fcc7ba3676..d001fbaac657fc02f27d0223f477644f2c5e4e0a 100644 --- a/kop-common-lib/src/main/java/de/itvsh/kop/common/errorhandling/TechnicalException.java +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/errorhandling/TechnicalException.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.errorhandling; +package de.ozgcloud.common.errorhandling; import java.util.UUID; diff --git a/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/grpc/GrpcUtil.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/grpc/GrpcUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..b72f200e94861e74e4b83459235e74b274f96ba6 --- /dev/null +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/grpc/GrpcUtil.java @@ -0,0 +1,75 @@ +/* + * 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.common.grpc; + +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import java.util.stream.StreamSupport; + +import io.grpc.Metadata; +import io.grpc.Metadata.Key; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class GrpcUtil { + + public static final Key<byte[]> HEADER_KEY_USER_ID = createKeyOf("USER_ID-bin"); + public static final Key<byte[]> HEADER_KEY_CLIENT_NAME = createKeyOf("CLIENT_NAME-bin"); + public static final Key<byte[]> HEADER_KEY_REQUEST_ID = createKeyOf("REQUEST_ID-bin"); + + public static Key<String> keyOfString(String key) { + return Key.of(key, Metadata.ASCII_STRING_MARSHALLER); + } + + public static Key<byte[]> createKeyOf(String key) { + return Key.of(key, Metadata.BINARY_BYTE_MARSHALLER); + } + + public static Optional<String> getFromHeaders(String key, Metadata headers) { + return getFromHeaders(createKeyOf(key), headers); + } + + public static Optional<String> getFromHeaders(Key<byte[]> key, Metadata headers) { + return Optional.ofNullable(headers.get(key)).map(GrpcUtil::byteToString); + } + + public static Collection<String> getCollection(String key, Metadata headers) { + final List<String> result = new ArrayList<>(); + var valuesOptional = Optional.ofNullable(headers.getAll(createKeyOf(key))); + valuesOptional.ifPresent(valuesBytes -> result.addAll(StreamSupport.stream(valuesBytes.spliterator(), false) + .map(GrpcUtil::byteToString) + .toList())); + + return result; + } + + private static String byteToString(byte[] bytes) { + return new String(bytes, StandardCharsets.UTF_8); + } + +} \ No newline at end of file diff --git a/kop-common-lib/src/main/java/de/itvsh/kop/common/logging/AspectLoggingUtils.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/AspectLoggingUtils.java similarity index 89% rename from kop-common-lib/src/main/java/de/itvsh/kop/common/logging/AspectLoggingUtils.java rename to ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/AspectLoggingUtils.java index 53d0fa361697fff4da5e24f38c73fca5e3ddf214..be0380f7ecc96985ff56eec34f156daa56dbc842 100644 --- a/kop-common-lib/src/main/java/de/itvsh/kop/common/logging/AspectLoggingUtils.java +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/AspectLoggingUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,15 +21,16 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.logging; +package de.ozgcloud.common.logging; -import de.itvsh.kop.common.logging.logger.AspectLogger; -import de.itvsh.kop.common.logging.logger.InterceptingLogger; import jakarta.interceptor.InvocationContext; import lombok.AccessLevel; import lombok.NoArgsConstructor; import org.aspectj.lang.JoinPoint; +import de.ozgcloud.common.logging.logger.AspectLogger; +import de.ozgcloud.common.logging.logger.InterceptingLogger; + @NoArgsConstructor(access = AccessLevel.PRIVATE) public class AspectLoggingUtils { diff --git a/kop-common-lib/src/main/java/de/itvsh/kop/common/logging/AspectPointcuts.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/AspectPointcuts.java similarity index 78% rename from kop-common-lib/src/main/java/de/itvsh/kop/common/logging/AspectPointcuts.java rename to ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/AspectPointcuts.java index 4bf8694284277d1d43d12ac36ca78f4fec6b1295..ed83992570330c39d3f6da3b6262350cba60bbe9 100644 --- a/kop-common-lib/src/main/java/de/itvsh/kop/common/logging/AspectPointcuts.java +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/AspectPointcuts.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.logging; +package de.ozgcloud.common.logging; import org.aspectj.lang.annotation.Pointcut; @@ -32,17 +32,17 @@ public class AspectPointcuts { // aspect pointcut - no implementation needed } - @Pointcut("within(de.itvsh..*)") - void anythingInKOP() { + @Pointcut("within(de.ozgcloud..*)") + void anythingInOzgCloud() { // aspect pointcut - no implementation needed } - @Pointcut("anyPublicMethods() && anythingInKOP()") - void anyPublicMethodInKOP() { + @Pointcut("anyPublicMethods() && anythingInOzgCloud()") + void anyPublicMethodInOzgCloud() { // aspect pointcut - no implementation needed } - @Pointcut("anyPublicMethodInKOP() && @target(org.springframework.stereotype.Service)") + @Pointcut("anyPublicMethodInOzgCloud() && @target(org.springframework.stereotype.Service)") void anyPublicServiceMethod() { // aspect pointcut - no implementation needed } diff --git a/kop-common-lib/src/main/java/de/itvsh/kop/common/logging/KopLogging.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/OzgCloudLogging.java similarity index 90% rename from kop-common-lib/src/main/java/de/itvsh/kop/common/logging/KopLogging.java rename to ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/OzgCloudLogging.java index 685b0e4c84a30628bd07a73ad1c298d651bc3331..1fc17dcd81c13de4a1a7c057e645adb3418d6002 100644 --- a/kop-common-lib/src/main/java/de/itvsh/kop/common/logging/KopLogging.java +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/OzgCloudLogging.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.logging; +package de.ozgcloud.common.logging; import jakarta.interceptor.InterceptorBinding; @@ -36,6 +36,6 @@ import static java.lang.annotation.RetentionPolicy.*; @Retention(RUNTIME) @Documented @InterceptorBinding -public @interface KopLogging { +public @interface OzgCloudLogging { } diff --git a/kop-common-lib/src/main/java/de/itvsh/kop/common/logging/KopLoggingAspect.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/OzgCloudLoggingAspect.java similarity index 91% rename from kop-common-lib/src/main/java/de/itvsh/kop/common/logging/KopLoggingAspect.java rename to ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/OzgCloudLoggingAspect.java index eef0028f40216bdb7420538cc0dba98116ffe361..4485310f4fe15624b07a6c8beb872f029a43cbcb 100644 --- a/kop-common-lib/src/main/java/de/itvsh/kop/common/logging/KopLoggingAspect.java +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/OzgCloudLoggingAspect.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.logging; +package de.ozgcloud.common.logging; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; @@ -32,7 +32,7 @@ import org.springframework.stereotype.Component; @Aspect @Component -public class KopLoggingAspect extends AspectPointcuts { +public class OzgCloudLoggingAspect extends AspectPointcuts { @Before("anyPublicServiceMethod()") public void onServiceMethod(JoinPoint joinPoint) { diff --git a/kop-common-lib/src/main/java/de/itvsh/kop/common/logging/KopLoggingInterceptor.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/OzgCloudLoggingInterceptor.java similarity index 90% rename from kop-common-lib/src/main/java/de/itvsh/kop/common/logging/KopLoggingInterceptor.java rename to ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/OzgCloudLoggingInterceptor.java index 7c665d67e9bc3c87964096fd682b1ab8a11ad5e5..7095c94e23630a5467299e770b118f856383757c 100644 --- a/kop-common-lib/src/main/java/de/itvsh/kop/common/logging/KopLoggingInterceptor.java +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/OzgCloudLoggingInterceptor.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,17 +21,17 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.logging; +package de.ozgcloud.common.logging; import jakarta.annotation.Priority; import jakarta.interceptor.AroundInvoke; import jakarta.interceptor.Interceptor; import jakarta.interceptor.InvocationContext; -@KopLogging +@OzgCloudLogging @Priority(10) @Interceptor -public class KopLoggingInterceptor { +public class OzgCloudLoggingInterceptor { @AroundInvoke Object logging(InvocationContext context) throws Exception { diff --git a/kop-common-lib/src/main/java/de/itvsh/kop/common/logging/logger/AspectLogger.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/logger/AspectLogger.java similarity index 93% rename from kop-common-lib/src/main/java/de/itvsh/kop/common/logging/logger/AspectLogger.java rename to ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/logger/AspectLogger.java index e1cc4b6a2adecbc1ad4c56c3dafce7b73dfa3202..2aa2c629d9a7aa06574c035e245692f0a4069c0f 100644 --- a/kop-common-lib/src/main/java/de/itvsh/kop/common/logging/logger/AspectLogger.java +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/logger/AspectLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.logging.logger; +package de.ozgcloud.common.logging.logger; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.reflect.MethodSignature; diff --git a/kop-common-lib/src/main/java/de/itvsh/kop/common/logging/logger/CommonLogger.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/logger/CommonLogger.java similarity index 95% rename from kop-common-lib/src/main/java/de/itvsh/kop/common/logging/logger/CommonLogger.java rename to ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/logger/CommonLogger.java index 8e72530b179687a355424ebd379e7887ffdc8ac5..2b6982c4a3b8aae0d6de1d42e097bda6122a7400 100644 --- a/kop-common-lib/src/main/java/de/itvsh/kop/common/logging/logger/CommonLogger.java +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/logger/CommonLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,17 +21,18 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.logging.logger; +package de.ozgcloud.common.logging.logger; + +import java.util.Collection; +import java.util.StringJoiner; -import de.itvsh.kop.common.datatype.StringBasedValue; -import lombok.RequiredArgsConstructor; -import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.ArrayUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Collection; -import java.util.StringJoiner; +import de.ozgcloud.common.datatype.StringBasedValue; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; @RequiredArgsConstructor @Log4j2 @@ -136,7 +137,7 @@ abstract class CommonLogger<T> { var sb = new StringBuilder(); sb.append("<").append(value.getClass().getSimpleName()); if (value.getClass().isArray()) { - sb.insert(sb.length()-1, ArrayUtils.getLength(value)); + sb.insert(sb.length() - 1, ArrayUtils.getLength(value)); } sb.append(">"); return sb.toString(); diff --git a/kop-common-lib/src/main/java/de/itvsh/kop/common/logging/logger/InterceptingLogger.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/logger/InterceptingLogger.java similarity index 93% rename from kop-common-lib/src/main/java/de/itvsh/kop/common/logging/logger/InterceptingLogger.java rename to ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/logger/InterceptingLogger.java index 90c2431712a5f23f3f8ec53c3226f721497bbc7c..0962c6a999c322c824a7b83d1edd189517def01d 100644 --- a/kop-common-lib/src/main/java/de/itvsh/kop/common/logging/logger/InterceptingLogger.java +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/logging/logger/InterceptingLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.logging.logger; +package de.ozgcloud.common.logging.logger; import jakarta.interceptor.InvocationContext; diff --git a/kop-common-lib/src/main/resources/log4j2-local.xml b/ozgcloud-common-lib/src/main/resources/log4j2-local.xml similarity index 100% rename from kop-common-lib/src/main/resources/log4j2-local.xml rename to ozgcloud-common-lib/src/main/resources/log4j2-local.xml diff --git a/kop-common-lib/src/main/resources/log4j2.xml b/ozgcloud-common-lib/src/main/resources/log4j2.xml similarity index 100% rename from kop-common-lib/src/main/resources/log4j2.xml rename to ozgcloud-common-lib/src/main/resources/log4j2.xml diff --git a/kop-common-lib/src/test/java/de/itvsh/kop/common/binaryfile/BinaryFileTestFactory.java b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/BinaryFileTestFactory.java similarity index 90% rename from kop-common-lib/src/test/java/de/itvsh/kop/common/binaryfile/BinaryFileTestFactory.java rename to ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/BinaryFileTestFactory.java index 0ba2cd4b0d05ae3a6ff6145f5d52eabc0da5570f..38ab1da6f1f64a0c64b8831ffcc974d7bcf64765 100644 --- a/kop-common-lib/src/test/java/de/itvsh/kop/common/binaryfile/BinaryFileTestFactory.java +++ b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/BinaryFileTestFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.binaryfile; +package de.ozgcloud.common.binaryfile; public class BinaryFileTestFactory { diff --git a/kop-common-lib/src/test/java/de/itvsh/kop/common/binaryfile/BinaryFileUploadStreamObserverTest.java b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/BinaryFileUploadStreamObserverTest.java similarity index 84% rename from kop-common-lib/src/test/java/de/itvsh/kop/common/binaryfile/BinaryFileUploadStreamObserverTest.java rename to ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/BinaryFileUploadStreamObserverTest.java index 50c926a77608f1da37db009ba4c1acf111d389b9..d4cc0fd02cc323f2aacdf0b1c5abda9a3de733bf 100644 --- a/kop-common-lib/src/test/java/de/itvsh/kop/common/binaryfile/BinaryFileUploadStreamObserverTest.java +++ b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/BinaryFileUploadStreamObserverTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.binaryfile; +package de.ozgcloud.common.binaryfile; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; @@ -33,12 +33,13 @@ import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; -import de.itvsh.kop.common.binaryfile.BinaryFileTestFactory.TestResponseType; +import de.ozgcloud.common.binaryfile.BinaryFileTestFactory.TestRequestType; +import de.ozgcloud.common.binaryfile.BinaryFileTestFactory.TestResponseType; class BinaryFileUploadStreamObserverTest { @InjectMocks - private BinaryFileUploadStreamObserver<TestResponseType> uploadStreamObserver; + private BinaryFileUploadStreamObserver<TestRequestType, TestResponseType> uploadStreamObserver; @Mock private CompletableFuture<TestResponseType> future; diff --git a/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/GrpcFileUploadUtilsTest.java b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/GrpcFileUploadUtilsTest.java new file mode 100644 index 0000000000000000000000000000000000000000..b532cb4b1a3a410f35ce379df476203dfc9387e7 --- /dev/null +++ b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/GrpcFileUploadUtilsTest.java @@ -0,0 +1,192 @@ +/* + * 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.common.binaryfile; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.io.IOException; +import java.io.InputStream; +import java.util.function.BiFunction; +import java.util.function.Function; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +import de.ozgcloud.common.binaryfile.BinaryFileTestFactory.TestRequestType; +import de.ozgcloud.common.binaryfile.BinaryFileTestFactory.TestResponseType; +import de.ozgcloud.common.binaryfile.GrpcFileUploadUtils.FileSender; +import de.ozgcloud.common.errorhandling.TechnicalException; +import io.grpc.stub.CallStreamObserver; +import io.grpc.stub.StreamObserver; + +class GrpcFileUploadUtilsTest { + + @InjectMocks + private GrpcFileUploadUtils service; + + @Mock + private BiFunction<byte[], Integer, TestRequestType> chunkBuilder; + @Mock + private Function<StreamObserver<TestResponseType>, CallStreamObserver<TestRequestType>> reqObserverBuilder; + @Mock + private CallStreamObserver<TestRequestType> requestObserver; + @Mock + private InputStream inputStream; + + private FileSender<TestRequestType, TestResponseType> fileSender; + + @Mock + private TestRequestType metaData; + + @BeforeEach + void init() { + when(reqObserverBuilder.apply(any())).thenReturn(requestObserver); + fileSender = spy(GrpcFileUploadUtils.createSender(chunkBuilder, inputStream, reqObserverBuilder)); + } + + @Nested + class TestCreateFileSender { + + @Test + void shouldCreateRequestObserver() { + GrpcFileUploadUtils.createSender(chunkBuilder, inputStream, reqObserverBuilder).send(); + + verify(reqObserverBuilder, atLeastOnce()).apply(notNull()); + } + } + + @Nested + class TestSendBinaryFile { + + @Captor + private ArgumentCaptor<Runnable> runnableCaptor; + + @Test + void shouldReturnSenderWithFuture() { + var result = fileSender.send(); + + assertThat(result).isNotNull().extracting(FileSender::getResultFuture).isNotNull(); + } + } + + @Nested + class TestSendNext { + + @BeforeEach + void initObserver() { + fileSender.send(); + } + + @Test + void shouldCallSendMetaData() { + fileSender.sendNext(); + + verify(fileSender).sendMetaData(); + } + + @Test + void shouldSendNextChunk() { + fileSender.sendNext(); + + verify(fileSender).sendNextChunk(); + } + + } + + @Nested + class TestSendChunk { + + private static final byte[] CHUNK_PART = "ChunkPartContent".getBytes(); + + @BeforeEach + void initObserver() { + fileSender.send(); + } + + @Test + void shouldApplyBuildChunk() throws IOException { + fileSender.sendChunk(CHUNK_PART, 5); + + verify(chunkBuilder).apply(CHUNK_PART, 5); + } + + @Test + void shouldCallOnNext() throws IOException { + fileSender.sendChunk(CHUNK_PART, 5); + + verify(requestObserver).onNext(any()); + } + } + + @Nested + class TestSendMetaData { + + @BeforeEach + void initObserver() { + fileSender.send(); + } + + @Test + void shouldNotSendWithoutMetadata() { + fileSender.sendMetaData(); + + verify(requestObserver, never()).onNext(any()); + } + + @Test + void shouldSendMetadata() { + fileSender.withMetaData(metaData).sendMetaData(); + + verify(requestObserver).onNext(metaData); + } + + @Test + void shouldSendMetadataOnlyOnce() { + fileSender.withMetaData(metaData).sendMetaData(); + fileSender.sendMetaData(); + + verify(requestObserver).onNext(metaData); + } + } + + @Disabled("unused") + @Nested + class TestReadFromStream { + @Test + void shouldThrowException() throws IOException { + doThrow(IOException.class).when(inputStream).read(any(), anyInt(), anyInt()); + + assertThatThrownBy(() -> fileSender.readFromStream()).isInstanceOf(TechnicalException.class); + } + } + +} \ No newline at end of file diff --git a/kop-common-lib/src/test/java/de/itvsh/kop/common/errorhandling/ExceptionUtilTest.java b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/errorhandling/ExceptionUtilTest.java similarity index 91% rename from kop-common-lib/src/test/java/de/itvsh/kop/common/errorhandling/ExceptionUtilTest.java rename to ozgcloud-common-lib/src/test/java/de/ozgcloud/common/errorhandling/ExceptionUtilTest.java index 8f2d9049206302318696fe54d0ad7be61823b3e4..994b0bbec435752ea0dfbe38f5fe74d86a2bcece 100644 --- a/kop-common-lib/src/test/java/de/itvsh/kop/common/errorhandling/ExceptionUtilTest.java +++ b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/errorhandling/ExceptionUtilTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.errorhandling; +package de.ozgcloud.common.errorhandling; import static org.assertj.core.api.Assertions.*; diff --git a/kop-common-lib/src/test/java/de/itvsh/kop/common/errorhandling/TechnicalExceptionTest.java b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/errorhandling/TechnicalExceptionTest.java similarity index 92% rename from kop-common-lib/src/test/java/de/itvsh/kop/common/errorhandling/TechnicalExceptionTest.java rename to ozgcloud-common-lib/src/test/java/de/ozgcloud/common/errorhandling/TechnicalExceptionTest.java index 880f69ad87577eb0cf48b4f7163138defe961662..4981ad84511233fa8ccdf1c39850e0dcc0ede43f 100644 --- a/kop-common-lib/src/test/java/de/itvsh/kop/common/errorhandling/TechnicalExceptionTest.java +++ b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/errorhandling/TechnicalExceptionTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.errorhandling; +package de.ozgcloud.common.errorhandling; import static org.assertj.core.api.Assertions.*; diff --git a/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/grpc/GrpcUtilTest.java b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/grpc/GrpcUtilTest.java new file mode 100644 index 0000000000000000000000000000000000000000..d78dc68ef20c24dd6cdae726838e7f4194cbf204 --- /dev/null +++ b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/grpc/GrpcUtilTest.java @@ -0,0 +1,129 @@ +/* + * 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.common.grpc; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import io.grpc.Metadata; + +class GrpcUtilTest { + private static final String KEY_VALUE_BIN = "key_value-bin"; + private static final String KEY_VALUE_STRING = "key_value"; + private static final String UNKNOWN_KEY_BIN = "unknown_key-bin"; + + @DisplayName("Test Grpc Utility methods") + @Nested + class TestGrpcUtils { + + @DisplayName("Test creation of MetaData keys") + @Nested + class TestKeyGeneration { + + @Test + void shouldCreateBinaryKey() { + var key = GrpcUtil.createKeyOf(KEY_VALUE_BIN); + + assertThat(key.name()).isEqualTo(KEY_VALUE_BIN); + } + + @Test + void shouldThrowExceptionBecauseOfMissingBinSuffix() { + assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy(() -> GrpcUtil.createKeyOf("key")); + } + + @Test + void shouldCreateAsciiKey() { + var key = GrpcUtil.keyOfString(KEY_VALUE_STRING); + + assertThat(key.name()).isEqualTo(KEY_VALUE_STRING); + } + + @Test + void shouldThrowExceptionBecauseOfBinSuffix() { + assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy(() -> GrpcUtil.keyOfString(KEY_VALUE_BIN)); + } + } + + @DisplayName("Test reading values from the grpc header") + @Nested + class TestReadingFromHeader { + private static final String TEST_VALUE = "test-value"; + + private Metadata header = new Metadata(); + + @BeforeEach + void initMetadata() { + header.put(GrpcUtil.createKeyOf(KEY_VALUE_BIN), TEST_VALUE.getBytes()); + } + + @Test + void shouldReadFromHeader() { + var value = GrpcUtil.getFromHeaders(KEY_VALUE_BIN, header); + + assertThat(value).isEqualTo(TEST_VALUE); + } + + @Test + void shouldReturnNullOnUnknownKey() { + var value = GrpcUtil.getFromHeaders(UNKNOWN_KEY_BIN, header); + + assertThat(value).isNull(); + } + } + + @DisplayName("Test reading multiple values of a key from the grpc header") + @Nested + class TestReadingCollection { + private static final String TEST_VALUE_1 = "test-value-1"; + private static final String TEST_VALUE_2 = "test-value-2"; + + private Metadata header = new Metadata(); + + @BeforeEach + void initMetadata() { + header.put(GrpcUtil.createKeyOf(KEY_VALUE_BIN), TEST_VALUE_1.getBytes()); + header.put(GrpcUtil.createKeyOf(KEY_VALUE_BIN), TEST_VALUE_2.getBytes()); + } + + @Test + void shouldReadFromHeader() { + var values = GrpcUtil.getCollection(KEY_VALUE_BIN, header); + + assertThat(values).hasSize(2).contains(TEST_VALUE_1, TEST_VALUE_2); + } + + @Test + void shouldGetEmptyCollectionOnUnknownKey() { + var values = GrpcUtil.getCollection(UNKNOWN_KEY_BIN, header); + + assertThat(values).isEmpty(); + } + } + } +} diff --git a/kop-common-lib/src/test/java/de/itvsh/kop/common/logging/KopLoggingInterceptorTest.java b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/logging/OzgCloudLoggingInterceptorTest.java similarity index 92% rename from kop-common-lib/src/test/java/de/itvsh/kop/common/logging/KopLoggingInterceptorTest.java rename to ozgcloud-common-lib/src/test/java/de/ozgcloud/common/logging/OzgCloudLoggingInterceptorTest.java index 988d241e9d1e62d58fbfe28c4133a653b20ad6aa..24da0f5f0bd83d34ad62e34ea2cb44e17f1c47d5 100644 --- a/kop-common-lib/src/test/java/de/itvsh/kop/common/logging/KopLoggingInterceptorTest.java +++ b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/logging/OzgCloudLoggingInterceptorTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,9 +21,13 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.logging; +package de.ozgcloud.common.logging; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; import jakarta.interceptor.InvocationContext; + import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -32,13 +36,9 @@ import org.junit.jupiter.api.Test; import org.mockito.Mock; import org.mockito.MockedStatic; +class OzgCloudLoggingInterceptorTest { -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -class KopLoggingInterceptorTest { - - private final KopLoggingInterceptor interceptor = new KopLoggingInterceptor(); + private final OzgCloudLoggingInterceptor interceptor = new OzgCloudLoggingInterceptor(); @DisplayName("Logging") @Nested diff --git a/kop-common-lib/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension b/ozgcloud-common-lib/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension similarity index 100% rename from kop-common-lib/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension rename to ozgcloud-common-lib/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension diff --git a/kop-common-lib/src/test/resources/junit-platform.properties b/ozgcloud-common-lib/src/test/resources/junit-platform.properties similarity index 100% rename from kop-common-lib/src/test/resources/junit-platform.properties rename to ozgcloud-common-lib/src/test/resources/junit-platform.properties diff --git a/kop-common-lib/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/ozgcloud-common-lib/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker similarity index 100% rename from kop-common-lib/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker rename to ozgcloud-common-lib/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker diff --git a/kop-common-license/LICENSE b/ozgcloud-common-license/LICENSE similarity index 86% rename from kop-common-license/LICENSE rename to ozgcloud-common-license/LICENSE index bdd879281181876d3ad4d49556110e4087271cc2..a78805b39fbca0bfe4c44dd85892823404a7e079 100644 --- a/kop-common-license/LICENSE +++ b/ozgcloud-common-license/LICENSE @@ -1,4 +1,4 @@ -Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch das +Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch das Ministerium für Energiewende, Klimaschutz, Umwelt und Natur Zentrales IT-Management @@ -17,4 +17,4 @@ 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. \ No newline at end of file +unter der Lizenz sind dem Lizenztext zu entnehmen. diff --git a/kop-common-license/pom.xml b/ozgcloud-common-license/pom.xml similarity index 84% rename from kop-common-license/pom.xml rename to ozgcloud-common-license/pom.xml index beb17c320e789828f2319368a1e09c54d045c318..64d9236ef6a57ebed91f7dd79a24db054cb5f1b9 100644 --- a/kop-common-license/pom.xml +++ b/ozgcloud-common-license/pom.xml @@ -27,17 +27,14 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>de.itvsh.kop.common</groupId> - <artifactId>kop-common</artifactId> - <version>1.3.0</version> - </parent> - <artifactId>kop-common-license</artifactId> + <groupId>de.ozgcloud.common</groupId> + <artifactId>ozgcloud-common-license</artifactId> + <version>1.6.0</version> <packaging>jar</packaging> - <name>Kop Common - OS license provider</name> - <description>A Maven project for providing the license to all KOP Projects</description> + <name>OzgCloud Common - OS license provider</name> + <description>A Maven project for providing the license to all OzgCloud Projects</description> <properties> <java.version>17</java.version> diff --git a/kop-common-license/readme.md b/ozgcloud-common-license/readme.md similarity index 82% rename from kop-common-license/readme.md rename to ozgcloud-common-license/readme.md index b4eb890605c2cccb5b4ac812e61612666cea7865..c471a27f5c0752fa04206b506656f5b7d1902187 100644 --- a/kop-common-license/readme.md +++ b/ozgcloud-common-license/readme.md @@ -1,6 +1,6 @@ -com.mycila# KOP Common license +com.mycila# OzgCloud Common license -This is a basic Maven-based project that can be used as license provider for all KOP Projects +This is a basic Maven-based project that can be used as license provider for all OzgCloud Projects It provides the the header and full text of the german [EUPL Version 1.2 license][license] @@ -12,7 +12,7 @@ It is a library, meant to be included as a dependency on any project which may w To use it add ```xml -<kop.license.version>1.3.0-SNAPSHOT</kop.license.version> +<ozgcloud.license.version>1.4.0</ozgcloud.license.version> ``` to the properties section of the pom.xml file. @@ -38,9 +38,9 @@ In the plugins section add </configuration> <dependencies> <dependency> - <groupId>de.itvsh.kop.common</groupId> - <artifactId>kop-common-license</artifactId> - <version>${kop.license.version}</version> + <groupId>de.ozgcloud.common</groupId> + <artifactId>ozgcloud-common-license</artifactId> + <version>${ozgcloud.license.version}</version> </dependency> </dependencies> </plugin> diff --git a/kop-common-license/src/main/resources/license/eupl_v1_2_de/header.txt b/ozgcloud-common-license/src/main/resources/license/eupl_v1_2_de/header.txt similarity index 92% rename from kop-common-license/src/main/resources/license/eupl_v1_2_de/header.txt rename to ozgcloud-common-license/src/main/resources/license/eupl_v1_2_de/header.txt index adf6269212fbf7e68b03280a8c7d38a9fddd92b9..48c75c2baf004a8624155b7ccf33e3f7e5aff6ce 100644 --- a/kop-common-license/src/main/resources/license/eupl_v1_2_de/header.txt +++ b/ozgcloud-common-license/src/main/resources/license/eupl_v1_2_de/header.txt @@ -1,4 +1,4 @@ -Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den +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 diff --git a/kop-common-license/src/main/resources/license/eupl_v1_2_de/license.txt b/ozgcloud-common-license/src/main/resources/license/eupl_v1_2_de/license.txt similarity index 99% rename from kop-common-license/src/main/resources/license/eupl_v1_2_de/license.txt rename to ozgcloud-common-license/src/main/resources/license/eupl_v1_2_de/license.txt index abe3f4490c312b617f058f89de830d09d06ce1c6..e582cb1b65483bc3861845f4a0519ef56c8ad043 100644 --- a/kop-common-license/src/main/resources/license/eupl_v1_2_de/license.txt +++ b/ozgcloud-common-license/src/main/resources/license/eupl_v1_2_de/license.txt @@ -1,4 +1,4 @@ -Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den +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 @@ -103,4 +103,4 @@ Anlage — European Union Public Licence (EUPL) v. 1.1, v. 1.2 — Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) oder Strong Reciprocity (LiLiQ-R+) Die Europäische Kommission kann diesen Anhang aktualisieren, um neuere Fassungen der obigen Lizenzen aufzunehmen, ohne hierfür eine neue Fassung der EUPL auszuarbeiten, solange diese Lizenzen die in Artikel 2 gewährten Rechte gewährleisten und den erfassten Quellcode vor ausschließlicher Aneignung schützen. -Alle sonstigen Änderungen oder Ergänzungen dieses Anhangs bedürfen der Ausarbeitung einer neuen Version der EUPL. \ No newline at end of file +Alle sonstigen Änderungen oder Ergänzungen dieses Anhangs bedürfen der Ausarbeitung einer neuen Version der EUPL. diff --git a/kop-common-parent/pom.xml b/ozgcloud-common-parent/pom.xml similarity index 78% rename from kop-common-parent/pom.xml rename to ozgcloud-common-parent/pom.xml index 4a40bbc21fc3f47134ec3b57b3fba9728837ff6d..48953ed82fbbcb1318d4481208ae42b2a3e6db4f 100644 --- a/kop-common-parent/pom.xml +++ b/ozgcloud-common-parent/pom.xml @@ -1,6 +1,6 @@ <!-- - Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + 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 @@ -31,43 +31,48 @@ <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> - <version>2.7.3</version> + <version>3.1.8</version> <relativePath /> </parent> - <groupId>de.itvsh.kop.common</groupId> - <artifactId>kop-common-parent</artifactId> + <groupId>de.ozgcloud.common</groupId> + <artifactId>ozgcloud-common-parent</artifactId> + <version>3.0.1</version> + <packaging>pom</packaging> - <name>Kop Common - Parent</name> - <description>Parent for all KOP spring boot projects</description> - <version>1.3.0</version> + <name>OzgCloud Common - Parent</name> + <description>Parent for all OzgCloud spring boot projects</description> <properties> <java.version>17</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> - <kop-common.version>1.3.0</kop-common.version> - <kop.license.version>1.3.0</kop.license.version> + <ozgcloud-common.version>3.0.1</ozgcloud-common.version> + <ozgcloud.license.version>1.6.0</ozgcloud.license.version> - <!-- TODO update to 1.5.x --> - <mapstruct.version>1.4.2.Final</mapstruct.version> - <spring-boot.version>2.7.3</spring-boot.version> + <mapstruct.version>1.5.5.Final</mapstruct.version> + <spring-boot.version>3.1.8</spring-boot.version> <!-- plugins --> - <maven-surefire-plugin.version>3.0.0-M7</maven-surefire-plugin.version> - <maven-failsafe-plugin.version>3.0.0-M7</maven-failsafe-plugin.version> - <jacoco.plugin.version>0.8.8</jacoco.plugin.version> - + <maven-surefire-plugin.version>3.2.2</maven-surefire-plugin.version> + <maven-failsafe-plugin.version>3.2.2</maven-failsafe-plugin.version> + <jacoco.plugin.version>0.8.11</jacoco.plugin.version> + <sonarqube.version>3.9.1.2184</sonarqube.version> + <license.plugin.version>4.1</license.plugin.version> + <rewrite.plugin.version>4.38.2</rewrite.plugin.version> + + <!--overriden to fix security issue CVE-2022-1471 --> + <snakeyaml.version>2.2</snakeyaml.version> </properties> <dependencyManagement> <dependencies> <dependency> - <groupId>de.itvsh.kop.common</groupId> - <artifactId>kop-common-dependencies</artifactId> - <version>${kop-common.version}</version> + <groupId>de.ozgcloud.common</groupId> + <artifactId>ozgcloud-common-dependencies</artifactId> + <version>${ozgcloud-common.version}</version> <type>pom</type> <scope>import</scope> </dependency> @@ -76,7 +81,7 @@ <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> - <version>${spring-boot.version}</version> + <version>3.0.5</version> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> @@ -90,12 +95,12 @@ <dependencies> <!-- own project --> <dependency> - <groupId>de.itvsh.kop.common</groupId> - <artifactId>kop-common-test</artifactId> + <groupId>de.ozgcloud.common</groupId> + <artifactId>ozgcloud-common-test</artifactId> </dependency> <dependency> - <groupId>de.itvsh.kop.common</groupId> - <artifactId>kop-common-lib</artifactId> + <groupId>de.ozgcloud.common</groupId> + <artifactId>ozgcloud-common-lib</artifactId> </dependency> <!-- spring --> @@ -159,6 +164,11 @@ <artifactId>micrometer-registry-prometheus</artifactId> <scope>runtime</scope> </dependency> + <dependency> + <groupId>org.glassfish.jaxb</groupId> + <artifactId>jaxb-runtime</artifactId> + <scope>runtime</scope> + </dependency> </dependencies> <build> @@ -198,6 +208,16 @@ <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> + <configuration> + <image> + <!-- cann be removed when using spring-boot 3.2--> + <builder>paketobuildpacks/builder-jammy-base</builder> + <env> + <BPE_DELIM_JAVA_TOOL_OPTIONS xml:space="preserve"> </BPE_DELIM_JAVA_TOOL_OPTIONS> + <BPE_APPEND_JAVA_TOOL_OPTIONS>-Dfile.encoding=UTF-8</BPE_APPEND_JAVA_TOOL_OPTIONS> + </env> + </image> + </configuration> <executions> <execution> <id>repackage</id> @@ -295,7 +315,7 @@ <plugin> <groupId>com.mycila</groupId> <artifactId>license-maven-plugin</artifactId> - <version>4.1</version> + <version>${license.plugin.version}</version> <configuration> <licenseSets> <licenseSet> @@ -310,14 +330,22 @@ </configuration> <dependencies> <dependency> - <groupId>de.itvsh.kop.common</groupId> - <artifactId>kop-common-license</artifactId> - <version>${kop.license.version}</version> + <groupId>de.ozgcloud.common</groupId> + <artifactId>ozgcloud-common-license</artifactId> + <version>${ozgcloud.license.version}</version> </dependency> </dependencies> </plugin> </plugins> </pluginManagement> + + <plugins> + <plugin> + <groupId>org.openrewrite.maven</groupId> + <artifactId>rewrite-maven-plugin</artifactId> + <version>${rewrite.plugin.version}</version> + </plugin> + </plugins> </build> <distributionManagement> @@ -345,4 +373,4 @@ </snapshotRepository> </distributionManagement> -</project> \ No newline at end of file +</project> diff --git a/kop-common-pdf/pom.xml b/ozgcloud-common-pdf/pom.xml similarity index 81% rename from kop-common-pdf/pom.xml rename to ozgcloud-common-pdf/pom.xml index f749e59df6c1c7bc8506ade681a86c94ded0ba0d..c8289dfd558f67beab0ecaf2bbdb83c31ac08e5d 100644 --- a/kop-common-pdf/pom.xml +++ b/ozgcloud-common-pdf/pom.xml @@ -1,6 +1,6 @@ <!-- - Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + 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 @@ -26,15 +26,15 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <groupId>de.itvsh.kop.common</groupId> - <artifactId>kop-common</artifactId> - <version>1.3.0</version> + <groupId>de.ozgcloud.common</groupId> + <artifactId>ozgcloud-common</artifactId> + <version>3.0.1</version> </parent> - <artifactId>kop-common-pdf</artifactId> - <name>Kop Common - PDF Export library</name> + <artifactId>ozgcloud-common-pdf</artifactId> + <name>OzgCloud Common - PDF Export library</name> <properties> - <!-- TODO move to kop-common-dependencies --> + <!-- TODO move to ozgcloud-common-dependencies --> <jakarta.cdi-api.version>4.0.1</jakarta.cdi-api.version> <fop.version>2.7</fop.version> </properties> @@ -42,9 +42,9 @@ <dependencyManagement> <dependencies> <dependency> - <groupId>de.itvsh.kop.common</groupId> - <artifactId>kop-common-dependencies</artifactId> - <version>${kop-common.version}</version> + <groupId>de.ozgcloud.common</groupId> + <artifactId>ozgcloud-common-dependencies</artifactId> + <version>${ozgcloud-common.version}</version> <type>pom</type> <scope>import</scope> </dependency> @@ -53,8 +53,8 @@ <dependencies> <dependency> - <groupId>de.itvsh.kop.common</groupId> - <artifactId>kop-common-lib</artifactId> + <groupId>de.ozgcloud.common</groupId> + <artifactId>ozgcloud-common-lib</artifactId> </dependency> <!-- For Injection-Annotations --> @@ -110,8 +110,9 @@ <artifactId>assertj-core</artifactId> </dependency> <dependency> - <groupId>de.itvsh.kop.common</groupId> - <artifactId>kop-common-test</artifactId> + <groupId>de.ozgcloud.common</groupId> + <artifactId>ozgcloud-common-test</artifactId> </dependency> </dependencies> + </project> \ No newline at end of file diff --git a/kop-common-pdf/src/main/java/de/itvsh/kop/common/pdf/PdfService.java b/ozgcloud-common-pdf/src/main/java/de/ozgcloud/common/pdf/PdfService.java similarity index 91% rename from kop-common-pdf/src/main/java/de/itvsh/kop/common/pdf/PdfService.java rename to ozgcloud-common-pdf/src/main/java/de/ozgcloud/common/pdf/PdfService.java index 1e94a70502dd0066b05fe59a2fd5bfed2d0fc51c..d8fcd90581dcf3801e5a8c1e4c2d97d974095a0b 100644 --- a/kop-common-pdf/src/main/java/de/itvsh/kop/common/pdf/PdfService.java +++ b/ozgcloud-common-pdf/src/main/java/de/ozgcloud/common/pdf/PdfService.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.pdf; +package de.ozgcloud.common.pdf; import java.io.InputStream; import java.io.OutputStream; @@ -29,7 +29,7 @@ import java.io.OutputStream; import org.springframework.lang.NonNull; import org.springframework.stereotype.Service; -import de.itvsh.kop.common.pdf.fop.FopPdfService; +import de.ozgcloud.common.pdf.fop.FopPdfService; import jakarta.enterprise.context.ApplicationScoped; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; diff --git a/kop-common-pdf/src/main/java/de/itvsh/kop/common/pdf/fop/FopPdfService.java b/ozgcloud-common-pdf/src/main/java/de/ozgcloud/common/pdf/fop/FopPdfService.java similarity index 95% rename from kop-common-pdf/src/main/java/de/itvsh/kop/common/pdf/fop/FopPdfService.java rename to ozgcloud-common-pdf/src/main/java/de/ozgcloud/common/pdf/fop/FopPdfService.java index 1b79ea291cc38000c80914609ff906966fc21d2c..373fee28e3bfd0a10cc00520ed01a1a840ae5b76 100644 --- a/kop-common-pdf/src/main/java/de/itvsh/kop/common/pdf/fop/FopPdfService.java +++ b/ozgcloud-common-pdf/src/main/java/de/ozgcloud/common/pdf/fop/FopPdfService.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.pdf.fop; +package de.ozgcloud.common.pdf.fop; import java.io.BufferedOutputStream; import java.io.IOException; @@ -32,9 +32,9 @@ import java.net.URISyntaxException; import java.util.Objects; import javax.xml.XMLConstants; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.util.JAXBSource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.util.JAXBSource; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; @@ -58,7 +58,8 @@ import org.apache.xmlgraphics.util.MimeConstants; import org.springframework.lang.NonNull; import org.springframework.stereotype.Service; -import de.itvsh.kop.common.errorhandling.TechnicalException; +import de.ozgcloud.common.errorhandling.TechnicalException; + import jakarta.enterprise.context.ApplicationScoped; import lombok.extern.log4j.Log4j2; diff --git a/kop-common-pdf/src/main/resources/fop/fop_conf.xml b/ozgcloud-common-pdf/src/main/resources/fop/fop_conf.xml similarity index 100% rename from kop-common-pdf/src/main/resources/fop/fop_conf.xml rename to ozgcloud-common-pdf/src/main/resources/fop/fop_conf.xml diff --git a/kop-common-pdf/src/main/resources/fop/master-template.xsl b/ozgcloud-common-pdf/src/main/resources/fop/master-template.xsl similarity index 100% rename from kop-common-pdf/src/main/resources/fop/master-template.xsl rename to ozgcloud-common-pdf/src/main/resources/fop/master-template.xsl diff --git a/kop-common-pdf/src/test/java/de/itvsh/kop/common/pdf/PdfServiceTest.java b/ozgcloud-common-pdf/src/test/java/de/ozgcloud/common/pdf/PdfServiceTest.java similarity index 92% rename from kop-common-pdf/src/test/java/de/itvsh/kop/common/pdf/PdfServiceTest.java rename to ozgcloud-common-pdf/src/test/java/de/ozgcloud/common/pdf/PdfServiceTest.java index add1b57cb3be566926056a2bf0629e3ea6761d97..aed318d0244cfde86b947d99ca3eeb2e6c3a4be3 100644 --- a/kop-common-pdf/src/test/java/de/itvsh/kop/common/pdf/PdfServiceTest.java +++ b/ozgcloud-common-pdf/src/test/java/de/ozgcloud/common/pdf/PdfServiceTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.pdf; +package de.ozgcloud.common.pdf; import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; @@ -35,7 +35,7 @@ import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; -import de.itvsh.kop.common.pdf.fop.FopPdfService; +import de.ozgcloud.common.pdf.fop.FopPdfService; class PdfServiceTest { diff --git a/kop-common-pdf/src/test/java/de/itvsh/kop/common/pdf/fop/FopPdfServiceTest.java b/ozgcloud-common-pdf/src/test/java/de/ozgcloud/common/pdf/fop/FopPdfServiceTest.java similarity index 92% rename from kop-common-pdf/src/test/java/de/itvsh/kop/common/pdf/fop/FopPdfServiceTest.java rename to ozgcloud-common-pdf/src/test/java/de/ozgcloud/common/pdf/fop/FopPdfServiceTest.java index 08963db05510c9c90e494fbbfa3414b1b5a5e0a7..cf6ea051fb685dd546d4ea61a0b805b5f2f19dfe 100644 --- a/kop-common-pdf/src/test/java/de/itvsh/kop/common/pdf/fop/FopPdfServiceTest.java +++ b/ozgcloud-common-pdf/src/test/java/de/ozgcloud/common/pdf/fop/FopPdfServiceTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.pdf.fop; +package de.ozgcloud.common.pdf.fop; import static org.assertj.core.api.Assertions.*; @@ -32,8 +32,6 @@ import java.io.InputStream; import java.io.OutputStream; import java.io.StringWriter; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import javax.xml.transform.OutputKeys; import javax.xml.transform.Source; import javax.xml.transform.Transformer; @@ -42,10 +40,13 @@ import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.stream.StreamResult; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; + import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; -import de.itvsh.kop.common.test.TestUtils; +import de.ozgcloud.common.test.TestUtils; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; @@ -97,7 +98,7 @@ class FopPdfServiceTest { @Test @SneakyThrows void shouldRenderToFile() { - var tempFile = File.createTempFile("kop_", ".pdf"); + var tempFile = File.createTempFile("ozgcloud_", ".pdf"); tempFile.deleteOnExit(); OutputStream out = new FileOutputStream(tempFile); diff --git a/kop-common-pdf/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension b/ozgcloud-common-pdf/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension similarity index 100% rename from kop-common-pdf/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension rename to ozgcloud-common-pdf/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension diff --git a/kop-common-pdf/src/test/resources/junit-platform.properties b/ozgcloud-common-pdf/src/test/resources/junit-platform.properties similarity index 100% rename from kop-common-pdf/src/test/resources/junit-platform.properties rename to ozgcloud-common-pdf/src/test/resources/junit-platform.properties diff --git a/kop-common-pdf/src/test/resources/log4j2.xml b/ozgcloud-common-pdf/src/test/resources/log4j2.xml similarity index 100% rename from kop-common-pdf/src/test/resources/log4j2.xml rename to ozgcloud-common-pdf/src/test/resources/log4j2.xml diff --git a/kop-common-pdf/src/test/resources/test-template.xsl b/ozgcloud-common-pdf/src/test/resources/test-template.xsl similarity index 100% rename from kop-common-pdf/src/test/resources/test-template.xsl rename to ozgcloud-common-pdf/src/test/resources/test-template.xsl diff --git a/kop-common-test/pom.xml b/ozgcloud-common-test/pom.xml similarity index 78% rename from kop-common-test/pom.xml rename to ozgcloud-common-test/pom.xml index bb89e951ebed00531f6c57b71417b097c7c3fd06..3547a6f8178ef469581b87151f8e892544c196c1 100644 --- a/kop-common-test/pom.xml +++ b/ozgcloud-common-test/pom.xml @@ -1,6 +1,6 @@ <!-- - Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + 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 @@ -28,24 +28,19 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <groupId>de.itvsh.kop.common</groupId> - <artifactId>kop-common-dependencies</artifactId> - <version>1.3.0</version> - <relativePath>../kop-common-dependencies</relativePath> + <groupId>de.ozgcloud.common</groupId> + <artifactId>ozgcloud-common-dependencies</artifactId> + <version>3.0.1</version> + <relativePath>../ozgcloud-common-dependencies</relativePath> </parent> - <artifactId>kop-common-test</artifactId> - <name>Kop Common - Test Lib</name> + <artifactId>ozgcloud-common-test</artifactId> + <name>OzgCloud Common - Test Lib</name> - <properties> - <testcontainers-mongodb.version>1.16.2</testcontainers-mongodb.version> - </properties> - <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> - <version>${spring-boot.version}</version> <scope>compile</scope> <exclusions> <exclusion> @@ -57,7 +52,11 @@ <dependency> <groupId>org.testcontainers</groupId> <artifactId>mongodb</artifactId> - <version>${testcontainers-mongodb.version}</version> + </dependency> + <dependency> + <groupId>org.glassfish.jaxb</groupId> + <artifactId>jaxb-runtime</artifactId> + <scope>runtime</scope> </dependency> <dependency> diff --git a/kop-common-test/src/main/java/de/itvsh/kop/common/test/DataITCase.java b/ozgcloud-common-test/src/main/java/de/ozgcloud/common/test/DataITCase.java similarity index 93% rename from kop-common-test/src/main/java/de/itvsh/kop/common/test/DataITCase.java rename to ozgcloud-common-test/src/main/java/de/ozgcloud/common/test/DataITCase.java index a965877f31c04242a0f45fd1c40a46adaf10eeff..f61ea2e62722a770edc5ce85186ebed4536b8530 100644 --- a/kop-common-test/src/main/java/de/itvsh/kop/common/test/DataITCase.java +++ b/ozgcloud-common-test/src/main/java/de/ozgcloud/common/test/DataITCase.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.test; +package de.ozgcloud.common.test; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; diff --git a/kop-common-test/src/main/java/de/itvsh/kop/common/test/DbInitializer.java b/ozgcloud-common-test/src/main/java/de/ozgcloud/common/test/DbInitializer.java similarity index 95% rename from kop-common-test/src/main/java/de/itvsh/kop/common/test/DbInitializer.java rename to ozgcloud-common-test/src/main/java/de/ozgcloud/common/test/DbInitializer.java index 43f3a653c4cad719290789ab70c0dc16f6c74073..2f1b24a44b43a0cb07fef41ed3b84f8a2e49c6c5 100644 --- a/kop-common-test/src/main/java/de/itvsh/kop/common/test/DbInitializer.java +++ b/ozgcloud-common-test/src/main/java/de/ozgcloud/common/test/DbInitializer.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.test; +package de.ozgcloud.common.test; import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.context.ApplicationContextInitializer; diff --git a/kop-common-test/src/main/java/de/itvsh/kop/common/test/ITCase.java b/ozgcloud-common-test/src/main/java/de/ozgcloud/common/test/ITCase.java similarity index 93% rename from kop-common-test/src/main/java/de/itvsh/kop/common/test/ITCase.java rename to ozgcloud-common-test/src/main/java/de/ozgcloud/common/test/ITCase.java index f66964629c96909d3cda33359d82758a3752e74b..1190ccb27a953df435ffcdb38500c43e476e4d79 100644 --- a/kop-common-test/src/main/java/de/itvsh/kop/common/test/ITCase.java +++ b/ozgcloud-common-test/src/main/java/de/ozgcloud/common/test/ITCase.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.test; +package de.ozgcloud.common.test; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; diff --git a/kop-common-test/src/main/java/de/itvsh/kop/common/test/TestUtils.java b/ozgcloud-common-test/src/main/java/de/ozgcloud/common/test/TestUtils.java similarity index 81% rename from kop-common-test/src/main/java/de/itvsh/kop/common/test/TestUtils.java rename to ozgcloud-common-test/src/main/java/de/ozgcloud/common/test/TestUtils.java index 7b98fbf738c15cac5e26b55880873073832700bb..4951161c4169c0c71b5058466b3cb43bba8b78cb 100644 --- a/kop-common-test/src/main/java/de/itvsh/kop/common/test/TestUtils.java +++ b/ozgcloud-common-test/src/main/java/de/ozgcloud/common/test/TestUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * 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 @@ -21,8 +21,9 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.itvsh.kop.common.test; +package de.ozgcloud.common.test; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; @@ -62,4 +63,15 @@ public class TestUtils { public static String addQuote(String str) { return Objects.isNull(str) ? "null" : String.format("\"%s\"", str); } + + public static byte[] contentStreamToByteArray(InputStream contentStream) { + var outputStream = new ByteArrayOutputStream(); + try { + IOUtils.copy(contentStream, outputStream); + } catch (IOException e) { + throw new RuntimeException("Error on reading stream", e); + } + + return outputStream.toByteArray(); + } } diff --git a/pom.xml b/pom.xml index ba720ce76349a442dffe79c38bab6b5dd48414d7..792ba86bdee50a60f6ac1330872c1dbf4fc915a5 100644 --- a/pom.xml +++ b/pom.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + 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 @@ -27,29 +27,31 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> - <groupId>de.itvsh.kop.common</groupId> - <artifactId>kop-common</artifactId> - <version>1.3.0</version> + <groupId>de.ozgcloud.common</groupId> + <artifactId>ozgcloud-common</artifactId> + <version>3.0.1</version> <packaging>pom</packaging> - <name>Kop Common</name> + <name>OzgCloud Common</name> <modules> - <module>kop-common-dependencies</module> - <module>kop-common-parent</module> - <module>kop-common-lib</module> - <module>kop-common-test</module> - <module>kop-common-pdf</module> - <module>kop-common-license</module> + <module>ozgcloud-common-dependencies</module> + <module>ozgcloud-common-parent</module> + <module>ozgcloud-common-lib</module> + <module>ozgcloud-common-pdf</module> + <module>ozgcloud-common-license</module> + <module>ozgcloud-common-test</module> </modules> <properties> - <kop-common.version>1.3.0</kop-common.version> - <kop.license.version>1.3.0</kop.license.version> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + + <ozgcloud-common.version>3.0.1</ozgcloud-common.version> + <ozgcloud.license.version>1.6.0</ozgcloud.license.version> <java.version>17</java.version> - <maven.compiler.target>${java.version}</maven.compiler.target> - <maven.compiler.source>${java.version}</maven.compiler.source> + <maven.compiler.target>17</maven.compiler.target> + <maven.compiler.source>17</maven.compiler.source> </properties> <distributionManagement> @@ -64,15 +66,26 @@ <url>https://nexus.ozg-sh.de/repository/ozg-snapshots/</url> </snapshotRepository> </distributionManagement> - + <dependencies> + <dependency> + <groupId>org.glassfish.jaxb</groupId> + <artifactId>jaxb-runtime</artifactId> + <version>3.0.2</version> + <scope>runtime</scope> + </dependency> + </dependencies> + <build> <pluginManagement> - <plugins> + <plugins> <plugin> <groupId>com.mycila</groupId> <artifactId>license-maven-plugin</artifactId> <version>4.1</version> <configuration> + <mapping> + <config>SCRIPT_STYLE</config> + </mapping> <licenseSets> <licenseSet> <header>license/eupl_v1_2_de/header.txt</header> @@ -86,13 +99,33 @@ </configuration> <dependencies> <dependency> - <groupId>de.itvsh.kop.common</groupId> - <artifactId>kop-common-license</artifactId> - <version>${kop.license.version}</version> + <groupId>de.ozgcloud.common</groupId> + <artifactId>ozgcloud-common-license</artifactId> + <version>${ozgcloud.license.version}</version> </dependency> </dependencies> </plugin> - </plugins> + + <plugin> + <groupId>org.openrewrite.maven</groupId> + <artifactId>rewrite-maven-plugin</artifactId> + <version>4.38.2</version> + <configuration> + <activeRecipes> + <recipe>org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_0</recipe> + </activeRecipes> + </configuration> + <dependencies> + <dependency> + <groupId>org.openrewrite.recipe</groupId> + <artifactId>rewrite-spring</artifactId> + <version>4.31.0</version> + </dependency> + </dependencies> + </plugin> + </plugins> </pluginManagement> + + </build> -</project> \ No newline at end of file +</project> diff --git a/release-erstellen.sh b/release-erstellen.sh new file mode 100755 index 0000000000000000000000000000000000000000..20ce45d990067df122a1a79c095c7b614ea7284d --- /dev/null +++ b/release-erstellen.sh @@ -0,0 +1,47 @@ +#!/bin/sh +# +# 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. +# + + +if [ "$#" -ne 1 ]; then + echo "Aufruf: release-erstellen.sh JA" + echo "Als Parameter bitte 'JA' eintragen zur Sicherheit" + exit 1 +fi + + +## alle -SNAPSHOT in pom.xmls entfernen +find . -name pom.xml -exec sed -i 's/-SNAPSHOT//g' {} + + +## release version auslesen +NEWVERSION=$(xmlstarlet sel -N w="http://maven.apache.org/POM/4.0.0" -t -v '//w:project/w:version' -n pom.xml) + +echo +echo "NEXT STEPS:" +echo "***********" +echo "Änderungen prüfen" +echo "git commit -a -m 'release version "$NEWVERSION"'" +echo "git push" +echo "git tag "$NEWVERSION +echo "git push --tags"