diff options
| author | Busfreak | 2023-03-10 00:30:42 +0100 |
|---|---|---|
| committer | Busfreak | 2023-03-10 00:30:42 +0100 |
| commit | 9d66c42460dda63a6380ba0f30004fcd92a4f5c4 (patch) | |
| tree | 9eb63a707d1747574bc18cbcd8e66d1c51551e5a /DNPMPlugins/src/main/java/ATCCodes/services/WhoAtcCodeService.java | |
| parent | 89153c391eb60d6aea6ea72fb93f04406a7b0b48 (diff) | |
erste Version
Diffstat (limited to 'DNPMPlugins/src/main/java/ATCCodes/services/WhoAtcCodeService.java')
| -rw-r--r-- | DNPMPlugins/src/main/java/ATCCodes/services/WhoAtcCodeService.java | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/DNPMPlugins/src/main/java/ATCCodes/services/WhoAtcCodeService.java b/DNPMPlugins/src/main/java/ATCCodes/services/WhoAtcCodeService.java new file mode 100644 index 0000000..5bb9b11 --- /dev/null +++ b/DNPMPlugins/src/main/java/ATCCodes/services/WhoAtcCodeService.java @@ -0,0 +1,72 @@ +package ATCCodes.services; + +import ATCCodes.AgentCode; +import ATCCodes.AtcCode; +import ATCCodes.FileParsingException; +import org.springframework.core.io.ResourceLoader; +import org.springframework.stereotype.Service; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * Service to query for agent codes based on WHO xml file + * + * @author Paul-Christian Volkmer + * @since 0.1.0 + */ +@Service +public class WhoAtcCodeService extends FileBasedAgentCodeService { + + public WhoAtcCodeService(final ResourceLoader resourceLoader) { + super(resourceLoader); + } + + protected List<AgentCode> parseFile(final ResourceLoader resourceLoader) { + var result = new ArrayList<AgentCode>(); + var filename = getFilePath("atc.xml"); + try { + var inputStream = resourceLoader.getResource(filename).getInputStream(); + var context = JAXBContext.newInstance(XmlResource.class); + var xmlResource = (XmlResource) context.createUnmarshaller().unmarshal(inputStream); + for (var row : xmlResource.data.rows) { + if (null == row.code || null == row.name) { + throw new FileParsingException("No XML attribute 'ATCCode' or 'Name' found"); + } + result.add(new AtcCode(row.code, row.name)); + } + logger.info("Found WHO XML file for ATC-Codes."); + return result; + } catch (IOException e) { + logger.warn("Error reading WHO XML file '{}' for ATC-Codes. Proceeding without inserting data", filename); + } catch (JAXBException | FileParsingException e) { + logger.warn("Error parsing WHO XML file '{}' for ATC-Codes. Proceeding without inserting data", filename); + } + return result; + } + + @XmlRootElement(name = "xml") + private static class XmlResource { + @XmlElement(name = "data", namespace = "urn:schemas-microsoft-com:rowset") + public XmlData data; + } + + private static class XmlData { + @XmlElement(name = "row", namespace = "#RowsetSchema") + public List<XmlRow> rows; + } + + private static class XmlRow { + @XmlAttribute(name = "ATCCode") + public String code; + + @XmlAttribute(name = "Name") + public String name; + } +}
\ No newline at end of file |
