/[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 2924 by torben, Fri Feb 5 08:01:18 2016 UTC dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/coveragefileupload/AddressManager.java revision 3121 by torben, Fri Sep 30 12:32:14 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 {
# Line 41  public class AddressManager { Line 38  public class AddressManager {
38                    
39          Map<Integer,String> unknownStreets = new TreeMap<Integer, String>();          Map<Integer,String> unknownStreets = new TreeMap<Integer, String>();
40                    
41          Map<Short,Short> dbkBaneMap = new TreeMap<Short,Short>();          Map<Short,String> dbkBaneMap = new TreeMap<Short,String>();
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 62  public class AddressManager { Line 59  public class AddressManager {
59                          Short husnr = shortHelper.getInstance( a.husnr );                          Short husnr = shortHelper.getInstance( a.husnr );
60                          TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( gadeid );                          TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( gadeid );
61                                                    
62                          if (a.dbkBane > 0 && a.postnr<=4999) {                          if (a.dbkBane != null && a.dbkBane.length() > 0 && a.postnr<=4999) {
63                                  Short bane = dbkBaneMap.get(a.postnr);                                  String bane = dbkBaneMap.get(a.postnr);
64                                  if (bane == null) {                                  if (bane == null) {
65                                          dbkBaneMap.put(a.postnr, a.dbkBane);                                          dbkBaneMap.put(a.postnr, a.dbkBane);
66                                  }                                  }
# Line 92  public class AddressManager { Line 89  public class AddressManager {
89                                    
90                                    
91          }          }
92            
93          public void closeUnvisitedAddresses(String distributor, EntryUgedage ugedage) {          @SuppressWarnings("PMD.CollapsibleIfStatements")        
94            public int closeUnvisitedAddresses(String distributor, EntryUgedage ugedage) {
95                    
96                    int totalClosed = 0;
97                    
98                  for (Address addr : addressList) {                  for (Address addr : addressList) {
99                          if (addr.distributor == null)                          if (addr.distributor == null)
100                                  continue;                                  continue;
# Line 168  public class AddressManager { Line 169  public class AddressManager {
169                          if (addr.state == AddressState.NOT_CHANGED && closedCount>0) {                          if (addr.state == AddressState.NOT_CHANGED && closedCount>0) {
170                                  addr.state = AddressState.CLOSED;                                  addr.state = AddressState.CLOSED;
171                          }                          }
172                            
173                            if (closedCount>0) {
174                                    totalClosed++;
175                            }
176                                    
177                  }                  }
178                    
179                    return totalClosed;
180          }          }
181            
182            
183          public void dumpChanged() {          public void dumpChanged() {
184                  int count = 0;                  int count = 0;
185                  for (Address addr : addressList) {                  for (Address addr : addressList) {
# Line 193  public class AddressManager { Line 202  public class AddressManager {
202                  }                  }
203          }          }
204                    
205          public void writeBackChanges() {          public int writeBackChanges() throws Exception{
206                  logger.info("Writing back changes");                  logger.info("Writing back changes");
207                  TimingHelper timer = new TimingHelper();                  TimingHelper timer = new TimingHelper();
208                                    
# Line 209  public class AddressManager { Line 218  public class AddressManager {
218                          }                          }
219                  }                  }
220                                    
221                  DatabaseLayerImplementation db = new DatabaseLayerImplementation();                  DatabaseCoverageUpdate db = new DatabaseCoverageUpdate();
222                                    
223                  db.updateAddresses(updates);                  int writeCount = 0;
224                  db.saveNewAddresses(inserts);                  writeCount += db.updateAddresses(updates);
225                    writeCount += db.saveNewAddresses(inserts);
226    
227                                                    
                   
228                  logger.info("Writeback done: elapsed " + timer.getElapsed() + "ms.");                  logger.info("Writeback done: elapsed " + timer.getElapsed() + "ms.");
229                    
230                    return writeCount;
231          }          }
232                    
233                    
# Line 231  public class AddressManager { Line 242  public class AddressManager {
242          private void visitSingle(AddressSourceEntry entry) {          private void visitSingle(AddressSourceEntry entry) {
243                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );
244                  if (gade == null) {                  if (gade == null) {
245                            /* No need to register unknown streets, since we create all entries that we can
246                          if (! unknownStreets.containsKey(entry.gadeid)) {                          if (! unknownStreets.containsKey(entry.gadeid)) {
247                                  unknownStreets.put(entry.gadeid, entry.vejnavn);                                                                  unknownStreets.put(entry.gadeid, entry.vejnavn);                                
248                          }                          }*/
249                                                    
250                          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
251                          return;                          return;
# Line 257  public class AddressManager { Line 269  public class AddressManager {
269                  }                  }
270          }          }
271                    
272            @SuppressWarnings("PMD.CollapsibleIfStatements")        
273          private void visitRange(AddressSourceEntry entry) {          private void visitRange(AddressSourceEntry entry) {
274                                    
275                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );
# Line 501  public class AddressManager { Line 514  public class AddressManager {
514                          return;                          return;
515                  }                  }
516                                    
517                  if (entry.husnr == 999) {                  if (entry.husnr == 999 || entry.husnr == 998) { //frasorter de to højest gyldige husnr - det er typisk special adresser
518                          return;                          return;
519                  }                  }
520                                    
# Line 523  public class AddressManager { Line 536  public class AddressManager {
536                          return;                          return;
537                  }                  }
538                                    
539                    if (entry.vejkode > 9999) {
540                            return;
541                    }
542                    
543                  if (entry.gadeid == 0) {                  if (entry.gadeid == 0) {
544                          return;                          return;
545                  }                  }
# Line 539  public class AddressManager { Line 556  public class AddressManager {
556                                    
557                  logger.info("Opretter adresse ud fra " + entry);                  logger.info("Opretter adresse ud fra " + entry);
558                                    
559                  Address a = new Address();                  Address addr = new Address();
560                  a.state = AddressState.CREATED;                  addr.state = AddressState.CREATED;
561                                    
562                  a.distributor = entry.distributor;                  addr.distributor = entry.distributor;
563                  a.gadeid = entry.gadeid;                  addr.gadeid = entry.gadeid;
564                  a.kommunekode = entry.kommunekode;                  addr.kommunekode = entry.kommunekode;
565                  a.vejkode = entry.vejkode;                  addr.vejkode = entry.vejkode;
566                  a.vejnavn = entry.vejnavn;                  addr.vejnavn = entry.vejnavn;
567                  a.husnr = entry.husnr;                  addr.husnr = entry.husnr;
568                  a.husnrbogstav = entry.litra;                  addr.husnrbogstav = entry.litra;
569                  a.postnr = entry.postnr;                  addr.postnr = entry.postnr;
                 //a.visited = true;  
