/[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 2876 by torben, Thu Jan 28 22:14:42 2016 UTC dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/fileupload/AddressManager.java revision 2947 by torben, Sat Feb 13 15:45:02 2016 UTC
# Line 1  Line 1 
1  package dk.daoas.adressevedligehold;  package dk.daoas.adressevedligehold.fileupload;
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.db.DatabaseCoverageUpdate;
17    import dk.daoas.adressevedligehold.fileupload.AddressSourceEntry.EntryType;
18    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;
# Line 28  import dk.daoas.adressevedligehold.util. Line 29  import dk.daoas.adressevedligehold.util.
29    
30  public class AddressManager {  public class AddressManager {
31                    
32            private TaskLogger logger = TaskLogger.getInstance();
33            
34            private int duplicateCount;
35                    
36          List<Address> addressList;          List<Address> addressList;
37                    
# Line 40  public class AddressManager { Line 44  public class AddressManager {
44          Map<Short,Short> dbkBaneMap = new TreeMap<Short,Short>();          Map<Short,Short> dbkBaneMap = new TreeMap<Short,Short>();
45                    
46          public AddressManager() throws SQLException {          public AddressManager() throws SQLException {
47                  DatabaseLayerImplementation db = new DatabaseLayerImplementation();                  DatabaseCoverageUpdate db = new DatabaseCoverageUpdate();
48                                    
49                  searchStructure = new TreeMap<Integer, TreeMap<Short, ArrayList<Address>> >();                  searchStructure = new TreeMap<Integer, TreeMap<Short, ArrayList<Address>> >();
50                                    
# Line 84  public class AddressManager { Line 88  public class AddressManager {
88                          list.trimToSize();                          list.trimToSize();
89                  }                  }
90                                    
91                  System.out.println("AddressManager ready, elapsed " + timer.getElapsed() + "ms");                  logger.info("AddressManager ready, elapsed " + timer.getElapsed() + "ms");
92                                    
93                                    
94          }          }
95            
96            @SuppressWarnings("PMD.CollapsibleIfStatements")        
97          public void closeUnvisitedAddresses(String distributor, EntryUgedage ugedage) {          public void closeUnvisitedAddresses(String distributor, EntryUgedage ugedage) {
98                  for (Address addr : addressList) {                  for (Address addr : addressList) {
99                          if (addr.distributor == null)                          if (addr.distributor == null)
# Line 181  public class AddressManager { Line 186  public class AddressManager {
186                                  continue;                                  continue;
187                          }                          }
188                                                    
189                          System.out.println(addr.state + ": " + addr.toStringExtended() );                          logger.info(addr.state + ": " + addr.toStringExtended() );
190                          System.out.println(addr.getRuteString() );                          logger.info(addr.getRuteString() );
191                                                    
192                          if (count++ > 50)                          if (count++ > 50)
193                                  return;                                  return;
# Line 190  public class AddressManager { Line 195  public class AddressManager {
195          }          }
196                    
197          public void writeBackChanges() {          public void writeBackChanges() {
198                  System.out.println("Writing back changes");                  logger.info("Writing back changes");
199                  TimingHelper timer = new TimingHelper();                  TimingHelper timer = new TimingHelper();
200                                    
201                  List<Address> updates = new ArrayList<Address>(1024*1024);                  List<Address> updates = new ArrayList<Address>(1024*1024);
# Line 205  public class AddressManager { Line 210  public class AddressManager {
210                          }                          }
211                  }                  }
212                                    
213                  DatabaseLayerImplementation db = new DatabaseLayerImplementation();                  DatabaseCoverageUpdate db = new DatabaseCoverageUpdate();
214                                    
215                  db.updateAddresses(updates);                  db.updateAddresses(updates);
216                  db.saveNewAddresses(inserts);                  db.saveNewAddresses(inserts);
217    
218                                    
219                                    
220                  System.out.println("Writeback done: elapsed " + timer.getElapsed() + "ms.");                  logger.info("Writeback done: elapsed " + timer.getElapsed() + "ms.");
221          }          }
222                    
223                    
# Line 227  public class AddressManager { Line 232  public class AddressManager {
232          private void visitSingle(AddressSourceEntry entry) {          private void visitSingle(AddressSourceEntry entry) {
233                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );
234                  if (gade == null) {                  if (gade == null) {
235                          unknownStreets.putIfAbsent(entry.gadeid, entry.vejnavn);                          if (! unknownStreets.containsKey(entry.gadeid)) {
236                                    unknownStreets.put(entry.gadeid, entry.vejnavn);                                
237                            }
238                            
239                          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
240                          return;                          return;
241                  }                  }
# Line 250  public class AddressManager { Line 258  public class AddressManager {
258                  }                  }
259          }          }
260                    
261            @SuppressWarnings("PMD.CollapsibleIfStatements")        
262          private void visitRange(AddressSourceEntry entry) {          private void visitRange(AddressSourceEntry entry) {
263                                    
264                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );
265                  if (gade == null) {                  if (gade == null) {
266                          unknownStreets.putIfAbsent(entry.gadeid, entry.vejnavn);                          if (! unknownStreets.containsKey(entry.gadeid)) {
267                          System.out.println("[Range] Ukendt gadeID " + entry);                                  unknownStreets.put(entry.gadeid, entry.vejnavn);                                
268                            }
269                            
270                            logger.info("[Range] Ukendt gadeID " + entry);
271                          return;                          return;
272                  }                  }
273                                    
# Line 295  public class AddressManager { Line 307  public class AddressManager {
307          private void updateAddress(Address addr, AddressSourceEntry entry) {          private void updateAddress(Address addr, AddressSourceEntry entry) {
308                  if ( addr.distributor != null && addr.distributor.equals(entry.distributor) == false) {                  if ( addr.distributor != null && addr.distributor.equals(entry.distributor) == false) {
309                          rejectedEntries.add(entry);                          rejectedEntries.add(entry);
310                          System.out.println("Afviser " + entry);                          logger.info("Afviser " + entry);
311                          return;                          return;
312                  }                  }
313                                    
# Line 317  public class AddressManager { Line 329  public class AddressManager {
329                                          }                                          }
330                                  }                                                                }                              
331                          } else {                          } else {
332                                  System.out.println( "Double visit monday " + addr);                                  duplicateCount++;
333                                    logger.info( "Double visit monday " + addr);
334                                    return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters
335                          }                          }
336    
337                  }                  }
# Line 339  public class AddressManager { Line 353  public class AddressManager {
353                                          }                                          }
354                                  }                                  }
355                          } else {                          } else {
356                                  System.out.println( "Double visit tuesday " + addr);                                  duplicateCount++;
357                                    logger.info( "Double visit tuesday " + addr);
358                                    return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters
359                          }                                                        }                              
360                  }                  }
361    
# Line 359  public class AddressManager { Line 375  public class AddressManager {
375                                          }                                          }
376                                  }                                  }
377                          } else {                          } else {
378                                  System.out.println( "Double visit wednesday " + addr);                                  duplicateCount++;
379                                    logger.info( "Double visit wednesday " + addr);
380                                    return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters
381                          }                                        }              
382                  }                  }
383    
# Line 381  public class AddressManager { Line 399  public class AddressManager {
399                                          }                                          }
400                                  }                                  }
401                          } else {                          } else {
402                                  System.out.println( "Double visit thursday " + addr);                                  duplicateCount++;
403                                    logger.info( "Double visit thursday " + addr);
404                                    return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters
405                          }                                                                }                                      
406                  }                  }
407    
# Line 402  public class AddressManager { Line 422  public class AddressManager {
422                                          }                                          }
423                                  }                                  }
424                          } else {                          } else {
425                                  System.out.println( "Double visit friday " + addr);                                  duplicateCount++;
426                                    logger.info( "Double visit friday " + addr);
427                                    return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters
428                          }                                }      
429                  }                  }
430    
# Line 424  public class AddressManager { Line 446  public class AddressManager {
446                                          }                                          }
447                                  }                                  }
448                          } else {                          } else {
449                                  System.out.println( "Double visit saturday " + addr);                                  duplicateCount++;
450                                    logger.info( "Double visit saturday " + addr);
451                                    return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters
452                          }                                                                }                                      
453                  }                  }
454    
# Line 445  public class AddressManager { Line 469  public class AddressManager {
469                                          }                                          }
470                                  }                                  }
471                          } else {                          } else {
472                                  System.out.println( "Double visit sunday " + addr);                                  duplicateCount++;
473                                    logger.info( "Double visit sunday " + addr);
474                                    return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters
475                          }                                                                }                                      
476                  }                  }
477                                    
# Line 473  public class AddressManager { Line 499  public class AddressManager {
499                    
500                    
501          private void createFromEntry(AddressSourceEntry entry) {          private void createFromEntry(AddressSourceEntry entry) {
502                    if (entry.husnr >= 1000) { //husnumre i DK må kun være på 3 cifre
503                            return;
504                    }
505                    
506                  if (entry.husnr == 999) {                  if (entry.husnr == 999) {
507                          return;                          return;
508                  }                  }
509                    
510                    if (entry.litra.length() > 1) { //litra må kun være på 1 tegn
511                            return;
512                    }
513                    if (entry.litra.length() == 1) {
514                            char litra = entry.litra.charAt(0);
515                            if ( Character.isLetter(litra) == false ) {
516                                    return;
517                            }
518                            
519                    }
520                    
521                  if (entry.kommunekode == 0 || entry.vejkode == 0) {                  if (entry.kommunekode == 0 || entry.vejkode == 0) {
522                          return;                          return;
523                  }                  }
# Line 483  public class AddressManager { Line 525  public class AddressManager {
525                          return;                          return;
526                  }                  }
527                                    
528                    if (entry.gadeid == 0) {
529                            return;
530                    }
531                                    
532                  String gadeidStr = Integer.toString(entry.gadeid);                  String gadeidStr = Integer.toString(entry.gadeid);
533                  if (gadeidStr.length() != 9) {                  if (gadeidStr.length() != 9) {
534                          return;                          return;
# Line 493  public class AddressManager { Line 539  public class AddressManager {
539                                    
540                                    
541                                    
542                  System.out.println("Opretter adresse ud fra " + entry);                  logger.info("Opretter adresse ud fra " + entry);
                   
                 Address a = new Address();  
                 a.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;  
543                                    
544                  if (entry.ugedage.mandag) {                  Address addr = new Address();
545                          a.ruteMandag = entry.rute;                  addr.state = AddressState.CREATED;
                         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;  
                 }                
546                                    
547                  updateDbkBane(a);                  addr.distributor = entry.distributor;
548                    addr.gadeid = entry.gadeid;
549                    addr.kommunekode = entry.kommunekode;
550                    addr.vejkode = entry.vejkode;
551                    addr.vejnavn = entry.vejnavn;
552                    addr.husnr = entry.husnr;
553                    addr.husnrbogstav = entry.litra;
554                    addr.postnr = entry.postnr;
555                                    
                 // Nu er det nye adresse object oprettet - nu skal det gemmes i søge strukturen og totallisten  
556                                    
557                    updateAddress(addr, entry);
558    
559                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( a.gadeid );                  
560                    // Nu er det nye adresse object oprettet - nu skal det gemmes i søge strukturen og totallisten        
561                    TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( addr.gadeid );
562                                    
563                  if (gade == null) {                  if (gade == null) {
564                          gade = new TreeMap<Short,ArrayList<Address>>();                          gade = new TreeMap<Short,ArrayList<Address>>();
565                          searchStructure.put(a.gadeid, gade);                          searchStructure.put(addr.gadeid, gade);
566                  }                  }
567                                    
568                  ArrayList<Address> litraList = gade.get(a.husnr);                  ArrayList<Address> litraList = gade.get(addr.husnr);
569                  if (litraList == null) {                  if (litraList == null) {
570                          litraList = new ArrayList<Address>();                          litraList = new ArrayList<Address>();
571                          gade.put(a.husnr, litraList);                          gade.put(addr.husnr, litraList);
572                  }                  }
573                                    
574                  litraList.add(a);                  litraList.add(addr);
575                  addressList.add(a);                  addressList.add(addr);
576                                                                    
577          }          }
578                    
# Line 607  public class AddressManager { Line 623  public class AddressManager {
623                          bane = 204;                          bane = 204;
624                          break;                          break;
625                  default:                  default:
626                          throw new RuntimeException("Ukendt distributor" + a.distributor); //Silence findBugs                          throw new RuntimeException("Ukendt distributor: " + a.distributor); //Silence findBugs
627                  }                  }
628                                    
629                  if (bane == null) {                  if (bane == null) {
630                          throw new RuntimeException("Ukendt bane for postnr" + a.postnr);                          throw new RuntimeException("Ukendt bane for postnr: " + a.postnr);
631                  }                  }
632                                    
633                  if (a.dbkBane != bane) {                  if (a.dbkBane != bane) {
# Line 630  public class AddressManager { Line 646  public class AddressManager {
646                  return Collections.unmodifiableMap( unknownStreets );                  return Collections.unmodifiableMap( unknownStreets );
647          }          }
648                    
649                    public int getDuplicateCount() {
650                    return duplicateCount;
651            }
652                    
653          public int getRejectedCount() {          public int getRejectedCount() {
654                  return rejectedEntries.size();                  return rejectedEntries.size();

Legend:
Removed from v.2876  
changed lines
  Added in v.2947

  ViewVC Help
Powered by ViewVC 1.1.20