--- dao/DaoAdresseService/src/dk/daoas/daoadresseservice/AdressSearch.java 2015/02/13 07:36:49 2273 +++ dao/DaoAdresseService/src/dk/daoas/daoadresseservice/AdressSearch.java 2015/02/13 11:48:23 2274 @@ -1,21 +1,99 @@ package dk.daoas.daoadresseservice; +import java.sql.SQLException; import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import dk.daoas.daoadresseservice.AddressUtils.SplitResult; +import dk.daoas.daoadresseservice.SearchResult.Status; +import dk.daoas.daoadresseservice.db.DatabaseLayer; public class AdressSearch { - HashMap> searchPostnrVejnavnDavid = new HashMap>(); + Map> searchPostnrVejnavnGadeid; + Map> searchGadeidentAdresser; + + List
alleAdresser; + + /* Mapper mellem db Row ID og adresse noden */ + Map idAddressMap; - public void search(int postnr, String adresse) throws SearchException { - HashMap postnrVeje = searchPostnrVejnavnDavid.get(postnr); + public SearchResult search(String postnrStr, String adresse) { + int postnr=0; + + try { + postnr = Integer.parseInt(postnrStr); + } catch (Exception E) { + return new SearchResult(Status.ERROR_UNKNOWN_POSTAL); + } + + Map postnrVeje = searchPostnrVejnavnGadeid.get(postnr); if (postnrVeje == null) { - throw new SearchException("Ukendt postnr"); + return new SearchResult(Status.ERROR_UNKNOWN_POSTAL); } + SplitResult split = AddressUtils.splitAdresse(adresse); + String vasketVejnavn = AddressUtils.vaskVejnavn( split.vej ); + + if (split.husnr.length() == 0) { + return new SearchResult(Status.ERROR_MISSING_HOUSENUMBER); + } + + Long gadeident = postnrVeje.get(vasketVejnavn); + if (gadeident == null) { + return new SearchResult(Status.ERROR_UNKNOWN_STREETNAME); + } + + Map gade = searchGadeidentAdresser.get(gadeident); //Denne søgning må ikke fejle + String husnrSearch = "" + split.husnr + split.litra; + Address addr = gade.get(husnrSearch); + if (addr == null) { + return new SearchResult(Status.ERROR_UNKNOWN_ADDRESSPOINT); + } + + + return new SearchResult(addr); + } + + + public void buildSearchStructures() throws SQLException{ + searchPostnrVejnavnGadeid = new HashMap>(); + searchGadeidentAdresser = new HashMap>(); + idAddressMap = new HashMap(); + + alleAdresser = DatabaseLayer.getAllAdresses(); + for (Address a : alleAdresser) { + idAddressMap.put(a.id, a); + + Map postnrVeje = searchPostnrVejnavnGadeid.get(a.postnr); + + if (postnrVeje == null) { + postnrVeje = new ConcurrentHashMap(); + searchPostnrVejnavnGadeid.put(a.postnr, postnrVeje); + } + + Long gadeident = postnrVeje.get(a.vasketVejnavn); + if (gadeident == null) { + postnrVeje.put(a.vasketVejnavn, a.gadeid); + } + + Map gade = searchGadeidentAdresser.get(a.gadeid); + if (gade == null) { + gade = new HashMap(); + searchGadeidentAdresser.put(a.gadeid, gade); + } + String husnrSearch = "" + a.husnr + a.husnrbogstav; + gade.put(husnrSearch, a); + + + } + } }