diff options
author | Christian Kollmann <christian.kollmann@a-sit.at> | 2021-12-02 16:05:57 +0100 |
---|---|---|
committer | Christian Kollmann <christian.kollmann@a-sit.at> | 2021-12-07 10:07:15 +0100 |
commit | ac56869c2a981e40d6cf4637fb8fd46c06207c9d (patch) | |
tree | f6e7ae5ed63dcf8a822e88d9a3e16f527f5a1e38 | |
parent | 6fff1b53525348d531c96b45c920a8ce72288f60 (diff) | |
download | National_eIDAS_Gateway-ac56869c2a981e40d6cf4637fb8fd46c06207c9d.tar.gz National_eIDAS_Gateway-ac56869c2a981e40d6cf4637fb8fd46c06207c9d.tar.bz2 National_eIDAS_Gateway-ac56869c2a981e40d6cf4637fb8fd46c06207c9d.zip |
Add PLZ to search for adresses in ZMR
9 files changed, 250 insertions, 190 deletions
diff --git a/basicConfig/properties/messages.properties b/basicConfig/properties/messages.properties index 76ce5b16..ab7988c9 100644 --- a/basicConfig/properties/messages.properties +++ b/basicConfig/properties/messages.properties @@ -131,6 +131,7 @@ gui.residency.found=Found {0} results gui.residency.unique=Unique result found, please proceed gui.residency.error=Error on Backend Call gui.residency.apply=Apply +gui.residency.input.postleitzahl=Postcode gui.residency.input.municipality=Municipality gui.residency.input.village=Village gui.residency.input.street=Street diff --git a/basicConfig/properties/messages_de.properties b/basicConfig/properties/messages_de.properties index bca258ee..e539c2d9 100644 --- a/basicConfig/properties/messages_de.properties +++ b/basicConfig/properties/messages_de.properties @@ -130,6 +130,7 @@ gui.residency.found={0} Ergebnisse gefunden gui.residency.unique=Eindeutiges Ergebnis gefunden, bitte fortfahren gui.residency.error=Fehler bei Addresssuche gui.residency.apply=Übernehmen +gui.residency.input.postleitzahl=PLZ gui.residency.input.municipality=Gemeinde gui.residency.input.village=Ortschaft gui.residency.input.street=Straße diff --git a/basicConfig/templates/residency.html b/basicConfig/templates/residency.html index 9dc1153d..b434b9f9 100644 --- a/basicConfig/templates/residency.html +++ b/basicConfig/templates/residency.html @@ -5,168 +5,180 @@ th:with="lang=${#locale.language}" th:lang="${lang}"> <head> - <meta content="text/html; charset=utf-8" http-equiv="Content-Type"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - <link rel="stylesheet" href="$contextPath/static/css/css_country.css" th:href="@{/static/css/css_country.css}"/> - <script type="text/javascript" src="$contextPath/static/js/jquery-3.6.0.js" - th:attr="src=@{/static/js/jquery-3.6.0.min.js}"></script> - <title th:text="#{gui.residency.title}">Österreichischer Wohnsitz</title> - <script type="text/javascript" th:inline="javascript"> - $(document).ready(function () { - $("#textResult").hide(); - $("#tableResult").hide(); - $("#loading").hide(); - $.ajaxSetup({ - beforeSend: function () { - $("#loading").show(); - }, - complete: function () { - $("#loading").hide(); - } - }); - }); + <meta content="text/html; charset=utf-8" http-equiv="Content-Type"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="stylesheet" href="$contextPath/static/css/css_country.css" th:href="@{/static/css/css_country.css}"/> + <script type="text/javascript" src="$contextPath/static/js/jquery-3.6.0.js" + th:attr="src=@{/static/js/jquery-3.6.0.min.js}"></script> + <title th:text="#{gui.residency.title}">Österreichischer Wohnsitz</title> + <script type="text/javascript" th:inline="javascript"> + $(document).ready(function () { + $("#textResult").hide(); + $("#tableResult").hide(); + $("#loading").hide(); + $.ajaxSetup({ + beforeSend: function () { + $("#loading").show(); + }, + complete: function () { + $("#loading").hide(); + } + }); + }); - function search() { - let updatedText = /*[[#{gui.residency.updated}]]*/ 'Updated text'; - let errorText = /*[[#{gui.residency.error}]]*/ 'Error'; - let applyText = /*[[#{gui.residency.apply}]]*/ 'Apply'; - let foundText = /*[[#{gui.residency.found}]]*/ 'Found {0}'; - let uniqueText = /*[[#{gui.residency.unique}]]*/ 'Unique'; - let invalidInputText = /*[[#{gui.residency.header.inputinvalid}]]*/ 'Invalid'; - if (!$("#inputForm #inputMunicipality").val().trim() && !$("#inputForm #inputVillage").val().trim()) { - $("#textResult").show().text(invalidInputText); - return; - } - $.ajax({ - type: "POST", - url: "http://localhost:8080/ms_connector/residency/search", - data: $("#inputForm").serialize() - }).done(function (data, textStatus, jqXHR) { - if (data["resultCount"] == 1) { - $("#textResult").show().text(uniqueText); - $("#tableResult tbody").empty(); - $("#tableResult").hide(); - $("#inputForm #inputMunicipality").val(data["results"][0]["municipality"]); - $("#inputForm #inputVillage").val(data["results"][0]["village"]); - $("#inputForm #inputStreet").val(data["results"][0]["street"]); - $("#inputForm #inputNumber").val(data["results"][0]["number"]); - return; + function search() { + let updatedText = /*[[#{gui.residency.updated}]]*/ 'Updated text'; + let errorText = /*[[#{gui.residency.error}]]*/ 'Error'; + let applyText = /*[[#{gui.residency.apply}]]*/ 'Apply'; + let foundText = /*[[#{gui.residency.found}]]*/ 'Found {0}'; + let uniqueText = /*[[#{gui.residency.unique}]]*/ 'Unique'; + let invalidInputText = /*[[#{gui.residency.header.inputinvalid}]]*/ 'Invalid'; + if (!$("#inputForm #inputMunicipality").val().trim() && !$("#inputForm #inputPostleitzahl").val().trim() && + !$("#inputForm #inputVillage").val().trim()) { + $("#textResult").show().text(invalidInputText); + return; + } + $.ajax({ + type: "POST", + url: "http://localhost:8080/ms_connector/residency/search", + data: $("#inputForm").serialize() + }).done(function (data, textStatus, jqXHR) { + if (data["resultCount"] == 1) { + $("#textResult").show().text(uniqueText); + $("#tableResult tbody").empty(); + $("#tableResult").hide(); + $("#inputForm #inputPostleitzahl").val(data["results"][0]["postleitzahl"]); + $("#inputForm #inputMunicipality").val(data["results"][0]["municipality"]); + $("#inputForm #inputVillage").val(data["results"][0]["village"]); + $("#inputForm #inputStreet").val(data["results"][0]["street"]); + $("#inputForm #inputNumber").val(data["results"][0]["number"]); + return; + } + $("#textResult").show().text(foundText.replace("{0}", data["resultCount"])); + $("#tableResult").show(); + $("#tableResult tbody").empty(); + $.each(data.results, function (i, output) { + $("#tableResult tbody") + .append($("<tr>") + .append($("<td>").text(output["postleitzahl"] !== null ? output["postleitzahl"] : "")) + .append($("<td>").text(output["municipality"] !== null ? output["municipality"] : "")) + .append($("<td>").text(output["village"] !== null ? output["village"] : "")) + .append($("<td>").text(output["street"] !== null ? output["street"] : "")) + .append($("<td>").text(output["number"] !== null ? output["number"] : "")) + .append($("<td>").text(applyText).attr("href", "#").click(function () { + $("#inputForm #inputPostleitzahl").val($(this).parent().children("td:nth-child(1)").text()); + $("#inputForm #inputMunicipality").val($(this).parent().children("td:nth-child(2)").text()); + $("#inputForm #inputVillage").val($(this).parent().children("td:nth-child(3)").text()); + $("#inputForm #inputStreet").val($(this).parent().children("td:nth-child(4)").text()); + $("#inputForm #inputNumber").val($(this).parent().children("td:nth-child(5)").text()); + $("#textResult").show().text(updatedText); + search(); + })) + ); + }) + if (data.results.length == 0) { + $("#tableResult").hide(); + } + }).fail(function (jqXHR, textStatus, errorThrown) { + $("#textResult").show().text(errorText); + }) } - $("#textResult").show().text(foundText.replace("{0}", data["resultCount"])); - $("#tableResult").show(); - $("#tableResult tbody").empty(); - $.each(data.results, function (i, output) { - $("#tableResult tbody") - .append($("<tr>") - .append($("<td>").text(output["municipality"] !== null ? output["municipality"] : "")) - .append($("<td>").text(output["village"] !== null ? output["village"] : "")) - .append($("<td>").text(output["street"] !== null ? output["street"] : "")) - .append($("<td>").text(output["number"] !== null ? output["number"] : "")) - .append($("<td>").text(applyText).attr("href", "#").click(function () { - $("#inputForm #inputMunicipality").val($(this).parent().children("td:nth-child(1)").text()); - $("#inputForm #inputVillage").val($(this).parent().children("td:nth-child(2)").text()); - $("#inputForm #inputStreet").val($(this).parent().children("td:nth-child(3)").text()); - $("#inputForm #inputNumber").val($(this).parent().children("td:nth-child(4)").text()); - $("#textResult").show().text(updatedText); - search(); - })) - ); - }) - }).fail(function (jqXHR, textStatus, errorThrown) { - $("#textResult").show().text(errorText); - }) - } - function clearInput() { - $("#inputForm #inputMunicipality").val(""); - $("#inputForm #inputVillage").val(""); - $("#inputForm #inputStreet").val(""); - $("#inputForm #inputNumber").val(""); - $("#textResult").hide(); - $("#tableResult").hide(); - } - </script> - <style> - td { - padding: 0.5em; - margin: 0.5em; - } - </style> + function clearInput() { + $("#inputForm #inputMunicipality").val(""); + $("#inputForm #inputVillage").val(""); + $("#inputForm #inputStreet").val(""); + $("#inputForm #inputNumber").val(""); + $("#textResult").hide(); + $("#tableResult").hide(); + } + </script> + <style> + td { + padding: 0.5em; + margin: 0.5em; + } + </style> </head> <body> <div id="page"> - <div class="languageselection" th:include="language_selection :: selectlanguage"> - LanguageSelectionBlock - </div> + <div class="languageselection" th:include="language_selection :: selectlanguage"> + LanguageSelectionBlock + </div> - <h2 th:text="#{gui.residency.header.selection}">Search your Austrian Residency</h2> + <h2 th:text="#{gui.residency.header.selection}">Search your Austrian Residency</h2> - <div id="residency"> - <form id="inputForm" method="post" action="$contextPath$submitEndpoint" - th:attr="action=@{${submitEndpoint}}"> - <div th:text="#{gui.residency.header.help}">Please enter a Municipality or Village first</div> - <div> - <label for="inputMunicipality" th:text="#{gui.residency.input.municipality}">Municipality</label> - <input type="text" id="inputMunicipality" name="municipality" value=""/> - </div> - <div> - <label for="inputVillage" th:text="#{gui.residency.input.village}">Village</label> - <input type="text" id="inputVillage" name="village" value=""/> - </div> - <div> - <label for="inputStreet" th:text="#{gui.residency.input.street}">Street</label> - <input type="text" id="inputStreet" name="street" value=""/> - </div> - <div> - <label for="inputNumber" th:text="#{gui.residency.input.number}">Number</label> - <input type="text" id="inputNumber" name="number" value=""/> - </div> - <div> - <button type="button" class="block" onclick="search()" th:attr="value=#{gui.residency.search}">Search - </button> - </div> - <div> - <button type="button" class="block" onclick="clearInput()" th:attr="value=#{gui.residency.clear}">Clear - </button> - </div> - <div> - <button type="button" class="block" th:attr="value=#{gui.residency.proceed}">Proceed</button> - </div> - <div> - <img id="loading" src="$contextPath/static/img/ajax-loader.gif" - th:attr="src=@{/static/img/ajax-loader.gif}" /> - </div> - <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}"/> - </form> - </div> - - <div id="result"> - <div> - <p><span id="textResult"></span></p> + <div id="residency"> + <form id="inputForm" method="post" action="$contextPath$submitEndpoint" + th:attr="action=@{${submitEndpoint}}"> + <div th:text="#{gui.residency.header.help}">Please enter a Municipality or Village first</div> + <div> + <label for="inputPostleitzahl" th:text="#{gui.residency.input.postleitzahl}">Postleitzahl</label> + <input type="text" id="inputPostleitzahl" name="postleitzahl" value=""/> + </div> + <div> + <label for="inputMunicipality" th:text="#{gui.residency.input.municipality}">Municipality</label> + <input type="text" id="inputMunicipality" name="municipality" value=""/> + </div> + <div> + <label for="inputVillage" th:text="#{gui.residency.input.village}">Village</label> + <input type="text" id="inputVillage" name="village" value=""/> + </div> + <div> + <label for="inputStreet" th:text="#{gui.residency.input.street}">Street</label> + <input type="text" id="inputStreet" name="street" value=""/> + </div> + <div> + <label for="inputNumber" th:text="#{gui.residency.input.number}">Number</label> + <input type="text" id="inputNumber" name="number" value=""/> + </div> + <div> + <button type="button" class="block" onclick="search()" th:attr="value=#{gui.residency.search}">Search + </button> + </div> + <div> + <button type="button" class="block" onclick="clearInput()" th:attr="value=#{gui.residency.clear}">Clear + </button> + </div> + <div> + <button type="button" class="block" th:attr="value=#{gui.residency.proceed}">Proceed</button> + </div> + <div> + <img id="loading" src="$contextPath/static/img/ajax-loader.gif" + th:attr="src=@{/static/img/ajax-loader.gif}"/> + </div> + <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}"/> + </form> </div> - <table id="tableResult"> - <thead> - <tr> - <th th:text="#{gui.residency.input.municipality}">Municipality</th> - <th th:text="#{gui.residency.input.village}">Village</th> - <th th:text="#{gui.residency.input.street}">Street</th> - <th th:text="#{gui.residency.input.number}">Number</th> - <th th:text="#{gui.residency.apply}">Apply</th> - </tr> - </thead> - <tbody> - </tbody> - </table> - </div> + <div id="result"> + <div> + <p><span id="textResult"></span></p> + </div> + <table id="tableResult"> + <thead> + <tr> + <th th:text="#{gui.residency.input.postleitzahl}">Postleitzahl</th> + <th th:text="#{gui.residency.input.municipality}">Municipality</th> + <th th:text="#{gui.residency.input.village}">Village</th> + <th th:text="#{gui.residency.input.street}">Street</th> + <th th:text="#{gui.residency.input.number}">Number</th> + <th th:text="#{gui.residency.apply}">Apply</th> + </tr> + </thead> + <tbody> + + </tbody> + </table> + </div> - <form class="block" method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> - <input type="submit" class="btn btn-outline-primary btn-block" value="Abbrechen/Cancel" - th:attr="value=#{gui.residency.cancel}"> - <input type="hidden" name="stopAuthProcess" value="true"> - <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}"> - </form> + <form class="block" method="post" action="$contextPath$submitEndpoint" th:attr="action=@{${submitEndpoint}}"> + <input type="submit" class="btn btn-outline-primary btn-block" value="Abbrechen/Cancel" + th:attr="value=#{gui.residency.cancel}"> + <input type="hidden" name="stopAuthProcess" value="true"> + <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}"> + </form> </div> </body> diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/AdresssucheController.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/AdresssucheController.java index c35aa8b9..f71917c3 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/AdresssucheController.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/AdresssucheController.java @@ -30,11 +30,12 @@ import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasSAuthenti import at.gv.bmi.namespace.zmr_su.zrm._20040201_.address.Adressdaten; import at.gv.e_government.reference.namespace.persondata.de._20040201.PostAdresseTyp; import at.gv.e_government.reference.namespace.persondata.de._20040201.ZustelladresseTyp; -import at.gv.egiz.eaaf.core.api.gui.IGuiBuilderConfiguration; import at.gv.egiz.eaaf.core.api.gui.ISpringMvcGuiFormBuilder; import at.gv.egiz.eaaf.core.api.idp.IConfiguration; import at.gv.egiz.eaaf.core.api.utils.IPendingRequestIdGenerationStrategy; +import at.gv.egiz.eaaf.core.exceptions.EaafException; import at.gv.egiz.eaaf.core.exceptions.GuiBuildException; +import at.gv.egiz.eaaf.core.exceptions.PendingReqIdValidationException; import lombok.AllArgsConstructor; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -51,7 +52,10 @@ import org.springframework.web.bind.annotation.RequestParam; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.util.*; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Set; import java.util.stream.Collectors; /** @@ -78,9 +82,13 @@ public class AdresssucheController { @Autowired private IPendingRequestIdGenerationStrategy pendingReqGeneration; + /** + * Show the "residency.html" directly. + * TODO Remove this after testing. + */ @RequestMapping(value = {"/test"}, method = {RequestMethod.GET}) - public void test(HttpServletRequest request, HttpServletResponse response) throws GuiBuildException { - final IGuiBuilderConfiguration config = new StaticGuiBuilderConfiguration( + public void test(HttpServletRequest request, HttpServletResponse response) throws GuiBuildException, EaafException { + final StaticGuiBuilderConfiguration config = new StaticGuiBuilderConfiguration( basicConfig, "http://localhost:8080/ms_connector/", basicConfig.getBasicConfiguration(//TODO @@ -88,26 +96,34 @@ public class AdresssucheController { MsEidasNodeConstants.TEMPLATE_HTML_RESIDENCY), MsEidasNodeConstants.ENDPOINT_RESIDENCY_INPUT, resourceLoader); - // TODO Set the pendingId somehow + config.putCustomParameter(null, "pendingid", pendingReqGeneration.generateExternalPendingRequestId()); guiBuilder.build(request, response, config, "Query Austrian residency"); } + /** + * Performs search for addresses in ZMR. + */ @RequestMapping(value = {"/residency/search"}, method = {RequestMethod.POST}) - public ResponseEntity<AdresssucheResult> search(@RequestParam("municipality") String municipality, + public ResponseEntity<AdresssucheResult> search(@RequestParam("postleitzahl") String postleitzahl, + @RequestParam("municipality") String municipality, @RequestParam("village") String village, @RequestParam("street") String street, @RequestParam("number") String number, @RequestParam("pendingid") String pendingId) { - log.info("Search with '{}', '{}', '{}'", municipality, street, number); - // TODO validate pendingId -// try { -// pendingReqGeneration.validateAndGetPendingRequestId(pendingId); -// } catch (PendingReqIdValidationException e) { -// log.warn("Search with pendingId '{}' is not valid", pendingId); -// return ResponseEntity.badRequest().build(); -// } + log.info("Search with '{}', '{}', '{}', '{}', '{}'", + postleitzahl.replaceAll("[\r\n]", ""), + municipality.replaceAll("[\r\n]", ""), + village.replaceAll("[\r\n]", ""), + street.replaceAll("[\r\n]", ""), + number.replaceAll("[\r\n]", "")); try { - Adressdaten searchInput = buildSearchInput(municipality, village, street, number); + pendingReqGeneration.validateAndGetPendingRequestId(pendingId); + } catch (PendingReqIdValidationException e) { + log.warn("Search with pendingId '{}' is not valid", pendingId.replaceAll("[\r\n]", "")); + return ResponseEntity.badRequest().build(); + } + try { + Adressdaten searchInput = buildSearchInput(postleitzahl, municipality, village, street, number); ZmrAddressSoapClient.AddressInfo searchOutput = client.searchAddress(searchInput); AdresssucheResult output = buildResponse(searchOutput); return ResponseEntity.ok(output); @@ -120,24 +136,28 @@ public class AdresssucheController { private AdresssucheResult buildResponse(ZmrAddressSoapClient.AddressInfo searchOutput) { if (searchOutput.getPersonResult().isEmpty()) { log.warn("No result from ZMR"); - return new AdresssucheResult(Collections.emptyList(), 0, false, null); + return new AdresssucheResult(Collections.emptyList(), 0); } - boolean moreResults = false; - new HashSet<>(); log.info("Result level is {}", searchOutput.getLevel()); Set<AdresssucheOutput> result = searchOutput.getPersonResult().stream() .map(Adressdaten::getPostAdresse) - .map(it -> new AdresssucheOutput(it.getGemeinde(), it.getOrtschaft(), + .map(it -> new AdresssucheOutput(it.getPostleitzahl(), it.getGemeinde(), it.getOrtschaft(), it.getZustelladresse().getStrassenname(), it.getZustelladresse().getOrientierungsnummer())) .collect(Collectors.toSet()); // TODO Add configuration option for the limit of 30 List<AdresssucheOutput> sorted = result.stream().sorted().limit(30).collect(Collectors.toList()); - return new AdresssucheResult(sorted, result.size(), moreResults, searchOutput.getLevel().name()); + return new AdresssucheResult(sorted, result.size()); } - @NotNull - private Adressdaten buildSearchInput(String municipality, String village, String street, String number) { + private Adressdaten buildSearchInput(String postleitzahl, + String municipality, + String village, + String street, + String number) { PostAdresseTyp postAdresse = new PostAdresseTyp(); + if (StringUtils.isNotBlank(postleitzahl)) { + postAdresse.setPostleitzahl(postleitzahl); + } if (StringUtils.isNotBlank(municipality)) { postAdresse.setGemeinde(municipality); } @@ -164,14 +184,12 @@ public class AdresssucheController { public static class AdresssucheResult { private final Collection<AdresssucheOutput> results; private final int resultCount; - private final boolean moreResults; - private final String detailLevel; - } @Data @AllArgsConstructor public static class AdresssucheOutput implements Comparable<AdresssucheOutput> { + private final String postleitzahl; private final String municipality; private final String village; private final String street; @@ -180,6 +198,7 @@ public class AdresssucheController { @Override public int compareTo(@NotNull AdresssucheOutput o) { return new CompareToBuilder() + .append(this.postleitzahl, o.postleitzahl) .append(this.municipality, o.municipality) .append(this.village, o.village) .append(this.street, o.street) diff --git a/connector/src/main/resources/templates/residency.html b/connector/src/main/resources/templates/residency.html index 3f0532dd..b434b9f9 100644 --- a/connector/src/main/resources/templates/residency.html +++ b/connector/src/main/resources/templates/residency.html @@ -33,7 +33,8 @@ let foundText = /*[[#{gui.residency.found}]]*/ 'Found {0}'; let uniqueText = /*[[#{gui.residency.unique}]]*/ 'Unique'; let invalidInputText = /*[[#{gui.residency.header.inputinvalid}]]*/ 'Invalid'; - if (!$("#inputForm #inputMunicipality").val().trim() && !$("#inputForm #inputVillage").val().trim()) { + if (!$("#inputForm #inputMunicipality").val().trim() && !$("#inputForm #inputPostleitzahl").val().trim() && + !$("#inputForm #inputVillage").val().trim()) { $("#textResult").show().text(invalidInputText); return; } @@ -46,6 +47,7 @@ $("#textResult").show().text(uniqueText); $("#tableResult tbody").empty(); $("#tableResult").hide(); + $("#inputForm #inputPostleitzahl").val(data["results"][0]["postleitzahl"]); $("#inputForm #inputMunicipality").val(data["results"][0]["municipality"]); $("#inputForm #inputVillage").val(data["results"][0]["village"]); $("#inputForm #inputStreet").val(data["results"][0]["street"]); @@ -58,20 +60,25 @@ $.each(data.results, function (i, output) { $("#tableResult tbody") .append($("<tr>") + .append($("<td>").text(output["postleitzahl"] !== null ? output["postleitzahl"] : "")) .append($("<td>").text(output["municipality"] !== null ? output["municipality"] : "")) .append($("<td>").text(output["village"] !== null ? output["village"] : "")) .append($("<td>").text(output["street"] !== null ? output["street"] : "")) .append($("<td>").text(output["number"] !== null ? output["number"] : "")) .append($("<td>").text(applyText).attr("href", "#").click(function () { - $("#inputForm #inputMunicipality").val($(this).parent().children("td:nth-child(1)").text()); - $("#inputForm #inputVillage").val($(this).parent().children("td:nth-child(2)").text()); - $("#inputForm #inputStreet").val($(this).parent().children("td:nth-child(3)").text()); - $("#inputForm #inputNumber").val($(this).parent().children("td:nth-child(4)").text()); + $("#inputForm #inputPostleitzahl").val($(this).parent().children("td:nth-child(1)").text()); + $("#inputForm #inputMunicipality").val($(this).parent().children("td:nth-child(2)").text()); + $("#inputForm #inputVillage").val($(this).parent().children("td:nth-child(3)").text()); + $("#inputForm #inputStreet").val($(this).parent().children("td:nth-child(4)").text()); + $("#inputForm #inputNumber").val($(this).parent().children("td:nth-child(5)").text()); $("#textResult").show().text(updatedText); search(); })) ); }) + if (data.results.length == 0) { + $("#tableResult").hide(); + } }).fail(function (jqXHR, textStatus, errorThrown) { $("#textResult").show().text(errorText); }) @@ -107,6 +114,10 @@ th:attr="action=@{${submitEndpoint}}"> <div th:text="#{gui.residency.header.help}">Please enter a Municipality or Village first</div> <div> + <label for="inputPostleitzahl" th:text="#{gui.residency.input.postleitzahl}">Postleitzahl</label> + <input type="text" id="inputPostleitzahl" name="postleitzahl" value=""/> + </div> + <div> <label for="inputMunicipality" th:text="#{gui.residency.input.municipality}">Municipality</label> <input type="text" id="inputMunicipality" name="municipality" value=""/> </div> @@ -134,8 +145,8 @@ <button type="button" class="block" th:attr="value=#{gui.residency.proceed}">Proceed</button> </div> <div> - <img id="loading" src="$contextPath/static/img/ajax-loader.gif" - th:attr="src=@{/static/img/ajax-loader.gif}" /> + <img id="loading" src="$contextPath/static/img/ajax-loader.gif" + th:attr="src=@{/static/img/ajax-loader.gif}"/> </div> <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}"/> </form> @@ -148,6 +159,7 @@ <table id="tableResult"> <thead> <tr> + <th th:text="#{gui.residency.input.postleitzahl}">Postleitzahl</th> <th th:text="#{gui.residency.input.municipality}">Municipality</th> <th th:text="#{gui.residency.input.village}">Village</th> <th th:text="#{gui.residency.input.street}">Street</th> diff --git a/connector/src/test/resources/config/properties/messages.properties b/connector/src/test/resources/config/properties/messages.properties index 51befbfc..2f99d892 100644 --- a/connector/src/test/resources/config/properties/messages.properties +++ b/connector/src/test/resources/config/properties/messages.properties @@ -118,6 +118,7 @@ gui.residency.found=Found {0} results gui.residency.unique=Unique result found, please proceed gui.residency.error=Error on Backend Call gui.residency.apply=Apply +gui.residency.input.postleitzahl=Postcode gui.residency.input.municipality=Municipality gui.residency.input.village=Village gui.residency.input.street=Street diff --git a/connector/src/test/resources/config/properties/messages_de.properties b/connector/src/test/resources/config/properties/messages_de.properties index c67e445f..ead751d0 100644 --- a/connector/src/test/resources/config/properties/messages_de.properties +++ b/connector/src/test/resources/config/properties/messages_de.properties @@ -119,6 +119,7 @@ gui.residency.found={0} Ergebnisse gefunden gui.residency.unique=Eindeutiges Ergebnis gefunden, bitte fortfahren gui.residency.error=Fehler bei Addresssuche gui.residency.apply=Übernehmen +gui.residency.input.postleitzahl=PLZ gui.residency.input.municipality=Gemeinde gui.residency.input.village=Ortschaft gui.residency.input.street=Straße diff --git a/connector/src/test/resources/config/templates/residency.html b/connector/src/test/resources/config/templates/residency.html index 77c13fb7..99de851a 100644 --- a/connector/src/test/resources/config/templates/residency.html +++ b/connector/src/test/resources/config/templates/residency.html @@ -33,7 +33,8 @@ let foundText = /*[[#{gui.residency.found}]]*/ 'Found {0}'; let uniqueText = /*[[#{gui.residency.unique}]]*/ 'Unique'; let invalidInputText = /*[[#{gui.residency.header.inputinvalid}]]*/ 'Invalid'; - if (!$("#inputForm #inputMunicipality").val().trim() && !$("#inputForm #inputVillage").val().trim()) { + if (!$("#inputForm #inputMunicipality").val().trim() && !$("#inputForm #inputPostleitzahl").val().trim() && + !$("#inputForm #inputVillage").val().trim()) { $("#textResult").show().text(invalidInputText); return; } @@ -46,6 +47,7 @@ $("#textResult").show().text(uniqueText); $("#tableResult tbody").empty(); $("#tableResult").hide(); + $("#inputForm #inputPostleitzahl").val(data["results"][0]["postleitzahl"]); $("#inputForm #inputMunicipality").val(data["results"][0]["municipality"]); $("#inputForm #inputVillage").val(data["results"][0]["village"]); $("#inputForm #inputStreet").val(data["results"][0]["street"]); @@ -58,20 +60,25 @@ $.each(data.results, function (i, output) { $("#tableResult tbody") .append($("<tr>") + .append($("<td>").text(output["postleitzahl"] !== null ? output["postleitzahl"] : "")) .append($("<td>").text(output["municipality"] !== null ? output["municipality"] : "")) .append($("<td>").text(output["village"] !== null ? output["village"] : "")) .append($("<td>").text(output["street"] !== null ? output["street"] : "")) .append($("<td>").text(output["number"] !== null ? output["number"] : "")) .append($("<td>").text(applyText).attr("href", "#").click(function () { - $("#inputForm #inputMunicipality").val($(this).parent().children("td:nth-child(1)").text()); - $("#inputForm #inputVillage").val($(this).parent().children("td:nth-child(2)").text()); - $("#inputForm #inputStreet").val($(this).parent().children("td:nth-child(3)").text()); - $("#inputForm #inputNumber").val($(this).parent().children("td:nth-child(4)").text()); + $("#inputForm #inputPostleitzahl").val($(this).parent().children("td:nth-child(1)").text()); + $("#inputForm #inputMunicipality").val($(this).parent().children("td:nth-child(2)").text()); + $("#inputForm #inputVillage").val($(this).parent().children("td:nth-child(3)").text()); + $("#inputForm #inputStreet").val($(this).parent().children("td:nth-child(4)").text()); + $("#inputForm #inputNumber").val($(this).parent().children("td:nth-child(5)").text()); $("#textResult").show().text(updatedText); search(); })) ); }) + if (data.results.length == 0) { + $("#tableResult").hide(); + } }).fail(function (jqXHR, textStatus, errorThrown) { $("#textResult").show().text(errorText); }) @@ -107,6 +114,10 @@ th:attr="action=@{${submitEndpoint}}"> <div th:text="#{gui.residency.header.help}">Please enter a Municipality or Village first</div> <div> + <label for="inputPostleitzahl" th:text="#{gui.residency.input.postleitzahl}">Postleitzahl</label> + <input type="text" id="inputPostleitzahl" name="postleitzahl" value=""/> + </div> + <div> <label for="inputMunicipality" th:text="#{gui.residency.input.municipality}">Municipality</label> <input type="text" id="inputMunicipality" name="municipality" value=""/> </div> @@ -134,8 +145,8 @@ <button type="button" class="block" th:attr="value=#{gui.residency.proceed}">Proceed</button> </div> <div> - <img id="loading" src="$contextPath/static/img/ajax-loader.gif" - th:attr="src=@{/static/img/ajax-loader.gif}" /> + <img id="loading" src="$contextPath/static/img/ajax-loader.gif" + th:attr="src=@{/static/img/ajax-loader.gif}"/> </div> <input type="hidden" name="pendingid" value="$pendingid" th:attr="value=${pendingid}"/> </form> @@ -148,6 +159,7 @@ <table id="tableResult"> <thead> <tr> + <th th:text="#{gui.residency.input.postleitzahl}">Postleitzahl</th> <th th:text="#{gui.residency.input.municipality}">Municipality</th> <th th:text="#{gui.residency.input.village}">Village</th> <th th:text="#{gui.residency.input.street}">Street</th> diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/ZmrAddressSoapClient.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/ZmrAddressSoapClient.java index 5fb839af..6e146ddf 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/ZmrAddressSoapClient.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/ZmrAddressSoapClient.java @@ -264,8 +264,9 @@ public class ZmrAddressSoapClient extends AbstractSoapClient { } private static DetailLevel extractAddressDetailLevel(AdresssuchergebnisType value) { - if (value.getDetailgrad() == null) + if (value.getDetailgrad() == null) { return DetailLevel.UNKNOWN; + } switch (value.getDetailgrad()) { case PROCESS_TASK_RESPONSE_LEVEL_CITY: return DetailLevel.CITY; |