Skip to content
Snippets Groups Projects
Commit 5d9e7f7e authored by Lukas Malte Monnerjahn's avatar Lukas Malte Monnerjahn
Browse files

Merge branch 'main' into OZG-7491-Aufteilen-XTA

parents 0d2a65df cc30923a
No related branches found
No related tags found
1 merge request!5OZG-7491 Entferne xta-adapter und dFoerdermittel aus eingang-manager Repo
Showing
with 11 additions and 913 deletions
...@@ -53,22 +53,20 @@ pipeline { ...@@ -53,22 +53,20 @@ pipeline {
def commonVersion = getParentPomVersion('common/pom.xml') def commonVersion = getParentPomVersion('common/pom.xml')
def routerVersion = getParentPomVersion('router/pom.xml') def routerVersion = getParentPomVersion('router/pom.xml')
def ifAdapterVersion = getParentPomVersion('intelliform-adapter/pom.xml')
def fsAdapterVersion = getParentPomVersion('formsolutions-adapter/pom.xml')
def formCycleAdapterVersion = getParentPomVersion('formcycle-adapter/pom.xml') def formCycleAdapterVersion = getParentPomVersion('formcycle-adapter/pom.xml')
def enterpriseAdapterVersion = getParentPomVersion('enterprise-adapter/pom.xml') def enterpriseAdapterVersion = getParentPomVersion('enterprise-adapter/pom.xml')
if(env.BRANCH_NAME == 'release'){ if(env.BRANCH_NAME == 'release'){
if ( !isReleaseVersion([rootVersion, vorgangManagerVersion, commonVersion, routerVersion, ifAdapterVersion, fsAdapterVersion, formCycleAdapterVersion, enterpriseAdapterVersion])) { if ( !isReleaseVersion([rootVersion, vorgangManagerVersion, commonVersion, routerVersion, formCycleAdapterVersion, enterpriseAdapterVersion])) {
error("Keine Release Version für Branch ${env.BRANCH_NAME}.") error("Keine Release Version für Branch ${env.BRANCH_NAME}.")
} }
} else { } else {
if ( !isSnapshotVersion([rootVersion, commonVersion, routerVersion, ifAdapterVersion, fsAdapterVersion, formCycleAdapterVersion, enterpriseAdapterVersion])) { if ( !isSnapshotVersion([rootVersion, commonVersion, routerVersion, formCycleAdapterVersion, enterpriseAdapterVersion])) {
error("Keine Snapshot Version für Branch ${env.BRANCH_NAME}.") error("Keine Snapshot Version für Branch ${env.BRANCH_NAME}.")
} }
} }
if ( !isSameVersion([commonVersion, routerVersion, ifAdapterVersion, fsAdapterVersion, formCycleAdapterVersion, enterpriseAdapterVersion], rootVersion)) { if ( !isSameVersion([commonVersion, routerVersion, formCycleAdapterVersion, enterpriseAdapterVersion], rootVersion)) {
error("Versionen sind nicht identisch") error("Versionen sind nicht identisch")
} }
} }
...@@ -141,20 +139,14 @@ pipeline { ...@@ -141,20 +139,14 @@ pipeline {
FAILED_STAGE=env.STAGE_NAME FAILED_STAGE=env.STAGE_NAME
IMAGE_TAG = buildVersionName() IMAGE_TAG = buildVersionName()
tagAndPushDockerImage('intelliform-adapter', IMAGE_TAG)
tagAndPushDockerImage('formsolutions-adapter', IMAGE_TAG)
tagAndPushDockerImage('formcycle-adapter', IMAGE_TAG) tagAndPushDockerImage('formcycle-adapter', IMAGE_TAG)
tagAndPushDockerImage('enterprise-adapter', IMAGE_TAG) tagAndPushDockerImage('enterprise-adapter', IMAGE_TAG)
if (env.BRANCH_NAME == 'main') { if (env.BRANCH_NAME == 'main') {
tagAndPushDockerImage('intelliform-adapter', 'snapshot-latest')
tagAndPushDockerImage('formsolutions-adapter', 'snapshot-latest')
tagAndPushDockerImage('formcycle-adapter', 'snapshot-latest') tagAndPushDockerImage('formcycle-adapter', 'snapshot-latest')
tagAndPushDockerImage('enterprise-adapter', 'snapshot-latest') tagAndPushDockerImage('enterprise-adapter', 'snapshot-latest')
} }
else if (env.BRANCH_NAME == 'release') { else if (env.BRANCH_NAME == 'release') {
tagAndPushDockerImage('intelliform-adapter', 'latest')
tagAndPushDockerImage('formsolutions-adapter', 'latest')
tagAndPushDockerImage('formcycle-adapter', 'latest') tagAndPushDockerImage('formcycle-adapter', 'latest')
tagAndPushDockerImage('enterprise-adapter', 'latest') tagAndPushDockerImage('enterprise-adapter', 'latest')
} }
...@@ -162,23 +154,6 @@ pipeline { ...@@ -162,23 +154,6 @@ pipeline {
} }
} }
stage('Test, build and deploy Intelliform-Adapter Helm Chart') {
steps {
script {
FAILED_STAGE=env.STAGE_NAME
HELM_CHART_VERSION = buildVersionName()
sh "./run_helm_test.sh"
dir('src/main/helm') {
sh "helm package --version=${HELM_CHART_VERSION} ."
deployHelmChart("Intelliform-Adapter", HELM_CHART_VERSION)
}
}
}
}
stage('Trigger Dev rollout') { stage('Trigger Dev rollout') {
when { when {
branch 'main' branch 'main'
...@@ -272,7 +247,7 @@ String buildVersionName() { ...@@ -272,7 +247,7 @@ String buildVersionName() {
if (env.BRANCH_NAME == 'release') { if (env.BRANCH_NAME == 'release') {
return getPomVersion('pom.xml') return getPomVersion('pom.xml')
} }
return "${getPomVersion('pom.xml')}-${validateBranchName(env.BRANCH_NAME)}-${env.GIT_COMMIT.take(7)}".replaceAll("_", "-") return "${getPomVersion('pom.xml')}-${validateBranchName(env.BRANCH_NAME)}-${env.BUILD_NUMBER}".replaceAll("_", "-")
} }
Void sendFailureMessage() { Void sendFailureMessage() {
...@@ -299,43 +274,15 @@ String getElementAccessToken() { ...@@ -299,43 +274,15 @@ String getElementAccessToken() {
} }
Void setNewDevAdapterVersion() { Void setNewDevAdapterVersion() {
setNewAfmAdapterVersion('dev')
setNewFsAdapterVersion('dev')
setNewFormcycleAdapterVersion('dev') setNewFormcycleAdapterVersion('dev')
setNewEnterpriseAdapterVersion('dev') setNewEnterpriseAdapterVersion('dev')
} }
Void setNewTestAdapterVersion() { Void setNewTestAdapterVersion() {
setNewAfmAdapterVersion('test')
setNewFsAdapterVersion('test')
setNewFormcycleAdapterVersion('test') setNewFormcycleAdapterVersion('test')
setNewEnterpriseAdapterVersion('test') setNewEnterpriseAdapterVersion('test')
} }
Void setNewAfmAdapterVersion(String environment) {
dir("gitops") {
def envFile = "${environment}/application/values/afm-adapter-values.yaml"
def envVersions = readYaml file: envFile
envVersions.afm_adapter.image.tag = IMAGE_TAG
envVersions.afm_adapter.helm.version = HELM_CHART_VERSION
writeYaml file: envFile, data: envVersions, overwrite: true
}
}
Void setNewFsAdapterVersion(String environment) {
dir("gitops") {
def envFile = "${environment}/application/values/fs-adapter-values.yaml"
def envVersions = readYaml file: envFile
envVersions.fs_adapter.image.tag = IMAGE_TAG
envVersions.fs_adapter.helm.version = HELM_CHART_VERSION
writeYaml file: envFile, data: envVersions, overwrite: true
}
}
Void setNewFormcycleAdapterVersion(String environment) { Void setNewFormcycleAdapterVersion(String environment) {
dir("gitops") { dir("gitops") {
def envFile = "${environment}/application/values/formcycle-adapter-values.yaml" def envFile = "${environment}/application/values/formcycle-adapter-values.yaml"
...@@ -377,7 +324,7 @@ Void pushNewGitopsVersion(String environment) { ...@@ -377,7 +324,7 @@ Void pushNewGitopsVersion(String environment) {
withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) { withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) {
sh "git add ${environment}/application/values/*-adapter-values.yaml" sh "git add ${environment}/application/values/*-adapter-values.yaml"
sh "git commit -m 'jenkins rollout ${environment} afm-adapter fs-adapter version ${IMAGE_TAG}'" sh "git commit -m 'jenkins rollout ${environment} version ${IMAGE_TAG}'"
sh 'git push https://${USER}:${TOKEN}@git.ozg-sh.de/ozgcloud-devops/gitops.git' sh 'git push https://${USER}:${TOKEN}@git.ozg-sh.de/ozgcloud-devops/gitops.git'
} }
} }
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
<parent> <parent>
<groupId>de.ozgcloud.eingang</groupId> <groupId>de.ozgcloud.eingang</groupId>
<artifactId>eingang-manager</artifactId> <artifactId>eingang-manager</artifactId>
<version>2.16.0-SNAPSHOT</version> <version>2.17.0-SNAPSHOT</version>
<relativePath>../</relativePath> <relativePath>../</relativePath>
</parent> </parent>
<artifactId>common</artifactId> <artifactId>common</artifactId>
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
<parent> <parent>
<groupId>de.ozgcloud.eingang</groupId> <groupId>de.ozgcloud.eingang</groupId>
<artifactId>eingang-manager</artifactId> <artifactId>eingang-manager</artifactId>
<version>2.16.0-SNAPSHOT</version> <version>2.17.0-SNAPSHOT</version>
</parent> </parent>
<artifactId>enterprise-adapter</artifactId> <artifactId>enterprise-adapter</artifactId>
<name>EM - Enterprise Interface Adapter</name> <name>EM - Enterprise Interface Adapter</name>
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
<parent> <parent>
<groupId>de.ozgcloud.eingang</groupId> <groupId>de.ozgcloud.eingang</groupId>
<artifactId>eingang-manager</artifactId> <artifactId>eingang-manager</artifactId>
<version>2.16.0-SNAPSHOT</version> <version>2.17.0-SNAPSHOT</version>
</parent> </parent>
<artifactId>fim-adapter</artifactId> <artifactId>fim-adapter</artifactId>
<name>Eingangs Adapter - FIM</name> <name>Eingangs Adapter - FIM</name>
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
<parent> <parent>
<groupId>de.ozgcloud.eingang</groupId> <groupId>de.ozgcloud.eingang</groupId>
<artifactId>formcycle-adapter</artifactId> <artifactId>formcycle-adapter</artifactId>
<version>2.16.0-SNAPSHOT</version> <version>2.17.0-SNAPSHOT</version>
<relativePath>../</relativePath> <relativePath>../</relativePath>
</parent> </parent>
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
<groupId>de.ozgcloud.eingang</groupId> <groupId>de.ozgcloud.eingang</groupId>
<artifactId>formcycle-adapter-interface</artifactId> <artifactId>formcycle-adapter-interface</artifactId>
<name>EM - Formcycle Adapter - Interface</name> <name>EM - Formcycle Adapter - Interface</name>
<version>2.16.0-SNAPSHOT</version> <version>2.17.0-SNAPSHOT</version>
<properties> <properties>
<vorgang-manager.version>2.0.0</vorgang-manager.version> <vorgang-manager.version>2.0.0</vorgang-manager.version>
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
<parent> <parent>
<groupId>de.ozgcloud.eingang</groupId> <groupId>de.ozgcloud.eingang</groupId>
<artifactId>eingang-manager</artifactId> <artifactId>eingang-manager</artifactId>
<version>2.16.0-SNAPSHOT</version> <version>2.17.0-SNAPSHOT</version>
</parent> </parent>
<artifactId>formcycle-adapter</artifactId> <artifactId>formcycle-adapter</artifactId>
......
<?xml version="1.0"?>
<!--
Copyright (C) 2021 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.eingang</groupId>
<artifactId>eingang-manager</artifactId>
<version>2.16.0-SNAPSHOT</version>
<relativePath>../</relativePath>
</parent>
<artifactId>formsolutions-adapter</artifactId>
<name>Eingangs Adapter - FormSolutions</name>
<packaging>jar</packaging>
<properties>
<spring-boot.build-image.imageName>docker.ozg-sh.de/formsolutions-adapter:build-latest</spring-boot.build-image.imageName>
</properties>
<dependencies>
<!-- own projects -->
<dependency>
<groupId>de.ozgcloud.eingang</groupId>
<artifactId>common</artifactId>
</dependency>
<dependency>
<groupId>de.ozgcloud.eingang</groupId>
<artifactId>router</artifactId>
</dependency>
<dependency>
<groupId>de.ozgcloud.eingang</groupId>
<artifactId>semantik-adapter</artifactId>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
</dependency>
<!-- tag::springws[] -->
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
</dependency>
<dependency>
<groupId>org.apache.ws.xmlschema</groupId>
<artifactId>xmlschema-core</artifactId>
</dependency>
<!-- end::springws[] -->
<!-- Dev -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- Test -->
<dependency>
<groupId>de.ozgcloud.common</groupId>
<artifactId>ozgcloud-common-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>de.ozgcloud.eingang</groupId>
<artifactId>common</artifactId>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- tag::wsdl/xsd[] -->
<plugin>
<groupId>com.evolvedbinary.maven.jvnet</groupId>
<artifactId>jaxb30-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<schemaLanguage>WSDL</schemaLanguage>
<generatePackage>de.ozgcloud.eingang.formsolutions</generatePackage>
<schemas>
<schema>
<fileset>
<directory>${basedir}/src/main/resources/wsdl</directory>
<includes>
<include>*.wsdl</include>
</includes>
</fileset>
</schema>
</schemas>
<schemaLanguage>WSDL</schemaLanguage>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>ci-build</id>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>build-image</id>
<phase>install</phase>
<goals>
<goal>build-image-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
/*
* Copyright (C) 2023 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.eingang.formsolutions;
import java.io.File;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import org.springframework.stereotype.Component;
import de.ozgcloud.eingang.common.formdata.IncomingFile;
import de.ozgcloud.eingang.common.formdata.IncomingFileGroup;
@Component
class FormSolutionsAttachmentsMapper {
public static final String ZIP = "zip";
public static final String FILE_NAME_ZIP_ATTACHMENT = "attachments.zip";
public static final String ZIP_CONTENT_TYPE = "application/zip";
public static final String FILE_GROUP_ZIP_NAME = "gezippte Anhänge";
public List<IncomingFileGroup> mapAttachments(File zipFile) {
if (Objects.nonNull(zipFile) && zipFile.length() > 0) {
return Collections.singletonList(buildFileGroup(buildZipFile(zipFile)));
}
return Collections.emptyList();
}
private IncomingFileGroup buildFileGroup(IncomingFile zipFile) {
return IncomingFileGroup.builder()
.name(FILE_GROUP_ZIP_NAME)
.files(List.of(zipFile))
.build();
}
private IncomingFile buildZipFile(File zipFile) {
return IncomingFile.builder()
.file(zipFile)
.contentType(ZIP_CONTENT_TYPE)
.name(FILE_NAME_ZIP_ATTACHMENT)
.build();
}
}
\ No newline at end of file
/*
* Copyright (C) 2023 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.eingang.formsolutions;
import java.io.File;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import de.ozgcloud.common.binaryfile.FileDataDeserializer;
import lombok.Builder;
import lombok.Getter;
import lombok.extern.jackson.Jacksonized;
@Getter
@Builder
@Jacksonized
public class FormSolutionsEingang {
private Map<String, Object> assistant;
private String postkorbhandle;
private String kommunalverwaltungId;
private String transactionId;
private String zustaendigeStelle;
@JsonProperty("gemeindeschlüssel")
private String gemeindeSchluessel;
private String anliegenId;
@JsonDeserialize(using = FileDataDeserializer.class)
private File pdf;
@JsonDeserialize(using = FileDataDeserializer.class)
private File zip;
}
/*
* Copyright (C) 2023 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.eingang.formsolutions;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Base64;
import org.apache.commons.io.IOUtils;
import de.ozgcloud.common.binaryfile.TempFileUtils;
import de.ozgcloud.common.errorhandling.TechnicalException;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
class FormSolutionsFileMapperUtils {
static InputStream decodeFile(String base64FileContent) {
// TODO ins Dateisystem schreiben, anstatt in Memory halten
ByteArrayInputStream base64ContentStream = new ByteArrayInputStream(base64FileContent.getBytes());
return Base64.getDecoder().wrap(base64ContentStream);
}
static InputStream decode(InputStream b64InputStream) {
return Base64.getDecoder().wrap(b64InputStream);
}
static File decodeBase64Content(String content) {
var b64File = TempFileUtils.writeTmpFile(content);
var tempFile = TempFileUtils.createTmpFile();
try (var in = new FileInputStream(b64File); var out = new FileOutputStream(tempFile.toFile())) {
IOUtils.copy(FormSolutionsFileMapperUtils.decode(in), out);
out.flush();
return tempFile.toFile();
} catch (IOException e) {
throw new TechnicalException("Error decoding and saving b64 file.", e);
}
}
}
\ No newline at end of file
/*
* Copyright (C) 2023 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.eingang.formsolutions;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import de.ozgcloud.common.errorhandling.TechnicalException;
import de.ozgcloud.eingang.common.formdata.FormData;
import de.ozgcloud.eingang.common.formdata.IncomingFile;
@Component
class FormSolutionsRequestMapper {
static final TypeReference<Map<String, Object>> VALUE_TYPE_REF = new TypeReference<Map<String, Object>>() {
};
private static final String FILE_NAME_JSON_REPRESENTATION = "form-data.json";
static final String FILE_NAME_PDF_REPRESENTATION = "eingang.pdf";
static final String FORMDATA_FIELD_ZUSTAENDIGE_STELLE = "zustaendigeStelle";
public static final String FORMDATA_FIELD_ASSISTANT = "assistant";
public static final String FORMDATA_FIELD_POSTKORBHANDLE = "postkorbhandle";
static final String FORMDATA_FIELD_TRANSACTION_ID = "transactionId";
@Autowired
private FormSolutionsAttachmentsMapper attachmentMapper;
@Autowired
private ObjectMapper objectMapper;
public FormData map(File jsonFile) {
var eingang = mapEingang(jsonFile);
return buildFormData(jsonFile, eingang);
}
FormData buildFormData(File jsonFile, FormSolutionsEingang eingang) {
var builder = FormData.builder()
.formData(buildFormDataMap(eingang))
.attachments(attachmentMapper.mapAttachments(eingang.getZip()))
.representation(buildJsonFile(jsonFile));
var numberOfRepresentations = 1;
if (Objects.nonNull(eingang.getPdf())) {
builder.representation(buildPdfFile(eingang.getPdf()));
numberOfRepresentations++;
}
return builder.numberOfRepresentations(numberOfRepresentations).build();
}
Map<String, Object> buildFormDataMap(FormSolutionsEingang eingang) {
Map<String, Object> map = new HashMap<>();
addIfValueNotNull(map, FORMDATA_FIELD_ASSISTANT, eingang.getAssistant());
addIfValueNotNull(map, FORMDATA_FIELD_POSTKORBHANDLE, eingang.getPostkorbhandle());
addIfValueNotNull(map, FORMDATA_FIELD_TRANSACTION_ID, eingang.getTransactionId());
addIfValueNotNull(map, FORMDATA_FIELD_ZUSTAENDIGE_STELLE, eingang.getZustaendigeStelle());
return Collections.unmodifiableMap(map);
}
private Map<String, Object> addIfValueNotNull(Map<String, Object> map, String key, Object value) {
if (Objects.nonNull(value)) {
map.put(key, value);
}
return map;
}
FormSolutionsEingang mapEingang(File jsonFile) {
try (var in = new FileInputStream(jsonFile)) {
return objectMapper.readValue(in, FormSolutionsEingang.class);
} catch (IOException e) {
throw new TechnicalException("Error parsing JSON from FormSolutions-Server", e);
}
}
private IncomingFile buildJsonFile(File jsonFile) {
return IncomingFile.builder()
.file(jsonFile)
.contentType(MediaType.APPLICATION_JSON_VALUE)
.name(FILE_NAME_JSON_REPRESENTATION)
.size(jsonFile.length())
.build();
}
private IncomingFile buildPdfFile(File pdfFile) {
return IncomingFile.builder()
.file(pdfFile)
.contentType(MediaType.APPLICATION_PDF_VALUE)
.name(FILE_NAME_PDF_REPRESENTATION)
.size(pdfFile.length())
.build();
}
}
\ No newline at end of file
/*
* Copyright (C) 2023 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.eingang.formsolutions;
import de.ozgcloud.eingang.semantik.enginebased.EngineBasedSemantikAdapter;
import de.ozgcloud.eingang.semantik.enginebased.formsolutions.FormSolutionsEngineBasedAdapter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SemantikAdapterConfiguration {
@Bean
public EngineBasedSemantikAdapter engineBasedSemantikAdapter() {
return new FormSolutionsEngineBasedAdapter();
}
}
\ No newline at end of file
/*
* Copyright (C) 2023 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.eingang.formsolutions;
import java.io.File;
import java.util.UUID;
import java.util.function.Supplier;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.logging.log4j.CloseableThreadContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.springframework.ws.server.endpoint.annotation.RequestPayload;
import org.springframework.ws.server.endpoint.annotation.ResponsePayload;
import de.ozgcloud.common.binaryfile.TempFileUtils;
import de.ozgcloud.eingang.semantik.SemantikAdapter;
import lombok.extern.log4j.Log4j2;
@Endpoint
@Log4j2
public class SendFormEndpoint {
public static final String JSON_FIELD = "json";
@Autowired
private FormSolutionsRequestMapper requestMapper;
@Autowired
private SemantikAdapter semantikAdapter;
private static final String REQUEST_ID_KEY = "requestId";
@PayloadRoot(namespace = WebServiceConfiguration.NAMESPACE_URI, localPart = "Request")
@ResponsePayload
public Response receiveForm(@RequestPayload Request request) {
return doSurroundOn(() -> handleRequest(request));
}
private Response handleRequest(Request request) {
try {
semantikAdapter.processFormData(requestMapper.map(writeRequestJsonToFile(request.getJSON())));
return buildSuccessResponse();
} catch (Exception e) {
LOG.error("Error on processing FormSolutions Formdata.", e);
return ExceptionUtils.rethrow(e);
}
}
private Response doSurroundOn(Supplier<Response> requestHandler) {
UUID requestId = UUID.randomUUID();
try (CloseableThreadContext.Instance ctc = CloseableThreadContext.put(REQUEST_ID_KEY, requestId.toString())) {
LOG.info("START of Request with ID '{}'.", requestId);
return requestHandler.get();
} finally {
LOG.info("END of Request with ID '{}'", requestId);
}
}
private File writeRequestJsonToFile(String json) {
return TempFileUtils.writeTmpFile(json);
}
private Response buildSuccessResponse() {
LOG.debug("Successful processed data");
var response = new Response();
response.setStatus("OK");
return response;
}
}
\ No newline at end of file
/*
* Copyright (C) 2023 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.eingang.formsolutions;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.ws.config.annotation.EnableWs;
import org.springframework.ws.config.annotation.WsConfigurerAdapter;
import org.springframework.ws.transport.http.MessageDispatcherServlet;
import org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition;
import org.springframework.xml.xsd.SimpleXsdSchema;
import org.springframework.xml.xsd.XsdSchema;
@EnableWs
@Configuration
class WebServiceConfiguration extends WsConfigurerAdapter {
private static final String XSD_LOCATION = "wsdl/jsonWrap.xsd";
static final String NAMESPACE_URI = "urn:JSONWrap";
@Bean
ServletRegistrationBean<MessageDispatcherServlet> messageDispatcherServlet(ApplicationContext applicationContext) {
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(applicationContext);
servlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean<>(servlet, "/ws/*");
}
@Bean
XsdSchema formDataSchema() {
return new SimpleXsdSchema(new ClassPathResource(XSD_LOCATION));
}
@Bean(name = "formsolutions_formDatas")
DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema formDataSchema) {
DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
wsdl11Definition.setPortTypeName("JSONWrapWebService");
wsdl11Definition.setLocationUri("/ws");
wsdl11Definition.setTargetNamespace(NAMESPACE_URI);
wsdl11Definition.setSchema(formDataSchema);
return wsdl11Definition;
}
}
logging:
level:
ROOT: ERROR
config: classpath:log4j2-local.xml
grpc:
client:
vorgang-manager-local:
address: static://127.0.0.1:9090
negotiationType: PLAINTEXT
management:
server:
port: 8082
server:
port: 9292
ozgcloud:
adapter:
targetVorgangManagerName: local
fallbackStrategy: DENY
routingStrategy: SINGLE
logging:
level:
ROOT: WARN
'[de.ozgcloud]': INFO
server:
port: 8080
management:
server:
port: 8081
health:
livenessState:
enabled: true
readinessState:
enabled: true
endpoint:
health:
group:
exploratory:
include: livenessState,readinessState,ping
show-details: always
probes:
enabled: true
prometheus:
enabled: true
endpoints:
web:
exposure:
include: "*"
\ No newline at end of file
______ ____ _____ __ __ _____ ____ _ _ _ _______ _____ ____ _ _ _____
| ____/ __ \| __ \| \/ |/ ____|/ __ \| | | | | |__ __|_ _/ __ \| \ | |/ ____|
| |__ | | | | |__) | \ / | (___ | | | | | | | | | | | | || | | | \| | (___
| __|| | | | _ /| |\/| |\___ \| | | | | | | | | | | | || | | | . ` |\___ \
| | | |__| | | \ \| | | |____) | |__| | |___| |__| | | | _| || |__| | |\ |____) |
|_| \____/|_| \_\_| |_|_____/ \____/|______\____/ |_| |_____\____/|_| \_|_____/
${spring-boot.version} ${application.version}
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://forms.ozg-sh.de/formsolutions"
targetNamespace="http://forms.ozg-sh.de/formsolutions"
elementFormDefault="qualified">
<xs:element name="sendFormRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="organisationseinheitenId" type="xs:string" />
<xs:element name="formName" type="xs:string" />
<xs:element name="vorname" type="xs:string" />
<xs:element name="nachname" type="xs:string" />
<xs:element name="namedeshamsters" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="sendFormResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="status" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="IOnlineAnhoerungWebServiceservice" targetNamespace="https://form-solutions.de/jsonWrap" xmlns:tns="https://form-solutions.de/jsonWrap" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:jw="urn:JSONWrap">
<types>
<xsd:schema>
<xsd:import namespace="urn:JSONWrap" schemaLocation="jsonWrap.xsd"/>
</xsd:schema>
</types>
<message name="Request">
<part element="jw:Request"/>
</message>
<message name="Response">
<part element="jw:Response"/>
</message>
<portType name="JSONWrapWebService">
<operation name="json">
<input message="tns:Request"/>
<output message="tns:Response"/>
</operation>
</portType>
<binding name="JSONWrapWebServicebinding" type="tns:JSONWrapWebService">
<binding transport="http://schemas.xmlsoap.org/soap/http" xmlns="http://schemas.xmlsoap.org/wsdl/soap/"/>
<operation name="json">
<operation soapAction="urn:JSONWrapWebService#json" xmlns="http://schemas.xmlsoap.org/wsdl/soap/"/>
<input>
<body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns="http://schemas.xmlsoap.org/wsdl/soap/" namespace="urn:JSONWrap"/>
</input>
<output>
<body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns="http://schemas.xmlsoap.org/wsdl/soap/" namespace="urn:JSONWrap"/>
</output>
</operation>
</binding>
<service name="JSONWrapWebServiceservice">
<port name="JSONWrapWebServicePort" binding="tns:JSONWrapWebServicebinding">
<address xmlns="http://schemas.xmlsoap.org/wsdl/soap/" location="https://partnertest.form-solutions.de/soap/JSONWrap"/>
</port>
</service>
</definitions>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment