Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 27ba3ec6

Přidáno uživatelem Daniel Stuš před více než 5 roky(ů)

Oprava implementace podle potřeb zadavatele, doplnění funkcionality pseudo linek + odstranění redundantních tříd a souborů (Re #7570)

Zobrazit rozdíly:

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