--- dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/AddressManager.java 2016/02/04 08:32:08 2911 +++ dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/coveragefileupload/AddressManager.java 2016/07/29 09:16:03 3084 @@ -1,4 +1,4 @@ -package dk.daoas.adressevedligehold; +package dk.daoas.adressevedligehold.coveragefileupload; import java.sql.SQLException; import java.util.ArrayList; @@ -11,26 +11,24 @@ import org.apache.commons.lang3.StringUtils; -import dk.daoas.adressevedligehold.AddressSourceEntry.EntryType; import dk.daoas.adressevedligehold.beans.Address; import dk.daoas.adressevedligehold.beans.Address.AddressState; -import dk.daoas.adressevedligehold.db.DatabaseLayerImplementation; +import dk.daoas.adressevedligehold.coveragefileupload.AddressSourceEntry.EntryType; +import dk.daoas.adressevedligehold.db.DatabaseCoverageUpdate; import dk.daoas.adressevedligehold.tasks.TaskLogger; import dk.daoas.adressevedligehold.util.DeduplicateHelper; import dk.daoas.adressevedligehold.util.MiscUtils; import dk.daoas.adressevedligehold.util.TimingHelper; /* - * TODO: håndtering af entry dupletter ! (+ rapportering af dem) - - - + * */ public class AddressManager { private TaskLogger logger = TaskLogger.getInstance(); + private int duplicateCount; List
addressList; @@ -43,7 +41,7 @@ Map dbkBaneMap = new TreeMap(); public AddressManager() throws SQLException { - DatabaseLayerImplementation db = new DatabaseLayerImplementation(); + DatabaseCoverageUpdate db = new DatabaseCoverageUpdate(); searchStructure = new TreeMap> >(); @@ -91,8 +89,12 @@ } - - public void closeUnvisitedAddresses(String distributor, EntryUgedage ugedage) { + + @SuppressWarnings("PMD.CollapsibleIfStatements") + public int closeUnvisitedAddresses(String distributor, EntryUgedage ugedage) { + + int totalClosed = 0; + for (Address addr : addressList) { if (addr.distributor == null) continue; @@ -167,9 +169,17 @@ if (addr.state == AddressState.NOT_CHANGED && closedCount>0) { addr.state = AddressState.CLOSED; } + + if (closedCount>0) { + totalClosed++; + } } + + return totalClosed; } + + public void dumpChanged() { int count = 0; for (Address addr : addressList) { @@ -192,7 +202,7 @@ } } - public void writeBackChanges() { + public void writeBackChanges() throws Exception{ logger.info("Writing back changes"); TimingHelper timer = new TimingHelper(); @@ -208,7 +218,7 @@ } } - DatabaseLayerImplementation db = new DatabaseLayerImplementation(); + DatabaseCoverageUpdate db = new DatabaseCoverageUpdate(); db.updateAddresses(updates); db.saveNewAddresses(inserts); @@ -230,9 +240,10 @@ private void visitSingle(AddressSourceEntry entry) { TreeMap> gade = searchStructure.get( entry.gadeid ); if (gade == null) { + /* No need to register unknown streets, since we create all entries that we can 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; @@ -256,6 +267,7 @@ } } + @SuppressWarnings("PMD.CollapsibleIfStatements") private void visitRange(AddressSourceEntry entry) { TreeMap> gade = searchStructure.get( entry.gadeid ); @@ -326,7 +338,9 @@ } } } else { + duplicateCount++; logger.info( "Double visit monday " + addr); + return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters } } @@ -348,7 +362,9 @@ } } } else { + duplicateCount++; logger.info( "Double visit tuesday " + addr); + return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters } } @@ -368,7 +384,9 @@ } } } else { + duplicateCount++; logger.info( "Double visit wednesday " + addr); + return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters } } @@ -390,7 +408,9 @@ } } } else { + duplicateCount++; logger.info( "Double visit thursday " + addr); + return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters } } @@ -411,7 +431,9 @@ } } } else { + duplicateCount++; logger.info( "Double visit friday " + addr); + return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters } } @@ -433,7 +455,9 @@ } } } else { + duplicateCount++; logger.info( "Double visit saturday " + addr); + return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters } } @@ -454,7 +478,9 @@ } } } else { + duplicateCount++; logger.info( "Double visit sunday " + addr); + return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters } } @@ -486,9 +512,21 @@ return; } - if (entry.husnr == 999) { + if (entry.husnr == 999 || entry.husnr == 998) { //frasorter de to højest gyldige husnr - det er typisk special adresser return; } + + if (entry.litra.length() > 1) { //litra må kun være på 1 tegn + return; + } + if (entry.litra.length() == 1) { + char litra = entry.litra.charAt(0); + if ( Character.isLetter(litra) == false ) { + return; + } + + } + if (entry.kommunekode == 0 || entry.vejkode == 0) { return; } @@ -496,10 +534,14 @@ return; } - if (entry.gadeid == 0) { + if (entry.vejkode > 9999) { return; } + if (entry.gadeid == 0) { + return; + } + String gadeidStr = Integer.toString(entry.gadeid); if (gadeidStr.length() != 9) { return; @@ -512,68 +554,38 @@ logger.info("Opretter adresse ud fra " + entry); - Address a = new Address(); - a.state = AddressState.CREATED; + Address addr = new Address(); + addr.state = AddressState.CREATED; - a.distributor = entry.distributor; - a.gadeid = entry.gadeid; - a.kommunekode = entry.kommunekode; - a.vejkode = entry.vejkode; - a.vejnavn = entry.vejnavn; - a.husnr = entry.husnr; - a.husnrbogstav = entry.litra; - a.postnr = entry.postnr; - //a.visited = true; + addr.distributor = entry.distributor; + addr.gadeid = entry.gadeid; + addr.kommunekode = entry.kommunekode; + addr.vejkode = entry.vejkode; + addr.vejnavn = entry.vejnavn; + addr.husnr = entry.husnr; + addr.husnrbogstav = entry.litra; + addr.postnr = entry.postnr; - if (entry.ugedage.mandag) { - a.ruteMandag = entry.rute; - a.korelisteMandag = entry.koreliste; - } - if (entry.ugedage.tirsdag) { - a.ruteTirsdag = entry.rute; - a.korelisteTirsdag = entry.koreliste; - } - if (entry.ugedage.onsdag) { - a.ruteOnsdag = entry.rute; - a.korelisteOnsdag = entry.koreliste; - } - if (entry.ugedage.torsdag) { - a.ruteTorsdag = entry.rute; - a.korelisteTorsdag = entry.koreliste; - } - if (entry.ugedage.fredag) { - a.ruteFredag = entry.rute; - a.korelisteFredag = entry.koreliste; - } - if (entry.ugedage.lordag) { - a.ruteLordag = entry.rute; - a.korelisteLordag = entry.koreliste; - } - if (entry.ugedage.sondag) { - a.ruteSondag = entry.rute; - a.korelisteLordag = entry.koreliste; - } - - updateDbkBane(a); - - // Nu er det nye adresse object oprettet - nu skal det gemmes i søge strukturen og totallisten + updateAddress(addr, entry); - TreeMap> gade = searchStructure.get( a.gadeid ); + + // Nu er det nye adresse object oprettet - nu skal det gemmes i søge strukturen og totallisten + TreeMap> gade = searchStructure.get( addr.gadeid ); if (gade == null) { gade = new TreeMap>(); - searchStructure.put(a.gadeid, gade); + searchStructure.put(addr.gadeid, gade); } - ArrayList
litraList = gade.get(a.husnr); + ArrayList
litraList = gade.get(addr.husnr); if (litraList == null) { litraList = new ArrayList
(); - gade.put(a.husnr, litraList); + gade.put(addr.husnr, litraList); } - litraList.add(a); - addressList.add(a); + litraList.add(addr); + addressList.add(addr); } @@ -597,8 +609,8 @@ private void updateDbkBane(Address a) { List daoBane205 = Arrays.asList( new Short[] {7,10,11,12,12,14,15,16,18,19,20} ); - - + + Short bane = null; switch (a.distributor) { @@ -607,13 +619,17 @@ break; case "DAO": String koreliste = MiscUtils.firstNonNull(a.korelisteMandag,a.korelisteLordag, a.korelisteSondag); //DAO har kun 3 dækningstyper - short first2 = Short.parseShort( koreliste.substring(0,2) ); - if ( daoBane205.contains(first2) ) { - bane = 205; - } else if (first2 >= 24 && first2<=30) { - bane = 201; - } else { - bane = 202; + try { + short first2 = Short.parseShort( koreliste.substring(0,2) ); + if ( daoBane205.contains(first2) ) { + bane = 205; + } else if (first2 >= 24 && first2<=30) { + bane = 201; + } else { + bane = 202; + } + } catch (NumberFormatException e) { + throw new RuntimeException("Error parsing koreliste '" + koreliste + "' for " + a); } break; @@ -647,7 +663,9 @@ return Collections.unmodifiableMap( unknownStreets ); } - + public int getDuplicateCount() { + return duplicateCount; + } public int getRejectedCount() { return rejectedEntries.size();