Projekt

Obecné

Profil

Stáhnout (16.2 KB) Statistiky
| Větev: | Revize:
1 627cf809 Marek Sobota
package gui;
2
3
import java.awt.BorderLayout;
4 fdb3b2f7 Marek Sobota
import java.awt.Dimension;
5 627cf809 Marek Sobota
import java.awt.FlowLayout;
6
import java.awt.GridLayout;
7 7cafefe1 Daniel Stuš
import java.awt.event.*;
8 627cf809 Marek Sobota
9
import java.io.File;
10 82a06985 Daniel Stuš
import java.io.IOException;
11 627cf809 Marek Sobota
import java.text.ParseException;
12
import java.text.SimpleDateFormat;
13 17168608 Daniel Stuš
import java.time.LocalDate;
14
import java.time.ZoneId;
15 7cafefe1 Daniel Stuš
import java.util.*;
16 627cf809 Marek Sobota
17 7cafefe1 Daniel Stuš
import javax.swing.*;
18 627cf809 Marek Sobota
import javax.swing.JFormattedTextField.AbstractFormatter;
19
20
import org.jdatepicker.impl.JDatePanelImpl;
21
import org.jdatepicker.impl.JDatePickerImpl;
22
import org.jdatepicker.impl.UtilDateModel;
23
24 1113d101 Marek Sobota
import data.BitmapBuilder;
25
import data.DataLoader;
26
27 627cf809 Marek Sobota
/**
28
 * 
29
 * Zakladni okno aplikace, zprostredkovava vstupy od uzivatele
30
 * 
31
 * @author Marek Sobota, Daniel Stus, Lukas Scurko, Jan Jirman
32
 * @version 1.0
33
 *
34
 */
35
public class Window extends JFrame{
36 fdb3b2f7 Marek Sobota
	
37 627cf809 Marek Sobota
	/**zakladni verze serializace*/
38
	private static final long serialVersionUID = 1L;
39
	
40 fdb3b2f7 Marek Sobota
	/**Minimalni rozmer vypisoveho okna*/
41 53dcc7b9 Marek Sobota
	private static final Dimension OUTPUT_WINDOW_MIN_DIM = new Dimension(640, 320);
42 fdb3b2f7 Marek Sobota
	
43 627cf809 Marek Sobota
	/**konstanta pro oznaceni souboru se spoji*/
44 1db49a97 Marek Sobota
	private static final int SEZNAM_LINEK_FILE = 0;
45 627cf809 Marek Sobota
	
46
	/**konstanta pro oznaceni slozky JDF*/
47
	private static final int JDF_DIR = 1;
48
	
49 fdb3b2f7 Marek Sobota
	/**konstanta pro oznaceni slozky pro vystup*/
50
	private static final int OUTPUT_DIR = 2;
51
	
52 627cf809 Marek Sobota
	/**konstanta pro oznaceni dialogu pro vyber zacinajiciho data*/
53 fdb3b2f7 Marek Sobota
	private static final int DATE_PICKER_FROM = 3;
54 627cf809 Marek Sobota
	
55
	/**konstanta pro oznaceni dialogu pro vyber konciciho data*/
56 fdb3b2f7 Marek Sobota
	private static final int DATE_PICKER_TO = 4;
57 627cf809 Marek Sobota
	
58
	/**spolecna delka pro vsechny {@code JTextField}*/
59
	private static final int TEXT_FIELD_LENGTH = 15;
60
	
61
	/**konstanta pro nazev souboru caskody*/
62 fe96b5c7 Marek Sobota
	private static final String CASKODY = "Caskody.txt";
63 627cf809 Marek Sobota
	
64
	/**konstanta pro nazev souboru pevnykod*/
65 fe96b5c7 Marek Sobota
	private static final String PEVNY_KOD = "Pevnykod.txt";
66 627cf809 Marek Sobota
	
67
	/**konstanta pro nazev souboru spoje*/
68 fe96b5c7 Marek Sobota
	private static final String SPOJE = "Spoje.txt";
69 627cf809 Marek Sobota
	
70
	/**atribut se souborem se spoji*/
71 1db49a97 Marek Sobota
	private File linkyFile = null;
72 627cf809 Marek Sobota
	
73
	/**atribut se slozkou JDF*/
74
	private File jdfDir = null;
75
	
76 fdb3b2f7 Marek Sobota
	/**soubor, do ktereho se zapise vystup programu*/
77 17168608 Daniel Stuš
	private File outputFile = null;
78 fdb3b2f7 Marek Sobota
	
79 627cf809 Marek Sobota
	/**den zacatku obdobi*/
80 17168608 Daniel Stuš
	private LocalDate dateFrom = null;
81 627cf809 Marek Sobota
	
82 5878e23c Marek Sobota
	/**den konce obdobi*/
83 17168608 Daniel Stuš
	private LocalDate dateTo = null;
84 627cf809 Marek Sobota
	
85
	/**panel pro zadani vstupnich dat*/
86
	private JPanel inputP;
87
	
88
	/**tlacitko pro odeslani zadanych dat*/
89
	private JButton confirmBT;
90
	
91
	/**tlacitko pro vypnuti programu*/
92
	private JButton endBT;
93
	
94
	/**Dialog pro vybrani cesty k souborum*/
95
	private JFileChooser fileChooser;
96
	
97
	/**Dialog pro vybrani data zacatku*/
98
	private JDatePickerImpl datePickerFrom;
99
	
100
	/**Dialog pro vybrani data konce*/
101
	private JDatePickerImpl datePickerTo;
102
	
103 7cafefe1 Daniel Stuš
	/**TextField pro zobrazeni cesty k souboru s linkami*/
104 1db49a97 Marek Sobota
	private JTextField linkyPathTF;
105 627cf809 Marek Sobota
	
106
	/**TextField pro zobrazeni cesty k slozce JDF*/
107
	private JTextField jdfPathTF;
108
	
109 fdb3b2f7 Marek Sobota
	/**TextField pro zobrazeni cesty ke slozce s vystupnim souborem*/
110
	private JTextField outputPathTF;
111
	
112
	/**TextField pro zadani nazvu vystupniho souboru*/
113
	private JTextField outputNameTF;
114
	
115 627cf809 Marek Sobota
	/**TextArea pro výpis informací o běhu programu*/
116
	private JTextArea infoTA;
117
118
	/**ScrollPane pro obaleni infoTA*/
119
	private JScrollPane scrollPane;
120
	
121 fdb3b2f7 Marek Sobota
	
122 627cf809 Marek Sobota
	/**
123
	 * inicializuje okno, jmenovite jeho panely, komponenty, priradi potrebne listenery a prida je do zobrazeni
124
	 */
125
	public Window(){
126 7cafefe1 Daniel Stuš
		super("POVED - Generování Bitových map");
127 627cf809 Marek Sobota
		this.setLayout(new BorderLayout());
128
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
129
				
130
		//nastaveni JPanelu
131
		inputP = new JPanel();
132
		JPanel dateFromP = new JPanel();
133
		JPanel dateToP = new JPanel();
134
		JPanel spojPathP = new JPanel();
135
		JPanel jdfPathP = new JPanel();
136 fdb3b2f7 Marek Sobota
		JPanel outputP = new JPanel();
137
		inputP.setLayout(new GridLayout(5, 1));
138 627cf809 Marek Sobota
		dateFromP.setLayout(new FlowLayout());
139
		dateToP.setLayout(new FlowLayout());
140
		spojPathP.setLayout(new FlowLayout());
141
		jdfPathP.setLayout(new FlowLayout());
142 fdb3b2f7 Marek Sobota
		outputP.setLayout(new FlowLayout());
143 627cf809 Marek Sobota
		
144
		//inicializace kompoment
145 53dcc7b9 Marek Sobota
		ImageIcon icon = new ImageIcon(Window.class.getResource("/resources/poved.png"));
146
        ImageIcon logo = new ImageIcon(Window.class.getResource("/resources/logo.png"));
147 7cafefe1 Daniel Stuš
		JLabel povedLB = new JLabel(logo, JLabel.CENTER);
148 17168608 Daniel Stuš
		JLabel dateFromLB = new JLabel("Období od: ");
149
		JLabel dateToLB = new JLabel ("Období do: ");
150 7cafefe1 Daniel Stuš
		JLabel seznamLinekPathLB = new JLabel("Seznam linek: ");
151 627cf809 Marek Sobota
		JLabel jdfPathLB = new JLabel("JDF: ");
152 17168608 Daniel Stuš
		JLabel outputLB = new JLabel("Výstup: ");
153 627cf809 Marek Sobota
		confirmBT = new JButton("Potvrdit");
154 17168608 Daniel Stuš
		endBT = new JButton("Ukončit");
155 7cafefe1 Daniel Stuš
		JButton seznamLinekBT = new JButton("Vybrat seznam linek");
156 627cf809 Marek Sobota
		JButton jdfBT = new JButton("Vybrat JDF slozku");
157 17168608 Daniel Stuš
		JButton outputBT = new JButton("Vybrat výstupní složku");
158 1db49a97 Marek Sobota
		linkyPathTF = new JTextField(TEXT_FIELD_LENGTH);
159 627cf809 Marek Sobota
		jdfPathTF = new JTextField(TEXT_FIELD_LENGTH);
160 fdb3b2f7 Marek Sobota
		outputPathTF = new JTextField(TEXT_FIELD_LENGTH);
161
		outputNameTF = new JTextField(TEXT_FIELD_LENGTH);
162 627cf809 Marek Sobota
		fileChooser = new JFileChooser();
163
		infoTA = new JTextArea();
164
		scrollPane = new JScrollPane(infoTA);
165
		initDatePicker();
166
		
167
		//nastaveni komponent
168 53dcc7b9 Marek Sobota
		this.setIconImage(icon.getImage());
169 1db49a97 Marek Sobota
		linkyPathTF.setEditable(false);
170 627cf809 Marek Sobota
		jdfPathTF.setEditable(false);
171 fdb3b2f7 Marek Sobota
		outputPathTF.setEditable(false);
172 17168608 Daniel Stuš
		outputNameTF.setText("Název souboru...");
173 53dcc7b9 Marek Sobota
		infoTA.setEditable(false);
174
		fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
175
		
176
		
177
		//pridani listeneru 
178 7cafefe1 Daniel Stuš
		outputNameTF.addMouseListener(new MouseAdapter() {
179 17168608 Daniel Stuš
180 53dcc7b9 Marek Sobota
            /**
181
             * pokud je zapsan vychozi text, po kliknuti se vymaze
182
             * 
183
             * @param e kod udalosti
184
             */
185 17168608 Daniel Stuš
			@Override
186 7cafefe1 Daniel Stuš
            public void mouseClicked(MouseEvent e) {
187 17168608 Daniel Stuš
                if (outputNameTF.getText().trim().equals("Název souboru...") ) outputNameTF.setText("");
188 7cafefe1 Daniel Stuš
            }
189
        });
190 627cf809 Marek Sobota
		confirmBT.addActionListener(new ConfirmListener());
191
		endBT.addActionListener(new ActionListener(){
192 53dcc7b9 Marek Sobota
			@Override
193 627cf809 Marek Sobota
			/**
194
			 * ukonci program
195
			 * 
196
			 * @param arg0	kod udalosti
197
			 */
198
			public void actionPerformed(ActionEvent arg0) {
199 5878e23c Marek Sobota
				printMessage("Ukončuji...");
200 627cf809 Marek Sobota
				System.exit(0);
201
			}
202
		});
203 7cafefe1 Daniel Stuš
		seznamLinekBT.addActionListener(new FileChooserListener(SEZNAM_LINEK_FILE));
204 627cf809 Marek Sobota
		jdfBT.addActionListener(new FileChooserListener(JDF_DIR));
205 fdb3b2f7 Marek Sobota
		outputBT.addActionListener(new FileChooserListener(OUTPUT_DIR));
206 627cf809 Marek Sobota
		
207
		//pridani komponent do panelu
208
		inputP.add(dateFromP);
209
		inputP.add(dateToP);
210
		inputP.add(spojPathP);
211
		inputP.add(jdfPathP);
212 fdb3b2f7 Marek Sobota
		inputP.add(outputP);
213 627cf809 Marek Sobota
		dateFromP.add(dateFromLB);
214
		dateFromP.add(datePickerFrom);
215 fdb3b2f7 Marek Sobota
		dateToP.add(dateToLB);	
216 627cf809 Marek Sobota
		dateToP.add(datePickerTo);
217 7cafefe1 Daniel Stuš
		spojPathP.add(seznamLinekPathLB);
218 1db49a97 Marek Sobota
		spojPathP.add(linkyPathTF);
219 7cafefe1 Daniel Stuš
		spojPathP.add(seznamLinekBT);
220 627cf809 Marek Sobota
		jdfPathP.add(jdfPathLB);
221
		jdfPathP.add(jdfPathTF);
222
		jdfPathP.add(jdfBT);
223 fdb3b2f7 Marek Sobota
		outputP.add(outputLB);
224
		outputP.add(outputNameTF);
225
		outputP.add(outputPathTF);
226
		outputP.add(outputBT);
227 627cf809 Marek Sobota
		
228
		//pridani panelu do okna
229
		this.add(povedLB, BorderLayout.NORTH);
230
		this.add(inputP, BorderLayout.CENTER);
231
		this.add(confirmBT, BorderLayout.SOUTH);
232
			
233
		this.pack();
234 fdb3b2f7 Marek Sobota
		this.setMinimumSize(this.getSize());
235 627cf809 Marek Sobota
	}
236
	
237
	/**
238
	 * 
239
	 * inicializuje dve na sobe nezavisle instance {@code DatePickerImpl}
240
	 */
241
	private void initDatePicker(){
242
		UtilDateModel modelFrom = new UtilDateModel();
243
        Properties pFrom = new Properties();
244 7cafefe1 Daniel Stuš
        pFrom.put("text.today", "Dnes");
245
        pFrom.put("text.month", "Měsíc");
246
        pFrom.put("text.year", "Rok");
247 627cf809 Marek Sobota
        UtilDateModel modelTo = new UtilDateModel();
248
        Properties pTo = new Properties();
249 7cafefe1 Daniel Stuš
        pTo.put("text.today", "Dnes");
250
        pTo.put("text.month", "Měsíc");
251
        pTo.put("text.year", "Rok");
252 627cf809 Marek Sobota
        JDatePanelImpl datePanelFrom = new JDatePanelImpl(modelFrom, pFrom);
253
        JDatePanelImpl datePanelTo = new JDatePanelImpl(modelTo, pTo);
254
        datePickerFrom = new JDatePickerImpl(datePanelFrom, new DateLabelFormatter());
255
        datePickerTo = new JDatePickerImpl(datePanelTo, new DateLabelFormatter());
256
        datePickerFrom.addActionListener(new DatePickerListener(DATE_PICKER_FROM));
257
        datePickerTo.addActionListener(new DatePickerListener(DATE_PICKER_TO));
258
        
259
	}
260
	
261
	/**
262
	 * zmeni okno ze vstupoveho pohledu, aby od ted zobrazovalo prubezne informace
263
	 */
264
	private void changeToInfo(){
265
		this.remove(inputP);
266
		this.remove(confirmBT);
267
		
268 fdb3b2f7 Marek Sobota
		this.setMinimumSize(OUTPUT_WINDOW_MIN_DIM);
269 627cf809 Marek Sobota
		this.add(scrollPane, BorderLayout.CENTER);
270
		this.add(endBT, BorderLayout.SOUTH);
271 fdb3b2f7 Marek Sobota
		
272 627cf809 Marek Sobota
		this.revalidate();
273
	}
274
	
275
	
276
	/**
277
	 * metoda pro pridani zpravy do vypisu uzivateli
278
	 * 
279
	 * @param message zprava, kterou chceme uzivateli sdelit
280
	 */
281
	public void printMessage(String message){
282
		infoTA.append(message + "\n");
283
	}
284
285 53dcc7b9 Marek Sobota
	/**
286
	 * vytvori instanci {@code BitmapBuilder} a vrati ji
287
	 * 
288
	 * @return nove vytvořena instance
289
	 */
290 1113d101 Marek Sobota
	private BitmapBuilder createBitmapBuilder(){
291 7cafefe1 Daniel Stuš
		return new BitmapBuilder(this, outputFile);
292 1113d101 Marek Sobota
	}
293
	
294 627cf809 Marek Sobota
	/**
295
	 * 
296
	 * Listener pro potvrzovaci tlacitko, kontroluje, jestli vsechna zadana data jsou platna
297
	 * 
298
	 * @author Marek Sobota, Daniel Stus, Lukas Scurko, Jan Jirman
299
	 * @version 1.0
300
	 *
301
	 */
302
	class ConfirmListener implements ActionListener{
303
304
		//@Override
305
		/**
306
		 * zkontroluje, zda-li zadana data jsou platna, pote zmeni panely aby okno vypisovalo informace o prubehu generace
307
		 * a odesle data na zpracovani
308
		 * 
309
		 * @param arg0 kod udalosti
310
		 */
311
		public void actionPerformed(ActionEvent arg0) {
312 1113d101 Marek Sobota
			if(!inputCheck()){
313
				return;
314
			}
315
			changeToInfo();
316 7cafefe1 Daniel Stuš
317
318 17168608 Daniel Stuš
			printMessage("Nastaveno období od: " + dateFrom);
319
			printMessage("Nastaveno období do: " + dateTo);
320 7cafefe1 Daniel Stuš
			printMessage("Vybrán soubor s linkami: " + linkyFile.toString());
321
			printMessage("Vybrán adresář s JDF soubory: " + jdfDir.toString());
322
			printMessage("Výstupní soubor nastaven na: " + outputFile.toString());
323
324
325 1113d101 Marek Sobota
			ArrayList<String[]> loadedData;
326
	        BitmapBuilder bitmapBuilder = createBitmapBuilder();
327 53dcc7b9 Marek Sobota
	        
328 1113d101 Marek Sobota
	        //loader pro načtení dat
329
	        DataLoader loader = new DataLoader(jdfDir);
330
331
	        //načítání konkrétních dat
332 82a06985 Daniel Stuš
			List<String> lineList= loader.loadLines(linkyFile);
333 5878e23c Marek Sobota
			
334
			//kontrola, jestli soubor obsahuje data
335
			if(!bitmapBuilder.getLineList(lineList)){
336
				printMessage("Můžete ukončit program");
337
				return;
338
			}
339 7cafefe1 Daniel Stuš
340 1113d101 Marek Sobota
	        loadedData = loader.loadData(PEVNY_KOD);
341
	        bitmapBuilder.getPevnyKod(loadedData);
342
343
	        loadedData.clear();
344
	        loadedData = loader.loadData(CASKODY);
345
	        bitmapBuilder.getCaskody(loadedData);
346
347
	        loadedData.clear();
348
	        loadedData = loader.loadData(SPOJE);
349
	        bitmapBuilder.getSpoje(loadedData);
350 7cafefe1 Daniel Stuš
351
	        bitmapBuilder.writeBitmaps(dateFrom, dateTo);
352
353 82a06985 Daniel Stuš
354
	        // Otevře explorer a zvýrazní výstupní soubor
355
			try {
356
				Runtime.getRuntime().exec("explorer.exe /select," + outputFile);
357
			} catch (IOException e) {
358
				e.printStackTrace();
359
			}
360
361 17168608 Daniel Stuš
			printMessage("Můžete ukončit program");
362 1113d101 Marek Sobota
			
363
		}
364
		
365
		/**
366
		 * kontrola jestli jsou obdobi zadana a ve spravnem poradi a jestli jsou cesty vyplněny
367
		 */
368
		private boolean inputCheck(){
369 1db49a97 Marek Sobota
			if(linkyFile == null || jdfDir == null || outputFile == null){
370 17168608 Daniel Stuš
				JOptionPane.showMessageDialog(null, "Nejsou vybrány potřebné soubory/složky",
371
						"Varování", JOptionPane.WARNING_MESSAGE);
372 1113d101 Marek Sobota
				return false;
373 627cf809 Marek Sobota
			}
374
			if(dateTo == null || dateFrom == null){
375 17168608 Daniel Stuš
				JOptionPane.showMessageDialog(null, "Není zadáno datum",
376
						"Varování", JOptionPane.WARNING_MESSAGE);
377 1113d101 Marek Sobota
				return false;
378 627cf809 Marek Sobota
			}
379
			if(dateTo.compareTo(dateFrom) < 0){
380 17168608 Daniel Stuš
				JOptionPane.showMessageDialog(null, "Začátek období je po konci období",
381
						"Varování", JOptionPane.WARNING_MESSAGE);
382 1113d101 Marek Sobota
				return false;
383 627cf809 Marek Sobota
			}
384 1113d101 Marek Sobota
			String outputName = outputNameTF.getText().trim();
385 fdb3b2f7 Marek Sobota
			if(outputName.length() < 1){
386 17168608 Daniel Stuš
				JOptionPane.showMessageDialog(null, "Nebylo zadáno jméno výstupního souboru",
387
						"Varování", JOptionPane.WARNING_MESSAGE);
388 1113d101 Marek Sobota
				return false;
389 fdb3b2f7 Marek Sobota
			}
390 627cf809 Marek Sobota
			
391 fdb3b2f7 Marek Sobota
			if(!outputName.endsWith(".txt")){
392
				outputName += ".txt";
393
			}
394 1113d101 Marek Sobota
			outputFile = new File(outputFile.getAbsolutePath() + File.separator + outputName);
395
			
396
			return true;
397 627cf809 Marek Sobota
		}
398
		
399
	}
400
	
401
	/**
402
	 * Listener pro {@code JFileChooser}, zpracovava dialog pro vybrani souboru a kontrolu jeho platnosti
403
	 * 
404
	 * @author Marek Sobota, Daniel Stus, Lukas Scurko, Jan Jirman
405
	 * @version 1.0
406
	 *
407
	 */
408
	class FileChooserListener implements ActionListener{
409
410
		/**
411
		 * cislo oznacujici, jestli se jedna o soubor se spoji nebo o slozku JDF
412
		 */
413
		private int fileType;
414
		
415
		/**
416
		 * konstruktor ulozi do atributu typ souboru, ktery ma vybirat
417
		 * 
418
		 * @param fileType ktery soubor se vybral (0 = spoj, 1 = jdf slozka)
419
		 */
420
		public FileChooserListener(int fileType) {
421
			this.fileType = fileType;
422
		}
423
		
424
		//@Override
425
		/**
426
		 * otevre dialog pro vybrani souboru nebo slozky, overi, zda-li typ souboru vyhovuje
427
		 * pokud ano, ulozi ho do prislusne promene, jinak vypise varovani
428
		 * 
429
		 */
430
		public void actionPerformed(ActionEvent arg0) {
431
			int option = fileChooser.showOpenDialog(null);
432
			if(option == JFileChooser.APPROVE_OPTION){
433
				File selectedFile = fileChooser.getSelectedFile();
434
				
435 1db49a97 Marek Sobota
				if(selectedFile.isFile() && fileType == SEZNAM_LINEK_FILE && selectedFile.getName().endsWith(".txt")){
436
					linkyFile = selectedFile;
437
					linkyPathTF.setText(linkyFile.getAbsolutePath());
438 627cf809 Marek Sobota
				}
439
				else if(selectedFile.isDirectory() && fileType == JDF_DIR){
440
					//overi existenci potrebnych souboru ve slozce
441
					File caskody = new File(selectedFile.getAbsolutePath() + File.separator + CASKODY);
442
					File pevnyKod = new File(selectedFile.getAbsolutePath() + File.separator + PEVNY_KOD);
443
					File spoje = new File(selectedFile.getAbsolutePath() + File.separator + SPOJE);
444
					if(!caskody.exists()){
445 17168608 Daniel Stuš
						JOptionPane.showMessageDialog(null, "Ve složce se nenachází soubor " + CASKODY,
446
								"Varování", JOptionPane.WARNING_MESSAGE);
447 627cf809 Marek Sobota
						return;
448
					}
449
					if(!pevnyKod.exists()){
450 17168608 Daniel Stuš
						JOptionPane.showMessageDialog(null, "Ve složce se nenachází soubor " + PEVNY_KOD,
451
								"Varování", JOptionPane.WARNING_MESSAGE);
452 627cf809 Marek Sobota
						return;
453
					}
454
					if(!spoje.exists()){
455 17168608 Daniel Stuš
						JOptionPane.showMessageDialog(null, "Ve složce se nenachází soubor " + SPOJE,
456
								"Varování", JOptionPane.WARNING_MESSAGE);
457 627cf809 Marek Sobota
						return;
458
					}
459
					
460
					jdfDir = selectedFile;
461
					jdfPathTF.setText(jdfDir.getAbsolutePath());
462
				}
463 fdb3b2f7 Marek Sobota
				else if (selectedFile.isDirectory() && fileType == OUTPUT_DIR){
464
					outputFile = new File(selectedFile.getAbsolutePath());
465
					outputPathTF.setText(outputFile.getAbsolutePath());
466
				}
467 627cf809 Marek Sobota
				else{
468 17168608 Daniel Stuš
					JOptionPane.showMessageDialog(null, "Vybrán nesprávný typ souboru",
469
												"Varování", JOptionPane.WARNING_MESSAGE);
470 627cf809 Marek Sobota
				}
471
			}
472
		}
473
		
474
	}
475
	
476
	/**
477
	 * 
478
	 * Listener pro {@code JDatePicker}, zpracovava dialog pro vybrani data
479
	 * 
480
	 * @author Marek Sobota, Daniel Stus, Lukas Scurko, Jan Jirman
481
	 * @version 1.0
482
	 *
483
	 */
484
	class DatePickerListener implements ActionListener{
485
486
		/**cislo oznacujici zda-li se jedna o zacatek nebo konec obdobi*/
487
		private int datePickerType;
488
		
489
		/**
490
		 * konstruktor ulozi do atributu typ souboru, ktery ma vybirat
491
		 * 
492
		 * @param datePickerType typ data, ktery se vybral (2 = od, 3 = do)
493
		 */
494
		public DatePickerListener(int datePickerType){
495
			this.datePickerType = datePickerType;
496
		}
497
		
498
		//@Override
499
		/**
500
		 * ulozi vybrane datum z dialogu do odpovidajiciho data
501
		 * 
502
		 * @param arg0 kod udalosti
503
		 */
504
		public void actionPerformed(ActionEvent arg0) {
505
			if(datePickerType == DATE_PICKER_FROM){
506 17168608 Daniel Stuš
				dateFrom = ((Date)datePickerFrom.getModel().getValue()).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
507 627cf809 Marek Sobota
							}
508
			else if (datePickerType == DATE_PICKER_TO){
509 17168608 Daniel Stuš
				dateTo = ((Date)datePickerTo.getModel().getValue()).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
510 627cf809 Marek Sobota
			}
511
		}
512
		
513
		
514
	}
515
	
516
	class DateLabelFormatter extends AbstractFormatter {
517
		
518
		private static final long serialVersionUID = 1L;
519
		
520
		private String datePattern = "yyyy-MM-dd";
521
        private SimpleDateFormat dateFormatter = new SimpleDateFormat(datePattern);
522
523
        @Override
524
        public Object stringToValue(String text) throws ParseException {
525
            return dateFormatter.parseObject(text);
526
        }
527
528
        @Override
529
        public String valueToString(Object value) throws ParseException {
530
            if (value != null) {
531
                Calendar cal = (Calendar) value;
532
                return dateFormatter.format(cal.getTime());
533
            }
534
535
            return "";
536
        }
537
538
    }
539
	
540
	/**
541
	 * 
542 53dcc7b9 Marek Sobota
	 * hlavni metoda a vstupni bod aplikace
543 627cf809 Marek Sobota
	 * 
544
	 * @param args parametry programu
545
	 */
546
	public static void main(String[] args){
547
		Window w = new Window();
548
		w.setVisible(true);
549
	}
550
}