--- dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/AddressManager.java 2016/01/26 16:50:22 2850 +++ dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/AddressManager.java 2016/02/01 07:15:15 2894 @@ -33,7 +33,9 @@ Map> > searchStructure; - ArrayList afvisteEntries = new ArrayList(); + ArrayList rejectedEntries = new ArrayList(); + + Map unknownStreets = new TreeMap(); Map dbkBaneMap = new TreeMap(); @@ -206,6 +208,7 @@ DatabaseLayerImplementation db = new DatabaseLayerImplementation(); db.updateAddresses(updates); + db.saveNewAddresses(inserts); @@ -224,6 +227,10 @@ private void visitSingle(AddressSourceEntry entry) { TreeMap> gade = searchStructure.get( entry.gadeid ); if (gade == null) { + if (! unknownStreets.containsKey(entry.gadeid)) { + unknownStreets.put(entry.gadeid, entry.vejnavn); + } + createFromEntry(entry); // if we get here there was no match - so we need to create it return; } @@ -233,21 +240,27 @@ createFromEntry(entry); // if we get here there was no match - so we need to create it return; } - + boolean found = false; for (Address addr : litraList) { if (addr.husnrbogstav.equals(entry.litra) ) { updateAddress(addr, entry); - return; //Done for now - no need to look at the rest of the list + found = true; // 1 visit should be enough but as long as there's duplicates on gadeid+husnr+litra we will visit them all + //when the issue with duplicates is resolved this should be reverted to a return or break } } - - createFromEntry(entry); // if we get here there was no match - so we need to create it + if (found == false) { + createFromEntry(entry); // if we get here there was no match - so we need to create it + } } private void visitRange(AddressSourceEntry entry) { TreeMap> gade = searchStructure.get( entry.gadeid ); if (gade == null) { + if (! unknownStreets.containsKey(entry.gadeid)) { + unknownStreets.put(entry.gadeid, entry.vejnavn); + } + System.out.println("[Range] Ukendt gadeID " + entry); return; } @@ -287,7 +300,7 @@ private void updateAddress(Address addr, AddressSourceEntry entry) { if ( addr.distributor != null && addr.distributor.equals(entry.distributor) == false) { - afvisteEntries.add(entry); + rejectedEntries.add(entry); System.out.println("Afviser " + entry); return; } @@ -444,7 +457,7 @@ - addr.visited = true; + //addr.visited = true; if (addr.state == AddressState.NOT_CHANGED) { if (addr.distributor == null) { addr.state = AddressState.OPENED; @@ -472,6 +485,22 @@ if (entry.kommunekode == 0 || entry.vejkode == 0) { return; } + if (entry.kommunekode < 100) { + return; + } + + if (entry.gadeid == 0) { + return; + } + + String gadeidStr = Integer.toString(entry.gadeid); + if (gadeidStr.length() != 9) { + return; + } + if (Short.parseShort(gadeidStr.substring(0, 4)) != entry.postnr) { + return; //gadeid / postnr mismatch + } + System.out.println("Opretter adresse ud fra " + entry); @@ -487,7 +516,7 @@ a.husnr = entry.husnr; a.husnrbogstav = entry.litra; a.postnr = entry.postnr; - a.visited = true; + //a.visited = true; if (entry.ugedage.mandag) { a.ruteMandag = entry.rute; @@ -586,7 +615,9 @@ break; case "NS": bane = 204; - break; + break; + default: + throw new RuntimeException("Ukendt distributor" + a.distributor); //Silence findBugs } if (bane == null) { @@ -605,10 +636,14 @@ return Collections.unmodifiableList(addressList); } + public Map getUnknownStreets() { + return Collections.unmodifiableMap( unknownStreets ); + } + - public int getAfvistAntal() { - return afvisteEntries.size(); + public int getRejectedCount() { + return rejectedEntries.size(); } }