diff options
| author | Paul-Christian Volkmer | 2023-03-10 09:24:12 +0100 |
|---|---|---|
| committer | Paul-Christian Volkmer | 2023-03-10 09:28:52 +0100 |
| commit | 4b121482f1a8323ea23858e8118934be5d9aa54c (patch) | |
| tree | aee5e630082ae7a1f81fccdc0ebdaeefc950689c /src/main/java/ATCCodes/services/WhoAtcCodeService.java | |
| parent | 9d66c42460dda63a6380ba0f30004fcd92a4f5c4 (diff) | |
Issue #5: Vorschlag für den Aufbau des Projekts
* Maven-Projekt direkt im Hauptverzeichnis
* Anpassung der Maven-POM-Datei - nicht benötigte Abhängigkeiten entfernt
* Gitignore-Datei angelegt
Diffstat (limited to 'src/main/java/ATCCodes/services/WhoAtcCodeService.java')
| -rw-r--r-- | src/main/java/ATCCodes/services/WhoAtcCodeService.java | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/main/java/ATCCodes/services/WhoAtcCodeService.java b/src/main/java/ATCCodes/services/WhoAtcCodeService.java new file mode 100644 index 0000000..5bb9b11 --- /dev/null +++ b/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 |
