Skip to content
Snippets Groups Projects
Commit ab8fd942 authored by OZGCloud's avatar OZGCloud
Browse files

OZG-6735 Added Name and Antragsteller to fim documents

parent 97aef450
1 merge request!2Ozg 6735 fim metadata
Showing
with 1637 additions and 88 deletions
package de.ozgcloud.eingang.fim;
import de.ozgcloud.eingang.common.formdata.Antragsteller;
import de.ozgcloud.eingang.common.formdata.FormData;
import java.util.Map;
public interface AntragstellerExtractor {
default void extractAntragsteller(final FormData.FormDataBuilder builder, final FormData initialFormData) {}
default void extractAntragsteller(final FormData.FormDataBuilder builder, final FormData initialFormData) {
final FormData current = builder.build();
final Map<String, Object> anzeigenErsteller = FimDataUtil.getSubmap(current.getFormData(), "G17002112");
final Map<String, Object> anschrift = FimDataUtil.getSubmap(anzeigenErsteller, "G60000086");
Antragsteller antragsteller = Antragsteller.builder()
.vorname(FimDataUtil.getValue(anzeigenErsteller, "F60000228").orElse(null))
.nachname(FimDataUtil.getValue(anzeigenErsteller, "F60000227").orElse(null))
.email(FimDataUtil.getValue(anzeigenErsteller, "F60000242").orElse(null))
.strasse(FimDataUtil.getValue(anschrift, "F60000243").orElse(null))
.hausnummer(FimDataUtil.getValue(anschrift, "F60000244").orElse(null))
.plz(FimDataUtil.getValue(anschrift, "F60000246").orElse(null))
.ort(FimDataUtil.getValue(anschrift, "F60000247").orElse(null))
.build();
builder.antragsteller(antragsteller);
}
}
......@@ -53,7 +53,9 @@ class FimDataMapper implements TriFunction<Document, FimScheme, FormData, FormDa
}
private void insertValueIntoFormData(final Map<String, Object> data, final Optional<String> fieldName, final String nodeName, final Object obj) {
final Map<String, Object> labelMap = Map.of(LABEL_KEY, fieldName.orElse(nodeName), VALUE_KEY, obj);
data.put(nodeName, labelMap);
final String[] fieldNameParts = nodeName.split(":");
final String fieldNameWithoutNamespace = fieldNameParts[fieldNameParts.length - 1];
final Map<String, Object> labelMap = Map.of(LABEL_KEY, fieldName.orElse(fieldNameWithoutNamespace), VALUE_KEY, obj);
data.put(fieldNameWithoutNamespace, labelMap);
}
}
package de.ozgcloud.eingang.fim;
import org.apache.commons.lang3.ArrayUtils;
import java.util.Map;
import java.util.Optional;
public class FimDataUtil {
public static Map<String, Object> getSubmap(final Map<String, Object> data, final String... path) {
Map<String, Object> current = data;
for (final String step : path) {
current = map(current, step);
}
return current;
}
public static Optional<String> getValue(final Map<String, Object> data, final String... path) {
Map<String, Object> current = getSubmap(data, ArrayUtils.subarray(path, 0, path.length - 1));
if (current == null) {
return Optional.empty();
}
return Optional.ofNullable((String)((Map<String, Object>) current.get(path[path.length - 1])).get("value"));
}
private static Map<String, Object> map(Map<String, Object> obj, String key) {
if (obj == null) {
return null;
}
final Object data = obj.get(key);
if (!(data instanceof Map)) {
return null;
}
return (Map<String, Object>)((Map<String, Object>) data).get("value");
}
}
......@@ -8,7 +8,7 @@ import java.util.Map;
import java.util.Optional;
@Log4j2
public abstract class FimSchemeAdapter implements ZustaendigeStelleExtractor, AntragstellerExtractor {
public abstract class FimSchemeAdapter implements ZustaendigeStelleExtractor, AntragstellerExtractor, VorgangsnameExtractor {
public abstract FimSchemeIdentifier forIdentifier();
......
package de.ozgcloud.eingang.fim;
import de.ozgcloud.eingang.common.formdata.FormData;
import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle;
import de.ozgcloud.eingang.common.formdata.FormHeader;
import io.micrometer.common.util.StringUtils;
import jakarta.annotation.PostConstruct;
import lombok.extern.log4j.Log4j2;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Service;
......@@ -17,6 +18,8 @@ import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@Service
@Log4j2
......@@ -85,10 +88,8 @@ public class FimService {
final FimSchemeAdapter adapter = scheme.getSchemeAdapter();
builder.header(initialFormData.getHeader());
adapter.extractVorgangsname(builder, initialFormData);
adapter.extractAntragsteller(builder, initialFormData);
adapter.extractZustaendigeStelle(builder, initialFormData);
return builder.build();
......
......@@ -15,6 +15,8 @@ public class UnknownSchemeAdapter extends FimSchemeAdapter {
@Override
public Optional<String> getFieldName(Map<String, Element> fieldIndex, String fieldName) {
return Optional.of(fieldName);
final String[] fieldNameParts = fieldName.split(":");
final String fieldNameWithoutNamespace = fieldNameParts[fieldNameParts.length - 1];
return Optional.of(fieldNameWithoutNamespace);
}
}
package de.ozgcloud.eingang.fim;
import de.ozgcloud.eingang.common.formdata.FormData;
import de.ozgcloud.eingang.common.formdata.FormHeader;
import java.util.Optional;
public interface VorgangsnameExtractor {
default void extractVorgangsname(final FormData.FormDataBuilder builder, final FormData initialFormData) {
final FormData current = builder.build();
final Optional<String> vorgangsname = FimDataUtil.getValue(current.getFormData(), "G17003529", "G05001479", "G05001480", "F05002753");
final FormHeader.FormHeaderBuilder headerBuilder = current.getHeader().toBuilder();
headerBuilder.formName(vorgangsname.orElse(null));
builder.header(headerBuilder.build());
}
}
......@@ -70,8 +70,8 @@ public class FimServiceITCase {
final FormData formData = fimService.transformDocument(document, FormData.builder().build());
final Map<String, Object> expected = Map.of(
"xs:fim.S1235", Map.of("label", "Testkey", "value", "Testvalue"),
"xs:fim.S1236", Map.of("label", "xs:fim.S1236", "value", "Testvalue 2")
"fim.S1235", Map.of("label", "Testkey", "value", "Testvalue"),
"fim.S1236", Map.of("label", "fim.S1236", "value", "Testvalue 2")
);
assertThat(expected).isEqualTo(formData.getFormData());
}
......@@ -96,51 +96,86 @@ public class FimServiceITCase {
assertThat(formData).isNotNull();
final Map<String, Object> expected = Map.of(
"xfd:G17003529", Map.of(
"G17003529", Map.of(
"label","EfA|SH Standard",
"value", Map.of(
"xfd:G05001479", Map.of(
"G05001479", Map.of(
"label","nachrichtenkopf",
"value", Map.of(
"xfd:G05001480", Map.of(
"G05001480", Map.of(
"label","identifikation.nachricht",
"value", Map.of(
"xfd:F05002750", Map.of("label", "nachrichtenUUID", "value", "d447e43a-5723-4821-a170-cb44d2dbf143"),
"xfd:F05002751", 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")
"F05002750", Map.of("label", "nachrichtenUUID", "value", "d447e43a-5723-4821-a170-cb44d2dbf143"),
"F05002751", Map.of("label", "erstellungszeitpunkt", "value", "2022-08-15T09:30:47"),
"F05002752", Map.of("label", "nachrichtentyp", "value", "fim.S17000652.17000652001004"),
"F05002753", Map.of("label", "dienstname", "value", "urn:fim:Versammlungsanzeige:1.4")
)
),
"xfd:G05001481", Map.of(
"G05001481", Map.of(
"label","Leser",
"value", Map.of(
"xfd:F05002754", Map.of("label", "Organisationsname", "value", "Celle"),
"xfd:F05002755", Map.of("label", "Organisationsschlüssel", "value", "vbe:010550120100"),
"xfd:F05002756", Map.of("label", "Kategorie", "value", "Versammlungsbehörde")
"F05002754", Map.of("label", "Organisationsname", "value", "Celle"),
"F05002755", Map.of("label", "Organisationsschlüssel", "value", "vbe:010550120100"),
"F05002756", Map.of("label", "Kategorie", "value", "Versammlungsbehörde")
)
),
"xfd:G05001482", Map.of(
"G05001482", Map.of(
"label","Autor",
"value", Map.of(
"xfd:F05002754", Map.of("label", "Organisationsname", "value", "OSI-Onlinedienst Niedersachsen Versammlungsanzeige"),
"xfd:F05002755", Map.of("label", "Organisationsschlüssel", "value", "vbe:010550120100"),
"xfd:F05002756", Map.of("label", "Kategorie", "value", "Engagement- und Hobbyportal")
"F05002754", Map.of("label", "Organisationsname", "value", "OSI-Onlinedienst Niedersachsen Versammlungsanzeige"),
"F05002755", Map.of("label", "Organisationsschlüssel", "value", "vbe:010550120100"),
"F05002756", Map.of("label", "Kategorie", "value", "Engagement- und Hobbyportal")
)
)
)
),
"xfd:F17005454", Map.of("label", "Datenschutzhinweis DSGVO", "value", "true"),
"xfd:F17005455", Map.of("label", "Zustimmung zu einem digitalen Bescheid", "value", "true"),
"xfd:F17005533", Map.of("label", "UUID", "value", "String")
"F17005454", Map.of("label", "Datenschutzhinweis DSGVO", "value", "true"),
"F17005455", Map.of("label", "Zustimmung zu einem digitalen Bescheid", "value", "true"),
"F17005533", Map.of("label", "UUID", "value", "String")
)
),
"xfd:F17009191", Map.of("label", "Anzeige durch Person", "value", "true"),
"xfd:F17003371", Map.of("label", "Anzeigenart", "value", "String")
"F17009191", Map.of("label", "Anzeige durch Person", "value", "true"),
"F17003371", Map.of("label", "Anzeigenart", "value", "String")
);
assertThat(expected).isEqualTo(formData.getFormData());
}
@Test
void shouldHaveNameInHeader() throws ParserConfigurationException, IOException, SAXException {
final Document document = loadDocument("src/test/resources/antrag.xml");
FormData formData = fimService.transformDocument(document, FormData.builder().build());
assertThat(formData).isNotNull();
assertThat(formData.getHeader().getFormName()).isEqualTo("urn:fim:Versammlungsanzeige:1.4");
}
@Test
void shouldHaveAntragsteller() throws ParserConfigurationException, IOException, SAXException {
final Document document = loadDocument("src/test/resources/antrag.xml");
FormData formData = fimService.transformDocument(document, FormData.builder().build());
assertThat(formData).isNotNull();
assertThat(formData.getAntragsteller()).isNotNull();
}
@Test
void shouldHaveAntragstellerAntragstellerData() throws ParserConfigurationException, IOException, SAXException {
final Document document = loadDocument("src/test/resources/antrag.xml");
FormData formData = fimService.transformDocument(document, FormData.builder().build());
assertThat(formData).isNotNull();
assertThat(formData.getAntragsteller().getVorname()).isEqualTo("Jörg");
assertThat(formData.getAntragsteller().getNachname()).isEqualTo("Bolay");
assertThat(formData.getAntragsteller().getStrasse()).isEqualTo("Muster");
assertThat(formData.getAntragsteller().getHausnummer()).isEqualTo("1");
assertThat(formData.getAntragsteller().getPlz()).isEqualTo("12345");
assertThat(formData.getAntragsteller().getOrt()).isEqualTo("Muster");
}
@Test
void shouldFallbackUnknownScheme() {
IncomingFile r1 = IncomingFile.builder().name("src/test/resources/test3/Antrag.xml").file(new File("src/test/resources/test3/Antrag.xml")).build();
......@@ -154,46 +189,46 @@ public class FimServiceITCase {
assertThat(formData).isNotNull();
final Map<String, Object> expected = Map.of(
"xfd:G17003529", Map.of(
"label","xfd:G17003529",
"G17003529", Map.of(
"label","G17003529",
"value", Map.of(
"xfd:G05001479", Map.of(
"label","xfd:G05001479",
"G05001479", Map.of(
"label","G05001479",
"value", Map.of(
"xfd:G05001480", Map.of(
"label","xfd:G05001480",
"G05001480", Map.of(
"label","G05001480",
"value", Map.of(
"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:F05002752", Map.of("label", "xfd:F05002752", "value", "fim.S17000652.17000652001004"),
"xfd:F05002753", Map.of("label", "xfd:F05002753", "value", "urn:fim:Versammlungsanzeige:1.4")
"F05002750", Map.of("label", "F05002750", "value", "d447e43a-5723-4821-a170-cb44d2dbf143"),
"F05002751", Map.of("label", "F05002751", "value", "2022-08-15T09:30:47"),
"F05002752", Map.of("label", "F05002752", "value", "fim.S17000652.17000652001004"),
"F05002753", Map.of("label", "F05002753", "value", "urn:fim:Versammlungsanzeige:1.4")
)
),
"xfd:G05001481", Map.of(
"label","xfd:G05001481",
"G05001481", Map.of(
"label","G05001481",
"value", Map.of(
"xfd:F05002754", Map.of("label", "xfd:F05002754", "value", "Celle"),
"xfd:F05002755", Map.of("label", "xfd:F05002755", "value", "vbe:010550120100"),
"xfd:F05002756", Map.of("label", "xfd:F05002756", "value", "Versammlungsbehörde")
"F05002754", Map.of("label", "F05002754", "value", "Celle"),
"F05002755", Map.of("label", "F05002755", "value", "vbe:010550120100"),
"F05002756", Map.of("label", "F05002756", "value", "Versammlungsbehörde")
)
),
"xfd:G05001482", Map.of(
"label","xfd:G05001482",
"G05001482", Map.of(
"label","G05001482",
"value", Map.of(
"xfd:F05002754", Map.of("label", "xfd:F05002754", "value", "OSI-Onlinedienst Niedersachsen Versammlungsanzeige"),
"xfd:F05002755", Map.of("label", "xfd:F05002755", "value", "vbe:010550120100"),
"xfd:F05002756", Map.of("label", "xfd:F05002756", "value", "Engagement- und Hobbyportal")
"F05002754", Map.of("label", "F05002754", "value", "OSI-Onlinedienst Niedersachsen Versammlungsanzeige"),
"F05002755", Map.of("label", "F05002755", "value", "vbe:010550120100"),
"F05002756", Map.of("label", "F05002756", "value", "Engagement- und Hobbyportal")
)
)
)
),
"xfd:F17005454", Map.of("label", "xfd:F17005454", "value", "true"),
"xfd:F17005455", Map.of("label", "xfd:F17005455", "value", "true"),
"xfd:F17005533", Map.of("label", "xfd:F17005533", "value", "String")
"F17005454", Map.of("label", "F17005454", "value", "true"),
"F17005455", Map.of("label", "F17005455", "value", "true"),
"F17005533", Map.of("label", "F17005533", "value", "String")
)
),
"xfd:F17009191", Map.of("label", "xfd:F17009191", "value", "true"),
"xfd:F17003371", Map.of("label", "xfd:F17003371", "value", "String")
"F17009191", Map.of("label", "F17009191", "value", "true"),
"F17003371", Map.of("label", "F17003371", "value", "String")
);
assertThat(expected).isEqualTo(formData.getFormData());
......
<fim.S17000652.17000652001004 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="urn:xoev-de:xfall:standard:fim-s17000652_1.4">
<G17003529>
<G05001479>
<G05001480>
<F05002750>85ad506f-25a2-4a93-a086-b069784c6d60</F05002750>
<F05002751>21.03.2024 08:56:33</F05002751>
<F05002752>fim.S17000652.17000652001004</F05002752>
<F05002753>urn:fim:Versammlungsanzeige:1.4</F05002753>
</G05001480>
<G05001481>
<F05002754>Fachdienst Sicherheit und Ordnung - Kreis Ostholstein</F05002754>
<F05002755>vbe:010550120100</F05002755>
<F05002756>Versammlungsbehörde</F05002756>
</G05001481>
<G05001482>
<F05002754>Dataport</F05002754>
<F05002755>ehp:010100100000</F05002755>
<F05002756>Versammlungsbehörde</F05002756>
</G05001482>
</G05001479>
<F17005454>true</F17005454>
<F17005455>false</F17005455>
<F17005533>85ad506f-25a2-4a93-a086-b069784c6d60</F17005533>
</G17003529>
<F17009191>false</F17009191>
<G17002112>
<F60000228>Jörg</F60000228>
<F60000227>Bolay</F60000227>
<G60000086>
<F60000243>Muster</F60000243>
<F60000244>1</F60000244>
<F60000246>12345</F60000246>
<F60000247>Muster</F60000247>
</G60000086>
<F60000242>joerg.bolay@dataport.de</F60000242>
<F17009011>false</F17009011>
</G17002112>
<F17003371>Anzeigen einer ortsfesten Versammlung (Kundgebung / Demonstration)</F17003371>
<G17005404>
<G17007202>
<F17003373>fsdf</F17003373>
<F17003377>sdf</F17003377>
<G17005406>
<F60000048>2024-03-21</F60000048>
<F17001348>13.5</F17001348>
<F60000049>2024-03-21</F60000049>
<F17001349>15</F17001349>
</G17005406>
</G17007202>
<G17007205>
<F17003379>10</F17003379>
<F17003382>keine</F17003382>
<G17007234>
<F17011826>Nein</F17011826>
</G17007234>
<G17007235>
<F17011827>Nein</F17011827>
</G17007235>
</G17007205>
</G17005404>
</fim.S17000652.17000652001004>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment