diff --git a/fim-adapter/pom.xml b/fim-adapter/pom.xml index cdb1432b60b313b0defb13d6e3ec46e661d99956..fb4d5e6d9f7d952515b713d84755ad65963c7e40 100644 --- a/fim-adapter/pom.xml +++ b/fim-adapter/pom.xml @@ -20,16 +20,6 @@ <artifactId>semantik-adapter</artifactId> </dependency> - <!--spring--> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-actuator</artifactId> - </dependency> - <!--test --> <dependency> <groupId>de.ozgcloud.eingang</groupId> @@ -42,23 +32,30 @@ <build> <plugins> <plugin> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-maven-plugin</artifactId> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <executions> + <execution> + <goals> + <goal>test-jar</goal> + </goals> + </execution> + </executions> </plugin> <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-surefire-plugin</artifactId> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-failsafe-plugin</artifactId> + <artifactId>maven-surefire-plugin</artifactId> </plugin> <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-failsafe-plugin</artifactId> </plugin> </plugins> </build> diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimBasedMapper.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimBasedAdapter.java similarity index 53% rename from fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimBasedMapper.java rename to fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimBasedAdapter.java index 90ec29b65fcca537e6017857bf8af0ec2ffcd312..5849cf8e8f9e1f9ad90bb87fa28ef75ed75d71cd 100644 --- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimBasedMapper.java +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimBasedAdapter.java @@ -1,9 +1,9 @@ package de.ozgcloud.eingang.fim; import de.ozgcloud.eingang.common.formdata.FormData; +import de.ozgcloud.eingang.common.formdata.FormHeader; import de.ozgcloud.eingang.common.formdata.IncomingFile; -import de.ozgcloud.eingang.common.formdata.IncomingFileGroup; -import de.ozgcloud.eingang.semantik.enginebased.EngineBasedMapper; +import de.ozgcloud.eingang.semantik.enginebased.EngineBasedSemantikAdapter; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -14,41 +14,32 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import java.io.IOException; -import java.util.Collection; -import java.util.List; import java.util.Optional; @Log4j2 @Component -class FimBasedMapper implements EngineBasedMapper { +public class FimBasedAdapter implements EngineBasedSemantikAdapter { + + static final String FIM_FORM_ENGINE_NAME = "FIM"; @Autowired private FimService fimService; + @Override public boolean isResponsible(final FormData formData) { - //FIXME isResponsible from meta data - final List<IncomingFileGroup> attachments = formData.getAttachments(); - final Optional<IncomingFile> metadataFileOpt = findFile(attachments, "fim_xtaMetadata.xml"); - return metadataFileOpt.isPresent(); + final String formEngineName = formData.getHeader().getFormEngineName(); + return FIM_FORM_ENGINE_NAME.equals(formEngineName); } + @Override public FormData parseFormData(final FormData initialFormData) { - if (!isResponsible(initialFormData)) { - return initialFormData; - } - - final List<IncomingFileGroup> attachments = initialFormData.getAttachments(); - final Optional<IncomingFile> metadataFileOpt = findFile(attachments, "fim_xtaMetadata.xml"); - if (metadataFileOpt.isEmpty()) { - LOG.error("Metadata File not found for fim data mapping"); - return initialFormData; - } - final Optional<String> entryPointOpt = getEntryPoint(metadataFileOpt.get()); + LOG.info("FIM Mapper running to map formData"); + final Optional<String> entryPointOpt = getEntryPoint(initialFormData.getHeader()); if (entryPointOpt.isEmpty()) { LOG.error("No entry point found in metadata file for fim data mapping"); return initialFormData; } - final Optional<IncomingFile> fileOpt = findFile(attachments, entryPointOpt.get()); + final Optional<IncomingFile> fileOpt = findFile(initialFormData, entryPointOpt.get()); if (fileOpt.isEmpty()) { LOG.error("Entry point file not found for fim data mapping"); return initialFormData; @@ -62,19 +53,17 @@ class FimBasedMapper implements EngineBasedMapper { } } - private Optional<IncomingFile> findFile(final Collection<IncomingFileGroup> attachments, final String name) { - for (IncomingFileGroup group : attachments) { - for (IncomingFile file : group.getFiles()) { - if (file.getName().endsWith(name)) { - return Optional.of(file); - } + private Optional<IncomingFile> findFile(final FormData formData, final String name) { + for (IncomingFile file : formData.getRepresentations()) { + if (file.getName().endsWith(name)) { + return Optional.of(file); } } return Optional.empty(); } - private Optional<String> getEntryPoint(final IncomingFile incomingFile) { - // FIXME sollte über formdata metadaten kommen statt aus dem meta file geparsed zu werden + private Optional<String> getEntryPoint(final FormHeader formHeader) { + // FIXME OZG-5778 sollte über formdata metadaten kommen statt aus dem meta file geparsed zu werden return Optional.of("Antrag.xml"); } diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimDataMapper.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimDataMapper.java index 799798b5cc151c199a7b80534d7d834f1fb6c746..58606186dbe3b312b385398a8fbaece81c688c18 100644 --- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimDataMapper.java +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimDataMapper.java @@ -1,6 +1,7 @@ package de.ozgcloud.eingang.fim; import de.ozgcloud.eingang.common.formdata.FormData; +import de.ozgcloud.eingang.common.formdata.IncomingFile; import de.ozgcloud.eingang.common.formdata.IncomingFileGroup; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.function.TriFunction; @@ -11,25 +12,23 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.Text; -import java.util.Collection; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Optional; +import java.util.*; @Service @Log4j2 -class FimDataMapper implements TriFunction<Document, FimScheme, Collection<IncomingFileGroup>, FormData.FormDataBuilder> { +class FimDataMapper implements TriFunction<Document, FimScheme, FormData, FormData.FormDataBuilder> { private static final String LABEL_KEY = "label"; private static final String VALUE_KEY = "value"; @Override - public FormData.FormDataBuilder apply(final Document document, final FimScheme fimScheme, final Collection<IncomingFileGroup> attachments) { + public FormData.FormDataBuilder apply(final Document document, final FimScheme fimScheme, final FormData initialFormData) { final FormData.FormDataBuilder formDataBuilder = FormData.builder(); Map<String, Object> data = new LinkedHashMap<>(); process(document.getDocumentElement(), fimScheme, data, 0); formDataBuilder.formData(data); - formDataBuilder.attachments(attachments); + formDataBuilder.attachments(initialFormData.getAttachments()); + formDataBuilder.representations(initialFormData.getRepresentations()); return formDataBuilder; } diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimService.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimService.java index b451d9521385ee1b133d5fe098be89e29e6c8333..fd2f21c98c447c62cb574fe02480105198c122ff 100644 --- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimService.java +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimService.java @@ -1,10 +1,12 @@ package de.ozgcloud.eingang.fim; import de.ozgcloud.eingang.common.formdata.FormData; +import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle; import io.micrometer.common.util.StringUtils; import jakarta.annotation.PostConstruct; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.ResourceLoader; import org.springframework.stereotype.Service; import org.w3c.dom.Document; import org.xml.sax.SAXException; @@ -12,7 +14,6 @@ import org.xml.sax.SAXException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; -import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -28,6 +29,9 @@ public class FimService { @Autowired private FimDataMapper fimDataMapper; + @Autowired + private ResourceLoader resourceLoader; + @Autowired private final List<FimSchemeAdapter> fimSchemeAdapters = new ArrayList<>(); @@ -53,8 +57,9 @@ public class FimService { } private FimScheme loadFimScheme(final String path) throws ParserConfigurationException, IOException, SAXException { + LOG.debug("Load FIM schema: " + path); final DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - final Document doc = builder.parse(new File(path)); + final Document doc = builder.parse(resourceLoader.getResource("classpath:" + path).getFile()); final String targetNamespace = doc.getDocumentElement().getAttribute("targetNamespace"); final FimSchemeIdentifier fimSchemeIdentifier = FimSchemeIdentifier.fromString(targetNamespace); final FimSchemeAdapter fimSchemeAdapter = fimSchemeAdapterCatalogue.getOrDefault(fimSchemeIdentifier, DEFAULT_FIM_SCHEME_ADAPTER); @@ -69,12 +74,14 @@ public class FimService { } public FormData transformDocument(final Document document, final FormData initialFormData) { - final String schemeName = document.getDocumentElement().getAttribute("xmlns:xfd"); + final String[] tagParts = document.getDocumentElement().getTagName().split(":"); + final String namespacePrefix = tagParts.length < 2 ? "" : (":" + tagParts[0]); + final String schemeName = document.getDocumentElement().getAttribute("xmlns" + namespacePrefix); if (StringUtils.isEmpty(schemeName)) { throw new FimException("XML Document does not provide a scheme"); } final FimScheme scheme = getSchemeForIdentifier(schemeName); - final FormData.FormDataBuilder builder = fimDataMapper.apply(document, scheme, initialFormData.getAttachments()); + final FormData.FormDataBuilder builder = fimDataMapper.apply(document, scheme, initialFormData); final FimSchemeAdapter adapter = scheme.getSchemeAdapter(); diff --git a/fim-adapter/src/main/resources/application-fim.yml b/fim-adapter/src/main/resources/application-fim.yml new file mode 100644 index 0000000000000000000000000000000000000000..1300ecebf1e79ceb73ec6d4a99104b8652368012 --- /dev/null +++ b/fim-adapter/src/main/resources/application-fim.yml @@ -0,0 +1,3 @@ +fim: + schemeLocations: + - fim-s17000652_1.4/S17000652V1.4_xfall.xsd \ No newline at end of file diff --git a/fim-adapter/src/main/resources/application.yml b/fim-adapter/src/main/resources/application.yml deleted file mode 100644 index c52241b27c1372ce3e347313c23d3cf710766e15..0000000000000000000000000000000000000000 --- a/fim-adapter/src/main/resources/application.yml +++ /dev/null @@ -1,3 +0,0 @@ -fim: - schemeLocations: - - src/main/resources/fim-s17000652_1.4/S17000652V1.4_xfall.xsd \ No newline at end of file diff --git a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimServiceITCase.java b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimServiceITCase.java index 747c8a758932029c830174b894962c7afa933fe4..886bfbefdf7a56498e408582fb8139cf6d08eb17 100644 --- a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimServiceITCase.java +++ b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimServiceITCase.java @@ -2,8 +2,8 @@ package de.ozgcloud.eingang.fim; import de.ozgcloud.common.test.ITCase; import de.ozgcloud.eingang.common.formdata.FormData; +import de.ozgcloud.eingang.common.formdata.FormHeader; import de.ozgcloud.eingang.common.formdata.IncomingFile; -import de.ozgcloud.eingang.common.formdata.IncomingFileGroup; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; @@ -18,6 +18,7 @@ import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import java.io.File; import java.io.IOException; +import java.util.List; import java.util.Map; import org.junit.jupiter.api.Test; @@ -34,7 +35,7 @@ public class FimServiceITCase { private FimService fimService; @Autowired - private FimBasedMapper fimBasedMapper; + private FimBasedAdapter fimBasedAdapter; @Test void shouldFailOnEmptyScheme() { @@ -75,6 +76,18 @@ public class FimServiceITCase { assertThat(expected).isEqualTo(formData.getFormData()); } + @Test + void shouldTransformSimpleDocumentWithoutNamespace() throws ParserConfigurationException, IOException, SAXException { + final Document document = loadDocument("src/test/resources/test3.xml"); + final FormData formData = fimService.transformDocument(document, FormData.builder().build()); + + final Map<String, Object> expected = Map.of( + "fim.S1235", Map.of("label", "Testkey", "value", "Testvalue"), + "fim.S1236", Map.of("label", "fim.S1236", "value", "Testvalue 2") + ); + assertThat(expected).isEqualTo(formData.getFormData()); + } + @Test void shouldTransformDocument() throws ParserConfigurationException, IOException, SAXException { final Document document = loadDocument("src/test/resources/S17000652V1.4_test01.xml"); @@ -130,12 +143,13 @@ public class FimServiceITCase { @Test void shouldFallbackUnknownScheme() { - final FormData initialFormData = FormData.builder().attachment( - IncomingFileGroup.builder() - .file(IncomingFile.builder().name("src/test/resources/test3/Antrag.xml").file(new File("src/test/resources/test3/Antrag.xml")).build()) - .file(IncomingFile.builder().name("src/test/resources/test3/fim_xtaMetadata.xml").build()).build()).build(); + IncomingFile r1 = IncomingFile.builder().name("src/test/resources/test3/Antrag.xml").file(new File("src/test/resources/test3/Antrag.xml")).build(); + IncomingFile r2 = IncomingFile.builder().name("src/test/resources/test3/fim_xtaMetadata.xml").build(); + final FormData initialFormData = FormData.builder() + .header(FormHeader.builder().channel("XTA").formEngineName("FIM").build()) + .representations(List.of(r1, r2)).build(); - FormData formData = fimBasedMapper.parseFormData(initialFormData); + FormData formData = fimBasedAdapter.parseFormData(initialFormData); assertThat(formData).isNotNull(); diff --git a/fim-adapter/src/test/resources/application-test.yml b/fim-adapter/src/test/resources/application-test.yml index 62a350e59592d16174ebee0bfd9d261b9f4e4942..148c1af75dbdac7d1dff1c5632d01cf06dae9a83 100644 --- a/fim-adapter/src/test/resources/application-test.yml +++ b/fim-adapter/src/test/resources/application-test.yml @@ -1,4 +1,4 @@ fim: schemeLocations: - - src/main/resources/fim-s17000652_1.4/S17000652V1.4_xfall.xsd - - src/test/resources/test2/test2.xsd \ No newline at end of file + - fim-s17000652_1.4/S17000652V1.4_xfall.xsd + - test2/test2.xsd \ No newline at end of file diff --git a/fim-adapter/src/test/resources/test2.xml b/fim-adapter/src/test/resources/test2.xml index 6d219fb5cbb394f5d73e8a427f4b525f226c7168..2f0cc4f8bea8e30285f6169ce07494e6beac535d 100644 --- a/fim-adapter/src/test/resources/test2.xml +++ b/fim-adapter/src/test/resources/test2.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<xs:fim.S1234 xmlns:xfd="test2" xsi:schemaLocation="test2"> +<xs:fim.S1234 xmlns:xs="test2" xsi:schemaLocation="test2"> <xs:fim.S1235>Testvalue</xs:fim.S1235> <xs:fim.S1236>Testvalue 2</xs:fim.S1236> </xs:fim.S1234> diff --git a/fim-adapter/src/test/resources/test3.xml b/fim-adapter/src/test/resources/test3.xml new file mode 100644 index 0000000000000000000000000000000000000000..c00618791b8e8cf12a435c98733ced256bc61eab --- /dev/null +++ b/fim-adapter/src/test/resources/test3.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<fim.S1234 xmlns="test2" xsi:schemaLocation="test2"> + <fim.S1235>Testvalue</fim.S1235> + <fim.S1236>Testvalue 2</fim.S1236> +</fim.S1234> diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/SemantikAdapter.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/SemantikAdapter.java index 455d84f4ad8d9727137bf98d8e1e5c54cd430c6f..9168807d8b4e2a6c52ae95c8bb509ffd04ecd1d8 100644 --- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/SemantikAdapter.java +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/SemantikAdapter.java @@ -54,7 +54,8 @@ public class SemantikAdapter { } private FormData parseByEngineAdapter(FormData formData) { - for (var adapter : getResponsibleEngineAdapters(formData)) { + List<EngineBasedSemantikAdapter> responsibleEngineAdapters = getResponsibleEngineAdapters(formData); + for (var adapter : responsibleEngineAdapters) { try { formData = adapter.parseFormData(formData); } catch (Exception e) { diff --git a/xta-adapter/pom.xml b/xta-adapter/pom.xml index 424074a4c92877779135b8a60cb101e8ff48cb0b..46baa1f9e235e262e1f1dd6b1ae8d0e23b205989 100644 --- a/xta-adapter/pom.xml +++ b/xta-adapter/pom.xml @@ -107,6 +107,28 @@ <profiles>local,sec</profiles> </configuration> </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-dependency-plugin</artifactId> + <executions> + <execution> + <goals> + <goal>unpack</goal> + </goals> + <configuration> + <artifactItems> + <artifactItem> + <groupId>de.ozgcloud.eingang</groupId> + <artifactId>fim-adapter</artifactId> + <version>${project.version}</version> + <includes>**/*.yml,**/*.xml,**/*.xsd</includes> + </artifactItem> + </artifactItems> + <outputDirectory>${project.build.directory}/classes/</outputDirectory> + </configuration> + </execution> + </executions> + </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMapperHelper.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMapperHelper.java new file mode 100644 index 0000000000000000000000000000000000000000..5711cb57e1644e1c4325421671f7cb480eda8408 --- /dev/null +++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMapperHelper.java @@ -0,0 +1,31 @@ +package de.ozgcloud.eingang.xta; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.apache.commons.lang3.StringUtils; + +import java.time.ZonedDateTime; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class XtaMapperHelper { + + public static String getFormEngineName(XtaMessageMetaData metaData) { + if (StringUtils.equals(metaData.getMessageType(), XtaService.XDOMEA_0201_MESSAGE_TYPE)) { + // TODO OZG-5778 verify the correct engine name + return "XDOMEA"; + } + + if (StringUtils.startsWith(metaData.getMessageType(), XtaService.FIM_MESSAGE_TYPE_PREFIX)) { + return "FIM"; + } + return null; + } + + // TODO OZG-6176 Check if the problem can be fixed elsewhere + public static ZonedDateTime getCreatedAt(XtaMessageMetaData metaData) { + if (metaData.getOrigin() != null) { + return metaData.getOrigin(); + } + return ZonedDateTime.now(); + } +} diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java index 35e60dc6ffa846c57121ad889fe7e3b524d3e129..09d353faf28d73111a2696cfc89e47978f9d07b4 100644 --- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java +++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java @@ -9,7 +9,7 @@ import de.ozgcloud.eingang.common.formdata.FormHeader; import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier; import de.ozgcloud.eingang.semantik.enginebased.FilesMapperHelper; -@Mapper(imports = FilesMapperHelper.class) +@Mapper(imports = {FilesMapperHelper.class, XtaMapperHelper.class}) interface XtaMessageMapper { int VORGANG_NUMMER_SUFFIX_LENGTH = 4; @@ -29,10 +29,11 @@ interface XtaMessageMapper { @Mapping(target = "requestId", source = "messageId") @Mapping(target = "vorgangNummer", expression = "java(vorgangNummerSupplier.get(VORGANG_NUMMER_SUFFIX_LENGTH))") @Mapping(target = "serviceKonto", ignore = true) - @Mapping(target = "createdAt", source = "origin") + @Mapping(target = "createdAt", expression = "java(XtaMapperHelper.getCreatedAt(metaData))") @Mapping(target = "sender", constant = "XTA") + @Mapping(target = "channel", constant = "XTA") @Mapping(target = "formName", ignore = true) - @Mapping(target = "formEngineName", ignore = true) + @Mapping(target = "formEngineName", expression = "java(XtaMapperHelper.getFormEngineName(metaData))") FormHeader formHeaderFromMetaData(XtaMessageMetaData metaData, @Context VorgangNummerSupplier vorgangNummerSupplier); default String fromId(XtaMessageId id) { diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRunner.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRunner.java index 0c497d51f85560d84085d663c2bc32aaf46a408e..ceed7a9c13bbc8a8d9a5817dbf762d2c2c4c33e0 100644 --- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRunner.java +++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRunner.java @@ -11,7 +11,7 @@ import de.ozgcloud.eingang.semantik.SemantikAdapter; import lombok.NonNull; import lombok.extern.log4j.Log4j2; -@Profile("!itcase") +@Profile({"!itcase", "fim"}) @Log4j2 @Component class XtaRunner implements ApplicationListener<ContextRefreshedEvent> { diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java index 203cff44770add307aeab236f0bc9388427b9563..4fccd8d8a8cf29f762e97b775aeae9a72c66bb76 100644 --- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java +++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java @@ -1,6 +1,6 @@ package de.ozgcloud.eingang.xta; -import static java.util.Collections.*; +import static java.util.Collections.emptyList; import java.util.List; import java.util.Spliterators; diff --git a/xta-adapter/src/main/resources/application.yml b/xta-adapter/src/main/resources/application.yml index 9ea49363440c8f86d870397d00007ff0aed7e041..fd1f72982999b468311a1f7ec9faf5cec1b8a67d 100644 --- a/xta-adapter/src/main/resources/application.yml +++ b/xta-adapter/src/main/resources/application.yml @@ -13,3 +13,7 @@ ozgcloud: status-list: "http://www.osci.eu/ws/2008/05/transport/urn/messageTypes/MsgBoxStatusListRequest" fetch-request: "http://www.osci.eu/ws/2008/05/transport/urn/messageTypes/MsgBoxFetchRequest" close-request: "http://www.osci.eu/ws/2008/05/transport/urn/messageTypes/MsgBoxCloseRequest" + +fim: + schemeLocations: + - fim-s17000652_1.4/S17000652V1.4_xfall.xsd \ No newline at end of file diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormHeaderTestFactory.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormHeaderTestFactory.java index acd02b8efce3f09542c8dc5c748850027ad27072..be839ff4c74e238e98aed2a2237fe2f154ed59e4 100644 --- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormHeaderTestFactory.java +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormHeaderTestFactory.java @@ -7,6 +7,9 @@ public class FormHeaderTestFactory { private static final String FORM_NAME = "xdomea"; static final String VORGANGNUMMER = "vorgangNummer"; + static final String CHANNEL = "XTA"; + static final String FIM_FORM_ENGINE_NAME = "FIM"; + static final String XDOMEA_FORM_ENGINE_NAME = "XDOMEA"; static FormHeader create() { return createBuilder().build(); diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java index 653f1c4f8884f1a61543b7bbc3be19af8042aa35..83d1dc8f4fee83ad384db085315e9fbcc37cd075 100644 --- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java @@ -72,8 +72,46 @@ class XtaMessageMapperTest { assertThat(formData.getHeader().getVorgangNummer()).isEqualTo(FormHeaderTestFactory.VORGANGNUMMER); } + @Test + void shouldSetChannelXTA() { + var formData = doMapping(); + + assertThat(formData.getHeader().getChannel()).isEqualTo(FormHeaderTestFactory.CHANNEL); + } + + @Test + void shouldSetFormEngineName() { + var formData = doMapping(); + + assertThat(formData.getHeader().getFormEngineName()).isEqualTo(FormHeaderTestFactory.XDOMEA_FORM_ENGINE_NAME); + } + + private FormData doMapping() { return mapper.toFormData(representationsAttachmentsPair, xtaMessageMetaData, vorgangNummerSupplier); } } + + @Nested + class TestToFimFormData { + + + private XtaMessageMetaData xtaMessageMetaData; + private RepresentationsAttachmentsPair representationsAttachmentsPair; + + @BeforeEach + void mock() { + xtaMessageMetaData = XtaMessageMetaDataTestFactory.createFim(); + representationsAttachmentsPair = RepresentationsAttachmentsPairTestFactory.create(); + when(vorgangNummerSupplier.get(VORGANG_NUMMER_SUFFIX_LENGTH)).thenReturn(FormHeaderTestFactory.VORGANGNUMMER); + } + + @Test + void shouldSetFormEngineName() { + var formData = mapper.toFormData(representationsAttachmentsPair, xtaMessageMetaData, vorgangNummerSupplier); + + assertThat(formData.getHeader().getFormEngineName()).isEqualTo(FormHeaderTestFactory.FIM_FORM_ENGINE_NAME); + } + + } } diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataTestFactory.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataTestFactory.java index d112294af7ba77c619baf1b9574a648ac1930b1f..fbe07498eb8d3435d1c739a268ace2273bc133ac 100644 --- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataTestFactory.java +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataTestFactory.java @@ -7,6 +7,7 @@ import java.time.ZonedDateTime; class XtaMessageMetaDataTestFactory { static final String MESSAGE_TYPE = "Geschaeftsgang.Geschaeftsgang.0201"; + static final String FIM_MESSAGE_TYPE = "fim.S17000652.17000652001004"; static final ZonedDateTime ORIGIN = ZonedDateTime.parse("2022-10-29T15:45:52.4942149+02:00"); static XtaMessageMetaData create() { @@ -19,4 +20,15 @@ class XtaMessageMetaDataTestFactory { .messageType(MESSAGE_TYPE) .origin(ORIGIN); } + + static XtaMessageMetaData createFim() { + return createFimBuilder().build(); + } + + static XtaMessageMetaData.XtaMessageMetaDataBuilder createFimBuilder() { + return XtaMessageMetaData.builder() + .messageId(MESSAGE_ID) + .messageType(FIM_MESSAGE_TYPE) + .origin(ORIGIN); + } } diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java index 0d05f6c1ae589350c8bdca53632a13844c2ead6b..8e4c34115cc54be243a8ebed26fa148dc4c5b60f 100644 --- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java @@ -23,9 +23,7 @@ import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.IncomingFile; import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory; import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier; -import de.ozgcloud.eingang.xdomea.XdomeaMessageData; import de.ozgcloud.eingang.xdomea.XdomeaMessageDataMapper; -import de.ozgcloud.eingang.xdomea.XdomeaMessageDataTestFactory; class XtaServiceTest { @@ -252,6 +250,7 @@ class XtaServiceTest { incomingFiles = List.of(IncomingFileTestFactory.create(), IncomingFileTestFactory.create()); } + @DisplayName("should return representations with incoming files") @Test void shouldReturnRepresentationsWithIncomingFiles() { @@ -307,8 +306,7 @@ class XtaServiceTest { private List<XtaMessageMetaData> getExpectedMessages() { return Stream.concat( XtaMessageMetaDatasAndHeaderTestFactory.create().getMessages(), - XtaMessageMetaDatasAndHeaderTestFactory.create().getMessages() - ).toList(); + XtaMessageMetaDatasAndHeaderTestFactory.create().getMessages()).toList(); } @DisplayName("should call set current identifier")