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

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

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

revision 2850 by torben, Tue Jan 26 16:50:22 2016 UTC revision 2912 by torben, Thu Feb 4 08:39:26 2016 UTC
# Line 15  import dk.daoas.adressevedligehold.Addre Line 15  import dk.daoas.adressevedligehold.Addre
15  import dk.daoas.adressevedligehold.beans.Address;  import dk.daoas.adressevedligehold.beans.Address;
16  import dk.daoas.adressevedligehold.beans.Address.AddressState;  import dk.daoas.adressevedligehold.beans.Address.AddressState;
17  import dk.daoas.adressevedligehold.db.DatabaseLayerImplementation;  import dk.daoas.adressevedligehold.db.DatabaseLayerImplementation;
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                    
35          List<Address> addressList;          List<Address> addressList;
36                    
37          Map<Integer, TreeMap<Short, ArrayList<Address>> > searchStructure;          Map<Integer, TreeMap<Short, ArrayList<Address>> > searchStructure;
38                    
39          ArrayList<AddressSourceEntry> afvisteEntries = new ArrayList<AddressSourceEntry>();          ArrayList<AddressSourceEntry> rejectedEntries = new ArrayList<AddressSourceEntry>();
40            
41            Map<Integer,String> unknownStreets = new TreeMap<Integer, String>();
42                    
43          Map<Short,Short> dbkBaneMap = new TreeMap<Short,Short>();          Map<Short,Short> dbkBaneMap = new TreeMap<Short,Short>();
44                    
# Line 82  public class AddressManager { Line 87  public class AddressManager {
87                          list.trimToSize();                          list.trimToSize();
88                  }                  }
89                                    
90                  System.out.println("AddressManager ready, elapsed " + timer.getElapsed() + "ms");                  logger.info("AddressManager ready, elapsed " + timer.getElapsed() + "ms");
91                                    
92                                    
93          }          }
# Line 179  public class AddressManager { Line 184  public class AddressManager {
184                                  continue;                                  continue;
185                          }                          }
186                                                    
187                          System.out.println(addr.state + ": " + addr.toStringExtended() );                          logger.info(addr.state + ": " + addr.toStringExtended() );
188                          System.out.println(addr.getRuteString() );                          logger.info(addr.getRuteString() );
189                                                    
190                          if (count++ > 50)                          if (count++ > 50)
191                                  return;                                  return;
# Line 188  public class AddressManager { Line 193  public class AddressManager {
193          }          }
194                    
195          public void writeBackChanges() {          public void writeBackChanges() {
196                  System.out.println("Writing back changes");                  logger.info("Writing back changes");
197                  TimingHelper timer = new TimingHelper();                  TimingHelper timer = new TimingHelper();
198                                    
199                  List<Address> updates = new ArrayList<Address>(1024*1024);                  List<Address> updates = new ArrayList<Address>(1024*1024);
# Line 206  public class AddressManager { Line 211  public class AddressManager {
211                  DatabaseLayerImplementation db = new DatabaseLayerImplementation();                  DatabaseLayerImplementation db = new DatabaseLayerImplementation();
212                                    
213                  db.updateAddresses(updates);                  db.updateAddresses(updates);
214                    db.saveNewAddresses(inserts);
215    
216                                    
217                                    
218                  System.out.println("Writeback done: elapsed " + timer.getElapsed() + "ms.");                  logger.info("Writeback done: elapsed " + timer.getElapsed() + "ms.");
219          }          }
220                    
221                    
# Line 224  public class AddressManager { Line 230  public class AddressManager {
230          private void visitSingle(AddressSourceEntry entry) {          private void visitSingle(AddressSourceEntry entry) {
231                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );
232                  if (gade == null) {                  if (gade == null) {
233                            if (! unknownStreets.containsKey(entry.gadeid)) {
234                                    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;
239                  }                  }
# Line 233  public class AddressManager { Line 243  public class AddressManager {
243                          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
244                          return;                          return;
245                  }                  }
246                                    boolean found = false;
247                  for (Address addr : litraList) {                  for (Address addr : litraList) {
248                          if (addr.husnrbogstav.equals(entry.litra) ) {                          if (addr.husnrbogstav.equals(entry.litra) ) {
249                                  updateAddress(addr, entry);                                  updateAddress(addr, entry);
250                                  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
251                                    //when the issue with duplicates is resolved this should be reverted to a return or break
252                          }                          }
253                  }                  }
254                                    if (found == false) {
255                  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
256                    }
257          }          }
258                    
259          private void visitRange(AddressSourceEntry entry) {          private void visitRange(AddressSourceEntry entry) {
260                                    
261                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );
262                  if (gade == null) {                  if (gade == null) {
263                          System.out.println("[Range] Ukendt gadeID " + entry);                          if (! unknownStreets.containsKey(entry.gadeid)) {
264                                    unknownStreets.put(entry.gadeid, entry.vejnavn);                                
265                            }
266                            
267                            logger.info("[Range] Ukendt gadeID " + entry);
268                          return;                          return;
269                  }                  }
270                                    
# Line 287  public class AddressManager { Line 303  public class AddressManager {
303                    
304          private void updateAddress(Address addr, AddressSourceEntry entry) {          private void updateAddress(Address addr, AddressSourceEntry entry) {
305                  if ( addr.distributor != null && addr.distributor.equals(entry.distributor) == false) {                  if ( addr.distributor != null && addr.distributor.equals(entry.distributor) == false) {
306                          afvisteEntries.add(entry);                          rejectedEntries.add(entry);
307                          System.out.println("Afviser " + entry);                          logger.info("Afviser " + entry);
308                          return;                          return;
309                  }                  }
310                                    
# Line 310  public class AddressManager { Line 326  public class AddressManager {
326                                          }                                          }
327                                  }                                                                }                              
328                          } else {                          } else {
329                                  System.out.println( "Double visit monday " + addr);                                  logger.info( "Double visit monday " + addr);
330                          }                          }
331    
332                  }                  }
# Line 332  public class AddressManager { Line 348  public class AddressManager {
348                                          }                                          }
349                                  }                                  }
350                          } else {                          } else {
351                                  System.out.println( "Double visit tuesday " + addr);                                  logger.info( "Double visit tuesday " + addr);
352                          }                                                        }                              
353                  }                  }
354    
# Line 352  public class AddressManager { Line 368  public class AddressManager {
368                                          }                                          }
369                                  }                                  }
370                          } else {                          } else {
371                                  System.out.println( "Double visit wednesday " + addr);                                  logger.info( "Double visit wednesday " + addr);
372                          }                                        }              
373                  }                  }
374    
# Line 374  public class AddressManager { Line 390  public class AddressManager {
390                                          }                                          }
391                                  }                                  }
392                          } else {                          } else {
393                                  System.out.println( "Double visit thursday " + addr);                                  logger.info( "Double visit thursday " + addr);
394                          }                                                                }                                      
395                  }                  }
396    
# Line 395  public class AddressManager { Line 411  public class AddressManager {
411                                          }                                          }
412                                  }                                  }
413                          } else {                          } else {
414                                  System.out.println( "Double visit friday " + addr);                                  logger.info( "Double visit friday " + addr);
415                          }                                }      
416                  }                  }
417    
# Line 417  public class AddressManager { Line 433  public class AddressManager {
433                                          }                                          }
434                                  }                                  }
435                          } else {                          } else {
436                                  System.out.println( "Double visit saturday " + addr);                                  logger.info( "Double visit saturday " + addr);
437                          }                                                                }                                      
438                  }                  }
439    
# Line 438  public class AddressManager { Line 454  public class AddressManager {
454                                          }                                          }
455                                  }                                  }
456                          } else {                          } else {
457                                  System.out.println( "Double visit sunday " + addr);                                  logger.info( "Double visit sunday " + addr);
458                          }                                                                }                                      
459                  }                  }
460                                    
461                                    
462                                    
463                  addr.visited = true;                  //addr.visited = true;
464                  if (addr.state == AddressState.NOT_CHANGED) {                  if (addr.state == AddressState.NOT_CHANGED) {
465                          if (addr.distributor == null) {                          if (addr.distributor == null) {
466                                  addr.state = AddressState.OPENED;                                  addr.state = AddressState.OPENED;
# Line 466  public class AddressManager { Line 482  public class AddressManager {
482                    
483                    
484          private void createFromEntry(AddressSourceEntry entry) {          private void createFromEntry(AddressSourceEntry entry) {
485                    if (entry.husnr >= 1000) { //husnumre i DK må kun være på 3 cifre
486                            return;
487                    }
488                    
489                  if (entry.husnr == 999) {                  if (entry.husnr == 999) {
490                          return;                          return;
491                  }                  }
492                    
493                    if (entry.litra.length() > 1) { //litra må kun være på 1 tegn
494                            return;
495                    }
496                    if (entry.litra.length() == 1) {
497                            char litra = entry.litra.charAt(0);
498                            if ( Character.isLetter(litra) == false ) {
499                                    return;
500                            }
501                            
502                    }
503                    
504                  if (entry.kommunekode == 0 || entry.vejkode == 0) {                  if (entry.kommunekode == 0 || entry.vejkode == 0) {
505                          return;                          return;
506                  }                  }
507                    if (entry.kommunekode < 100) {
508                            return;
509                    }
510                    
511                    if (entry.gadeid == 0) {
512                            return;
513                    }
514                                    
515                    String gadeidStr = Integer.toString(entry.gadeid);
516                    if (gadeidStr.length() != 9) {
517                            return;
518                    }
519                    if (Short.parseShort(gadeidStr.substring(0, 4)) != entry.postnr) {
520                            return; //gadeid / postnr mismatch
521                    }
522                    
523                                    
524                                    
525                  System.out.println("Opretter adresse ud fra " + entry);                  logger.info("Opretter adresse ud fra " + entry);
526                                    
527                  Address a = new Address();                  Address a = new Address();
528                  a.state = AddressState.CREATED;                  a.state = AddressState.CREATED;
# Line 487  public class AddressManager { Line 535  public class AddressManager {
535                  a.husnr = entry.husnr;                  a.husnr = entry.husnr;
536                  a.husnrbogstav = entry.litra;                  a.husnrbogstav = entry.litra;
537                  a.postnr = entry.postnr;                  a.postnr = entry.postnr;
538                  a.visited = true;                  //a.visited = true;
539                                    
540                  if (entry.ugedage.mandag) {                  if (entry.ugedage.mandag) {
541                          a.ruteMandag = entry.rute;                          a.ruteMandag = entry.rute;
# Line 586  public class AddressManager { Line 634  public class AddressManager {
634                          break;                          break;
635                  case "NS":                  case "NS":
636                          bane = 204;                          bane = 204;
637                          break;                                            break;
638                    default:
639                            throw new RuntimeException("Ukendt distributor: " + a.distributor); //Silence findBugs
640                  }                  }
641                                    
642                  if (bane == null) {                  if (bane == null) {
643                          throw new RuntimeException("Ukendt bane for postnr" + a.postnr);                          throw new RuntimeException("Ukendt bane for postnr: " + a.postnr);
644                  }                  }
645                                    
646                  if (a.dbkBane != bane) {                  if (a.dbkBane != bane) {
# Line 605  public class AddressManager { Line 655  public class AddressManager {
655                  return Collections.unmodifiableList(addressList);                  return Collections.unmodifiableList(addressList);
656          }          }
657                    
658            public Map<Integer,String> getUnknownStreets() {
659                    return Collections.unmodifiableMap( unknownStreets );
660            }
661            
662                    
663                    
664          public int getAfvistAntal() {          public int getRejectedCount() {
665                  return afvisteEntries.size();                  return rejectedEntries.size();
666          }          }
667                    
668  }  }

Legend:
Removed from v.2850  
changed lines
  Added in v.2912

  ViewVC Help
Powered by ViewVC 1.1.20