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

OZG-30 - data model mapper

parent e9a0d252
Branches
Tags
No related merge requests found
package de.itvsh.ozg.adapter.intelliform.converter;
import java.util.Arrays;
import java.util.Map;
import org.springframework.stereotype.Component;
import de.itvsh.ozg.adapter.intelliform.model.Antragsteller;
@Component
public class AntragstellerMapper {
private static final String XML_ANTRAGSTELLER = "antragsteller";
private static final String XML_MAPPING_ANREDE = "b_andere";
private static final String XML_MAPPING_VORNAME = "pers_vorname";
private static final String XML_MAPPING_NACHNAME = "pers_nachname";
private static final String XML_MAPPING_GEBURTSNAME = "pers_geburtsname";
private static final String XML_MAPPING_GEBURTSDATUM = "pers_geburtsdatum";
private static final String XML_MAPPING_GEBURTSORT = "pers_geburtsort";
Antragsteller map(Map<String, Object> formDataMap) {
@SuppressWarnings("unchecked")
Map<String, Object> antragstellerMap = (Map<String, Object>) formDataMap.get(XML_ANTRAGSTELLER);
Antragsteller antragsteller = Antragsteller.builder() //
.anrede((String) antragstellerMap.get(XML_MAPPING_ANREDE)) //
.vorname((String) antragstellerMap.get(XML_MAPPING_VORNAME)) //
.nachname((String) antragstellerMap.get(XML_MAPPING_NACHNAME)) //
.geburtsname((String) antragstellerMap.get(XML_MAPPING_GEBURTSNAME)) //
.geburtsdatum((String) antragstellerMap.get(XML_MAPPING_GEBURTSDATUM)) //
.geburtsort((String) antragstellerMap.get(XML_MAPPING_GEBURTSORT)) //
.build();
removeMappedElementsFromMap(antragstellerMap);
return antragsteller;
}
private void removeMappedElementsFromMap(Map<String, Object> antragstellerMap) {
Arrays.stream(getClass().getFields()).forEach(field -> {
if (field.getName().startsWith("XML_MAPPING_")) {
antragstellerMap.remove(field.getName());
}
});
}
}
package de.itvsh.ozg.adapter.intelliform.converter;
import org.springframework.stereotype.Component;
import org.w3c.dom.Document;
import de.itvsh.ozg.adapter.intelliform.model.FormHeader;
public class FormHeaderBuilder {
@Component
public class FormHeaderMapper {
public static FormHeader build(Document document) {
public FormHeader map(Document document) {
return FormHeader.builder() //
.formId(document.getDocumentElement().getAttribute("t:form-id")) //
.formRequestId(document.getDocumentElement().getAttribute("id")) //
.formName(document.getDocumentElement().getAttribute("form")) //
.formRequestId(document.getDocumentElement().getAttribute("t:id")) //
.formName(document.getDocumentElement().getAttribute("t:form")) //
.build();
}
}
......@@ -2,25 +2,30 @@ package de.itvsh.ozg.adapter.intelliform.converter;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
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.stereotype.Component;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import de.itvsh.ozg.adapter.intelliform.model.FormData;
import lombok.extern.log4j.Log4j2;
import lombok.RequiredArgsConstructor;
@Component
@Log4j2
public class IntelliFormConverter {
@RequiredArgsConstructor
public class IntelliFormMapper {
@Autowired
private final FormHeaderMapper formHeaderMapper;
@Autowired
private final AntragstellerMapper antragstellerMapper;
public FormData convert(InputStream xmlFormDataStream)
throws SAXException, IOException, ParserConfigurationException {
......@@ -44,12 +49,21 @@ public class IntelliFormConverter {
// document.getDocumentElement().getAttribute("id")
Map<String, Object> formDataMap = mapFormDataNodeToJavaMaps(document);
return FormData.builder() //
.header(FormHeaderBuilder.build(document)) //
.formData(mapChildNodes(document.getFirstChild())) //
.id(UUID.randomUUID()) //
.header(formHeaderMapper.map(document)) //
.antragsteller(antragstellerMapper.map(formDataMap)) //
.formData(formDataMap) //
.build();
}
private Map<String, Object> mapFormDataNodeToJavaMaps(Document document) {
return XmlToJavaMapsMapper.mapChildNodes(document.getFirstChild());
}
// public static Map<String, Object> mapChildNodes(Node node) {
//
// Map<String, Object> childs = new HashMap<>();
......@@ -80,52 +94,4 @@ public class IntelliFormConverter {
// return childs;
// }
public Map<String, Object> mapChildNodes(Node node) {
Map<String, Object> childs = new HashMap<>();
NodeList nodeList = node.getChildNodes();
// LOG.info("Machen: " + node.getNodeName());
for (int i = 0; i < nodeList.getLength(); i++) {
Node currentNode = nodeList.item(i);
if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
if (isSimpleTextNode(currentNode)) {
LOG.info("TextNode: " + currentNode.getNodeName() + ": Node is text node");
childs.put(currentNode.getNodeName(), currentNode.getFirstChild().getTextContent());
} else {
if (currentNode.getChildNodes().getLength() > 0) {
// LOG.info("Textnode: " + currentNode.getNodeName() + "; " + currentNode.getTextContent());
LOG.info(currentNode.getNodeName() + " Node has child nodes " + currentNode.toString() + "; "
+ currentNode.getTextContent());
LOG.info(currentNode.getFirstChild().getTextContent());
LOG.info(currentNode.getNodeType());
LOG.info(currentNode.getFirstChild().getNodeType());
LOG.info(currentNode.getFirstChild().getNodeName());
childs.put(currentNode.getNodeName(), mapChildNodes(currentNode));
} else {
LOG.error(currentNode.getNodeValue() + ": No Text node and no Children!??");
}
}
}
}
return childs;
}
private boolean isSimpleTextNode(Node node) {
return node.getChildNodes().getLength() == 1 //
&& node.getFirstChild().getNodeType() == Node.TEXT_NODE;
}
}
package de.itvsh.ozg.adapter.intelliform.converter;
import java.util.HashMap;
import java.util.Map;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import lombok.extern.log4j.Log4j2;
@Log4j2
public class XmlToJavaMapsMapper {
public static Map<String, Object> mapChildNodes(Node node) {
Map<String, Object> childs = new HashMap<>();
NodeList nodeList = node.getChildNodes();
// LOG.info("Machen: " + node.getNodeName());
for (int i = 0; i < nodeList.getLength(); i++) {
Node currentNode = nodeList.item(i);
if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
if (isSimpleTextNode(currentNode)) {
LOG.info("TextNode: " + currentNode.getNodeName() + ": Node is text node");
childs.put(currentNode.getNodeName(), currentNode.getFirstChild().getTextContent());
} else {
if (currentNode.getChildNodes().getLength() > 0) {
// LOG.info("Textnode: " + currentNode.getNodeName() + "; " + currentNode.getTextContent());
LOG.info(currentNode.getNodeName() + " Node has child nodes " + currentNode.toString() + "; "
+ currentNode.getTextContent());
LOG.info(currentNode.getFirstChild().getTextContent());
LOG.info(currentNode.getNodeType());
LOG.info(currentNode.getFirstChild().getNodeType());
LOG.info(currentNode.getFirstChild().getNodeName());
childs.put(currentNode.getNodeName(), mapChildNodes(currentNode));
} else {
LOG.error(currentNode.getNodeValue() + ": No Text node and no Children!??");
}
}
}
}
return childs;
}
private static boolean isSimpleTextNode(Node node) {
return node.getChildNodes().getLength() == 1 //
&& node.getFirstChild().getNodeType() == Node.TEXT_NODE;
}
}
......@@ -12,8 +12,8 @@ import lombok.ToString;
public class Antragsteller {
private String anrede;
private String nachname;
private String vorname;
private String nachname;
private String geburtsname;
private String geburtsdatum;
private String geburtsort;
......
package de.itvsh.ozg.adapter.intelliform.converter;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.core.IsNull.notNullValue;
......@@ -9,34 +10,41 @@ import java.io.InputStream;
import javax.xml.parsers.ParserConfigurationException;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.xml.sax.SAXException;
import de.itvsh.ozg.adapter.intelliform.model.FormData;
import de.itvsh.ozg.adapter.intelliform.model.FormHeader;
class IntelliFormConverterTest {
class IntelliFormMapperTest {
// @Test
private IntelliFormMapper intelliFormMapper;
@BeforeEach
void init() {
intelliFormMapper = new IntelliFormMapper(new FormHeaderMapper(), new AntragstellerMapper());
}
@Test
void test() throws SAXException, IOException, ParserConfigurationException {
FormData formData = loadTestFormDataFromFile();
InputStream testFile = loadTestFormDataFromFile();
FormData formData = intelliFormMapper.convert(testFile);
assertThat(formData.getId(), is(notNullValue()));
FormHeader formHeader = formData.getHeader();
// assertThat(formHeader.getFormRequestId(), is(equalTo("20201118365670866101")));
// assertThat(formHeader.getFormId(), is(equalTo("waffen/kleinerWaffenschein")));
// assertThat(formHeader.getFormName(),
// is(equalTo("Kleiner Waffenschein gem. § 10 Abs. 4 Satz 4 Waffengesetz (WaffG)")));
assertThat(formHeader.getFormRequestId(), is(equalTo("20201118365670866101")));
assertThat(formHeader.getFormId(), is(equalTo("waffen/kleinerWaffenschein")));
assertThat(formHeader.getFormName(),
is(equalTo("Kleiner Waffenschein gem. § 10 Abs. 4 Satz 4 Waffengesetz (WaffG)")));
}
private FormData loadTestFormDataFromFile() throws SAXException, IOException, ParserConfigurationException {
InputStream inputStream = IntelliFormConverterTest.class.getResourceAsStream("/fileupload/XML-Daten-1.xml");
IntelliFormConverter sut = new IntelliFormConverter();
private InputStream loadTestFormDataFromFile() throws SAXException, IOException, ParserConfigurationException {
return sut.convert(inputStream);
return IntelliFormMapperTest.class.getResourceAsStream("/fileupload/XML-Daten-1.xml");
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment