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

Annotation of /dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/coveragefileupload/AddressManager.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3113 - (hide annotations) (download)
Tue Sep 20 08:17:12 2016 UTC (7 years, 8 months ago) by torben
File size: 19776 byte(s)
Only trigger reload if there were any changes
1 torben 3022 package dk.daoas.adressevedligehold.coveragefileupload;
2 torben 2838
3     import java.sql.SQLException;
4     import java.util.ArrayList;
5 torben 2847 import java.util.Arrays;
6 torben 2838 import java.util.Collections;
7     import java.util.List;
8     import java.util.Map;
9 torben 2844 import java.util.Map.Entry;
10 torben 2838 import java.util.TreeMap;
11    
12     import org.apache.commons.lang3.StringUtils;
13    
14     import dk.daoas.adressevedligehold.beans.Address;
15     import dk.daoas.adressevedligehold.beans.Address.AddressState;
16 torben 3022 import dk.daoas.adressevedligehold.coveragefileupload.AddressSourceEntry.EntryType;
17 torben 2946 import dk.daoas.adressevedligehold.db.DatabaseCoverageUpdate;
18 torben 2903 import dk.daoas.adressevedligehold.tasks.TaskLogger;
19 torben 2838 import dk.daoas.adressevedligehold.util.DeduplicateHelper;
20 torben 2847 import dk.daoas.adressevedligehold.util.MiscUtils;
21 torben 2838 import dk.daoas.adressevedligehold.util.TimingHelper;
22    
23 torben 2840 /*
24 torben 2949 *
25 torben 2840 */
26    
27 torben 2838 public class AddressManager {
28    
29 torben 2903 private TaskLogger logger = TaskLogger.getInstance();
30 torben 2838
31 torben 2924 private int duplicateCount;
32 torben 2903
33 torben 2838 List<Address> addressList;
34    
35     Map<Integer, TreeMap<Short, ArrayList<Address>> > searchStructure;
36    
37 torben 2868 ArrayList<AddressSourceEntry> rejectedEntries = new ArrayList<AddressSourceEntry>();
38 torben 2838
39 torben 2873 Map<Integer,String> unknownStreets = new TreeMap<Integer, String>();
40    
41 torben 3111 Map<Short,String> dbkBaneMap = new TreeMap<Short,String>();
42 torben 2847
43 torben 2838 public AddressManager() throws SQLException {
44 torben 2946 DatabaseCoverageUpdate db = new DatabaseCoverageUpdate();
45 torben 2838
46     searchStructure = new TreeMap<Integer, TreeMap<Short, ArrayList<Address>> >();
47    
48     addressList = db.getAllAdresses();
49    
50     DeduplicateHelper<Integer> intHelper = new DeduplicateHelper<Integer>();
51     DeduplicateHelper<Short> shortHelper = new DeduplicateHelper<Short>();
52    
53     List<ArrayList<Address>> arraylistCache = new ArrayList<ArrayList<Address>>();
54    
55     TimingHelper timer = new TimingHelper();
56    
57     for (Address a : addressList) {
58     Integer gadeid = intHelper.getInstance( a.gadeid );
59     Short husnr = shortHelper.getInstance( a.husnr );
60     TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( gadeid );
61    
62 torben 3111 if (a.dbkBane != null && a.dbkBane.length() > 0 && a.postnr<=4999) {
63     String bane = dbkBaneMap.get(a.postnr);
64 torben 2847 if (bane == null) {
65     dbkBaneMap.put(a.postnr, a.dbkBane);
66     }
67     }
68    
69 torben 2838 if (gade == null) {
70     gade = new TreeMap<Short,ArrayList<Address>>();
71     searchStructure.put(gadeid, gade);
72     }
73    
74     ArrayList<Address> litraList = gade.get(husnr);
75     if (litraList == null) {
76     litraList = new ArrayList<Address>();
77     gade.put(husnr, litraList);
78     arraylistCache.add(litraList);
79     }
80    
81     litraList.add(a);
82     }
83    
84     for (ArrayList<Address> list : arraylistCache) {
85     list.trimToSize();
86     }
87    
88 torben 2903 logger.info("AddressManager ready, elapsed " + timer.getElapsed() + "ms");
89 torben 2838
90    
91     }
92 torben 2940
93     @SuppressWarnings("PMD.CollapsibleIfStatements")
94 torben 3084 public int closeUnvisitedAddresses(String distributor, EntryUgedage ugedage) {
95    
96     int totalClosed = 0;
97    
98 torben 2838 for (Address addr : addressList) {
99     if (addr.distributor == null)
100     continue;
101    
102     if (addr.distributor.equals(distributor) == false)//irrelevant for denne indlæsning
103     continue;
104    
105     int closedCount = 0;
106    
107     if (addr.visitedMan == false && ugedage.mandag) {
108     if (addr.ruteMandag != null) {
109     addr.ruteMandag = null;
110     addr.korelisteMandag = null;
111     addr.stateMan = AddressState.CLOSED;
112     closedCount++;
113     }
114     }
115     if (addr.visitedTir == false && ugedage.tirsdag) {
116     if (addr.ruteTirsdag != null) {
117     addr.ruteTirsdag = null;
118     addr.korelisteTirsdag = null;
119     addr.stateTir = AddressState.CLOSED;
120     closedCount++;
121     }
122     }
123    
124     if (addr.visitedOns == false && ugedage.onsdag) {
125     if (addr.ruteOnsdag != null) {
126     addr.ruteOnsdag = null;
127     addr.korelisteOnsdag = null;
128     addr.stateOns = AddressState.CLOSED;
129     closedCount++;
130     }
131     }
132    
133     if (addr.visitedTor == false && ugedage.torsdag) {
134     if (addr.ruteTorsdag != null) {
135     addr.ruteTorsdag = null;
136     addr.korelisteTorsdag = null;
137     addr.stateTor = AddressState.CLOSED;
138     closedCount++;
139     }
140     }
141    
142     if (addr.visitedFre == false && ugedage.fredag) {
143     if (addr.ruteFredag != null) {
144     addr.ruteFredag = null;
145     addr.korelisteFredag = null;
146     addr.stateFre = AddressState.CLOSED;
147     closedCount++;
148     }
149     }
150    
151     if (addr.visitedLor == false && ugedage.lordag) {
152     if (addr.ruteLordag != null) {
153     addr.ruteLordag = null;
154     addr.korelisteLordag = null;
155     addr.stateLor = AddressState.CLOSED;
156     closedCount++;
157     }
158     }
159    
160     if (addr.visitedSon == false && ugedage.sondag) {
161     if (addr.ruteSondag != null) {
162     addr.ruteSondag = null;
163     addr.korelisteSondag = null;
164     addr.stateSon = AddressState.CLOSED;
165     closedCount++;
166     }
167     }
168    
169     if (addr.state == AddressState.NOT_CHANGED && closedCount>0) {
170     addr.state = AddressState.CLOSED;
171     }
172 torben 3084
173     if (closedCount>0) {
174     totalClosed++;
175     }
176 torben 2838
177     }
178 torben 3084
179     return totalClosed;
180 torben 2838 }
181 torben 3084
182    
183 torben 2838 public void dumpChanged() {
184     int count = 0;
185     for (Address addr : addressList) {
186     if (addr.state == AddressState.NOT_CHANGED) {
187     continue;
188     }
189 torben 2845 /*if (addr.stateMan == AddressState.NOT_CHANGED || addr.stateMan == AddressState.CREATED) {
190 torben 2838 continue;
191 torben 2845 }*/
192 torben 2838
193 torben 2847 if (addr.stateMan != AddressState.MODIFIED ) {
194 torben 2838 continue;
195     }
196    
197 torben 2904 logger.info(addr.state + ": " + addr.toStringExtended() );
198     logger.info(addr.getRuteString() );
199 torben 2838
200 torben 2847 if (count++ > 50)
201 torben 2838 return;
202     }
203     }
204    
205 torben 3113 public int writeBackChanges() throws Exception{
206 torben 2903 logger.info("Writing back changes");
207 torben 2838 TimingHelper timer = new TimingHelper();
208    
209     List<Address> updates = new ArrayList<Address>(1024*1024);
210     List<Address> inserts = new ArrayList<Address>(16*1024);
211    
212     for (Address addr : addressList) {
213     if (addr.state == AddressState.CREATED) {
214     inserts.add(addr);
215     }
216     if (addr.state == AddressState.MODIFIED || addr.state == AddressState.OPENED || addr.state == AddressState.CLOSED) {
217     updates.add(addr);
218     }
219     }
220    
221 torben 2946 DatabaseCoverageUpdate db = new DatabaseCoverageUpdate();
222 torben 2845
223 torben 2838 db.updateAddresses(updates);
224 torben 2876 db.saveNewAddresses(inserts);
225 torben 2845
226 torben 2838
227 torben 2845
228 torben 2903 logger.info("Writeback done: elapsed " + timer.getElapsed() + "ms.");
229 torben 3113
230     return updates.size() + inserts.size();
231 torben 2838 }
232    
233    
234     public void visit(AddressSourceEntry entry) {
235     if (entry.type == EntryType.TypeSingleAddress) {
236     visitSingle(entry);
237     } else {
238     visitRange(entry);
239     }
240     }
241    
242     private void visitSingle(AddressSourceEntry entry) {
243     TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );
244     if (gade == null) {
245 torben 2995 /* No need to register unknown streets, since we create all entries that we can
246 torben 2877 if (! unknownStreets.containsKey(entry.gadeid)) {
247     unknownStreets.put(entry.gadeid, entry.vejnavn);
248 torben 2995 }*/
249 torben 2877
250 torben 2838 createFromEntry(entry); // if we get here there was no match - so we need to create it
251     return;
252     }
253    
254     ArrayList<Address> litraList = gade.get(entry.husnr);
255     if (litraList == null) {
256     createFromEntry(entry); // if we get here there was no match - so we need to create it
257     return;
258     }
259 torben 2866 boolean found = false;
260 torben 2838 for (Address addr : litraList) {
261     if (addr.husnrbogstav.equals(entry.litra) ) {
262     updateAddress(addr, entry);
263 torben 2866 found = true; // 1 visit should be enough but as long as there's duplicates on gadeid+husnr+litra we will visit them all
264     //when the issue with duplicates is resolved this should be reverted to a return or break
265 torben 2838 }
266     }
267 torben 2866 if (found == false) {
268     createFromEntry(entry); // if we get here there was no match - so we need to create it
269     }
270 torben 2838 }
271    
272 torben 2940 @SuppressWarnings("PMD.CollapsibleIfStatements")
273 torben 2838 private void visitRange(AddressSourceEntry entry) {
274    
275 torben 2844 TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );
276     if (gade == null) {
277 torben 2877 if (! unknownStreets.containsKey(entry.gadeid)) {
278     unknownStreets.put(entry.gadeid, entry.vejnavn);
279     }
280    
281 torben 2903 logger.info("[Range] Ukendt gadeID " + entry);
282 torben 2844 return;
283     }
284    
285     for (Entry<Short, ArrayList<Address>> husnrEntry: gade.entrySet()) {
286    
287     short husnummer = husnrEntry.getKey();
288    
289     if ( (entry.husnr % 2) != (husnummer%2) ){ //lige/ulige skal passe sammen
290     continue;
291     }
292    
293     if ( husnummer < entry.husnr || husnummer > entry.tilHusnr) {
294     continue;
295     }
296    
297     ArrayList<Address> litraList = husnrEntry.getValue();
298    
299     /* a=adressetabel u=input
300     * and (a.husnr>u.FraHusNr OR (a.husnr=u.FraHusNr AND a.HusnrBogstav >= u.FraBog))
301     * AND (a.husnr<u.TilHusNr OR (a.husnr=u.TilHusNr AND a.HusnrBogstav <= u.TilBog))
302     */
303    
304    
305     for (Address addr: litraList) {
306     if (addr.husnr > entry.husnr || (addr.husnr == entry.husnr && addr.husnrbogstav.compareTo(entry.litra) >= 0 )) {
307     //Using nested IF instead of &&
308     if (addr.husnr < entry.tilHusnr || (addr.husnr == entry.tilHusnr && addr.husnrbogstav.compareTo(entry.tilLitra) <= 0 )) {
309     updateAddress(addr, entry);
310     }
311     }
312     }
313     }
314 torben 2838 }
315    
316    
317    
318     private void updateAddress(Address addr, AddressSourceEntry entry) {
319     if ( addr.distributor != null && addr.distributor.equals(entry.distributor) == false) {
320 torben 2868 rejectedEntries.add(entry);
321 torben 2903 logger.info("Afviser " + entry);
322 torben 2838 return;
323     }
324    
325 torben 2845
326 torben 2838
327     if (entry.ugedage.mandag) {
328 torben 2847 if (addr.visitedMan == false) {
329     addr.visitedMan = true;
330     if (addr.ruteMandag == null) {
331     addr.stateMan = AddressState.OPENED;
332     addr.ruteMandag = entry.rute;
333     addr.korelisteMandag = entry.koreliste;
334     } else {
335    
336     if (StringUtils.equals(addr.ruteMandag, entry.rute) == false || StringUtils.equals(addr.korelisteMandag, entry.koreliste) == false) {
337     addr.stateMan = AddressState.MODIFIED;
338     addr.ruteMandag = entry.rute;
339     addr.korelisteMandag = entry.koreliste;
340     }
341     }
342 torben 2838 } else {
343 torben 2924 duplicateCount++;
344 torben 2903 logger.info( "Double visit monday " + addr);
345 torben 2924 return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters
346 torben 2838 }
347 torben 2847
348 torben 2838 }
349    
350    
351     if (entry.ugedage.tirsdag) {
352 torben 2847 if (addr.visitedTir == false) {
353     addr.visitedTir = true;
354     if (addr.ruteTirsdag == null) {
355     addr.stateTir = AddressState.OPENED;
356 torben 2838 addr.ruteTirsdag = entry.rute;
357 torben 2847 addr.korelisteTirsdag = entry.koreliste;
358     } else {
359    
360     if (StringUtils.equals(addr.ruteTirsdag, entry.rute) == false || StringUtils.equals(addr.korelisteTirsdag, entry.koreliste) == false) {
361     addr.stateTir = AddressState.MODIFIED;
362     addr.ruteTirsdag = entry.rute;
363     addr.korelisteTirsdag = entry.koreliste;
364     }
365 torben 2838 }
366 torben 2847 } else {
367 torben 2924 duplicateCount++;
368 torben 2903 logger.info( "Double visit tuesday " + addr);
369 torben 2924 return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters
370 torben 2847 }
371 torben 2838 }
372    
373     if (entry.ugedage.onsdag) {
374 torben 2847 if (addr.visitedOns == false) {
375     addr.visitedOns = true;
376     if (addr.ruteOnsdag == null) {
377     addr.stateOns = AddressState.OPENED;
378 torben 2838 addr.ruteOnsdag = entry.rute;
379 torben 2847 addr.korelisteOnsdag = entry.koreliste;
380     } else {
381    
382     if (StringUtils.equals(addr.ruteOnsdag, entry.rute) == false || StringUtils.equals(addr.korelisteOnsdag, entry.koreliste) == false) {
383     addr.stateOns = AddressState.MODIFIED;
384     addr.ruteOnsdag = entry.rute;
385     addr.korelisteOnsdag = entry.koreliste;
386     }
387 torben 2838 }
388 torben 2847 } else {
389 torben 2924 duplicateCount++;
390 torben 2903 logger.info( "Double visit wednesday " + addr);
391 torben 2924 return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters
392 torben 2847 }
393 torben 2838 }
394    
395    
396     if (entry.ugedage.torsdag) {
397 torben 2847 if (addr.visitedTor == false) {
398     addr.visitedTor = true;
399     if (addr.ruteTorsdag == null) {
400     addr.stateTor = AddressState.OPENED;
401 torben 2838 addr.ruteTorsdag = entry.rute;
402 torben 2847 addr.korelisteTorsdag = entry.koreliste;
403     } else {
404    
405    
406     if (StringUtils.equals(addr.ruteTorsdag, entry.rute) == false || StringUtils.equals(addr.korelisteTorsdag, entry.koreliste) == false) {
407     addr.stateTor = AddressState.MODIFIED;
408     addr.ruteTorsdag = entry.rute;
409     addr.korelisteTorsdag = entry.koreliste;
410     }
411 torben 2838 }
412 torben 2847 } else {
413 torben 2924 duplicateCount++;
414 torben 2903 logger.info( "Double visit thursday " + addr);
415 torben 2924 return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters
416 torben 2847 }
417 torben 2838 }
418    
419    
420     if (entry.ugedage.fredag) {
421 torben 2847 if (addr.visitedFre == false) {
422     addr.visitedFre = true;
423     if (addr.ruteFredag == null) {
424     addr.stateFre = AddressState.OPENED;
425 torben 2838 addr.ruteFredag = entry.rute;
426 torben 2847 addr.korelisteFredag = entry.koreliste;
427     } else {
428    
429     if (StringUtils.equals(addr.ruteFredag, entry.rute) == false || StringUtils.equals(addr.korelisteFredag, entry.koreliste) == false) {
430     addr.stateFre = AddressState.MODIFIED;
431     addr.ruteFredag = entry.rute;
432     addr.korelisteFredag = entry.koreliste;
433     }
434 torben 2838 }
435 torben 2847 } else {
436 torben 2924 duplicateCount++;
437 torben 2903 logger.info( "Double visit friday " + addr);
438 torben 2924 return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters
439 torben 2847 }
440 torben 2838 }
441    
442    
443     if (entry.ugedage.lordag) {
444 torben 2847 if (addr.visitedLor == false) {
445     addr.visitedLor = true;
446     if (addr.ruteLordag == null) {
447     addr.stateLor = AddressState.OPENED;
448 torben 2838 addr.ruteLordag = entry.rute;
449 torben 2847 addr.korelisteLordag = entry.koreliste;
450     } else {
451    
452    
453     if (StringUtils.equals(addr.ruteLordag, entry.rute) == false || StringUtils.equals(addr.korelisteLordag, entry.koreliste) == false) {
454     addr.stateLor = AddressState.MODIFIED;
455     addr.ruteLordag = entry.rute;
456     addr.korelisteLordag = entry.koreliste;
457     }
458 torben 2838 }
459 torben 2847 } else {
460 torben 2924 duplicateCount++;
461 torben 2903 logger.info( "Double visit saturday " + addr);
462 torben 2924 return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters
463 torben 2847 }
464 torben 2838 }
465    
466    
467     if (entry.ugedage.sondag) {
468 torben 2847 if (addr.visitedSon == false) {
469     addr.visitedSon = true;
470     if (addr.ruteSondag == null) {
471     addr.stateSon = AddressState.OPENED;
472 torben 2838 addr.ruteSondag = entry.rute;
473 torben 2847 addr.korelisteSondag = entry.koreliste;
474     } else {
475    
476     if (StringUtils.equals(addr.ruteSondag, entry.rute) == false || StringUtils.equals(addr.korelisteSondag, entry.koreliste) == false) {
477     addr.stateSon = AddressState.MODIFIED;
478     addr.ruteSondag = entry.rute;
479     addr.korelisteSondag = entry.koreliste;
480     }
481 torben 2838 }
482 torben 2847 } else {
483 torben 2924 duplicateCount++;
484 torben 2903 logger.info( "Double visit sunday " + addr);
485 torben 2924 return; // if the entry is duplicate on one day that it covers - then it will be as well on all the othters
486 torben 2847 }
487 torben 2838 }
488    
489    
490 torben 2845
491 torben 2862 //addr.visited = true;
492 torben 2845 if (addr.state == AddressState.NOT_CHANGED) {
493     if (addr.distributor == null) {
494     addr.state = AddressState.OPENED;
495     addr.distributor = entry.distributor;
496     } else {
497     if (addr.stateMan != AddressState.NOT_CHANGED || addr.stateTir != AddressState.NOT_CHANGED
498     || addr.stateOns != AddressState.NOT_CHANGED || addr.stateTor != AddressState.NOT_CHANGED
499     || addr.stateFre != AddressState.NOT_CHANGED || addr.stateLor != AddressState.NOT_CHANGED || addr.stateSon != AddressState.NOT_CHANGED ){
500    
501     addr.state = AddressState.MODIFIED;
502     }
503     }
504     }
505    
506 torben 2847 updateDbkBane(addr);
507 torben 2845
508 torben 2838 }
509    
510    
511    
512     private void createFromEntry(AddressSourceEntry entry) {
513 torben 2911 if (entry.husnr >= 1000) { //husnumre i DK må kun være på 3 cifre
514     return;
515     }
516    
517 torben 2952 if (entry.husnr == 999 || entry.husnr == 998) { //frasorter de to højest gyldige husnr - det er typisk special adresser
518 torben 2849 return;
519     }
520 torben 2912
521     if (entry.litra.length() > 1) { //litra må kun være på 1 tegn
522     return;
523     }
524     if (entry.litra.length() == 1) {
525     char litra = entry.litra.charAt(0);
526     if ( Character.isLetter(litra) == false ) {
527     return;
528     }
529    
530     }
531    
532 torben 2850 if (entry.kommunekode == 0 || entry.vejkode == 0) {
533     return;
534     }
535 torben 2855 if (entry.kommunekode < 100) {
536     return;
537     }
538 torben 2876
539 torben 2951 if (entry.vejkode > 9999) {
540     return;
541     }
542    
543 torben 2894 if (entry.gadeid == 0) {
544     return;
545     }
546 torben 2912
547 torben 2876 String gadeidStr = Integer.toString(entry.gadeid);
548     if (gadeidStr.length() != 9) {
549     return;
550     }
551     if (Short.parseShort(gadeidStr.substring(0, 4)) != entry.postnr) {
552 torben 2854 return; //gadeid / postnr mismatch
553     }
554 torben 2849
555    
556 torben 2854
557 torben 2903 logger.info("Opretter adresse ud fra " + entry);
558 torben 2838
559 torben 2925 Address addr = new Address();
560     addr.state = AddressState.CREATED;
561 torben 2838
562 torben 2925 addr.distributor = entry.distributor;
563     addr.gadeid = entry.gadeid;
564     addr.kommunekode = entry.kommunekode;
565     addr.vejkode = entry.vejkode;
566     addr.vejnavn = entry.vejnavn;
567     addr.husnr = entry.husnr;
568     addr.husnrbogstav = entry.litra;
569     addr.postnr = entry.postnr;
570 torben 2838
571    
572 torben 2925 updateAddress(addr, entry);
573    
574 torben 2847
575 torben 2925 // Nu er det nye adresse object oprettet - nu skal det gemmes i søge strukturen og totallisten
576     TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( addr.gadeid );
577 torben 2838
578     if (gade == null) {
579     gade = new TreeMap<Short,ArrayList<Address>>();
580 torben 2925 searchStructure.put(addr.gadeid, gade);
581 torben 2838 }
582    
583 torben 2925 ArrayList<Address> litraList = gade.get(addr.husnr);
584 torben 2838 if (litraList == null) {
585     litraList = new ArrayList<Address>();
586 torben 2925 gade.put(addr.husnr, litraList);
587 torben 2838 }
588    
589 torben 2925 litraList.add(addr);
590     addressList.add(addr);
591 torben 2838
592     }
593    
594 torben 2847
595    
596     /*
597     DAO:
598     UPDATE fulddaekning.adressetabel
599     SET dbkbane = case
600     when substr(korelisteMa,1,2) IN ('07','10','11','12','14','15','16','18','19','20') then 205 #DAO-BRA
601     when substr(korelisteMa,1,2) BETWEEN 24 and 30 then 201 #DAO-Ovrige
602     else 202 #dao syd (52-99=
603     END
604     WHERE distributor='DAO'
605     AND ruteMa is not null;
606    
607     FD: Altid 200
608     NS: Altid 204
609     BK: 195,196,197,198
610     */
611    
612     private void updateDbkBane(Address a) {
613     List<Short> daoBane205 = Arrays.asList( new Short[] {7,10,11,12,12,14,15,16,18,19,20} );
614 torben 3053
615    
616 torben 3111 String bane = null;
617 torben 2847
618     switch (a.distributor) {
619     case "BK":
620     bane = dbkBaneMap.get(a.postnr);
621     break;
622     case "DAO":
623     String koreliste = MiscUtils.firstNonNull(a.korelisteMandag,a.korelisteLordag, a.korelisteSondag); //DAO har kun 3 dækningstyper
624 torben 3053 try {
625 torben 3112 short first2 = Short.parseShort( koreliste.substring(0,2) );
626     if ( daoBane205.contains(first2) ) { //Brabrand == 205 == W2
627     bane = "W2";
628     } else if (first2 >= 24 && first2<=30) { // DAO-Øvrig = 201 = W4
629     bane = "W4";
630     } else { // DAO-Syd= 202
631     bane = "W3";
632 torben 3053 }
633     } catch (NumberFormatException e) {
634     throw new RuntimeException("Error parsing koreliste '" + koreliste + "' for " + a);
635 torben 2847 }
636    
637     break;
638 torben 3112 case "FD": // FD == Bane 200 = W5
639     bane = "W5";
640 torben 2847 break;
641 torben 3112 case "NS": // NS == Bane 204 == W1
642 torben 3111 bane = "204";
643 torben 2867 break;
644     default:
645 torben 2903 throw new RuntimeException("Ukendt distributor: " + a.distributor); //Silence findBugs
646 torben 2847 }
647    
648     if (bane == null) {
649 torben 2903 throw new RuntimeException("Ukendt bane for postnr: " + a.postnr);
650 torben 2847 }
651    
652     if (a.dbkBane != bane) {
653     a.dbkBane = bane;
654     if (a.state ==AddressState.NOT_CHANGED) {
655     a.state = AddressState.MODIFIED;
656     }
657     }
658     }
659    
660 torben 2838 public List<Address> getAddressList() {
661     return Collections.unmodifiableList(addressList);
662     }
663    
664 torben 2873 public Map<Integer,String> getUnknownStreets() {
665     return Collections.unmodifiableMap( unknownStreets );
666     }
667 torben 2847
668 torben 2924 public int getDuplicateCount() {
669     return duplicateCount;
670     }
671 torben 2847
672 torben 2868 public int getRejectedCount() {
673     return rejectedEntries.size();
674 torben 2839 }
675    
676 torben 2838 }

  ViewVC Help
Powered by ViewVC 1.1.20