Skip to content
Snippets Groups Projects
Commit 480e0059 authored by OZG-Cloud Team's avatar OZG-Cloud Team
Browse files

Merge pull request 'OZG-5778_entry-metadata' (#160) from OZG-5778_entry-metadata into master

parents 89ac4b2b fe508030
Branches
Tags
No related merge requests found
Showing
with 712 additions and 439 deletions
package de.ozgcloud.eingang;
import org.aspectj.lang.annotation.Pointcut;
public class EingangAspectPointcuts {
@Pointcut("execution(public * *(..))")
void anyPublicMethods() {
// aspect pointcut - no implementation needed
}
@Pointcut("within(de.ozgcloud..*)")
void anythingInOzgCloud() {
// aspect pointcut - no implementation needed
}
@Pointcut("anyPublicMethods() && anythingInOzgCloud()")
void anyPublicMethodInOzgCloud() {
// aspect pointcut - no implementation needed
}
@Pointcut("anyPublicMethodInOzgCloud() && target(de.ozgcloud.eingang.semantik.enginebased.EngineBasedMapper)")
void publicMethodInEngineBasedMapper() {
// aspect pointcut - no implementation needed
}
}
package de.ozgcloud.eingang;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
import de.ozgcloud.common.logging.AspectLoggingUtils;
@Aspect
@Component
public class EingangLoggingAspect extends EingangAspectPointcuts {
@Before("publicMethodInEngineBasedMapper()")
public void onEngineBasedMapper(JoinPoint joinPoint) {
AspectLoggingUtils.log(joinPoint);
}
@AfterReturning(pointcut = "publicMethodInEngineBasedMapper()", returning = "returnValue")
public void afterServiceMethod(JoinPoint joinPoint, Object returnValue) {
AspectLoggingUtils.logReturnValue(joinPoint, returnValue);
}
}
...@@ -64,16 +64,21 @@ public class FormData { ...@@ -64,16 +64,21 @@ public class FormData {
@Singular @Singular
private List<IncomingFile> representations; private List<IncomingFile> representations;
private FormDataControl control; @Builder.Default
private FormDataControl control = FormDataControl.builder().build();
@Getter @Getter
@Builder @Builder(toBuilder = true)
@ToString
public static class FormDataControl { public static class FormDataControl {
private Optional<Representations> representations; @Builder.Default
private Optional<Representations> representations = Optional.empty();
@Builder.Default
private Optional<FormMetaData> metaData = Optional.empty();
} }
@Getter @Getter
@Builder @Builder(toBuilder = true)
public static class Representations { public static class Representations {
private String primaryFormDataRepresentation; private String primaryFormDataRepresentation;
private String primaryFormDataPdfRepresentation; private String primaryFormDataPdfRepresentation;
......
package de.ozgcloud.eingang.common.formdata;
import java.time.ZonedDateTime;
public interface FormMetaData {
ZonedDateTime getOrigin();
ZonedDateTime getDelivery();
/**
* Returns the value of the Entry, or null if this MetaData contains no Entry
* for the name.
*
* @param name Name of the requested Entry
* @return Value of the Entry
*/
String getEntry(String name);
}
package de.ozgcloud.eingang.common.formdata;
import java.util.Optional;
import de.ozgcloud.eingang.common.formdata.FormData.FormDataControl;
import de.ozgcloud.eingang.common.formdata.FormData.Representations;
public class FormDataControlTestFactory {
public static String PRIMARY_FORM_DATA_REPRESENTATION = "Antrag.xml";
public static FormDataControl create() {
return createBuilder().build();
}
public static FormDataControl.FormDataControlBuilder createBuilder() {
return FormDataControl.builder()
.representations(Optional.of(Representations.builder()
.primaryFormDataRepresentation(PRIMARY_FORM_DATA_REPRESENTATION)
.build()))
.metaData(Optional.of(FormMetaDataTestFactory.create()));
}
}
...@@ -62,6 +62,7 @@ public class FormDataTestFactory { ...@@ -62,6 +62,7 @@ public class FormDataTestFactory {
.header(FormHeaderTestFactory.create()) .header(FormHeaderTestFactory.create())
.antragsteller(AntragstellerTestFactory.create()) .antragsteller(AntragstellerTestFactory.create())
.zustaendigeStelle(ZustaendigeStelleTestFactory.create()) .zustaendigeStelle(ZustaendigeStelleTestFactory.create())
.control(FormDataControlTestFactory.create())
.formData(Map.of( .formData(Map.of(
SIMPLE_VALUE_KEY, SIMPLE_VALUE, SIMPLE_VALUE_KEY, SIMPLE_VALUE,
SUBFORM_KEY, SUBFORM_VALUE, SUBFORM_KEY, SUBFORM_VALUE,
......
package de.ozgcloud.eingang.common.formdata;
import java.time.ZonedDateTime;
public class FormMetaDataTestFactory {
public static final String XTA_IDENTIFIER_ENTRY_NAME = "xtaIdentifier";
public static final String XTA_IDENTIFIER = "vbe:010550120100";
public static final String OE_ID = "010550120100";
public static FormMetaData create() {
return new FormMetaData() {
@Override
public ZonedDateTime getOrigin() {
return ZonedDateTime.now();
}
@Override
public ZonedDateTime getDelivery() {
return ZonedDateTime.now();
}
@Override
public String getEntry(String name) {
switch (name) {
case XTA_IDENTIFIER_ENTRY_NAME:
return XTA_IDENTIFIER;
}
return null;
}
};
}
}
...@@ -87,10 +87,9 @@ ...@@ -87,10 +87,9 @@
<executions> <executions>
<execution> <execution>
<id>build-image</id> <id>build-image</id>
<phase> <phase>install</phase>
install</phase>
<goals> <goals>
<goal>build-image</goal> <goal>build-image-no-fork</goal>
</goals> </goals>
</execution> </execution>
</executions> </executions>
......
package de.ozgcloud.eingang.fim;
import de.ozgcloud.eingang.common.formdata.FormData;
public interface AntragstellerExtractor {
default void extractAntragsteller(final FormData.FormDataBuilder builder, final FormData initialFormData) {}
}
package de.ozgcloud.eingang.fim; package de.ozgcloud.eingang.fim;
import de.ozgcloud.eingang.common.formdata.FormData; import java.io.IOException;
import de.ozgcloud.eingang.common.formdata.FormHeader; import java.util.Collections;
import de.ozgcloud.eingang.common.formdata.IncomingFile; import java.util.List;
import de.ozgcloud.eingang.semantik.enginebased.EngineBasedSemantikAdapter; import java.util.Optional;
import lombok.extern.log4j.Log4j2;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder; import de.ozgcloud.eingang.common.formdata.FormData;
import javax.xml.parsers.DocumentBuilderFactory; import de.ozgcloud.eingang.common.formdata.FormData.FormDataControl;
import javax.xml.parsers.ParserConfigurationException; import de.ozgcloud.eingang.common.formdata.FormData.Representations;
import java.io.IOException; import de.ozgcloud.eingang.common.formdata.IncomingFile;
import java.util.Optional; import de.ozgcloud.eingang.semantik.enginebased.EngineBasedSemantikAdapter;
import lombok.NonNull;
import lombok.extern.log4j.Log4j2;
@Log4j2 @Log4j2
@Component @Component
...@@ -22,9 +28,14 @@ public class FimBasedAdapter implements EngineBasedSemantikAdapter { ...@@ -22,9 +28,14 @@ public class FimBasedAdapter implements EngineBasedSemantikAdapter {
static final String FIM_FORM_ENGINE_NAME = "FIM"; static final String FIM_FORM_ENGINE_NAME = "FIM";
static final String DEFAULT_FORMDATA_REPRESENTATION_NAME = "Antrag.xml";
@Autowired @Autowired
private FimService fimService; private FimService fimService;
@Autowired(required = false)
private List<FimEngineBasedMapper> mappers = Collections.emptyList();
@Override @Override
public boolean isResponsible(final FormData formData) { public boolean isResponsible(final FormData formData) {
final String formEngineName = formData.getHeader().getFormEngineName(); final String formEngineName = formData.getHeader().getFormEngineName();
...@@ -33,42 +44,53 @@ public class FimBasedAdapter implements EngineBasedSemantikAdapter { ...@@ -33,42 +44,53 @@ public class FimBasedAdapter implements EngineBasedSemantikAdapter {
@Override @Override
public FormData parseFormData(final FormData initialFormData) { public FormData parseFormData(final FormData initialFormData) {
var mapped = useMappers(initialFormData);
LOG.info("FIM Mapper running to map formData"); LOG.info("FIM Mapper running to map formData");
final Optional<String> entryPointOpt = getEntryPoint(initialFormData.getHeader());
if (entryPointOpt.isEmpty()) { return findFile(initialFormData, getEntryPoint(initialFormData.getControl()))
LOG.error("No entry point found in metadata file for fim data mapping"); .map(primaryRepresentation -> doParsing(mapped, primaryRepresentation))
return initialFormData; .orElseGet(() -> {
}
final Optional<IncomingFile> fileOpt = findFile(initialFormData, entryPointOpt.get());
if (fileOpt.isEmpty()) {
LOG.error("Entry point file not found for fim data mapping"); LOG.error("Entry point file not found for fim data mapping");
return initialFormData; return mapped;
});
} }
try {
final Document document = loadDocument(fileOpt.get()); private FormData useMappers(FormData inFormData) {
return fimService.transformDocument(document, initialFormData); var processedFormData = inFormData;
} catch (ParserConfigurationException | SAXException | IOException | FimException e) {
LOG.error("Can't transform document into fim formdata"); for (var mapper : mappers) {
return initialFormData; processedFormData = mapper.parseFormData(processedFormData);
} }
return processedFormData;
} }
private Optional<IncomingFile> findFile(final FormData formData, final String name) { private Optional<IncomingFile> findFile(final FormData formData, final String name) {
for (IncomingFile file : formData.getRepresentations()) { return formData.getRepresentations().stream()
if (file.getName().endsWith(name)) { .filter(file -> file.getName().endsWith(name))
return Optional.of(file); .findFirst();
} }
private FormData doParsing(@NonNull FormData formData, @NonNull IncomingFile formDataPrimaryRepresentation) {
try {
return fimService.transformDocument(loadDocument(formDataPrimaryRepresentation), formData);
} catch (ParserConfigurationException | SAXException | IOException | FimException e) {
LOG.error("Can't transform document into fim formdata.", e);
return formData;
} }
return Optional.empty();
} }
private Optional<String> getEntryPoint(final FormHeader formHeader) { String getEntryPoint(FormDataControl formDataControl) {
// FIXME OZG-5778 sollte über formdata metadaten kommen statt aus dem meta file geparsed zu werden return formDataControl.getRepresentations().map(Representations::getPrimaryFormDataRepresentation)
return Optional.of("Antrag.xml"); .orElseGet(() -> {
LOG.error("No entry point found in metadata file for fim data mapping. Trying default.");
return DEFAULT_FORMDATA_REPRESENTATION_NAME;
});
} }
private Document loadDocument(final IncomingFile incomingFile) throws ParserConfigurationException, IOException, SAXException { private Document loadDocument(final IncomingFile incomingFile) throws ParserConfigurationException, IOException, SAXException {
final DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); final DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
return builder.parse(incomingFile.getContentStream()); return builder.parse(incomingFile.getContentStream());
} }
} }
package de.ozgcloud.eingang.fim; package de.ozgcloud.eingang.fim;
import de.ozgcloud.eingang.common.formdata.FormData; import java.util.LinkedHashMap;
import de.ozgcloud.eingang.common.formdata.IncomingFile; import java.util.Map;
import de.ozgcloud.eingang.common.formdata.IncomingFileGroup; import java.util.Optional;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.function.TriFunction; import org.apache.commons.lang3.function.TriFunction;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.w3c.dom.Document; import org.w3c.dom.Document;
...@@ -12,7 +12,8 @@ import org.w3c.dom.Node; ...@@ -12,7 +12,8 @@ import org.w3c.dom.Node;
import org.w3c.dom.NodeList; import org.w3c.dom.NodeList;
import org.w3c.dom.Text; import org.w3c.dom.Text;
import java.util.*; import de.ozgcloud.eingang.common.formdata.FormData;
import lombok.extern.log4j.Log4j2;
@Service @Service
@Log4j2 @Log4j2
...@@ -23,12 +24,10 @@ class FimDataMapper implements TriFunction<Document, FimScheme, FormData, FormDa ...@@ -23,12 +24,10 @@ class FimDataMapper implements TriFunction<Document, FimScheme, FormData, FormDa
@Override @Override
public FormData.FormDataBuilder apply(final Document document, final FimScheme fimScheme, final FormData initialFormData) { public FormData.FormDataBuilder apply(final Document document, final FimScheme fimScheme, final FormData initialFormData) {
final FormData.FormDataBuilder formDataBuilder = FormData.builder(); final FormData.FormDataBuilder formDataBuilder = initialFormData.toBuilder();
Map<String, Object> data = new LinkedHashMap<>(); Map<String, Object> data = new LinkedHashMap<>();
process(document.getDocumentElement(), fimScheme, data, 0); process(document.getDocumentElement(), fimScheme, data, 0);
formDataBuilder.formData(data); formDataBuilder.formData(data);
formDataBuilder.attachments(initialFormData.getAttachments());
formDataBuilder.representations(initialFormData.getRepresentations());
return formDataBuilder; return formDataBuilder;
} }
......
package de.ozgcloud.eingang.fim;
import de.ozgcloud.eingang.semantik.enginebased.EngineBasedMapper;
public interface FimEngineBasedMapper extends EngineBasedMapper {
}
package de.ozgcloud.eingang.fim; package de.ozgcloud.eingang.fim;
import lombok.extern.log4j.Log4j2; import java.util.Map;
import java.util.Optional;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import org.w3c.dom.NodeList; import org.w3c.dom.NodeList;
import java.util.Map; import lombok.extern.log4j.Log4j2;
import java.util.Optional;
@Log4j2 @Log4j2
public abstract class FimSchemeAdapter implements ZustaendigeStelleExtractor, AntragstellerExtractor { public abstract class FimSchemeAdapter {
public abstract FimSchemeIdentifier forIdentifier(); public abstract FimSchemeIdentifier forIdentifier();
......
package de.ozgcloud.eingang.fim; package de.ozgcloud.eingang.fim;
import de.ozgcloud.eingang.common.formdata.FormData; import java.io.IOException;
import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle; import java.util.ArrayList;
import io.micrometer.common.util.StringUtils; import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ResourceLoader; import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder; import de.ozgcloud.eingang.common.formdata.FormData;
import javax.xml.parsers.DocumentBuilderFactory; import io.micrometer.common.util.StringUtils;
import javax.xml.parsers.ParserConfigurationException; import lombok.extern.log4j.Log4j2;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@Service @Service
@Log4j2 @Log4j2
...@@ -40,7 +42,9 @@ public class FimService { ...@@ -40,7 +42,9 @@ public class FimService {
private static final FimSchemeAdapter DEFAULT_FIM_SCHEME_ADAPTER = new FimSchemeAdapter() { private static final FimSchemeAdapter DEFAULT_FIM_SCHEME_ADAPTER = new FimSchemeAdapter() {
@Override @Override
public FimSchemeIdentifier forIdentifier() { return null; } public FimSchemeIdentifier forIdentifier() {
return null;
}
}; };
@PostConstruct @PostConstruct
...@@ -83,14 +87,8 @@ public class FimService { ...@@ -83,14 +87,8 @@ public class FimService {
final FimScheme scheme = getSchemeForIdentifier(schemeName); final FimScheme scheme = getSchemeForIdentifier(schemeName);
final FormData.FormDataBuilder builder = fimDataMapper.apply(document, scheme, initialFormData); final FormData.FormDataBuilder builder = fimDataMapper.apply(document, scheme, initialFormData);
final FimSchemeAdapter adapter = scheme.getSchemeAdapter();
builder.header(initialFormData.getHeader()); builder.header(initialFormData.getHeader());
adapter.extractAntragsteller(builder, initialFormData);
adapter.extractZustaendigeStelle(builder, initialFormData);
return builder.build(); return builder.build();
} }
......
package de.ozgcloud.eingang.fim;
import de.ozgcloud.eingang.common.formdata.FormData;
public interface ZustaendigeStelleExtractor {
default void extractZustaendigeStelle (final FormData.FormDataBuilder builder, final FormData initialFormData) {}
}
package de.ozgcloud.eingang.fim;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import org.springframework.stereotype.Component;
import de.ozgcloud.eingang.common.formdata.FormData;
import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle;
import lombok.NonNull;
@Component
class ZustaendigeStelleMapper implements FimEngineBasedMapper {
static final String XTA_IDENTIFIER_ENTRY_NAME = "xtaIdentifier";
// TODO OZG-7086 umstellen auf FIM Headerdaten
@Override
public FormData parseFormData(FormData formData) {
return formData.getControl().getMetaData()
.map(metaData -> metaData.getEntry(XTA_IDENTIFIER_ENTRY_NAME))
.filter(Objects::nonNull)
.map(oeId -> setOrganisationsEinheitId(formData.getZustaendigeStelles(), oeId))
.map(zustStelle -> formData.toBuilder().zustaendigeStelle(zustStelle).build())
.orElse(formData);
}
private ZustaendigeStelle setOrganisationsEinheitId(List<ZustaendigeStelle> stelles, @NonNull String oeid) {
var builder = stelles.isEmpty() ? ZustaendigeStelle.builder() : stelles.getFirst().toBuilder();
extractOrganisationsEinheitId(oeid).ifPresent(builder::organisationseinheitenId);
return builder.build();
}
Optional<String> extractOrganisationsEinheitId(@NonNull String xtaIdentifier) {
var idx = xtaIdentifier.indexOf(":");
if (idx < 0) {
return Optional.empty();
}
return Optional.of(xtaIdentifier.substring(idx + 1));
}
}
package de.ozgcloud.eingang.fim;
import static org.assertj.core.api.Assertions.*;
import java.util.Optional;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import de.ozgcloud.eingang.common.formdata.FormData.Representations;
import de.ozgcloud.eingang.common.formdata.FormDataControlTestFactory;
class FimBasedAdapterTest {
@InjectMocks
private FimBasedAdapter adapter;
@Nested
class TestGetEntryPoint {
@Test
void shouldReturnPrimaryRepresentation() {
var result = adapter.getEntryPoint(FormDataControlTestFactory.create());
assertThat(result).isEqualTo(FormDataControlTestFactory.PRIMARY_FORM_DATA_REPRESENTATION);
}
@Test
void shouldReturnDefaultOnMissingRepresentations() {
var result = adapter.getEntryPoint(FormDataControlTestFactory.createBuilder().representations(Optional.empty()).build());
assertThat(result).isEqualTo(FimBasedAdapter.DEFAULT_FORMDATA_REPRESENTATION_NAME);
}
@Test
void shouldReturnDefaultOnMissingPrimary() {
var control = FormDataControlTestFactory.createBuilder().representations(Optional.of(Representations.builder().build())).build();
var result = adapter.getEntryPoint(control);
assertThat(result).isEqualTo(FimBasedAdapter.DEFAULT_FORMDATA_REPRESENTATION_NAME);
}
}
}
package de.ozgcloud.eingang.fim; package de.ozgcloud.eingang.fim;
import de.ozgcloud.common.test.ITCase; import static org.assertj.core.api.Assertions.assertThat;
import de.ozgcloud.eingang.common.formdata.FormData; import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;
import de.ozgcloud.eingang.common.formdata.FormHeader;
import de.ozgcloud.eingang.common.formdata.IncomingFile;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.w3c.dom.Document;
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.File;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import static org.assertj.core.api.Assertions.assertThat; import de.ozgcloud.common.test.ITCase;
import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; import de.ozgcloud.eingang.common.formdata.FormData;
import de.ozgcloud.eingang.common.formdata.FormDataTestFactory;
import de.ozgcloud.eingang.common.formdata.FormHeader;
import de.ozgcloud.eingang.common.formdata.IncomingFile;
@ITCase @ITCase
@ActiveProfiles({ "itcase", "test" }) @ActiveProfiles({ "itcase", "test" })
...@@ -71,8 +72,7 @@ public class FimServiceITCase { ...@@ -71,8 +72,7 @@ public class FimServiceITCase {
final Map<String, Object> expected = Map.of( final Map<String, Object> expected = Map.of(
"xs:fim.S1235", Map.of("label", "Testkey", "value", "Testvalue"), "xs:fim.S1235", Map.of("label", "Testkey", "value", "Testvalue"),
"xs:fim.S1236", Map.of("label", "xs:fim.S1236", "value", "Testvalue 2") "xs:fim.S1236", Map.of("label", "xs:fim.S1236", "value", "Testvalue 2"));
);
assertThat(expected).isEqualTo(formData.getFormData()); assertThat(expected).isEqualTo(formData.getFormData());
} }
...@@ -83,8 +83,7 @@ public class FimServiceITCase { ...@@ -83,8 +83,7 @@ public class FimServiceITCase {
final Map<String, Object> expected = Map.of( final Map<String, Object> expected = Map.of(
"fim.S1235", Map.of("label", "Testkey", "value", "Testvalue"), "fim.S1235", Map.of("label", "Testkey", "value", "Testvalue"),
"fim.S1236", Map.of("label", "fim.S1236", "value", "Testvalue 2") "fim.S1236", Map.of("label", "fim.S1236", "value", "Testvalue 2"));
);
assertThat(expected).isEqualTo(formData.getFormData()); assertThat(expected).isEqualTo(formData.getFormData());
} }
...@@ -105,47 +104,46 @@ public class FimServiceITCase { ...@@ -105,47 +104,46 @@ public class FimServiceITCase {
"xfd:G05001480", Map.of( "xfd:G05001480", Map.of(
"label", "identifikation.nachricht", "label", "identifikation.nachricht",
"value", Map.of( "value", Map.of(
"xfd:F05002750", Map.of("label", "nachrichtenUUID", "value", "d447e43a-5723-4821-a170-cb44d2dbf143"), "xfd:F05002750",
"xfd:F05002751", Map.of("label", "erstellungszeitpunkt", "value", "2022-08-15T09:30:47"), Map.of("label", "nachrichtenUUID", "value", "d447e43a-5723-4821-a170-cb44d2dbf143"),
"xfd:F05002752", Map.of("label", "nachrichtentyp", "value", "fim.S17000652.17000652001004"), "xfd:F05002751",
"xfd:F05002753", Map.of("label", "dienstname", "value", "urn:fim:Versammlungsanzeige:1.4") Map.of("label", "erstellungszeitpunkt", "value", "2022-08-15T09:30:47"),
) "xfd:F05002752",
), Map.of("label", "nachrichtentyp", "value", "fim.S17000652.17000652001004"),
"xfd:F05002753",
Map.of("label", "dienstname", "value", "urn:fim:Versammlungsanzeige:1.4"))),
"xfd:G05001481", Map.of( "xfd:G05001481", Map.of(
"label", "Leser", "label", "Leser",
"value", Map.of( "value", Map.of(
"xfd:F05002754", Map.of("label", "Organisationsname", "value", "Celle"), "xfd:F05002754", Map.of("label", "Organisationsname", "value", "Celle"),
"xfd:F05002755", Map.of("label", "Organisationsschlüssel", "value", "vbe:010550120100"), "xfd:F05002755",
"xfd:F05002756", Map.of("label", "Kategorie", "value", "Versammlungsbehörde") Map.of("label", "Organisationsschlüssel", "value", "vbe:010550120100"),
) "xfd:F05002756", Map.of("label", "Kategorie", "value", "Versammlungsbehörde"))),
),
"xfd:G05001482", Map.of( "xfd:G05001482", Map.of(
"label", "Autor", "label", "Autor",
"value", Map.of( "value", Map.of(
"xfd:F05002754", Map.of("label", "Organisationsname", "value", "OSI-Onlinedienst Niedersachsen Versammlungsanzeige"), "xfd:F05002754",
"xfd:F05002755", Map.of("label", "Organisationsschlüssel", "value", "vbe:010550120100"), Map.of("label", "Organisationsname", "value",
"xfd:F05002756", Map.of("label", "Kategorie", "value", "Engagement- und Hobbyportal") "OSI-Onlinedienst Niedersachsen Versammlungsanzeige"),
) "xfd:F05002755",
) Map.of("label", "Organisationsschlüssel", "value", "vbe:010550120100"),
) "xfd:F05002756",
), Map.of("label", "Kategorie", "value", "Engagement- und Hobbyportal"))))),
"xfd:F17005454", Map.of("label", "Datenschutzhinweis DSGVO", "value", "true"), "xfd:F17005454", Map.of("label", "Datenschutzhinweis DSGVO", "value", "true"),
"xfd:F17005455", Map.of("label", "Zustimmung zu einem digitalen Bescheid", "value", "true"), "xfd:F17005455", Map.of("label", "Zustimmung zu einem digitalen Bescheid", "value", "true"),
"xfd:F17005533", Map.of("label", "UUID", "value", "String") "xfd:F17005533", Map.of("label", "UUID", "value", "String"))),
)
),
"xfd:F17009191", Map.of("label", "Anzeige durch Person", "value", "true"), "xfd:F17009191", Map.of("label", "Anzeige durch Person", "value", "true"),
"xfd:F17003371", Map.of("label", "Anzeigenart", "value", "String") "xfd:F17003371", Map.of("label", "Anzeigenart", "value", "String"));
);
assertThat(expected).isEqualTo(formData.getFormData()); assertThat(expected).isEqualTo(formData.getFormData());
} }
@Test @Test
void shouldFallbackUnknownScheme() { void shouldFallbackUnknownScheme() {
IncomingFile r1 = IncomingFile.builder().name("src/test/resources/test3/Antrag.xml").file(new File("src/test/resources/test3/Antrag.xml")).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(); IncomingFile r2 = IncomingFile.builder().name("src/test/resources/test3/fim_xtaMetadata.xml").build();
final FormData initialFormData = FormData.builder() final FormData initialFormData = FormDataTestFactory.createBuilder().formData(null)
.header(FormHeader.builder().channel("XTA").formEngineName("FIM").build()) .header(FormHeader.builder().channel("XTA").formEngineName("FIM").build())
.representations(List.of(r1, r2)).build(); .representations(List.of(r1, r2)).build();
...@@ -163,40 +161,35 @@ public class FimServiceITCase { ...@@ -163,40 +161,35 @@ public class FimServiceITCase {
"xfd:G05001480", Map.of( "xfd:G05001480", Map.of(
"label", "xfd:G05001480", "label", "xfd:G05001480",
"value", Map.of( "value", Map.of(
"xfd:F05002750", Map.of("label", "xfd:F05002750", "value", "d447e43a-5723-4821-a170-cb44d2dbf143"), "xfd:F05002750",
Map.of("label", "xfd:F05002750", "value", "d447e43a-5723-4821-a170-cb44d2dbf143"),
"xfd:F05002751", Map.of("label", "xfd:F05002751", "value", "2022-08-15T09:30:47"), "xfd:F05002751", Map.of("label", "xfd:F05002751", "value", "2022-08-15T09:30:47"),
"xfd:F05002752", Map.of("label", "xfd:F05002752", "value", "fim.S17000652.17000652001004"), "xfd:F05002752",
"xfd:F05002753", Map.of("label", "xfd:F05002753", "value", "urn:fim:Versammlungsanzeige:1.4") Map.of("label", "xfd:F05002752", "value", "fim.S17000652.17000652001004"),
) "xfd:F05002753",
), Map.of("label", "xfd:F05002753", "value", "urn:fim:Versammlungsanzeige:1.4"))),
"xfd:G05001481", Map.of( "xfd:G05001481", Map.of(
"label", "xfd:G05001481", "label", "xfd:G05001481",
"value", Map.of( "value", Map.of(
"xfd:F05002754", Map.of("label", "xfd:F05002754", "value", "Celle"), "xfd:F05002754", Map.of("label", "xfd:F05002754", "value", "Celle"),
"xfd:F05002755", Map.of("label", "xfd:F05002755", "value", "vbe:010550120100"), "xfd:F05002755", Map.of("label", "xfd:F05002755", "value", "vbe:010550120100"),
"xfd:F05002756", Map.of("label", "xfd:F05002756", "value", "Versammlungsbehörde") "xfd:F05002756", Map.of("label", "xfd:F05002756", "value", "Versammlungsbehörde"))),
)
),
"xfd:G05001482", Map.of( "xfd:G05001482", Map.of(
"label", "xfd:G05001482", "label", "xfd:G05001482",
"value", Map.of( "value", Map.of(
"xfd:F05002754", Map.of("label", "xfd:F05002754", "value", "OSI-Onlinedienst Niedersachsen Versammlungsanzeige"), "xfd:F05002754",
Map.of("label", "xfd:F05002754", "value",
"OSI-Onlinedienst Niedersachsen Versammlungsanzeige"),
"xfd:F05002755", Map.of("label", "xfd:F05002755", "value", "vbe:010550120100"), "xfd:F05002755", Map.of("label", "xfd:F05002755", "value", "vbe:010550120100"),
"xfd:F05002756", Map.of("label", "xfd:F05002756", "value", "Engagement- und Hobbyportal") "xfd:F05002756",
) Map.of("label", "xfd:F05002756", "value", "Engagement- und Hobbyportal"))))),
)
)
),
"xfd:F17005454", Map.of("label", "xfd:F17005454", "value", "true"), "xfd:F17005454", Map.of("label", "xfd:F17005454", "value", "true"),
"xfd:F17005455", Map.of("label", "xfd:F17005455", "value", "true"), "xfd:F17005455", Map.of("label", "xfd:F17005455", "value", "true"),
"xfd:F17005533", Map.of("label", "xfd:F17005533", "value", "String") "xfd:F17005533", Map.of("label", "xfd:F17005533", "value", "String"))),
)
),
"xfd:F17009191", Map.of("label", "xfd:F17009191", "value", "true"), "xfd:F17009191", Map.of("label", "xfd:F17009191", "value", "true"),
"xfd:F17003371", Map.of("label", "xfd:F17003371", "value", "String") "xfd:F17003371", Map.of("label", "xfd:F17003371", "value", "String"));
);
assertThat(expected).isEqualTo(formData.getFormData()); assertThat(formData.getFormData()).usingRecursiveComparison().isEqualTo(expected);
} }
private Document loadDocument(final String path) throws ParserConfigurationException, IOException, SAXException { private Document loadDocument(final String path) throws ParserConfigurationException, IOException, SAXException {
......
...@@ -6,6 +6,6 @@ import org.springframework.context.annotation.Configuration; ...@@ -6,6 +6,6 @@ import org.springframework.context.annotation.Configuration;
@Configuration @Configuration
@EnableAutoConfiguration @EnableAutoConfiguration
@ComponentScan("de.ozgcloud.eingang.fim") @ComponentScan("de.ozgcloud.eingang")
public class FimTestConfig { public class FimTestConfig {
} }
package de.ozgcloud.eingang.fim;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import de.ozgcloud.eingang.common.formdata.FormDataTestFactory;
import de.ozgcloud.eingang.common.formdata.FormMetaDataTestFactory;
import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle;
class ZustaendigeStelleMapperTest {
@InjectMocks
private ZustaendigeStelleMapper mapper;
@Test
void shouldSetOrganisationsEinheitId() {
var parsed = mapper.parseFormData(FormDataTestFactory.createBuilder().clearZustaendigeStelles().build());
assertThat(parsed.getZustaendigeStelles()).hasSize(1).first().extracting(ZustaendigeStelle::getOrganisationseinheitenId)
.isEqualTo(FormMetaDataTestFactory.OE_ID);
// assertThat(parsed.getZustaendigeStelle().getOrganisationseinheitenId()).isEqualTo(FormMetaDataTestFactory.OE_ID);
}
@Test
void shouldWorkWithoutGivenZustaendigeStelle() {
var parsed = mapper.parseFormData(FormDataTestFactory.createBuilder().clearZustaendigeStelles().build());
assertThat(parsed.getZustaendigeStelles()).hasSize(1).first().extracting(ZustaendigeStelle::getOrganisationseinheitenId)
.isNotNull();
// assertThat(parsed.getZustaendigeStelle()).isNotNull();
}
@Test
void shouldIgnoreMalformedDestinationId() {
var oeid = mapper.extractOrganisationsEinheitId("quatsch");
assertThat(oeid).isEmpty();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment