diff --git a/Jenkinsfile b/Jenkinsfile index 9dc8b6dd235596564c2aec4669581d2f73f0ad6f..4eb42df64233fd2563dd4fff17d10b41a10047f8 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -51,6 +51,7 @@ pipeline { def rootVersion = getPomVersion('pom.xml') def jobVersion = getParentPomVersion('aggregation-manager-job/pom.xml') def serverVersion = getParentPomVersion('aggregation-manager-server/pom.xml') + def interfaceVersion = getPomVersion('aggregation-manager-interface/pom.xml') if(rootVersion != jobVersion) { error("Version in aggregation-manager-job stimmt nicht mit dem parent überein.") @@ -58,6 +59,9 @@ pipeline { if(rootVersion != serverVersion) { error("Version in aggregation-manager-server stimmt nicht mit dem parent überein.") } + if(rootVersion != interfaceVersion) { + error("Version in aggregation-manager-interface stimmt nicht mit dem parent überein.") + } if(isReleaseBranch()){ if ( !(rootVersion ==~ RELEASE_REGEX)) { error("Keine Release Version für Branch ${env.BRANCH_NAME}.") @@ -110,7 +114,6 @@ pipeline { } configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { sh 'mvn --no-transfer-progress -s $MAVEN_SETTINGS -DskipTests deploy -Dmaven.wagon.http.retryHandler.count=3' - sh "mvn -s $MAVEN_SETTINGS versions:revert" } } } @@ -120,7 +123,8 @@ pipeline { FAILED_STAGE=env.STAGE_NAME } configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { - sh 'mvn --no-transfer-progress -s $MAVEN_SETTINGS spring-boot:build-image -DskipTests -Dmaven.wagon.http.retryHandler.count=3' + sh 'mvn --no-transfer-progress -s $MAVEN_SETTINGS spring-boot:build-image -DskipTests -Dmaven.wagon.http.retryHandler.count=3 -pl aggregation-manager-job,aggregation-manager-server' + sh "mvn -s $MAVEN_SETTINGS versions:revert" } } } diff --git a/aggregation-manager-interface/pom.xml b/aggregation-manager-interface/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..f18ec6e39d0cf7a03430d275ff2b097b73b444c0 --- /dev/null +++ b/aggregation-manager-interface/pom.xml @@ -0,0 +1,141 @@ +<?xml version="1.0"?> +<!-- + + Copyright (C) 2025 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. + +--> +<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.ozgcloud.common</groupId> + <artifactId>ozgcloud-common-dependencies</artifactId> + <version>4.12.0</version> + <relativePath /> + </parent> + + <groupId>de.ozgcloud.aggregation</groupId> + <artifactId>aggregation-manager-interface</artifactId> + <version>1.3.0-SNAPSHOT</version> + <name>OZG-Cloud Aggregation Manager gRPC API</name> + <description>gRPC Api for OZG-Cloud Aggregation Manager Server</description> + <inceptionYear>2025</inceptionYear> + + <properties> + <find-and-replace-maven-plugin.version>1.2.0</find-and-replace-maven-plugin.version> + </properties> + + <dependencies> + <!-- GRPC --> + <dependency> + <groupId>io.grpc</groupId> + <artifactId>grpc-stub</artifactId> + </dependency> + <dependency> + <groupId>io.grpc</groupId> + <artifactId>grpc-protobuf</artifactId> + </dependency> + <dependency> + <groupId>jakarta.annotation</groupId> + <artifactId>jakarta.annotation-api</artifactId> + </dependency> + </dependencies> + + <build> + <sourceDirectory>src/main/protobuf</sourceDirectory> + + <extensions> + <extension> + <groupId>kr.motd.maven</groupId> + <artifactId>os-maven-plugin</artifactId> + </extension> + </extensions> + + <plugins> + <plugin> + <groupId>com.github.os72</groupId> + <artifactId>protoc-jar-maven-plugin</artifactId> + <version>${protoc-jar-plugin.version}</version> + <executions> + <execution> + <phase>generate-sources</phase> + <goals> + <goal>run</goal> + </goals> + <configuration> + <protocVersion>${protobuf.version}</protocVersion> + <outputTargets> + <outputTarget> + <type>java</type> + </outputTarget> + <outputTarget> + <type>grpc-java</type> + <pluginArtifact> + io.grpc:protoc-gen-grpc-java:${protoc-gen.version}</pluginArtifact> + </outputTarget> + </outputTargets> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>io.github.floverfelt</groupId> + <artifactId>find-and-replace-maven-plugin</artifactId> + <version>${find-and-replace-maven-plugin.version}</version> + <executions> + <execution> + <id>exec</id> + <phase>process-sources</phase> + <goals> + <goal>find-and-replace</goal> + </goals> + <configuration> + <replacementType>file-contents</replacementType> + <baseDir>target/generated-sources/</baseDir> + <findRegex>javax</findRegex> + <replaceValue>jakarta</replaceValue> + <recursive>true</recursive> + <fileMask>.java</fileMask> + </configuration> + </execution> + </executions> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-source-plugin</artifactId> + <version>3.2.1</version> + <executions> + <execution> + <id>attach-sources</id> + <goals> + <goal>jar</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file diff --git a/aggregation-manager-interface/src/main/protobuf/aggregationdata.model.proto b/aggregation-manager-interface/src/main/protobuf/aggregationdata.model.proto new file mode 100644 index 0000000000000000000000000000000000000000..1ff686a884cea7003a659dea079d953ff3be5330 --- /dev/null +++ b/aggregation-manager-interface/src/main/protobuf/aggregationdata.model.proto @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2025 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. + */ + +syntax = "proto3"; +package de.ozgcloud.aggregation.data; + + +option java_multiple_files = true; +option java_package = "de.ozgcloud.aggregation.data"; +option java_outer_classname = "AggregationDataModelProto"; + +message GrpcSendAggregationDataRequest { + string name = 1; + string mandant = 2; + repeated GrpcAggregationData aggregationData = 3; +} + +message GrpcAggregationData { + string id = 1; + string status = 2; + string eingangDatum = 3; + string vorgangName = 4; + GrpcObject payload = 5; +} + +message GrpcObject { + repeated GrpcProperty properties = 1; +} + +message GrpcProperty { + string key = 1; + GrpcElement value = 2; +} + +message GrpcElement { + oneof value { + bool boolValue = 1; + int64 longValue = 2; + double doubleValue = 3; + string stringValue = 4; + GrpcElementList listValue = 5; + GrpcObject objectValue = 6; + } +} + +message GrpcElementList { + repeated GrpcElement elements = 1; +} + +message GrpcSendAggregationDataResponse {} \ No newline at end of file diff --git a/aggregation-manager-interface/src/main/protobuf/aggregationdata.proto b/aggregation-manager-interface/src/main/protobuf/aggregationdata.proto new file mode 100644 index 0000000000000000000000000000000000000000..4cc7204d018bef7a3825caf672659c5a386b905b --- /dev/null +++ b/aggregation-manager-interface/src/main/protobuf/aggregationdata.proto @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2025 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. + */ + +syntax = "proto3"; +package de.ozgcloud.aggregation.data; + +import "aggregationdata.model.proto"; + +option java_multiple_files = true; +option java_package = "de.ozgcloud.aggregation.data"; +option java_outer_classname = "AggregationDataProto"; + +service AggregationDataService { + rpc SendAggregationData(stream GrpcSendAggregationDataRequest) returns (GrpcSendAggregationDataResponse); +} \ No newline at end of file diff --git a/aggregation-manager-interface/src/main/protobuf/mapping.model.proto b/aggregation-manager-interface/src/main/protobuf/mapping.model.proto new file mode 100644 index 0000000000000000000000000000000000000000..b7a6e67d187785cf2973efd956e240b5692f4803 --- /dev/null +++ b/aggregation-manager-interface/src/main/protobuf/mapping.model.proto @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2025 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. + */ + +syntax = "proto3"; +package de.ozgcloud.aggregation.mapping; + + +option java_multiple_files = true; +option java_package = "de.ozgcloud.aggregation.mapping"; +option java_outer_classname = "MappingModelProto"; + +message GrpcGetAggregationMappingsRequest {} + +message GrpcGetAggregationMappingsResponse { + repeated GrpcAggregationMapping mappings = 1; +} + +message GrpcAggregationMapping { + string name = 1; + string formEngineName = 2; + string formId = 3; + repeated GrpcFieldMapping fieldMappings = 4; +} + +message GrpcFieldMapping { + string source = 1; + string target = 2; + +} \ No newline at end of file diff --git a/aggregation-manager-interface/src/main/protobuf/mapping.proto b/aggregation-manager-interface/src/main/protobuf/mapping.proto new file mode 100644 index 0000000000000000000000000000000000000000..ad4fd60f9bace6b4dee0fca6ce855aef7cecebc4 --- /dev/null +++ b/aggregation-manager-interface/src/main/protobuf/mapping.proto @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2025 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. + */ + +syntax = "proto3"; +package de.ozgcloud.aggregation.mapping; + +import "mapping.model.proto"; + +option java_multiple_files = true; +option java_package = "de.ozgcloud.aggregation.mapping"; +option java_outer_classname = "AggregationMappingProto"; + +service AggregationMappingService { + rpc GetAggregationMappings(GrpcGetAggregationMappingsRequest) returns (GrpcGetAggregationMappingsResponse); +} \ No newline at end of file diff --git a/aggregation-manager-server/pom.xml b/aggregation-manager-server/pom.xml index 67fef7696f43fc4fdf238758c29be255f305d414..f72df101935087b497fda650bd741251e80a62fc 100644 --- a/aggregation-manager-server/pom.xml +++ b/aggregation-manager-server/pom.xml @@ -51,6 +51,11 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> + <!-- Own projects --> + <dependency> + <groupId>de.ozgcloud.aggregation</groupId> + <artifactId>aggregation-manager-interface</artifactId> + </dependency> </dependencies> <build> diff --git a/aggregation-manager-server/src/main/java/de/ozgcloud/aggregation/data/AggregationDataGrpcService.java b/aggregation-manager-server/src/main/java/de/ozgcloud/aggregation/data/AggregationDataGrpcService.java new file mode 100644 index 0000000000000000000000000000000000000000..b9cb0bf22f48e68e0c59fb304beb7e085323b3ad --- /dev/null +++ b/aggregation-manager-server/src/main/java/de/ozgcloud/aggregation/data/AggregationDataGrpcService.java @@ -0,0 +1,14 @@ +package de.ozgcloud.aggregation.data; + +import de.ozgcloud.aggregation.data.AggregationDataServiceGrpc.AggregationDataServiceImplBase; +import io.grpc.stub.StreamObserver; + +class AggregationDataGrpcService extends AggregationDataServiceImplBase { + + @Override + public StreamObserver<GrpcSendAggregationDataRequest> sendAggregationData(StreamObserver<GrpcSendAggregationDataResponse> responseObserver) { + // Implement in OZG-7909 + return null; + } + +} diff --git a/aggregation-manager-server/src/main/java/de/ozgcloud/aggregation/mapping/AggregationMappingGrpcService.java b/aggregation-manager-server/src/main/java/de/ozgcloud/aggregation/mapping/AggregationMappingGrpcService.java new file mode 100644 index 0000000000000000000000000000000000000000..62813e122483fc66b2648bf3186c73be4769d753 --- /dev/null +++ b/aggregation-manager-server/src/main/java/de/ozgcloud/aggregation/mapping/AggregationMappingGrpcService.java @@ -0,0 +1,13 @@ +package de.ozgcloud.aggregation.mapping; + +import de.ozgcloud.aggregation.mapping.AggregationMappingServiceGrpc.AggregationMappingServiceImplBase; +import io.grpc.stub.StreamObserver; + +class AggregationMappingGrpcService extends AggregationMappingServiceImplBase { + + @Override + public void getAggregationMappings(GrpcGetAggregationMappingsRequest request, + StreamObserver<GrpcGetAggregationMappingsResponse> responseObserver) { + // Implement in OZG-???? + } +} diff --git a/pom.xml b/pom.xml index c5a13f434ab7188c3d74d550fbe7acf360d18839..adbe408b7530add8188b21fce83dbefcb7e6f118 100644 --- a/pom.xml +++ b/pom.xml @@ -42,6 +42,7 @@ <packaging>pom</packaging> <modules> + <module>aggregation-manager-interface</module> <module>aggregation-manager-job</module> <module>aggregation-manager-server</module> </modules> @@ -52,6 +53,11 @@ </properties> <dependencyManagement> <dependencies> + <dependency> + <groupId>de.ozgcloud.aggregation</groupId> + <artifactId>aggregation-manager-interface</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <artifactId>ozg-cloud-spring-boot-starter</artifactId> <groupId>de.ozgcloud.api-lib</groupId>