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 { Map> searchPostnrVejnavnGadeid; Map> searchGadeidentAdresser; List
alleAdresser; /* Mapper mellem db Row ID og adresse noden */ Map idAddressMap; 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) { 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); } } }