/[projects]/dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/coveragefileupload/AddressManager.java
ViewVC logotype

Diff of /dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/coveragefileupload/AddressManager.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/AddressManager.java revision 2904 by torben, Wed Feb 3 18:51:36 2016 UTC dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/coveragefileupload/AddressManager.java revision 3053 by torben, Thu Jun 23 08:19:48 2016 UTC
# Line 1  Line 1 
1  package dk.daoas.adressevedligehold;  package dk.daoas.adressevedligehold.coveragefileupload;
2    
3  import java.sql.SQLException;  import java.sql.SQLException;
4  import java.util.ArrayList;  import java.util.ArrayList;
# Line 11  import java.util.TreeMap; Line 11  import java.util.TreeMap;
11    
12  import org.apache.commons.lang3.StringUtils;  import org.apache.commons.lang3.StringUtils;
13    
 import dk.daoas.adressevedligehold.AddressSourceEntry.EntryType;  
14  import dk.daoas.adressevedligehold.beans.Address;  import dk.daoas.adressevedligehold.beans.Address;
15  import dk.daoas.adressevedligehold.beans.Address.AddressState;  import dk.daoas.adressevedligehold.beans.Address.AddressState;
16  import dk.daoas.adressevedligehold.db.DatabaseLayerImplementation;  import dk.daoas.adressevedligehold.coveragefileupload.AddressSourceEntry.EntryType;
17    import dk.daoas.adressevedligehold.db.DatabaseCoverageUpdate;
18  import dk.daoas.adressevedligehold.tasks.TaskLogger;  import dk.daoas.adressevedligehold.tasks.TaskLogger;
19  import dk.daoas.adressevedligehold.util.DeduplicateHelper;  import dk.daoas.adressevedligehold.util.DeduplicateHelper;
20  import dk.daoas.adressevedligehold.util.MiscUtils;  import dk.daoas.adressevedligehold.util.MiscUtils;
21  import dk.daoas.adressevedligehold.util.TimingHelper;  import dk.daoas.adressevedligehold.util.TimingHelper;
22    
23  /*  /*
24   * TODO: håndtering af entry dupletter ! (+ rapportering af dem)   *  
   
   
   
25   */   */
26    
27  public class AddressManager {  public class AddressManager {
28                    
29          private TaskLogger logger = TaskLogger.getInstance();          private TaskLogger logger = TaskLogger.getInstance();
30                    
31            private int duplicateCount;
32                    
33          List<Address> addressList;          List<Address> addressList;
34                    
# Line 43  public class AddressManager { Line 41  public class AddressManager {
41          Map<Short,Short> dbkBaneMap = new TreeMap<Short,Short>();          Map<Short,Short> dbkBaneMap = new TreeMap<Short,Short>();
42                    
43          public AddressManager() throws SQLException {          public AddressManager() throws SQLException {
44                  DatabaseLayerImplementation db = new DatabaseLayerImplementation();                  DatabaseCoverageUpdate db = new DatabaseCoverageUpdate();
45                                    
46                  searchStructure = new TreeMap<Integer, TreeMap<Short, ArrayList<Address>> >();                  searchStructure = new TreeMap<Integer, TreeMap<Short, ArrayList<Address>> >();
47                                    
# Line 91  public class AddressManager { Line 89  public class AddressManager {
89                                    
90                                    
91          }          }
92            
93            @SuppressWarnings("PMD.CollapsibleIfStatements")        
94          public void closeUnvisitedAddresses(String distributor, EntryUgedage ugedage) {          public void closeUnvisitedAddresses(String distributor, EntryUgedage ugedage) {
95                  for (Address addr : addressList) {                  for (Address addr : addressList) {
96                          if (addr.distributor == null)                          if (addr.distributor == null)
# Line 192  public class AddressManager { Line 191  public class AddressManager {
191                  }                  }
192          }          }
193                    
194          public void writeBackChanges() {          public void writeBackChanges() throws Exception{
195                  logger.info("Writing back changes");                  logger.info("Writing back changes");
196                  TimingHelper timer = new TimingHelper();                  TimingHelper timer = new TimingHelper();
197                                    
# Line 208  public class AddressManager { Line 207  public class AddressManager {
207                          }                          }
208                  }                  }
209                                    
210                  DatabaseLayerImplementation db = new DatabaseLayerImplementation();                  DatabaseCoverageUpdate db = new DatabaseCoverageUpdate();
211                                    
212                  db.updateAddresses(updates);                  db.updateAddresses(updates);
213                  db.saveNewAddresses(inserts);                  db.saveNewAddresses(inserts);
# Line 230  public class AddressManager { Line 229  public class AddressManager {
229          private void visitSingle(AddressSourceEntry entry) {          private void visitSingle(AddressSourceEntry entry) {
230                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );
231                  if (gade == null) {                  if (gade == null) {
232                            /* No need to register unknown streets, since we create all entries that we can
233                          if (! unknownStreets.containsKey(entry.gadeid)) {                          if (! unknownStreets.containsKey(entry.gadeid)) {
234                                  unknownStreets.put(entry.gadeid, entry.vejnavn);                                                                  unknownStreets.put(entry.gadeid, entry.vejnavn);                                
235                          }                          }*/
236                                                    
237                          createFromEntry(entry); // if we get here there was no match - so we need to create it                          createFromEntry(entry); // if we get here there was no match - so we need to create it
238                          return;                          return;
# Line 256  public class AddressManager { Line 256  public class AddressManager {
256                  }                  }
257          }          }
258                    
259            @SuppressWarnings("PMD.CollapsibleIfStatements")        
260          private void visitRange(AddressSourceEntry entry) {          private void visitRange(AddressSourceEntry entry) {
261                                    
262                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );
# Line 326  public class AddressManager { Line 327  public class AddressManager {
327                                          }                                          }
328                                  }                                                                }                              
329                          } else {                          } else {
330                                    duplicateCount++;
331                                  logger.info( "Double visit monday " + addr);                                  logger.info( "Double visit monday " + addr);
332                                    return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters
333                          }                          }
334    
335                  }                  }
# Line 348  public class AddressManager { Line 351  public class AddressManager {
351                                          }                                          }
352                                  }                                  }
353                          } else {                          } else {
354                                    duplicateCount++;
355                                  logger.info( "Double visit tuesday " + addr);                                  logger.info( "Double visit tuesday " + addr);
356                                    return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters
357                          }                                                        }                              
358                  }                  }
359    
# Line 368  public class AddressManager { Line 373  public class AddressManager {
373                                          }                                          }
374                                  }                                  }
375                          } else {                          } else {
376                                    duplicateCount++;
377                                  logger.info( "Double visit wednesday " + addr);                                  logger.info( "Double visit wednesday " + addr);
378                                    return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters
379                          }                                        }              
380                  }                  }
381    
# Line 390  public class AddressManager { Line 397  public class AddressManager {
397                                          }                                          }
398                                  }                                  }
399                          } else {                          } else {
400                                    duplicateCount++;
401                                  logger.info( "Double visit thursday " + addr);                                  logger.info( "Double visit thursday " + addr);
402                                    return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters
403                          }                                                                }                                      
404                  }                  }
405    
# Line 411  public class AddressManager { Line 420  public class AddressManager {
420                                          }                                          }
421                                  }                                  }
422                          } else {                          } else {
423                                    duplicateCount++;
424                                  logger.info( "Double visit friday " + addr);                                  logger.info( "Double visit friday " + addr);
425                                    return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters
426                          }                                }      
427                  }                  }
428    
# Line 433  public class AddressManager { Line 444  public class AddressManager {
444                                          }                                          }
445                                  }                                  }
446                          } else {                          } else {
447                                    duplicateCount++;
448                                  logger.info( "Double visit saturday " + addr);                                  logger.info( "Double visit saturday " + addr);
449                                    return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters
450                          }                                                                }                                      
451                  }                  }
452    
# Line 454  public class AddressManager { Line 467  public class AddressManager {
467                                          }                                          }
468                                  }                                  }
469                          } else {                          } else {
470                                    duplicateCount++;
471                                  logger.info( "Double visit sunday " + addr);                                  logger.info( "Double visit sunday " + addr);
472                                    return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters
473                          }                                                                }                                      
474                  }                  }
475                                    
# Line 482  public class AddressManager { Line 497  public class AddressManager {
497                    
498                    
499          private void createFromEntry(AddressSourceEntry entry) {          private void createFromEntry(AddressSourceEntry entry) {
500                  if (entry.husnr == 999) {                  if (entry.husnr >= 1000) { //husnumre i DK må kun være på 3 cifre
501                            return;
502                    }
503                    
504                    if (entry.husnr == 999 || entry.husnr == 998) { //frasorter de to højest gyldige husnr - det er typisk special adresser
505                            return;
506                    }
507                    
508                    if (entry.litra.length() > 1) { //litra må kun være på 1 tegn
509                          return;                          return;
510                  }                  }
511                    if (entry.litra.length() == 1) {
512                            char litra = entry.litra.charAt(0);
513                            if ( Character.isLetter(litra) == false ) {
514                                    return;
515                            }
516                            
517                    }
518                    
519                  if (entry.kommunekode == 0 || entry.vejkode == 0) {                  if (entry.kommunekode == 0 || entry.vejkode == 0) {
520                          return;                          return;
521                  }                  }
# Line 492  public class AddressManager { Line 523  public class AddressManager {
523                          return;                          return;
524                  }                  }
525                                    
526                  if (entry.gadeid == 0) {                  if (entry.vejkode > 9999) {
527                          return;                          return;
528                  }                  }
529                                    
530                    if (entry.gadeid == 0) {
531                            return;
532                    }
533                                    
534                  String gadeidStr = Integer.toString(entry.gadeid);                  String gadeidStr = Integer.toString(entry.gadeid);
535                  if (gadeidStr.length() != 9) {                  if (gadeidStr.length() != 9) {
536                          return;                          return;
# Line 508  public class AddressManager { Line 543  public class AddressManager {
543                                    
544                  logger.info("Opretter adresse ud fra " + entry);                  logger.info("Opretter adresse ud fra " + entry);
545                                    
546                  Address a = new Address();                  Address addr = new Address();
547                  a.state = AddressState.CREATED;                  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;  
                   
                 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;  
                 }                
548                                    
549                  updateDbkBane(a);                  addr.distributor = entry.distributor;
550                    addr.gadeid = entry.gadeid;
551                    addr.kommunekode = entry.kommunekode;
552                    addr.vejkode = entry.vejkode;
553                    addr.vejnavn = entry.vejnavn;
554                    addr.husnr = entry.husnr;
555                    addr.husnrbogstav = entry.litra;
556                    addr.postnr = entry.postnr;
557                                    
                 // Nu er det nye adresse object oprettet - nu skal det gemmes i søge strukturen og totallisten  
558                                    
559                    updateAddress(addr, entry);
560    
561                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( a.gadeid );                  
562                    // Nu er det nye adresse object oprettet - nu skal det gemmes i søge strukturen og totallisten        
563                    TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( addr.gadeid );
564                                    
565                  if (gade == null) {                  if (gade == null) {
566                          gade = new TreeMap<Short,ArrayList<Address>>();                          gade = new TreeMap<Short,ArrayList<Address>>();
567                          searchStructure.put(a.gadeid, gade);                          searchStructure.put(addr.gadeid, gade);
568                  }                  }
569                                    
570                  ArrayList<Address> litraList = gade.get(a.husnr);                  ArrayList<Address> litraList = gade.get(addr.husnr);
571                  if (litraList == null) {                  if (litraList == null) {
572                          litraList = new ArrayList<Address>();                          litraList = new ArrayList<Address>();
573                          gade.put(a.husnr, litraList);                          gade.put(addr.husnr, litraList);
574                  }                  }
575                                    
576                  litraList.add(a);                  litraList.add(addr);
577                  addressList.add(a);                  addressList.add(addr);
578                                                                    
579          }          }
580                    
# Line 593  public class AddressManager { Line 598  public class AddressManager {
598                    
599          private void updateDbkBane(Address a) {          private void updateDbkBane(Address a) {
600                  List<Short> daoBane205 = Arrays.asList( new Short[] {7,10,11,12,12,14,15,16,18,19,20} );                  List<Short> daoBane205 = Arrays.asList( new Short[] {7,10,11,12,12,14,15,16,18,19,20} );
601                    
602                    
603                  Short bane = null;                  Short bane = null;
604                                    
605                  switch (a.distributor) {                  switch (a.distributor) {
# Line 603  public class AddressManager { Line 608  public class AddressManager {
608                          break;                          break;
609                  case "DAO":                  case "DAO":
610                          String koreliste = MiscUtils.firstNonNull(a.korelisteMandag,a.korelisteLordag, a.korelisteSondag); //DAO har kun 3 dækningstyper                          String koreliste = MiscUtils.firstNonNull(a.korelisteMandag,a.korelisteLordag, a.korelisteSondag); //DAO har kun 3 dækningstyper
611                          short first2 = Short.parseShort( koreliste.substring(0,2) );                          try {
612                          if ( daoBane205.contains(first2) ) {                                  short first2 = Short.parseShort( koreliste.substring(0,2) );
613                                  bane = 205;                                  if ( daoBane205.contains(first2) ) {
614                          } else if (first2 >= 24 && first2<=30) {                                          bane = 205;
615                                  bane = 201;                                  } else if (first2 >= 24 && first2<=30) {
616                          } else {                                          bane = 201;
617                                  bane = 202;                                  } else {
618                                            bane = 202;
619                                    }
620                            } catch (NumberFormatException e) {
621                                    throw new RuntimeException("Error parsing koreliste '" + koreliste + "' for " + a);
622                          }                          }
623                                                                    
624                          break;                                            break;                  
# Line 643  public class AddressManager { Line 652  public class AddressManager {
652                  return Collections.unmodifiableMap( unknownStreets );                  return Collections.unmodifiableMap( unknownStreets );
653          }          }
654                    
655                    public int getDuplicateCount() {
656                    return duplicateCount;
657            }
658                    
659          public int getRejectedCount() {          public int getRejectedCount() {
660                  return rejectedEntries.size();                  return rejectedEntries.size();

Legend:
Removed from v.2904  
changed lines
  Added in v.3053

  ViewVC Help
Powered by ViewVC 1.1.20