Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • ozg-cloud/app/eingang-manager
1 result
Select Git revision
Show changes
Commits on Source (2)
Showing
with 4 additions and 1336 deletions
......@@ -54,22 +54,21 @@ pipeline {
def commonVersion = getParentPomVersion('common/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 xtaAdapterVersion = getParentPomVersion('xta-adapter/pom.xml')
def enterpriseAdapterVersion = getParentPomVersion('enterprise-adapter/pom.xml')
if(env.BRANCH_NAME == 'release'){
if ( !isReleaseVersion([rootVersion, vorgangManagerVersion, commonVersion, routerVersion, ifAdapterVersion, fsAdapterVersion, formCycleAdapterVersion, xtaAdapterVersion, enterpriseAdapterVersion])) {
if ( !isReleaseVersion([rootVersion, vorgangManagerVersion, commonVersion, routerVersion, ifAdapterVersion, formCycleAdapterVersion, xtaAdapterVersion, enterpriseAdapterVersion])) {
error("Keine Release Version für Branch ${env.BRANCH_NAME}.")
}
} else {
if ( !isSnapshotVersion([rootVersion, commonVersion, routerVersion, ifAdapterVersion, fsAdapterVersion, formCycleAdapterVersion, xtaAdapterVersion, enterpriseAdapterVersion])) {
if ( !isSnapshotVersion([rootVersion, commonVersion, routerVersion, ifAdapterVersion, formCycleAdapterVersion, xtaAdapterVersion, enterpriseAdapterVersion])) {
error("Keine Snapshot Version für Branch ${env.BRANCH_NAME}.")
}
}
if ( !isSameVersion([commonVersion, routerVersion, ifAdapterVersion, fsAdapterVersion, formCycleAdapterVersion, xtaAdapterVersion, enterpriseAdapterVersion], rootVersion)) {
if ( !isSameVersion([commonVersion, routerVersion, ifAdapterVersion, formCycleAdapterVersion, xtaAdapterVersion, enterpriseAdapterVersion], rootVersion)) {
error("Versionen sind nicht identisch")
}
}
......@@ -143,21 +142,18 @@ pipeline {
IMAGE_TAG = buildVersionName()
tagAndPushDockerImage('intelliform-adapter', IMAGE_TAG)
tagAndPushDockerImage('formsolutions-adapter', IMAGE_TAG)
tagAndPushDockerImage('formcycle-adapter', IMAGE_TAG)
tagAndPushDockerImage('xta-adapter', IMAGE_TAG)
tagAndPushDockerImage('enterprise-adapter', IMAGE_TAG)
if (env.BRANCH_NAME == 'main') {
tagAndPushDockerImage('intelliform-adapter', 'snapshot-latest')
tagAndPushDockerImage('formsolutions-adapter', 'snapshot-latest')
tagAndPushDockerImage('formcycle-adapter', 'snapshot-latest')
tagAndPushDockerImage('xta-adapter', 'snapshot-latest')
tagAndPushDockerImage('enterprise-adapter', 'snapshot-latest')
}
else if (env.BRANCH_NAME == 'release') {
tagAndPushDockerImage('intelliform-adapter', 'latest')
tagAndPushDockerImage('formsolutions-adapter', 'latest')
tagAndPushDockerImage('formcycle-adapter', 'latest')
tagAndPushDockerImage('xta-adapter', 'latest')
tagAndPushDockerImage('enterprise-adapter', 'latest')
......@@ -323,7 +319,6 @@ String getElementAccessToken() {
Void setNewDevAdapterVersion() {
setNewAfmAdapterVersion('dev')
setNewFsAdapterVersion('dev')
setNewFormcycleAdapterVersion('dev')
setNewXtaAdapterVersion('dev')
setNewEnterpriseAdapterVersion('dev')
......@@ -331,7 +326,6 @@ Void setNewDevAdapterVersion() {
Void setNewTestAdapterVersion() {
setNewAfmAdapterVersion('test')
setNewFsAdapterVersion('test')
setNewFormcycleAdapterVersion('test')
setNewEnterpriseAdapterVersion('test')
}
......@@ -348,18 +342,6 @@ Void setNewAfmAdapterVersion(String environment) {
}
}
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) {
dir("gitops") {
def envFile = "${environment}/application/values/formcycle-adapter-values.yaml"
......@@ -413,7 +395,7 @@ Void pushNewGitopsVersion(String environment) {
withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) {
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} afm-adapter ${IMAGE_TAG}'"
sh 'git push https://${USER}:${TOKEN}@git.ozg-sh.de/ozgcloud-devops/gitops.git'
}
}
......
<?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.17.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>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:JSONWrap" xmlns:jw="urn:JSONWrap">
<xs:element name="Request">
<xs:complexType>
<xs:sequence>
<xs:element name="JSON" type="xsd:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Response">
<xs:complexType>
<xs:sequence>
<xs:element name="status" type="xsd:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
/*
* 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 static de.ozgcloud.eingang.formsolutions.FormSolutionsAttachmentsMapper.*;
import static de.ozgcloud.eingang.formsolutions.FormSolutionsFilesTestFactory.*;
import static org.assertj.core.api.Assertions.*;
import java.io.File;
import java.util.List;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import de.ozgcloud.common.binaryfile.TempFileUtils;
import de.ozgcloud.common.test.TestUtils;
import de.ozgcloud.eingang.common.formdata.IncomingFile;
import de.ozgcloud.eingang.common.formdata.IncomingFileGroup;
import lombok.SneakyThrows;
class FormSolutionsAttachmentsMapperTest {
@InjectMocks
private FormSolutionsAttachmentsMapper mapper;
private File zipFile;
@BeforeEach
void writeZipFile() {
zipFile = TempFileUtils.writeTmpFile(ZIP_DECODED);
}
@AfterEach
void delZipFile() {
zipFile.delete();
}
@Nested
class TestAttachmentsMapping {
@Test
@SneakyThrows
void shouldParseZip() {
var map = mapper.mapAttachments(zipFile);
assertThat(TestUtils.contentStreamToByteArray(getAttachment(map).getContentStream())).isEqualTo(ZIP_DECODED);
}
@Test
void shouldSetContentType() {
var map = mapper.mapAttachments(zipFile);
assertThat(getAttachment(map).getContentType()).isEqualTo(ZIP_CONTENT_TYPE);
}
@Test
void shouldSetFileName() {
var map = mapper.mapAttachments(zipFile);
assertThat(getAttachment(map).getName()).isEqualTo(FILE_NAME_ZIP_ATTACHMENT);
}
@Test
void shouldSetGroupName() {
var map = mapper.mapAttachments(zipFile);
assertThat(map.get(0).getName()).isEqualTo(FILE_GROUP_ZIP_NAME);
}
}
private IncomingFile getAttachment(List<IncomingFileGroup> attachments) {
return attachments.get(0).getFiles().get(0);
}
}
/*
* 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 static de.ozgcloud.eingang.common.formdata.FormSolutionsTestFactory.*;
import java.util.Map;
public class FormSolutionsEingangTestFactory {
public static FormSolutionsEingang create() {
return createBuilder().build();
}
public static FormSolutionsEingang.FormSolutionsEingangBuilder createBuilder() {
return FormSolutionsEingang.builder()
.assistant(Map.of())
.zustaendigeStelle(ZUSTAENDIGE_STELLE)
.postkorbhandle(POSTFACH_ID_STELLE)
.transactionId(FORM_ID_VALUE);
}
}
/*
* 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 static de.ozgcloud.eingang.formsolutions.FormSolutionsFileMapperUtils.*;
import static de.ozgcloud.eingang.formsolutions.FormSolutionsFilesTestFactory.*;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import de.ozgcloud.common.test.TestUtils;
import lombok.SneakyThrows;
class FormSolutionsFileMapperUtilsTest {
@DisplayName("Test decoding base64 encoded file")
@Nested
class TestDecodingBase64Content {
@Test
@SneakyThrows
void shouldDecodeFile() {
var decodedFileContentStream = decodeFile(ZIP_ENCODED);
assertThat(TestUtils.contentStreamToByteArray(decodedFileContentStream)).isEqualTo(ZIP_DECODED);
}
}
}
\ 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 static de.ozgcloud.eingang.common.formdata.FormSolutionsTestFactory.*;
import static org.assertj.core.api.Assertions.*;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import org.assertj.core.api.ObjectAssert;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.SpyBean;
import org.springframework.test.context.ActiveProfiles;
import de.ozgcloud.common.binaryfile.TempFileUtils;
import de.ozgcloud.common.test.TestUtils;
import de.ozgcloud.eingang.common.formdata.FormData;
import de.ozgcloud.eingang.common.formdata.IncomingFile;
import de.ozgcloud.eingang.common.formdata.IncomingFileGroup;
import de.ozgcloud.eingang.semantik.enginebased.formsolutions.FormSolutionsEngineBasedAdapter;
import lombok.SneakyThrows;
@SpringBootTest
@ActiveProfiles({ "local", "itcase" })
class FormSolutionsRequestMapperITCase {
private static final String COMPONENTS = "components";
private static final String PANELS = "panels";
@SpyBean
private FormSolutionsRequestMapper mapper;
@Nested
class TestParseExampleData {
@Test
void shouldParseData() {
var parsed = parseRequestData(SIMPLE_JSON_DATA);
assertThat(parsed).isNotNull();
}
@Test
void shouldContainRawData() {
var parsed = parseRequestData(SIMPLE_JSON_DATA);
assertThat(parsed.getFormData()).isNotNull();
}
@Nested
class TestWithPanels {
@Test
void shouldContainPanel() {
var parsed = parseAndGetPanel();
assertThat(parsed).isNotNull();
}
@Test
void shouldHaveIdentifier() {
var panel = parseAndGetPanel();
assertThat(panel.get(FormSolutionsEngineBasedAdapter.IDENTIFIER_KEY)).isNotNull();
}
@Test
@SuppressWarnings("unchecked")
void shouldHaveComponents() {
var panel = parseAndGetPanel();
var components = (List<Map<String, Object>>) panel.get(COMPONENTS);
assertThat(components).hasSize(2);
}
}
private Map<String, Object> parseAndGetPanel() {
return FormSolutionsRequestMapperITCase.this.parseAndGetPanel(SIMPLE_JSON_DATA);
}
}
@Nested
class TestParseNestedComponents {
@Test
void shouldParseData() {
var parsed = parseRequestData(NESTED_COMPONENTS_JSON);
assertThat(parsed).isNotNull();
}
@Test
@SuppressWarnings("unchecked")
void shouldHaveComponents() {
var panel = parseAndGetPanel();
assertThat((List<Map<String, Object>>) panel.get(COMPONENTS)).hasSize(1);
}
@Test
void shouldHaveIdentifier() {
var component = parseAndGetComponent();
assertThat(component).containsEntry(FormSolutionsEngineBasedAdapter.IDENTIFIER_KEY, OBJEKTGRUPPE_0);
}
@Test
void shouldHaveNestedComponents() {
var component = parseAndGetComponent();
assertThat(component.keySet()).hasSize(3);
}
@SuppressWarnings("unchecked")
private Map<String, Object> parseAndGetComponent() {
return ((List<Map<String, Object>>) parseAndGetPanel().get(COMPONENTS)).get(0);
}
private Map<String, Object> parseAndGetPanel() {
return FormSolutionsRequestMapperITCase.this.parseAndGetPanel(NESTED_COMPONENTS_JSON);
}
}
@Nested
class TestParsePdfRepresentation {
@Test
void shouldHaveRepresentations() {
var parsed = parseRequestData(PDF_REPRESENTATION_JSON);
assertThat(parsed.getRepresentations()).hasSize(2);
}
@Test
@SneakyThrows
void shouldHavePdf() {
var parsed = parseRequestData(PDF_REPRESENTATION_JSON);
ObjectAssert<IncomingFile> firstRepresentationAssert = assertThat(parsed.getRepresentations())
.filteredOn(inFile -> inFile.getContentType().equals("application/pdf")).singleElement();
firstRepresentationAssert.extracting(IncomingFile::getName).isEqualTo("eingang.pdf");
firstRepresentationAssert.extracting(IncomingFile::getContentStream).extracting(stream -> toArray(stream))
.isEqualTo(PDF_VALUE_DECODED.getBytes());
}
}
@Nested
class TestParseAttachmentZip {
@Test
@SneakyThrows
void shouldHaveZip() {
var parsed = parseRequestData(ZIP_ATTACHMENT_JSON);
ObjectAssert<IncomingFileGroup> firstAttachmentAssert = assertThat(parsed.getAttachments()).hasSize(1).first();
firstAttachmentAssert.extracting(IncomingFileGroup::getName).isEqualTo(FormSolutionsAttachmentsMapper.FILE_GROUP_ZIP_NAME);
var attachmentFileAssert = firstAttachmentAssert.extracting(fileGroup -> fileGroup.getFiles().get(0));
attachmentFileAssert.extracting(IncomingFile::getName).isEqualTo("attachments.zip");
attachmentFileAssert.extracting(file -> toArray(file.getContentStream())).isEqualTo(ZIP_VALUE_DECODED.getBytes());
}
}
// TODO remove this method when TestUtils is not throwing Exception anymore.
@SneakyThrows
private byte[] toArray(InputStream stream) {
return TestUtils.contentStreamToByteArray(stream);
}
@SuppressWarnings("unchecked")
private Map<String, Object> parseAndGetPanel(String json) {
var data = (Map<String, Object>) parseRequestData(json).getFormData().get(FormSolutionsEngineBasedAdapter.ASSISTANT);
return ((List<Map<String, Object>>) data.get(PANELS)).get(0);
}
private FormData parseRequestData(String json) {
var file = TempFileUtils.writeTmpFile(json);
var result = mapper.map(file);
file.delete();
return result;
}
}