570                                    
                 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  
571                                    
572                    updateAddress(addr, entry);
573    
574                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( a.gadeid );                  
575                    // Nu er det nye adresse object oprettet - nu skal det gemmes i søge strukturen og totallisten        
576                    TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( addr.gadeid );
577                                    
578                  if (gade == null) {                  if (gade == null) {
579                          gade = new TreeMap<Short,ArrayList<Address>>();                          gade = new TreeMap<Short,ArrayList<Address>>();
580                          searchStructure.put(a.gadeid, gade);                          searchStructure.put(addr.gadeid, gade);
581                  }                  }
582                                    
583                  ArrayList<Address> litraList = gade.get(a.husnr);                  ArrayList<Address> litraList = gade.get(addr.husnr);
584                  if (litraList == null) {                  if (litraList == null) {
585                          litraList = new ArrayList<Address>();                          litraList = new ArrayList<Address>();
586                          gade.put(a.husnr, litraList);                          gade.put(addr.husnr, litraList);
587                  }                  }
588                                    
589                  litraList.add(a);                  litraList.add(addr);
590                  addressList.add(a);                  addressList.add(addr);
591                                                                    
592          }          }
593                    
# Line 624  public class AddressManager { Line 611  public class AddressManager {
611                    
612          private void updateDbkBane(Address a) {          private void updateDbkBane(Address a) {
613                  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} );
614                    
615                    
616                  Short bane = null;                  String bane = null;
617                                    
618                  switch (a.distributor) {                  switch (a.distributor) {
619                  case "BK":                                        case "BK":                      
# Line 634  public class AddressManager { Line 621  public class AddressManager {
621                          break;                          break;
622                  case "DAO":                  case "DAO":
623                          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
624                          short first2 = Short.parseShort( koreliste.substring(0,2) );                          try {
625                          if ( daoBane205.contains(first2) ) {                                  short first2 = Short.parseShort( koreliste.substring(0,2) );                            
626                                  bane = 205;                                  if ( daoBane205.contains(first2) ) { //Brabrand == 205 == W2
627                          } else if (first2 >= 24 && first2<=30) {                                          bane = "W2";
628                                  bane = 201;                                  } else if (first2 >= 24 && first2<=30) { // DAO-Øvrig = 201 = W4
629                          } else {                                          bane = "W4";
630                                  bane = 202;                                  } else { // DAO-Syd= 202
631                                            bane = "W3";
632                                    }
633                            } catch (NumberFormatException e) {
634                                    throw new RuntimeException("Error parsing koreliste '" + koreliste + "' for " + a);
635                          }                          }
636                                                                    
637                          break;                                            break;                  
638                  case "FD":                  case "FD": // FD == Bane 200 = W5
639                          bane = 200;                          bane = "W5";
640                          break;                          break;
641                  case "NS":                  case "NS": // NS == Bane 204 == W1
642                          bane = 204;                          bane = "W1";
643                          break;                          break;
644                  default:                  default:
645                          throw new RuntimeException("Ukendt distributor: " + a.distributor); //Silence findBugs                          throw new RuntimeException("Ukendt distributor: " + a.distributor); //Silence findBugs
# Line 658  public class AddressManager { Line 649  public class AddressManager {
649                          throw new RuntimeException("Ukendt bane for postnr: " + a.postnr);                          throw new RuntimeException("Ukendt bane for postnr: " + a.postnr);
650                  }                  }
651                                    
652                  if (a.dbkBane != bane) {                  if ( StringUtils.equals(a.dbkBane, bane) == false ) {
653                          a.dbkBane = bane;                          a.dbkBane = bane;
654                          if (a.state ==AddressState.NOT_CHANGED) {                          if (a.state == AddressState.NOT_CHANGED) {
655                                  a.state = AddressState.MODIFIED;                                  a.state = AddressState.MODIFIED;
656                          }                          }
657                  }                                }              

Legend:
Removed from v.2924  
changed lines
  Added in v.3121

  ViewVC Help
Powered by ViewVC 1.1.20