/[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

revision 2844 by torben, Mon Jan 25 21:43:59 2016 UTC revision 2925 by torben, Fri Feb 5 08:15:09 2016 UTC
# Line 2  package dk.daoas.adressevedligehold; Line 2  package dk.daoas.adressevedligehold;
2    
3  import java.sql.SQLException;  import java.sql.SQLException;
4  import java.util.ArrayList;  import java.util.ArrayList;
5    import java.util.Arrays;
6  import java.util.Collections;  import java.util.Collections;
7  import java.util.List;  import java.util.List;
8  import java.util.Map;  import java.util.Map;
# Line 14  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;
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)   * TODO: håndtering af entry dupletter ! (+ rapportering af dem)
25    
26    
27    
28   */   */
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                    
38          Map<Integer, TreeMap<Short, ArrayList<Address>> > searchStructure;          Map<Integer, TreeMap<Short, ArrayList<Address>> > searchStructure;
39                    
40          ArrayList<AddressSourceEntry> afvisteEntries = new ArrayList<AddressSourceEntry>();          ArrayList<AddressSourceEntry> rejectedEntries = new ArrayList<AddressSourceEntry>();
41            
42            Map<Integer,String> unknownStreets = new TreeMap<Integer, String>();
43            
44            Map<Short,Short> dbkBaneMap = new TreeMap<Short,Short>();
45                    
46          public AddressManager() throws SQLException {          public AddressManager() throws SQLException {
47                  DatabaseLayerImplementation db = new DatabaseLayerImplementation();                  DatabaseLayerImplementation db = new DatabaseLayerImplementation();
# Line 49  public class AddressManager { Line 62  public class AddressManager {
62                          Short husnr = shortHelper.getInstance( a.husnr );                          Short husnr = shortHelper.getInstance( a.husnr );
63                          TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( gadeid );                          TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( gadeid );
64                                                    
65                            if (a.dbkBane > 0 && a.postnr<=4999) {
66                                    Short bane = dbkBaneMap.get(a.postnr);
67                                    if (bane == null) {
68                                            dbkBaneMap.put(a.postnr, a.dbkBane);
69                                    }
70                            }
71                            
72                          if (gade == null) {                          if (gade == null) {
73                                  gade = new TreeMap<Short,ArrayList<Address>>();                                  gade = new TreeMap<Short,ArrayList<Address>>();
74                                  searchStructure.put(gadeid, gade);                                  searchStructure.put(gadeid, gade);
# Line 68  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          }          }
# Line 157  public class AddressManager { Line 177  public class AddressManager {
177                          if (addr.state == AddressState.NOT_CHANGED) {                          if (addr.state == AddressState.NOT_CHANGED) {
178                                  continue;                                  continue;
179                          }                          }
180                          if (addr.stateMan == AddressState.NOT_CHANGED || addr.stateMan == AddressState.CREATED) {                          /*if (addr.stateMan == AddressState.NOT_CHANGED || addr.stateMan == AddressState.CREATED) {
181                                  continue;                                  continue;
182                          }                          }*/
183                                                    
184                          if (addr.stateMan != AddressState.MODIFIED ) {                          if (addr.stateMan != AddressState.MODIFIED ) {
185                                  continue;                                  continue;
186                          }                          }
187                                                    
188                          System.out.println(addr.state + ": " + addr.toStringExtended() );                          logger.info(addr.state + ": " + addr.toStringExtended() );
189                          System.out.println(addr.getRuteString() );                          logger.info(addr.getRuteString() );
190                                                    
191                          if (count++ > 15)                          if (count++ > 50)
192                                  return;                                  return;
193                  }                  }
194          }          }
195                    
196          public void writeBackChanges() {          public void writeBackChanges() {
197                  System.out.println("Writing back changes");                  logger.info("Writing back changes");
198                  TimingHelper timer = new TimingHelper();                  TimingHelper timer = new TimingHelper();
199                                    
200                  List<Address> updates = new ArrayList<Address>(1024*1024);                  List<Address> updates = new ArrayList<Address>(1024*1024);
# Line 190  public class AddressManager { Line 210  public class AddressManager {
210                  }                  }
211                                    
212                  DatabaseLayerImplementation db = new DatabaseLayerImplementation();                  DatabaseLayerImplementation db = new DatabaseLayerImplementation();
213                    
214                  db.updateAddresses(updates);                  db.updateAddresses(updates);
215                    db.saveNewAddresses(inserts);
216    
217                    
218                                    
219                  System.out.println("Writeback done: elapsed " + timer.getElapsed() + "ms.");                  logger.info("Writeback done: elapsed " + timer.getElapsed() + "ms.");
220          }          }
221                    
222                    
# Line 207  public class AddressManager { Line 231  public class AddressManager {
231          private void visitSingle(AddressSourceEntry entry) {          private void visitSingle(AddressSourceEntry entry) {
232                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );
233                  if (gade == null) {                  if (gade == null) {
234                            if (! unknownStreets.containsKey(entry.gadeid)) {
235                                    unknownStreets.put(entry.gadeid, entry.vejnavn);                                
236                            }
237                            
238                          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
239                          return;                          return;
240                  }                  }
# Line 216  public class AddressManager { Line 244  public class AddressManager {
244                          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
245                          return;                          return;
246                  }                  }
247                                    boolean found = false;
248                  for (Address addr : litraList) {                  for (Address addr : litraList) {
249                          if (addr.husnrbogstav.equals(entry.litra) ) {                          if (addr.husnrbogstav.equals(entry.litra) ) {
250                                  updateAddress(addr, entry);                                  updateAddress(addr, entry);
251                                  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
252                                    //when the issue with duplicates is resolved this should be reverted to a return or break
253                          }                          }
254                  }                  }
255                                    if (found == false) {
256                  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
257                    }
258          }          }
259                    
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 );
263                  if (gade == null) {                  if (gade == null) {
264                          System.out.println("[Range] Ukendt gadeID " + entry);                          if (! unknownStreets.containsKey(entry.gadeid)) {
265                                    unknownStreets.put(entry.gadeid, entry.vejnavn);                                
266                            }
267                            
268                            logger.info("[Range] Ukendt gadeID " + entry);
269                          return;                          return;
270                  }                  }
271                                    
# Line 270  public class AddressManager { Line 304  public class AddressManager {
304                    
305          private void updateAddress(Address addr, AddressSourceEntry entry) {          private void updateAddress(Address addr, AddressSourceEntry entry) {
306                  if ( addr.distributor != null && addr.distributor.equals(entry.distributor) == false) {                  if ( addr.distributor != null && addr.distributor.equals(entry.distributor) == false) {
307                          afvisteEntries.add(entry);                          rejectedEntries.add(entry);
308                          System.out.println("Afviser " + entry);                          logger.info("Afviser " + entry);
309                          return;                          return;
310                  }                  }
311                                    
312                  addr.visited = true;  
                 if (addr.state == AddressState.NOT_CHANGED) {  
                         if (addr.distributor == null) {  
                                 addr.state = AddressState.OPENED;  
                                 addr.distributor = entry.distributor;  
                         } else {  
                                 addr.state = AddressState.MODIFIED;  
                         }  
                 }  
313                                    
314                  if (entry.ugedage.mandag) {                  if (entry.ugedage.mandag) {
315                          addr.visitedMan = true;                          if (addr.visitedMan == false) {
316                          if (addr.ruteMandag == null) {                                  addr.visitedMan = true;
317                                  addr.stateMan = AddressState.OPENED;                                  if (addr.ruteMandag == null) {
318                                  addr.ruteMandag = entry.rute;                                          addr.stateMan = AddressState.OPENED;
                                 addr.korelisteMandag = entry.koreliste;  
                         } else {  
                                   
                                 if (StringUtils.equals(addr.ruteMandag, entry.rute) == false || StringUtils.equals(addr.korelisteMandag, entry.koreliste) == false) {  
                                         addr.stateMan = AddressState.MODIFIED;  
319                                          addr.ruteMandag = entry.rute;                                          addr.ruteMandag = entry.rute;
320                                          addr.korelisteMandag = entry.koreliste;                                                                          addr.korelisteMandag = entry.koreliste;
321                                  }                                  } else {
322                                            
323                                            if (StringUtils.equals(addr.ruteMandag, entry.rute) == false || StringUtils.equals(addr.korelisteMandag, entry.koreliste) == false) {
324                                                    addr.stateMan = AddressState.MODIFIED;
325                                                    addr.ruteMandag = entry.rute;
326                                                    addr.korelisteMandag = entry.koreliste;                                
327                                            }
328                                    }                              
329                            } else {
330                                    duplicateCount++;
331                                    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                  }                  }
336                                    
337                                    
338                  if (entry.ugedage.tirsdag) {                  if (entry.ugedage.tirsdag) {
339                          addr.visitedTir = true;                          if (addr.visitedTir == false) {
340                          if (addr.ruteTirsdag == null) {                                  addr.visitedTir = true;
341                                  addr.stateTir = AddressState.OPENED;                                  if (addr.ruteTirsdag == null) {
342                                  addr.ruteTirsdag = entry.rute;                                          addr.stateTir = AddressState.OPENED;
                                 addr.korelisteTirsdag = entry.koreliste;  
                         } else {  
                                   
                                 if (StringUtils.equals(addr.ruteTirsdag, entry.rute) == false || StringUtils.equals(addr.korelisteTirsdag, entry.koreliste) == false) {  
                                         addr.stateTir = AddressState.MODIFIED;  
343                                          addr.ruteTirsdag = entry.rute;                                          addr.ruteTirsdag = entry.rute;
344                                          addr.korelisteTirsdag = entry.koreliste;                                                                                  addr.korelisteTirsdag = entry.koreliste;
345                                    } else {
346                                            
347                                            if (StringUtils.equals(addr.ruteTirsdag, entry.rute) == false || StringUtils.equals(addr.korelisteTirsdag, entry.koreliste) == false) {
348                                                    addr.stateTir = AddressState.MODIFIED;
349                                                    addr.ruteTirsdag = entry.rute;
350                                                    addr.korelisteTirsdag = entry.koreliste;                                        
351                                            }
352                                  }                                  }
353                          }                          } else {
354                                    duplicateCount++;
355                                    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    
360                  if (entry.ugedage.onsdag) {                  if (entry.ugedage.onsdag) {
361                          addr.visitedOns = true;                          if (addr.visitedOns == false) {
362                          if (addr.ruteOnsdag == null) {                                  addr.visitedOns = true;
363                                  addr.stateOns = AddressState.OPENED;                                  if (addr.ruteOnsdag == null) {
364                                  addr.ruteOnsdag = entry.rute;                                          addr.stateOns = AddressState.OPENED;
                                 addr.korelisteOnsdag = entry.koreliste;  
                         } else {  
                                   
                                 if (StringUtils.equals(addr.ruteOnsdag, entry.rute) == false || StringUtils.equals(addr.korelisteOnsdag, entry.koreliste) == false) {  
                                         addr.stateOns = AddressState.MODIFIED;  
365                                          addr.ruteOnsdag = entry.rute;                                          addr.ruteOnsdag = entry.rute;
366                                          addr.korelisteOnsdag = entry.koreliste;                                                                          addr.korelisteOnsdag = entry.koreliste;
367                                    } else {
368                                            
369                                            if (StringUtils.equals(addr.ruteOnsdag, entry.rute) == false || StringUtils.equals(addr.korelisteOnsdag, entry.koreliste) == false) {
370                                                    addr.stateOns = AddressState.MODIFIED;
371                                                    addr.ruteOnsdag = entry.rute;
372                                                    addr.korelisteOnsdag = entry.koreliste;                                
373                                            }
374                                  }                                  }
375                          }                          } else {
376                                    duplicateCount++;
377                                    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    
382                                    
383                  if (entry.ugedage.torsdag) {                  if (entry.ugedage.torsdag) {
384                          addr.visitedTor = true;                          if (addr.visitedTor == false) {
385                          if (addr.ruteTorsdag == null) {                                  addr.visitedTor = true;
386                                  addr.stateTor = AddressState.OPENED;                                  if (addr.ruteTorsdag == null) {
387                                  addr.ruteTorsdag = entry.rute;                                          addr.stateTor = AddressState.OPENED;
                                 addr.korelisteTorsdag = entry.koreliste;  
                         } else {  
                                   
                                   
                                 if (StringUtils.equals(addr.ruteTorsdag, entry.rute) == false || StringUtils.equals(addr.korelisteTorsdag, entry.koreliste) == false) {  
                                         addr.stateTor = AddressState.MODIFIED;  
388                                          addr.ruteTorsdag = entry.rute;                                          addr.ruteTorsdag = entry.rute;
389                                          addr.korelisteTorsdag = entry.koreliste;                                                                                  addr.korelisteTorsdag = entry.koreliste;
390                                    } else {
391                                            
392                                            
393                                            if (StringUtils.equals(addr.ruteTorsdag, entry.rute) == false || StringUtils.equals(addr.korelisteTorsdag, entry.koreliste) == false) {
394                                                    addr.stateTor = AddressState.MODIFIED;
395                                                    addr.ruteTorsdag = entry.rute;
396                                                    addr.korelisteTorsdag = entry.koreliste;                                        
397                                            }
398                                  }                                  }
399                          }                          } else {
400                                    duplicateCount++;
401                                    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    
406                                    
407                  if (entry.ugedage.fredag) {                  if (entry.ugedage.fredag) {
408                          addr.visitedFre = true;                          if (addr.visitedFre == false) {
409                          if (addr.ruteFredag == null) {                                  addr.visitedFre = true;
410                                  addr.stateFre = AddressState.OPENED;                                  if (addr.ruteFredag == null) {
411                                  addr.ruteFredag = entry.rute;                                          addr.stateFre = AddressState.OPENED;
                                 addr.korelisteFredag = entry.koreliste;  
                         } else {  
                                   
                                 if (StringUtils.equals(addr.ruteFredag, entry.rute) == false || StringUtils.equals(addr.korelisteFredag, entry.koreliste) == false) {  
                                         addr.stateFre = AddressState.MODIFIED;  
412                                          addr.ruteFredag = entry.rute;                                          addr.ruteFredag = entry.rute;
413                                          addr.korelisteFredag = entry.koreliste;                                                                          addr.korelisteFredag = entry.koreliste;
414                                    } else {
415                                            
416                                            if (StringUtils.equals(addr.ruteFredag, entry.rute) == false || StringUtils.equals(addr.korelisteFredag, entry.koreliste) == false) {
417                                                    addr.stateFre = AddressState.MODIFIED;
418                                                    addr.ruteFredag = entry.rute;
419                                                    addr.korelisteFredag = entry.koreliste;                                
420                                            }
421                                  }                                  }
422                          }                          } else {
423                                    duplicateCount++;
424                                    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    
429                                    
430                  if (entry.ugedage.lordag) {                  if (entry.ugedage.lordag) {
431                          addr.visitedLor = true;                          if (addr.visitedLor == false) {
432                          if (addr.ruteLordag == null) {                                  addr.visitedLor = true;
433                                  addr.stateLor = AddressState.OPENED;                                  if (addr.ruteLordag == null) {
434                                  addr.ruteLordag = entry.rute;                                          addr.stateLor = AddressState.OPENED;
                                 addr.korelisteLordag = entry.koreliste;  
                         } else {  
                                   
                                   
                                 if (StringUtils.equals(addr.ruteLordag, entry.rute) == false || StringUtils.equals(addr.korelisteLordag, entry.koreliste) == false) {  
                                         addr.stateLor = AddressState.MODIFIED;  
435                                          addr.ruteLordag = entry.rute;                                          addr.ruteLordag = entry.rute;
436                                          addr.korelisteLordag = entry.koreliste;                                                                          addr.korelisteLordag = entry.koreliste;
437                                    } else {
438                                            
439                                            
440                                            if (StringUtils.equals(addr.ruteLordag, entry.rute) == false || StringUtils.equals(addr.korelisteLordag, entry.koreliste) == false) {
441                                                    addr.stateLor = AddressState.MODIFIED;
442                                                    addr.ruteLordag = entry.rute;
443                                                    addr.korelisteLordag = entry.koreliste;                                
444                                            }
445                                  }                                  }
446                          }                          } else {
447                                    duplicateCount++;
448                                    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    
453                                    
454                  if (entry.ugedage.sondag) {                  if (entry.ugedage.sondag) {
455                          addr.visitedSon = true;                          if (addr.visitedSon == false) {
456                          if (addr.ruteSondag == null) {                                  addr.visitedSon = true;
457                                  addr.stateSon = AddressState.OPENED;                                  if (addr.ruteSondag == null) {
458                                  addr.ruteSondag = entry.rute;                                          addr.stateSon = AddressState.OPENED;
                                 addr.korelisteSondag = entry.koreliste;  
                         } else {  
                                   
                                 if (StringUtils.equals(addr.ruteSondag, entry.rute) == false || StringUtils.equals(addr.korelisteSondag, entry.koreliste) == false) {  
                                         addr.stateSon = AddressState.MODIFIED;  
459                                          addr.ruteSondag = entry.rute;                                          addr.ruteSondag = entry.rute;
460                                          addr.korelisteSondag = entry.koreliste;                                                                          addr.korelisteSondag = entry.koreliste;
461                                    } else {
462                                            
463                                            if (StringUtils.equals(addr.ruteSondag, entry.rute) == false || StringUtils.equals(addr.korelisteSondag, entry.koreliste) == false) {
464                                                    addr.stateSon = AddressState.MODIFIED;
465                                                    addr.ruteSondag = entry.rute;
466                                                    addr.korelisteSondag = entry.koreliste;                                
467                                            }
468                                  }                                  }
469                          }                          } else {
470                                    duplicateCount++;
471                                    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                                    
476                                    
477                    
478                    //addr.visited = true;
479                    if (addr.state == AddressState.NOT_CHANGED) {
480                            if (addr.distributor == null) {
481                                    addr.state = AddressState.OPENED;
482                                    addr.distributor = entry.distributor;
483                            } else {
484                                    if (addr.stateMan != AddressState.NOT_CHANGED || addr.stateTir != AddressState.NOT_CHANGED
485                                                    || addr.stateOns != AddressState.NOT_CHANGED || addr.stateTor != AddressState.NOT_CHANGED
486                                                    || addr.stateFre != AddressState.NOT_CHANGED || addr.stateLor != AddressState.NOT_CHANGED || addr.stateSon != AddressState.NOT_CHANGED ){
487                                            
488                                            addr.state = AddressState.MODIFIED;    
489                                    }
490                            }
491                    }              
492                    
493                    updateDbkBane(addr);
494                    
495          }          }
496                    
497                    
498                    
499          private void createFromEntry(AddressSourceEntry entry) {          private void createFromEntry(AddressSourceEntry entry) {
500                  System.out.println("Opretter adresse ud fra " + entry);                  if (entry.husnr >= 1000) { //husnumre i DK må kun være på 3 cifre
501                            return;
502                    }
503                                    
504                  Address a = new Address();                  if (entry.husnr == 999) {
505                  a.state = AddressState.CREATED;                          return;
506                    }
507                                    
508                  a.distributor = entry.distributor;                  if (entry.litra.length() > 1) { //litra må kun være på 1 tegn
509                  a.gadeid = entry.gadeid;                          return;
510                  a.kommunekode = entry.kommunekode;                  }
511                  a.vejkode = entry.vejkode;                  if (entry.litra.length() == 1) {
512                  a.vejnavn = entry.vejnavn;                          char litra = entry.litra.charAt(0);
513                  a.husnr = entry.husnr;                          if ( Character.isLetter(litra) == false ) {
514                  a.husnrbogstav = entry.litra;                                  return;
515                  a.postnr = entry.postnr;                          }
516                  a.visited = true;                          
517                    }
518                                    
519                  if (entry.ugedage.mandag) {                  if (entry.kommunekode == 0 || entry.vejkode == 0) {
520                          a.ruteMandag = entry.rute;                          return;
                         a.korelisteMandag = entry.koreliste;  
521                  }                  }
522                  if (entry.ugedage.tirsdag) {                  if (entry.kommunekode < 100) {
523                          a.ruteTirsdag = entry.rute;                          return;
                         a.korelisteTirsdag = entry.koreliste;  
524                  }                  }
                 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;  
                 }                
525                                    
526                  // Nu er det nye adresse object oprettet - nu skal det gemmes i søge strukturen og totallisten                  if (entry.gadeid == 0) {
527                            return;
528                    }
529                                    
530                    String gadeidStr = Integer.toString(entry.gadeid);
531                    if (gadeidStr.length() != 9) {
532                            return;
533                    }
534                    if (Short.parseShort(gadeidStr.substring(0, 4)) != entry.postnr) {
535                            return; //gadeid / postnr mismatch
536                    }
537                    
538                    
539                    
540                    logger.info("Opretter adresse ud fra " + entry);
541                    
542                    Address addr = new Address();
543                    addr.state = AddressState.CREATED;
544                    
545                    addr.distributor = entry.distributor;
546                    addr.gadeid = entry.gadeid;
547                    addr.kommunekode = entry.kommunekode;
548                    addr.vejkode = entry.vejkode;
549                    addr.vejnavn = entry.vejnavn;
550                    addr.husnr = entry.husnr;
551                    addr.husnrbogstav = entry.litra;
552                    addr.postnr = entry.postnr;
553                                    
554                    
555                    updateAddress(addr, entry);
556    
557                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( a.gadeid );                  
558                    // Nu er det nye adresse object oprettet - nu skal det gemmes i søge strukturen og totallisten        
559                    TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( addr.gadeid );
560                                    
561                  if (gade == null) {                  if (gade == null) {
562                          gade = new TreeMap<Short,ArrayList<Address>>();                          gade = new TreeMap<Short,ArrayList<Address>>();
563                          searchStructure.put(a.gadeid, gade);                          searchStructure.put(addr.gadeid, gade);
564                  }                  }
565                                    
566                  ArrayList<Address> litraList = gade.get(a.husnr);                  ArrayList<Address> litraList = gade.get(addr.husnr);
567                  if (litraList == null) {                  if (litraList == null) {
568                          litraList = new ArrayList<Address>();                          litraList = new ArrayList<Address>();
569                          gade.put(a.husnr, litraList);                          gade.put(addr.husnr, litraList);
570                  }                  }
571                                    
572                  litraList.add(a);                  litraList.add(addr);
573                  addressList.add(a);                  addressList.add(addr);
574                                                                    
575          }          }
576                    
577            
578            
579             /*
580             DAO:
581             UPDATE fulddaekning.adressetabel
582             SET dbkbane = case
583                    when substr(korelisteMa,1,2) IN ('07','10','11','12','14','15','16','18','19','20') then 205 #DAO-BRA
584                 when substr(korelisteMa,1,2) BETWEEN 24 and 30 then 201 #DAO-Ovrige
585                 else 202 #dao syd (52-99=
586             END
587             WHERE distributor='DAO'
588             AND ruteMa is not null;
589    
590             FD: Altid 200
591             NS: Altid 204
592             BK: 195,196,197,198
593             */
594            
595            private void updateDbkBane(Address a) {
596                    List<Short> daoBane205 = Arrays.asList( new Short[] {7,10,11,12,12,14,15,16,18,19,20} );
597                    
598                    
599                    Short bane = null;
600                    
601                    switch (a.distributor) {
602                    case "BK":                      
603                            bane = dbkBaneMap.get(a.postnr);
604                            break;
605                    case "DAO":
606                            String koreliste = MiscUtils.firstNonNull(a.korelisteMandag,a.korelisteLordag, a.korelisteSondag); //DAO har kun 3 dækningstyper
607                            short first2 = Short.parseShort( koreliste.substring(0,2) );
608                            if ( daoBane205.contains(first2) ) {
609                                    bane = 205;
610                            } else if (first2 >= 24 && first2<=30) {
611                                    bane = 201;
612                            } else {
613                                    bane = 202;
614                            }
615                                    
616                            break;                  
617                    case "FD":
618                            bane = 200;
619                            break;
620                    case "NS":
621                            bane = 204;
622                            break;
623                    default:
624                            throw new RuntimeException("Ukendt distributor: " + a.distributor); //Silence findBugs
625                    }
626                    
627                    if (bane == null) {
628                            throw new RuntimeException("Ukendt bane for postnr: " + a.postnr);
629                    }
630                    
631                    if (a.dbkBane != bane) {
632                            a.dbkBane = bane;
633                            if (a.state ==AddressState.NOT_CHANGED) {
634                                    a.state = AddressState.MODIFIED;
635                            }
636                    }              
637            }
638            
639          public List<Address> getAddressList() {          public List<Address> getAddressList() {
640                  return Collections.unmodifiableList(addressList);                  return Collections.unmodifiableList(addressList);
641          }          }
642                    
643          public int getAfvistAntal() {          public Map<Integer,String> getUnknownStreets() {
644                  return afvisteEntries.size();                  return Collections.unmodifiableMap( unknownStreets );
645            }
646            
647            public int getDuplicateCount() {
648                    return duplicateCount;
649            }
650            
651            public int getRejectedCount() {
652                    return rejectedEntries.size();
653          }          }
654                    
655  }  }

Legend:
Removed from v.2844  
changed lines
  Added in v.2925

  ViewVC Help
Powered by ViewVC 1.1.20