--- dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/AddressSearch.java 2015/03/24 09:36:05 2484 +++ dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/AddressSearch.java 2015/03/25 04:18:49 2495 @@ -27,15 +27,17 @@ import dk.daoas.daoadresseservice.beans.SearchResult; import dk.daoas.daoadresseservice.beans.SearchResult.Status; import dk.daoas.daoadresseservice.db.DatabaseLayer; +import dk.daoas.daoadresseservice.util.DeduplicateHelper; +import dk.daoas.daoadresseservice.util.NaturalOrderComparator; public class AddressSearch { - private Map> searchPostnrVejnavnGadeid; - private Map> searchGadeidentAdresser; + private Map> searchPostnrVejnavnGadeid; + private Map> searchGadeidentAdresser; private List
alleAdresser; - private Map helperCache; + private Map helperCache; private DataStatisticsBean stats = new DataStatisticsBean(); @@ -63,7 +65,7 @@ String helperSearchKey = ""; try { - request.postnr = Integer.parseInt(postnrStr); + request.postnr = Short.parseShort(postnrStr); } catch (Exception E) { result.status = Status.ERROR_UNKNOWN_POSTAL; return result; @@ -100,7 +102,7 @@ return result; } - Long gadeident = request.streetNames.get(request.vasketVejnavn); + Integer gadeident = request.streetNames.get(request.vasketVejnavn); if ( gadeident == null) { @@ -176,12 +178,12 @@ return result; } - private Long helperWrapper(String vej, Map postnrVeje, String helperSearchKey) { + private Integer helperWrapper(String vej, Map postnrVeje, String helperSearchKey) { if (vej == null) return null; String vejVasket = AddressUtils.vaskVejnavn( vej ); - Long gadeident = postnrVeje.get(vejVasket); + Integer gadeident = postnrVeje.get(vejVasket); if (gadeident != null) { helperCache.put(helperSearchKey, gadeident); @@ -190,16 +192,16 @@ } - public Map getStretsByPostal(int zip) { + public Map getStretsByPostal(int zip) { return searchPostnrVejnavnGadeid.get(zip); } public void buildSearchStructures() throws SQLException{ - searchPostnrVejnavnGadeid = new HashMap>(); - searchGadeidentAdresser = new HashMap>(); - helperCache = new ConcurrentHashMap(); + searchPostnrVejnavnGadeid = new HashMap>(); + searchGadeidentAdresser = new HashMap>(); + helperCache = new ConcurrentHashMap(); long start1 = System.currentTimeMillis(); System.out.println("Build -- stage 1"); @@ -209,19 +211,22 @@ /* Mapper mellem db Row ID og adresse noden */ Map idAddressMap = new HashMap( alleAdresser.size() ); + DeduplicateHelper aliasHelper = new DeduplicateHelper(); + DeduplicateHelper husnrHelper = new DeduplicateHelper(); for (Address a : alleAdresser) { idAddressMap.put(a.id, a); - Map postnrVeje = searchPostnrVejnavnGadeid.get(a.postnr); + Map postnrVeje = searchPostnrVejnavnGadeid.get(a.postnr); if (postnrVeje == null) { - postnrVeje = new ConcurrentHashMap(); + postnrVeje = new ConcurrentHashMap(); searchPostnrVejnavnGadeid.put(a.postnr, postnrVeje); } + String vasketVejnavn = AddressUtils.vaskVejnavn(a.vejnavn); - Long gadeident = postnrVeje.get(vasketVejnavn); + Integer gadeident = postnrVeje.get(vasketVejnavn); if (gadeident == null) { //postnrVeje.put(vasketVejnavn, a.gadeid); @@ -230,6 +235,8 @@ Set aliaser = findVejAliaser(a.vejnavn); for(String alias : aliaser) { String vasketAlias = AddressUtils.vaskVejnavn(alias); + vasketAlias = aliasHelper.getInstance(vasketAlias); + postnrVeje.put(vasketAlias, gadeident); } } @@ -240,6 +247,7 @@ searchGadeidentAdresser.put(gadeident, gade); } String husnrSearch = "" + a.husnr + a.husnrbogstav; + husnrSearch = husnrHelper.getInstance(husnrSearch); gade.put(husnrSearch, a); } @@ -251,7 +259,7 @@ int vaskCount = 0; List aliasList = DatabaseLayer.getAliasList(); for (AliasBean alias : aliasList) { - Map postnrVeje = searchPostnrVejnavnGadeid.get(alias.postnr); + Map postnrVeje = searchPostnrVejnavnGadeid.get(alias.postnr); if (postnrVeje == null) { //Burde ikke kunne ske - men better safe than sorry @@ -261,13 +269,13 @@ String vasketVej = AddressUtils.vaskVejnavn(alias.vejnavn); String vasketAlias = AddressUtils.vaskVejnavn(alias.aliasVejnavn); - Long gadeident = postnrVeje.get(vasketVej); + Integer gadeident = postnrVeje.get(vasketVej); if (gadeident == null) { //Kender ikke den oprindelige vej continue; } - Long aliasIdent = postnrVeje.get(vasketAlias); + Integer aliasIdent = postnrVeje.get(vasketAlias); if (aliasIdent == null) { //Vi kender ikke denne variant af vejnavnet postnrVeje.put(vasketAlias, gadeident); @@ -283,6 +291,9 @@ System.out.println("Build, stage2 elapsed: " + (start3-start2) ); System.out.println("Build -- stage 3 udvidet dækning"); + DeduplicateHelper ruteHelper = new DeduplicateHelper(); + DeduplicateHelper korelisteHelper = new DeduplicateHelper(); + List extDao = DatabaseLayer.getExtendedAdresslist(); for (ExtendedBean eb : extDao) { @@ -307,7 +318,9 @@ boolean covered = false; if (targetAddress.distributor.equals("DAO")) { - orgAddress.rute = calculateExtendedDaoRoute(eb,orgAddress,targetAddress); + orgAddress.rute = calculateExtendedDaoRoute(eb,orgAddress,targetAddress); + orgAddress.rute = ruteHelper.getInstance(orgAddress.rute); + if (orgAddress.rute != null) { orgAddress.koreliste = targetAddress.koreliste; covered = true; @@ -315,7 +328,9 @@ } if (targetAddress.distributor.equals("BK")) { - orgAddress.koreliste = calculateExtendedBkKoreliste(eb,orgAddress,targetAddress); + orgAddress.koreliste = calculateExtendedBkKoreliste(eb,orgAddress,targetAddress); + orgAddress.koreliste = korelisteHelper.getInstance(orgAddress.koreliste); + if (orgAddress.koreliste != null) { orgAddress.rute = targetAddress.rute; covered = true; @@ -342,7 +357,7 @@ System.out.println("Build, stage3 elapsed: " + (start4-start3) ); System.out.println("Build -- stage 4 - 100pct"); - Map hundredePct = DatabaseLayer.get100PctList(); + Map hundredePct = DatabaseLayer.get100PctList(); for (Address addr : alleAdresser) { if (addr.daekningsType != DaekningsType.DAEKNING_IKKEDAEKKET) { continue; @@ -606,7 +621,7 @@ //danske tegn 2 aliasSet.add( vVejnavn.replace("æ", "ae").replace("ø", "oe") ); aliasSet.add( vVejnavn.replace("æ", "ae").replace("å", "aa") ); - aliasSet.add( vVejnavn.replace("ø", "ae").replace("å", "aa") ); + aliasSet.add( vVejnavn.replace("ø", "oe").replace("å", "aa") ); aliasSet.add( vVejnavn.replace("ae", "æ").replace("oe","ø") ); aliasSet.add( vVejnavn.replace("ae", "æ").replace("aa","å") ); aliasSet.add( vVejnavn.replace("oe", "ø").replace("aa", "å") ); @@ -619,27 +634,31 @@ return aliasSet; } - public Set getPostnumre() { - return new TreeSet( searchPostnrVejnavnGadeid.keySet() ); + public Set getPostnumre() { + return new TreeSet( searchPostnrVejnavnGadeid.keySet() ); } - public Set> getVejnavne(int postnr) { - Map map = searchPostnrVejnavnGadeid.get(postnr); - TreeMap newMap = new TreeMap(); - for (Entry entry : map.entrySet() ) { + public Set> getVejnavne(short postnr) { + Map map = searchPostnrVejnavnGadeid.get(postnr); + TreeMap newMap = new TreeMap(); + for (Entry entry : map.entrySet() ) { newMap.put(entry.getKey(), entry.getValue()); } return newMap.entrySet(); } - public Set getHusnumre(long gadeid) { + public Set getHusnumre(int gadeid) { Map gade = searchGadeidentAdresser.get(gadeid); - return new TreeSet( gade.keySet() ); + + Set set = new TreeSet( new NaturalOrderComparator() ); + set.addAll( gade.keySet() ); + + return set; } - public Address getAdresse(long gadeid, String husnr) { + public Address getAdresse(int gadeid, String husnr) { Map gade = searchGadeidentAdresser.get(gadeid); return gade.get(husnr);