Revize 27ba3ec6
Přidáno uživatelem Daniel Stuš před více než 5 roky(ů)
src/data/BitmapBuilder.java | ||
---|---|---|
11 | 11 |
import java.nio.file.StandardOpenOption; |
12 | 12 |
import java.time.LocalDate; |
13 | 13 |
import java.time.format.DateTimeFormatter; |
14 |
import java.util.ArrayList; |
|
15 |
import java.util.List; |
|
14 |
import java.util.*; |
|
16 | 15 |
|
17 | 16 |
/** |
18 | 17 |
* |
... | ... | |
42 | 41 |
/** Seznam uchovavajici vsechny uzivatelem zadane linky pro generaci */ |
43 | 42 |
private List<String> lineList; |
44 | 43 |
|
44 |
/** Seznam uchovavajici vsechny uzivatelem zadane neuplne linky pro generaci */ |
|
45 |
private List<String> pseudoLines; |
|
46 |
|
|
45 | 47 |
/** Cesta k vystupnimu souboru pro vypis vygenerovanych bitmap */ |
46 | 48 |
private Path outputFile; |
47 | 49 |
|
... | ... | |
132 | 134 |
/** |
133 | 135 |
* Naplni seznam uzivatelsky zadanych linek |
134 | 136 |
* |
135 |
* @param lines seznam uzivatelskych linek |
|
137 |
* @param lineList seznam uzivatelskych linek |
|
138 |
* @return true - pokud se podarilo naplnit seznam |
|
139 |
* false - pokud se nepodarilo naplnit seznam |
|
136 | 140 |
*/ |
137 |
public boolean getLineList(List<String> lines){ |
|
138 |
this.lineList = lines; |
|
141 |
public boolean initLineList(List[] lineList){ |
|
142 |
this.lineList = lineList[0]; |
|
143 |
this.pseudoLines = lineList[1]; |
|
139 | 144 |
window.printMessage("Načten uživatelský seznam linek"); |
140 |
window.printMessage("Nalezené linky: "+lineList); |
|
141 |
if(lineList.size() < 1){ |
|
145 |
window.printMessage("Nalezené linky: "+this.lineList);
|
|
146 |
if(this.lineList.size() < 1){
|
|
142 | 147 |
window.printMessage("Seznam linek je prázdný!"); |
143 | 148 |
return false; |
144 | 149 |
} |
150 |
|
|
151 |
if(this.pseudoLines.size() > 0) { |
|
152 |
window.printMessage("Načten uživatelský seznam pseudo linek"); |
|
153 |
window.printMessage("Nalezené pseudo linky: "+pseudoLines); |
|
154 |
} |
|
145 | 155 |
return true; |
146 | 156 |
|
147 | 157 |
} |
... | ... | |
310 | 320 |
|
311 | 321 |
} |
312 | 322 |
|
323 |
/** |
|
324 |
* Vygeneruje, naplni a prida do vysledneho seznamu vsechny pseudo bitmapy |
|
325 |
* |
|
326 |
* @param dateFrom pocatek obdobi pro bitmapu |
|
327 |
* @param dateTo konec obdobi pro bitmapu |
|
328 |
*/ |
|
329 |
public void generatePseudoBitmaps(LocalDate dateFrom, LocalDate dateTo) { |
|
330 |
|
|
331 |
for (String psLine : pseudoLines) { |
|
332 |
|
|
333 |
window.printMessage("Zpracovávám pseudo linku: "+psLine); |
|
334 |
|
|
335 |
LocalDate[] hardCodeRange; |
|
336 |
String[] plRecord = psLine.split("-"); |
|
337 |
Bitmap generatedBitmap = new Bitmap(dateFrom, dateTo, "000000", "0", plRecord[0], plRecord[1], "0"); |
|
338 |
|
|
339 |
//Pokud nemá žádné časové omezení a žádný pevnýkód -> naplň jedničkami |
|
340 |
if (plRecord[0].equals("00") && plRecord[1].length() == 0) { |
|
341 |
generatedBitmap.fillWithOnes(); |
|
342 |
bitmaps.add(generatedBitmap); |
|
343 |
continue; |
|
344 |
} |
|
345 |
|
|
346 |
//Pokud nemá spoj žádná omezení -> napln bitmapu podle pevnych kodu a přidej |
|
347 |
else if (plRecord[0].equals("00") && plRecord[1].length() > 0) { |
|
348 |
generatedBitmap.setHardCodeDays(dateFrom, dateTo, 1); |
|
349 |
bitmaps.add(generatedBitmap); |
|
350 |
continue; |
|
351 |
} |
|
352 |
|
|
353 |
else { |
|
354 |
for (JDFCaskodyRecord caskod : caskody) { |
|
355 |
if (caskod.getTimeCode().equals(plRecord[0])) { |
|
356 |
if (isInRange(dateFrom, dateTo, caskod.getStartDate(), caskod.getEndDate())) { |
|
357 |
hardCodeRange = setHardCodeRange(dateFrom, dateTo, caskod.getStartDate(), caskod.getEndDate()); |
|
358 |
fillBitmap(generatedBitmap, hardCodeRange[0], hardCodeRange[1], Integer.parseInt(caskod.getTypeTimeCode())); |
|
359 |
} |
|
360 |
} |
|
361 |
} |
|
362 |
} |
|
363 |
|
|
364 |
|
|
365 |
//Jinak bitmapa byla již naplněna -> přidej |
|
366 |
bitmaps.add(generatedBitmap); |
|
367 |
|
|
368 |
|
|
369 |
} |
|
370 |
} |
|
371 |
|
|
313 | 372 |
/** |
314 | 373 |
* Metoda projde seznamy spoju, caskodu, pevnychkodu a linek na jejichz zaklade vygeneruje a naplni bitmapy v zadanem obdobi |
315 | 374 |
* vysledne bitmapy vypise v pozadovanem formatu do vystupniho souboru |
... | ... | |
327 | 386 |
LocalDate[] hardCodeRange; |
328 | 387 |
|
329 | 388 |
//Výpis období do výstupního souboru, ve formátu: Období;dateFrom(d.M.yyyy);dateTo(d.M.yyyy) |
330 |
writer.write("Období;" + dateFrom.format(format)+ ";" + dateTo.format(format) + "\n\n");
|
|
389 |
writer.write("Období;" + dateFrom.format(format)+ ";" + dateTo.format(format) + "\r\n\r\n");
|
|
331 | 390 |
|
332 | 391 |
window.printMessage("Zpracovávám bitmapy..."); |
333 | 392 |
window.printMessage("Zpracovávám linku: "+currentLine); |
... | ... | |
348 | 407 |
window.printMessage("- spoj: "+currentJoin); |
349 | 408 |
|
350 | 409 |
Bitmap generatedBitmap = new Bitmap(dateFrom, dateTo, currentLine, currentJoin, currentTimeCode, spoj.hardCodesToString(pevnykod), spoj.getNumberLineVersion()); |
351 |
int numberOfTimeCodes = 0; //Počet časových kódu daného spoje
|
|
410 |
int viableTimeCodes = 0; //Počet časových kódu číslo 3 daného spoje
|
|
352 | 411 |
int timeCodesInRange = 0; //Počet časových kódu aplikovaných na spoj |
353 | 412 |
|
354 | 413 |
previousTimeCode = ""; |
... | ... | |
361 | 420 |
|
362 | 421 |
currentTimeCode = caskod.getTimeCode(); |
363 | 422 |
generatedBitmap.setTimeCode(currentTimeCode); |
364 |
numberOfTimeCodes++; |
|
423 |
|
|
424 |
if(caskod.getTypeTimeCode().matches("1|3|7|8")) viableTimeCodes++; |
|
365 | 425 |
|
366 | 426 |
// Pokud se jedná o stejný spoj, ale jiný časový kód vytvoř novou bitmapu a přidej předchozí |
367 | 427 |
if (!currentTimeCode.equals(previousTimeCode) && isNumeric(currentTimeCode) && !previousTimeCode.equals("")) { |
... | ... | |
384 | 444 |
|
385 | 445 |
|
386 | 446 |
//Pokud nemá žádné časové omezení a žádný pevnýkód -> naplň jedničkami |
387 |
if (numberOfTimeCodes == 0 && spoj.getHardCodes().size() == 0) {
|
|
447 |
if (timeCodesInRange == 0 && spoj.getHardCodes().size() == 0 && viableTimeCodes == 0) {
|
|
388 | 448 |
generatedBitmap.fillWithOnes(); |
389 | 449 |
bitmaps.add(generatedBitmap); |
390 | 450 |
} |
391 | 451 |
|
392 | 452 |
//Pokud nemá spoj žádná omezení -> napln bitmapu podle pevnych kodu a přidej |
393 |
else if (timeCodesInRange == 0 && spoj.getHardCodes().size() > 0) { |
|
453 |
else if (timeCodesInRange == 0 && spoj.getHardCodes().size() > 0 && viableTimeCodes == 0) {
|
|
394 | 454 |
generatedBitmap.setHardCodeDays(dateFrom, dateTo, 1); |
395 | 455 |
bitmaps.add(generatedBitmap); |
396 | 456 |
} |
... | ... | |
401 | 461 |
} |
402 | 462 |
} |
403 | 463 |
|
464 |
//Pokud existují nějaké pseudolinky -> naplň a přidej do seznamu generovaných bitmap |
|
465 |
if(pseudoLines.size() > 0) { |
|
466 |
generatePseudoBitmaps(dateFrom, dateTo); |
|
467 |
} |
|
468 |
|
|
469 |
//Odstraň duplikátní bitmapy |
|
470 |
removeDuplicates(); |
|
471 |
|
|
472 |
//Seřaď seznam bitmap |
|
473 |
Collections.sort(bitmaps); |
|
474 |
|
|
404 | 475 |
//Celkový počet vygenerovaných bitmap |
405 | 476 |
window.printMessage("Celkem vygenerováno: "+bitmaps.size()+" Bitmap"); |
406 | 477 |
|
478 |
//Vypiš bitmapy do souboru |
|
407 | 479 |
for (Bitmap bitmap : bitmaps) { |
408 |
writer.write(bitmap.toString()+"\n"); |
|
480 |
writer.write(bitmap.toString()+"\r\n");
|
|
409 | 481 |
} |
410 | 482 |
|
411 | 483 |
|
... | ... | |
416 | 488 |
window.printMessage("Bitmapy úspěšně zapsány"); |
417 | 489 |
} |
418 | 490 |
|
491 |
/** |
|
492 |
* Odstraní duplikatni bitmapy |
|
493 |
*/ |
|
494 |
public void removeDuplicates() { |
|
495 |
Set<Bitmap> bitmapsWODuplicates = new TreeSet<>(); |
|
496 |
bitmapsWODuplicates.addAll(this.bitmaps); |
|
497 |
this.bitmaps = new ArrayList<>(bitmapsWODuplicates); |
|
498 |
|
|
499 |
} |
|
500 |
|
|
419 | 501 |
/** |
420 | 502 |
* Vrati seznam uzivatelskych linek pro generovani |
421 | 503 |
* |
Také k dispozici: Unified diff
Oprava implementace podle potřeb zadavatele, doplnění funkcionality pseudo linek + odstranění redundantních tříd a souborů (Re #7570)