36 |
private Map<Short, Map<String,Integer>> searchPostnrVejnavnGadeid; |
private Map<Short, Map<String,Integer>> searchPostnrVejnavnGadeid; |
37 |
private Map<Integer, Map<Short, Map<String,Address>>> searchGadeidentAdresser; // Gadeident -> husnrumre -> litra |
private Map<Integer, Map<Short, Map<String,Address>>> searchGadeidentAdresser; // Gadeident -> husnrumre -> litra |
38 |
|
|
39 |
|
private List<Address> ikkeDaekkedeAdresser = new ArrayList<Address>(60000); |
40 |
private List<Address> alleAdresser; |
private List<Address> hundredePctAdresser = new ArrayList<Address>(120000); |
41 |
|
|
42 |
private Map<String,Integer> helperCache; |
private Map<String,Integer> helperCache; |
43 |
|
|
310 |
searchGadeidentAdresser = new HashMap<Integer, Map<Short, Map<String,Address>>>(); |
searchGadeidentAdresser = new HashMap<Integer, Map<Short, Map<String,Address>>>(); |
311 |
helperCache = new ConcurrentHashMap<String,Integer>(); |
helperCache = new ConcurrentHashMap<String,Integer>(); |
312 |
|
|
313 |
|
// ////////////////////// |
314 |
|
// Start stage1 |
315 |
|
|
316 |
long start1 = System.currentTimeMillis(); |
long start1 = System.currentTimeMillis(); |
317 |
System.out.println("Build -- stage 1"); |
System.out.println("Build -- stage 1"); |
318 |
|
|
319 |
alleAdresser = db.getAllAdresses(); |
List<Address> alleAdresser = db.getAllAdresses(); |
320 |
|
|
321 |
|
|
322 |
/* Mapper mellem db Row ID og adresse noden */ |
/* Mapper mellem db Row ID og adresse noden - skal bruges i stage3*/ |
323 |
Map<Integer,Address> idAddressMap = new HashMap<Integer,Address>( alleAdresser.size() ); |
Map<Integer,Address> idAddressMap = new HashMap<Integer,Address>( alleAdresser.size() ); |
324 |
|
|
325 |
|
|
374 |
|
|
375 |
|
|
376 |
aliasGenerator.clear(); //frigiv hukommelse inden stage2 |
aliasGenerator.clear(); //frigiv hukommelse inden stage2 |
377 |
|
aliasGenerator = null; |
378 |
|
shortHelper.clear(); |
379 |
|
shortHelper = null; |
380 |
|
intHelper.clear(); |
381 |
|
intHelper = null; |
382 |
|
|
383 |
|
|
384 |
//////////////////////////////////////////////////////////////////////////////////////// |
//////////////////////////////////////////////////////////////////////////////////////// |
415 |
} |
} |
416 |
System.out.println("Anvendte " + vaskCount + " aliaser fra databasen"); |
System.out.println("Anvendte " + vaskCount + " aliaser fra databasen"); |
417 |
|
|
418 |
|
aliasList.clear();//cleanup inden stage3 |
419 |
|
|
420 |
|
|
421 |
//////////////////////////////////////////////////////////////////////////////////////// |
//////////////////////////////////////////////////////////////////////////////////////// |
422 |
long start3 = System.currentTimeMillis(); |
long start3 = System.currentTimeMillis(); |
459 |
|
|
460 |
boolean covered = false; |
boolean covered = false; |
461 |
if (targetAddress.distributor.equals("DAO")) { |
if (targetAddress.distributor.equals("DAO")) { |
462 |
orgAddress.rute = calculateExtendedDaoRoute(eb,orgAddress,targetAddress); |
orgAddress.ruteMandag = calculateExtendedDaoRoute(eb,orgAddress,targetAddress); |
463 |
orgAddress.rute = ruteHelper.getInstance(orgAddress.rute); |
orgAddress.ruteMandag = ruteHelper.getInstance(orgAddress.ruteMandag); |
464 |
|
|
465 |
if (orgAddress.rute != null) { |
if (orgAddress.ruteMandag != null) { |
466 |
orgAddress.koreliste = targetAddress.koreliste; |
orgAddress.korelisteMandag = targetAddress.korelisteMandag; |
467 |
covered = true; |
covered = true; |
468 |
} |
} |
469 |
} |
} |
470 |
|
|
471 |
if (targetAddress.distributor.equals("BK")) { |
if (targetAddress.distributor.equals("BK")) { |
472 |
orgAddress.koreliste = calculateExtendedBkKoreliste(eb,orgAddress,targetAddress); |
orgAddress.korelisteMandag = calculateExtendedBkKoreliste(eb,orgAddress,targetAddress); |
473 |
orgAddress.koreliste = korelisteHelper.getInstance(orgAddress.koreliste); |
orgAddress.korelisteMandag = korelisteHelper.getInstance(orgAddress.korelisteMandag); |
474 |
|
|
475 |
if (orgAddress.koreliste != null) { |
if (orgAddress.korelisteMandag != null) { |
476 |
orgAddress.rute = targetAddress.rute; |
orgAddress.ruteMandag = targetAddress.ruteMandag; |
477 |
covered = true; |
covered = true; |
478 |
} |
} |
479 |
} |
} |
492 |
} |
} |
493 |
} |
} |
494 |
|
|
495 |
// nu skal vi ikke bruge idAddressMap længere |
// cleanup inden stage 4 |
496 |
idAddressMap = null; |
idAddressMap = null; |
497 |
|
ruteHelper = null; |
498 |
|
korelisteHelper = null; |
499 |
|
|
500 |
////////////////////////////////////////////////////////////////////////////////////// |
////////////////////////////////////////////////////////////////////////////////////// |
501 |
long start4 = System.currentTimeMillis(); |
long start4 = System.currentTimeMillis(); |
519 |
} |
} |
520 |
|
|
521 |
addr.daekningsType = DaekningsType.DAEKNING_100PCT; |
addr.daekningsType = DaekningsType.DAEKNING_100PCT; |
522 |
addr.rute = bean.rute; |
addr.ruteMandag = bean.rute; |
523 |
addr.koreliste = bean.koreliste; |
addr.korelisteMandag = bean.koreliste; |
524 |
addr.dbkBane = bean.dbkBane; |
addr.dbkBane = bean.dbkBane; |
525 |
addr.distributor = bean.distributor; |
addr.distributor = bean.distributor; |
526 |
} |
} |
539 |
stats.extendedCount++; |
stats.extendedCount++; |
540 |
break; |
break; |
541 |
case DAEKNING_100PCT: |
case DAEKNING_100PCT: |
542 |
|
hundredePctAdresser.add(addr); |
543 |
stats.hundredePctCount++; |
stats.hundredePctCount++; |
544 |
break; |
break; |
545 |
default: |
default: |
546 |
|
ikkeDaekkedeAdresser.add(addr); |
547 |
stats.ikkeDaekketCount++; |
stats.ikkeDaekketCount++; |
548 |
} |
} |
549 |
} |
} |
550 |
stats.totalCount = alleAdresser.size(); |
stats.totalCount = alleAdresser.size(); |
551 |
|
|
552 |
|
ikkeDaekkedeAdresser.sort( null ); // ved Null comparator bruges Comparable interfacet |
553 |
|
ikkeDaekkedeAdresser.sort( null ); |
554 |
|
|
555 |
|
|
556 |
stats.elapsed = stop-start1; |
stats.elapsed = stop-start1; |
557 |
stats.buildTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format( new Date() ); |
stats.buildTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format( new Date() ); |
578 |
public void clear() { |
public void clear() { |
579 |
searchPostnrVejnavnGadeid.clear(); |
searchPostnrVejnavnGadeid.clear(); |
580 |
searchGadeidentAdresser.clear(); |
searchGadeidentAdresser.clear(); |
|
alleAdresser.clear(); |
|
581 |
helperCache.clear(); |
helperCache.clear(); |
582 |
} |
} |
583 |
|
|
584 |
|
|
585 |
private String calculateExtendedDaoRoute(ExtendedBean eb, Address orgAddress, Address targetAddress) { |
private String calculateExtendedDaoRoute(ExtendedBean eb, Address orgAddress, Address targetAddress) { |
586 |
if (targetAddress.rute == null) { //hvis targetAdress.rute er null så er adressen ikke dækket alligevel |
if (targetAddress.ruteMandag == null) { //hvis targetAdress.rute er null så er adressen ikke dækket alligevel |
587 |
return null; |
return null; |
588 |
} |
} |
589 |
|
|
591 |
switch( eb.transport) { |
switch( eb.transport) { |
592 |
case "cykel": |
case "cykel": |
593 |
if (eb.afstand < 0.151) { |
if (eb.afstand < 0.151) { |
594 |
return "." + targetAddress.rute; |
return "." + targetAddress.ruteMandag; |
595 |
} else if (eb.afstand < 0.501) { |
} else if (eb.afstand < 0.501) { |
596 |
return ".." + targetAddress.rute; |
return ".." + targetAddress.ruteMandag; |
597 |
} else if (eb.afstand < 0.701) { |
} else if (eb.afstand < 0.701) { |
598 |
return "..." + targetAddress.rute; |
return "..." + targetAddress.ruteMandag; |
599 |
} else if (eb.afstand < 1.001) { |
} else if (eb.afstand < 1.001) { |
600 |
return "...." + targetAddress.rute; |
return "...." + targetAddress.ruteMandag; |
601 |
} |
} |
602 |
break; |
break; |
603 |
case "scooter": |
case "scooter": |
604 |
if (eb.afstand < 0.151) { |
if (eb.afstand < 0.151) { |
605 |
return "." + targetAddress.rute; |
return "." + targetAddress.ruteMandag; |
606 |
} else if (eb.afstand < 0.801) { |
} else if (eb.afstand < 0.801) { |
607 |
return ".." + targetAddress.rute; |
return ".." + targetAddress.ruteMandag; |
608 |
} else if (eb.afstand < 1.201) { |
} else if (eb.afstand < 1.201) { |
609 |
return "..." + targetAddress.rute; |
return "..." + targetAddress.ruteMandag; |
610 |
} else if (eb.afstand < 2.101) { |
} else if (eb.afstand < 2.101) { |
611 |
return "...." + targetAddress.rute; |
return "...." + targetAddress.ruteMandag; |
612 |
} |
} |
613 |
break; |
break; |
614 |
case "bil": |
case "bil": |
615 |
if (eb.afstand < 0.151) { |
if (eb.afstand < 0.151) { |
616 |
return "." + targetAddress.rute; |
return "." + targetAddress.ruteMandag; |
617 |
} else if (eb.afstand < 1.001) { |
} else if (eb.afstand < 1.001) { |
618 |
return ".." + targetAddress.rute; |
return ".." + targetAddress.ruteMandag; |
619 |
} else if (eb.afstand < 1.601) { |
} else if (eb.afstand < 1.601) { |
620 |
return "..." + targetAddress.rute; |
return "..." + targetAddress.ruteMandag; |
621 |
} else if (eb.afstand < 2.601) { |
} else if (eb.afstand < 2.601) { |
622 |
return "...." + targetAddress.rute; |
return "...." + targetAddress.ruteMandag; |
623 |
} |
} |
624 |
break; |
break; |
625 |
default: |
default: |
629 |
} |
} |
630 |
|
|
631 |
public List<Address> getNonCoveredAddresses() { |
public List<Address> getNonCoveredAddresses() { |
632 |
List<Address> result = new ArrayList<Address>(60000); |
return ikkeDaekkedeAdresser; |
|
for (Address a : alleAdresser) { |
|
|
if ( a.daekningsType == DaekningsType.DAEKNING_IKKEDAEKKET) { |
|
|
result.add(a); |
|
|
} |
|
|
} |
|
|
Collections.sort(result ); |
|
|
return result; |
|
633 |
} |
} |
634 |
|
|
635 |
public List<Address> get100PctAddresses() { |
public List<Address> get100PctAddresses() { |
636 |
List<Address> result = new ArrayList<Address>(120000); |
return hundredePctAdresser; |
|
for (Address a : alleAdresser) { |
|
|
if ( a.daekningsType == DaekningsType.DAEKNING_100PCT) { |
|
|
result.add(a); |
|
|
} |
|
|
} |
|
|
Collections.sort(result ); |
|
|
return result; |
|
637 |
} |
} |
638 |
|
|
639 |
/////////////////////////////////////////////////////////// |
/////////////////////////////////////////////////////////// |
644 |
} else { |
} else { |
645 |
inject = ".."; |
inject = ".."; |
646 |
} |
} |
647 |
return AddressUtils.injectIntoBk(targetAddress.koreliste, inject); |
return AddressUtils.injectIntoBk(targetAddress.korelisteMandag, inject); |
648 |
} |
} |
649 |
|
|
650 |
|
|