root/java/SuperPostak/src/cz/frantovo/superPostak/SuperPostak.java @ 5:bea5d9e11d37

Revision 5:bea5d9e11d37, 65.9 KB (checked in by František Kučera <franta-hg@…>, 14 years ago)

Souborové dialogy si pamatují naposledy použitý adresář.

Line 
1package cz.frantovo.superPostak;
2
3import cz.frantovo.postak.HromadnaZprava;
4import cz.frantovo.postak.InternetAddressKomu;
5import cz.frantovo.postak.Nastaveni;
6import cz.frantovo.postak.Postak;
7import java.awt.CardLayout;
8import java.awt.Component;
9import java.awt.Cursor;
10import java.awt.Dialog.ModalityType;
11import java.awt.KeyboardFocusManager;
12import java.beans.XMLDecoder;
13import java.beans.XMLEncoder;
14import java.io.BufferedInputStream;
15import java.io.BufferedOutputStream;
16import java.io.File;
17import java.io.FileInputStream;
18import java.io.FileNotFoundException;
19import java.io.FileOutputStream;
20import java.io.IOException;
21import java.io.UnsupportedEncodingException;
22import java.sql.SQLException;
23import java.util.ArrayList;
24import java.util.Collection;
25import java.util.logging.Level;
26import java.util.logging.Logger;
27import java.util.zip.GZIPInputStream;
28import java.util.zip.GZIPOutputStream;
29import javax.mail.MessagingException;
30import javax.mail.internet.InternetAddress;
31import javax.swing.JComponent;
32import javax.swing.JDialog;
33import javax.swing.JOptionPane;
34import javax.swing.JTextArea;
35import javax.swing.UIManager;
36import javax.swing.UnsupportedLookAndFeelException;
37import org.jdesktop.swingx.JXErrorPane;
38import org.jdesktop.swingx.JXTaskPaneContainer;
39import org.jdesktop.swingx.error.ErrorInfo;
40
41/**
42 *
43 * @author  fiki
44 */
45public class SuperPostak extends javax.swing.JFrame {
46
47    /** Soubor, kde je uložené nastavení */
48    private static final String NASTAVENI_SOUBOR = "Nastaveni.xml.gz";
49    private static final String CERTIFIKATY_SOUBOR = "DuveryhodneCertifikaty.keystore";
50    private static final String NASTAVENI_SLOZKA = ".SuperPostak";
51    private static final String DOMACI_ADRESAR = System.getProperty("user.home");
52    private static Logger log = Logger.getLogger(SuperPostak.class.getName());
53    private static final long serialVersionUID = -7026850569575604048L;
54    private Nastaveni nastaveni = new Nastaveni();
55    private Postak postak = new Postak(nastaveni);
56
57    /**
58     * Creates new form SuperPostak
59     * @param ladit předvyplní testovací hodnoty - zprávu
60     * @param exit při zavření okna ukončí program     
61     */
62    public SuperPostak(boolean ladit, boolean exit) {
63        log.log(Level.WARNING, "Program byl spuštěn.");
64        nactiOvladaceJDBC();
65        vytvorSlozkuProgramu();
66        initComponents();
67
68        nactiNastaveni();
69        ulozNastaveni();
70        nastaveni.setCestaKCertifikatum(getCestaKCertifikatum());
71
72        inicializujCardLayout();
73        setLocationRelativeTo(null);
74
75                /** Kvůli souborovým dialogům – aby se otvírali ve stejné složce jako minule. */
76                prijemciDodatecni.setNastaveni(nastaveni);
77                prijemciVychozi.setNastaveni(nastaveni);
78                prijemciZkusebni.setNastaveni(nastaveni);
79
80        /** Vyřešíme problém TAB vs. Focus */
81        vyresitTabFocusProblem(vstupSQL);
82        vyresitTabFocusProblem(vstupZprava);
83
84        /** Ladicí hodnoty */
85        if (ladit) {
86            nastavLadiciHodnoty();
87        }
88
89        if (exit) {
90            setDefaultCloseOperation(EXIT_ON_CLOSE);
91        }
92
93
94    }
95
96    private void inicializujCardLayout() {
97        panelDatabaze.setName("panelDatabaze");
98        panelOdeslat.setName("panelOdeslat");
99        panelPrijemci.setName("panelPrijemci");
100        panelServer.setName("panelServer");
101        panelVychoziPrijemci.setName("panelVychoziPrijemci");
102        panelZprava.setName("panelZprava");
103
104        panel.add(panelDatabaze, panelDatabaze.getName());
105        panel.add(panelOdeslat, panelOdeslat.getName());
106        panel.add(panelPrijemci, panelPrijemci.getName());
107        panel.add(panelServer, panelServer.getName());
108        panel.add(panelVychoziPrijemci, panelVychoziPrijemci.getName());
109        panel.add(panelZprava, panelZprava.getName());
110
111        setPanel(panelZprava);
112        pack();
113    }
114
115    /**
116     * Vyplní formuláře (odesílatel, předmět, zpráva, příjemci...) výchozími hodnotami,
117     * aby se dal program testovat jedním kliknutím.
118     */
119    private void nastavLadiciHodnoty() {
120        try {
121            vstupAdresaOdesilatele.setText("SuperPostak@frantovo.cz");
122            vstupJmenoOdesilatele.setText("SuperPošťák");
123            vstupPredmet.setText("Zkušební zpráva od SuperPošťáka");
124            vstupZprava.setText("Toto je obyčejná zkušební zpráva v češtině :-)");
125            ArrayList<InternetAddressKomu> adresy = new ArrayList<InternetAddressKomu>();
126            adresy.add(new InternetAddressKomu("SuperPostak@frantovo.cz", "SuperPošťák"));
127            prijemciZkusebni.setAdresy(adresy);
128        } catch (UnsupportedEncodingException e) {
129            log.log(Level.SEVERE, null, e);
130        }
131    }
132
133    /**
134     * Pokusíme se načíst ovladače pro různé DB a výsledek zapíšeme do logu.
135     * Další ovladače je možné přidat pomocí manifestu v příslušných knihovnách.
136     * viz http://www.sweb.cz/pichlik/archive/2006_08_06_archive.html#115502885631518161
137     */
138    private void nactiOvladaceJDBC() {
139        nactiOvladacJDBC("org.postgresql.Driver", "PostgreSQL");
140        nactiOvladacJDBC("com.mysql.jdbc.Driver", "MySQL");
141        nactiOvladacJDBC("net.sourceforge.jtds.jdbc.Driver", "jTDS Sybase a MS SQL");
142        nactiOvladacJDBC("com.sybase.jdbc2.jdbc.SybDriver", "Sybase.com");
143        nactiOvladacJDBC("oracle.jdbc.OracleDriver", "Oracle");
144    }
145
146    /**
147     * @param trida ovladač databáze, který se má načíst
148     * @param jmeno název databáze     
149     */
150    private void nactiOvladacJDBC(String trida, String jmeno) {
151        try {
152            Class.forName(trida);
153            log.log(Level.INFO, "JDBC ovladač pro " + jmeno + " byl úspěšně načten.");
154        } catch (ClassNotFoundException e) {
155            log.log(Level.INFO, "JDBC ovladač pro " + jmeno + " se nepodařilo načíst.");
156        }
157    }
158
159    /** Vrací plnou cestu k souboru s nastavením */
160    protected static String getCestaKCertifikatum() {
161        return getCestaKeSlozceProgramu() + CERTIFIKATY_SOUBOR;
162    }
163
164    /** Vrací plnou cestu k souboru s nastavením */
165    protected static String getCestaKNastaveni() {
166        return getCestaKeSlozceProgramu() + NASTAVENI_SOUBOR;
167    }
168
169    /** Vrací plnou cestu ke složce programu (nastavení, certifikáty a logy) */
170    protected static String getCestaKeSlozceProgramu() {
171        return DOMACI_ADRESAR + File.separator + NASTAVENI_SLOZKA + File.separator;
172    }
173
174    /** Načte nastavení ze souboru */
175    private void nactiNastaveni() {
176        try {
177            XMLDecoder d = new XMLDecoder(new BufferedInputStream(new GZIPInputStream(new FileInputStream(getCestaKNastaveni()))));
178            Object xmlObjekt = d.readObject();
179            d.close();
180
181            if (xmlObjekt instanceof Nastaveni) {
182                nastaveni = (Nastaveni) xmlObjekt;
183            } else {
184                nastaveni = new Nastaveni();
185                log.log(Level.SEVERE, "Nepodařilo se načíst nastavení: není instancí");
186            }
187
188            nactiNastaveniGUI();
189
190            log.log(Level.INFO, "Nastavení bylo načteno.");
191        } catch (FileNotFoundException ex) {
192            log.log(Level.SEVERE, "Nepodařilo se načíst nastavení: soubor nenalezen", ex);
193        } catch (IOException ex) {
194            log.log(Level.SEVERE, "Nastavení se nepodařilo načíst: I/O.", ex);
195        }
196    }
197
198    /** Vytvoří (pokud neexistuje) v domovském adresáři složku, kam se ukládá nastavení a případně logy */
199    private static boolean vytvorSlozkuProgramu() {
200        if (new File(getCestaKeSlozceProgramu()).mkdirs()) {
201            log.log(Level.INFO, "Složka pro nastavení programu byla vytvořena: " + getCestaKeSlozceProgramu());
202            return true;
203        } else {
204            return false;
205        }
206    }
207
208    /** Uloží nastavení do souboru */
209    private void ulozNastaveni() {
210        try {
211            ulozNastaveniGUI();
212
213            vytvorSlozkuProgramu();
214
215            XMLEncoder e = new XMLEncoder(new BufferedOutputStream(new GZIPOutputStream(new FileOutputStream(getCestaKNastaveni()))));
216            e.writeObject(nastaveni);
217            e.close();
218            log.log(Level.INFO, "Nastavení bylo uloženo.");
219        } catch (FileNotFoundException ex) {
220            log.log(Level.SEVERE, "Nastavení se nepodařilo uložit: soubor nenalezen.", ex);
221        } catch (IOException ex) {
222            log.log(Level.SEVERE, "Nastavení se nepodařilo uložit: I/O.", ex);
223        }
224    }
225
226    /** Posbírá zadané hodnoty z GUI a uloží je do objektu nastaveni */
227    private void ulozNastaveniGUI() {
228        nastaveni.setDatabaze(vstupDatabaze.getText());
229        nastaveni.setDbHeslo(vstupDBheslo.getPassword());
230        nastaveni.setDbJmeno(vstupDBjmeno.getText());
231        nastaveni.setLimitZprav((Integer) vstupSMTPlimitPrijemcu.getValue());
232        nastaveni.setPostovniHeslo(vstupSMTPheslo.getPassword());
233        nastaveni.setPostovniJmeno(vstupSMTPjmeno.getText());
234        nastaveni.setPostovniPort((Integer) vstupSMTPport.getValue());
235        nastaveni.setPostovniServer(vstupSMTPserver.getText());
236        nastaveni.setVychoziPrijemci(prijemciVychozi.getAdresy());
237    }
238
239    /** Aktualizuje GUI formuláře hodnotami z objektu nastaveni */
240    private void nactiNastaveniGUI() {
241        vstupDatabaze.setText(nastaveni.getDatabaze());
242        if (nastaveni.getDbHeslo() != null) {
243            vstupDBheslo.setText(String.valueOf(nastaveni.getDbHeslo()));
244        }
245        vstupDBjmeno.setText(nastaveni.getDbJmeno());
246        vstupSMTPlimitPrijemcu.setValue(nastaveni.getLimitZprav());
247        if (nastaveni.getPostovniHeslo() != null) {
248            vstupSMTPheslo.setText(String.valueOf(nastaveni.getPostovniHeslo()));
249        }
250        vstupSMTPjmeno.setText(nastaveni.getPostovniJmeno());
251        vstupSMTPport.setValue(nastaveni.getPostovniPort());
252        vstupSMTPserver.setText(nastaveni.getPostovniServer());
253        prijemciVychozi.setAdresy(nastaveni.getVychoziPrijemci());
254    }
255
256    protected static void zobrazChybovyDialog(Component vlastnik, String strucnaZprava, Throwable vyjimka, Level zavaznost, boolean logovat) {
257        zobrazChybovyDialog(vlastnik, "Chyba", strucnaZprava, null, vyjimka, zavaznost, logovat);
258    }
259
260    protected static void zobrazInformacniDialog(Component vlastnik, String nadpis, String text, boolean loguj) {
261        JOptionPane.showMessageDialog(vlastnik, text, nadpis, JOptionPane.INFORMATION_MESSAGE);
262        if (loguj) {
263            log.log(Level.INFO, nadpis + ": " + text);
264        }
265    }
266
267    protected static void zobrazChybovyDialog(Component vlastnik, String nadpis, String strucnaZprava, String podrobnaZprava, Throwable vyjimka, Level zavaznost, boolean logovat) {
268        if (logovat) {
269            log.log(zavaznost, strucnaZprava, vyjimka);
270        }
271
272        JXErrorPane chybovyPanel = new JXErrorPane();
273        ErrorInfo chybovaInformace = new ErrorInfo(nadpis, strucnaZprava, podrobnaZprava, null, vyjimka, zavaznost, null);
274        chybovyPanel.setErrorInfo(chybovaInformace);
275        JDialog dialog = JXErrorPane.createDialog(vlastnik, chybovyPanel);
276        dialog.setVisible(true);
277    }
278
279    private void zobrazChybovyDialog(String strucnaZprava, Throwable vyjimka, Level zavaznost, boolean logovat) {
280        zobrazChybovyDialog(this, strucnaZprava, vyjimka, zavaznost, logovat);
281    }
282
283    private void zobrazInformacniDialog(String nadpis, String text, boolean loguj) {
284        zobrazInformacniDialog(this, nadpis, text, loguj);
285    }
286
287    private void zobrazChybovyDialog(String nadpis, String strucnaZprava, String podrobnaZprava, Throwable vyjimka, Level zavaznost, boolean logovat) {
288        zobrazChybovyDialog(this, nadpis, strucnaZprava, podrobnaZprava, vyjimka, zavaznost, logovat);
289    }
290
291    /** This method is called from within the constructor to
292     * initialize the form.
293     * WARNING: Do NOT modify this code. The content of this method is
294     * always regenerated by the Form Editor.
295     */
296    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
297    private void initComponents() {
298
299        panelDatabaze = new org.jdesktop.swingx.JXPanel();
300        jLabel9 = new javax.swing.JLabel();
301        vstupDatabaze = new javax.swing.JTextField();
302        jLabel10 = new javax.swing.JLabel();
303        vstupDBjmeno = new javax.swing.JTextField();
304        vstupDBheslo = new javax.swing.JPasswordField();
305        jLabel11 = new javax.swing.JLabel();
306        vyzkousetPripojeniTlacitko = new javax.swing.JButton();
307        vystupDBzprava = new javax.swing.JLabel();
308        panelOdeslat = new org.jdesktop.swingx.JXPanel();
309        jPanel1 = new javax.swing.JPanel();
310        rozeslatZkusebniTlacitko = new javax.swing.JButton();
311        rozeslatHromadnouZpravuTlacitko = new javax.swing.JButton();
312        zobrazitVsechnyPrijemceTlacitko = new javax.swing.JButton();
313        prijemciZkusebni = new cz.frantovo.superPostak.PanelPrijemcu();
314        jSeparator2 = new javax.swing.JSeparator();
315        jLabel14 = new javax.swing.JLabel();
316        panelPrijemci = new org.jdesktop.swingx.JXPanel();
317        jLabel13 = new javax.swing.JLabel();
318        jScrollPane3 = new javax.swing.JScrollPane();
319        vstupSQL = new javax.swing.JTextArea();
320        vyzkousetSQLTlacitko = new javax.swing.JButton();
321        vystupSQLZprava = new javax.swing.JLabel();
322        prijemciDodatecni = new cz.frantovo.superPostak.PanelPrijemcu();
323        jSeparator1 = new javax.swing.JSeparator();
324        jLabel16 = new javax.swing.JLabel();
325        zobrazitSQLPrijemceTlacitko = new javax.swing.JButton();
326        panelServer = new org.jdesktop.swingx.JXPanel();
327        jLabel4 = new javax.swing.JLabel();
328        jLabel5 = new javax.swing.JLabel();
329        vstupSMTPserver = new javax.swing.JTextField();
330        vstupSMTPport = new javax.swing.JSpinner();
331        napovedaSMTPscroll = new javax.swing.JScrollPane();
332        napovedaSMTP = new javax.swing.JTextArea();
333        jLabel6 = new javax.swing.JLabel();
334        vstupSMTPjmeno = new javax.swing.JTextField();
335        vstupSMTPheslo = new javax.swing.JPasswordField();
336        jLabel7 = new javax.swing.JLabel();
337        vstupSMTPlimitPrijemcu = new javax.swing.JSpinner();
338        jLabel8 = new javax.swing.JLabel();
339        panelVychoziPrijemci = new org.jdesktop.swingx.JXPanel();
340        prijemciVychozi = new cz.frantovo.superPostak.PanelPrijemcu();
341        jLabel12 = new javax.swing.JLabel();
342        panelZprava = new org.jdesktop.swingx.JXPanel();
343        jLabel1 = new javax.swing.JLabel();
344        vstupPredmet = new javax.swing.JTextField();
345        jLabel2 = new javax.swing.JLabel();
346        vstupJmenoOdesilatele = new javax.swing.JTextField();
347        vstupAdresaOdesilatele = new javax.swing.JTextField();
348        jScrollPane1 = new javax.swing.JScrollPane();
349        vstupZprava = new javax.swing.JTextArea();
350        jLabel15 = new javax.swing.JLabel();
351        vstupFormatHTML = new javax.swing.JCheckBox();
352        odpovedetKomuOdkaz = new org.jdesktop.swingx.JXHyperlink();
353        odpovedetKomuDialog = new javax.swing.JDialog();
354        jLabel18 = new javax.swing.JLabel();
355        jLabel19 = new javax.swing.JLabel();
356        jLabel17 = new javax.swing.JLabel();
357        odpovedetKomuJmeno = new javax.swing.JTextField();
358        odpovedetKomuAdresa = new javax.swing.JTextField();
359        odpovedetKomuHotovo = new javax.swing.JButton();
360        jXHeader1 = new org.jdesktop.swingx.JXHeader();
361        taskPanel = new org.jdesktop.swingx.JXTaskPaneContainer();
362        jXTaskPane1 = new org.jdesktop.swingx.JXTaskPane();
363        lnText = new org.jdesktop.swingx.JXHyperlink();
364        lnPrijemci = new org.jdesktop.swingx.JXHyperlink();
365        lnOdeslat = new org.jdesktop.swingx.JXHyperlink();
366        jXTaskPane2 = new org.jdesktop.swingx.JXTaskPane();
367        lnServer = new org.jdesktop.swingx.JXHyperlink();
368        lnDatabaze = new org.jdesktop.swingx.JXHyperlink();
369        lnVychoziPrijemci = new org.jdesktop.swingx.JXHyperlink();
370        panel = new org.jdesktop.swingx.JXPanel();
371
372        jLabel9.setText("Databáze");
373
374        jLabel10.setText("Jméno");
375
376        jLabel11.setText("Heslo");
377
378        vyzkousetPripojeniTlacitko.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/fork.png"))); // NOI18N
379        vyzkousetPripojeniTlacitko.setMnemonic('y');
380        vyzkousetPripojeniTlacitko.setText("Vyzkoušet spojení");
381        vyzkousetPripojeniTlacitko.addActionListener(new java.awt.event.ActionListener() {
382            public void actionPerformed(java.awt.event.ActionEvent evt) {
383                vyzkousetPripojeniTlacitkoActionPerformed(evt);
384            }
385        });
386
387        vystupDBzprava.setText(" ");
388
389        javax.swing.GroupLayout panelDatabazeLayout = new javax.swing.GroupLayout(panelDatabaze);
390        panelDatabaze.setLayout(panelDatabazeLayout);
391        panelDatabazeLayout.setHorizontalGroup(
392            panelDatabazeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
393            .addGroup(panelDatabazeLayout.createSequentialGroup()
394                .addContainerGap()
395                .addGroup(panelDatabazeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
396                    .addGroup(panelDatabazeLayout.createSequentialGroup()
397                        .addGroup(panelDatabazeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
398                            .addComponent(jLabel9)
399                            .addComponent(jLabel10)
400                            .addComponent(jLabel11))
401                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
402                        .addGroup(panelDatabazeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
403                            .addComponent(vstupDatabaze, javax.swing.GroupLayout.DEFAULT_SIZE, 257, Short.MAX_VALUE)
404                            .addComponent(vstupDBjmeno, javax.swing.GroupLayout.DEFAULT_SIZE, 257, Short.MAX_VALUE)
405                            .addGroup(panelDatabazeLayout.createSequentialGroup()
406                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
407                                .addComponent(vstupDBheslo, javax.swing.GroupLayout.DEFAULT_SIZE, 257, Short.MAX_VALUE))))
408                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelDatabazeLayout.createSequentialGroup()
409                        .addComponent(vystupDBzprava, javax.swing.GroupLayout.DEFAULT_SIZE, 155, Short.MAX_VALUE)
410                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
411                        .addComponent(vyzkousetPripojeniTlacitko)))
412                .addContainerGap())
413        );
414        panelDatabazeLayout.setVerticalGroup(
415            panelDatabazeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
416            .addGroup(panelDatabazeLayout.createSequentialGroup()
417                .addContainerGap()
418                .addGroup(panelDatabazeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
419                    .addComponent(jLabel9)
420                    .addComponent(vstupDatabaze, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
421                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
422                .addGroup(panelDatabazeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
423                    .addComponent(jLabel10)
424                    .addComponent(vstupDBjmeno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
425                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
426                .addGroup(panelDatabazeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
427                    .addComponent(jLabel11)
428                    .addComponent(vstupDBheslo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
429                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
430                .addGroup(panelDatabazeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
431                    .addComponent(vyzkousetPripojeniTlacitko)
432                    .addComponent(vystupDBzprava))
433                .addContainerGap(183, Short.MAX_VALUE))
434        );
435
436        rozeslatZkusebniTlacitko.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/apply.png"))); // NOI18N
437        rozeslatZkusebniTlacitko.setMnemonic('u');
438        rozeslatZkusebniTlacitko.setText("Rozeslat zkušební");
439        rozeslatZkusebniTlacitko.addActionListener(new java.awt.event.ActionListener() {
440            public void actionPerformed(java.awt.event.ActionEvent evt) {
441                rozeslatZkusebniTlacitkoActionPerformed(evt);
442            }
443        });
444
445        rozeslatHromadnouZpravuTlacitko.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/adept_commit.png"))); // NOI18N
446        rozeslatHromadnouZpravuTlacitko.setMnemonic('h');
447        rozeslatHromadnouZpravuTlacitko.setText("Rozeslat hromadnou zprávu");
448        rozeslatHromadnouZpravuTlacitko.addActionListener(new java.awt.event.ActionListener() {
449            public void actionPerformed(java.awt.event.ActionEvent evt) {
450                rozeslatHromadnouZpravuTlacitkoActionPerformed(evt);
451            }
452        });
453
454        zobrazitVsechnyPrijemceTlacitko.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/zobrazit_adresy.png"))); // NOI18N
455        zobrazitVsechnyPrijemceTlacitko.setToolTipText("<html>\nZobrazí seznam všech příjemcům, kterým bude odeslána zpráva.<br/>\n(Při velkých počtech záznamů může být tato operace náročná.)\n</html>");
456        zobrazitVsechnyPrijemceTlacitko.addActionListener(new java.awt.event.ActionListener() {
457            public void actionPerformed(java.awt.event.ActionEvent evt) {
458                zobrazitVsechnyPrijemceTlacitkoActionPerformed(evt);
459            }
460        });
461
462        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
463        jPanel1.setLayout(jPanel1Layout);
464        jPanel1Layout.setHorizontalGroup(
465            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
466            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
467                .addContainerGap(106, Short.MAX_VALUE)
468                .addComponent(rozeslatZkusebniTlacitko)
469                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
470                .addComponent(rozeslatHromadnouZpravuTlacitko)
471                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
472                .addComponent(zobrazitVsechnyPrijemceTlacitko)
473                .addContainerGap())
474        );
475        jPanel1Layout.setVerticalGroup(
476            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
477            .addGroup(jPanel1Layout.createSequentialGroup()
478                .addContainerGap()
479                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
480                    .addComponent(rozeslatHromadnouZpravuTlacitko)
481                    .addComponent(zobrazitVsechnyPrijemceTlacitko)
482                    .addComponent(rozeslatZkusebniTlacitko))
483                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
484        );
485
486        jLabel14.setText("Zkušební příjemci");
487
488        javax.swing.GroupLayout panelOdeslatLayout = new javax.swing.GroupLayout(panelOdeslat);
489        panelOdeslat.setLayout(panelOdeslatLayout);
490        panelOdeslatLayout.setHorizontalGroup(
491            panelOdeslatLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
492            .addGroup(panelOdeslatLayout.createSequentialGroup()
493                .addContainerGap()
494                .addGroup(panelOdeslatLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
495                    .addComponent(prijemciZkusebni, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 535, Short.MAX_VALUE)
496                    .addComponent(jSeparator2, javax.swing.GroupLayout.DEFAULT_SIZE, 535, Short.MAX_VALUE)
497                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
498                    .addComponent(jLabel14))
499                .addContainerGap())
500        );
501        panelOdeslatLayout.setVerticalGroup(
502            panelOdeslatLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
503            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelOdeslatLayout.createSequentialGroup()
504                .addContainerGap()
505                .addComponent(jLabel14)
506                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
507                .addComponent(prijemciZkusebni, javax.swing.GroupLayout.DEFAULT_SIZE, 153, Short.MAX_VALUE)
508                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
509                .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
510                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
511                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
512                .addContainerGap())
513        );
514
515        jLabel13.setText("SQL dotaz");
516
517        vstupSQL.setColumns(20);
518        vstupSQL.setRows(5);
519        jScrollPane3.setViewportView(vstupSQL);
520
521        vyzkousetSQLTlacitko.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/fork.png"))); // NOI18N
522        vyzkousetSQLTlacitko.setMnemonic('y');
523        vyzkousetSQLTlacitko.setText("Vyzkoušet");
524        vyzkousetSQLTlacitko.addActionListener(new java.awt.event.ActionListener() {
525            public void actionPerformed(java.awt.event.ActionEvent evt) {
526                vyzkousetSQLTlacitkoActionPerformed(evt);
527            }
528        });
529
530        vystupSQLZprava.setText(" ");
531
532        prijemciDodatecni.setToolTipText("Zde můžete dopnit další přijemce.");
533
534        jLabel16.setText("Dodateční příjemci:");
535
536        zobrazitSQLPrijemceTlacitko.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/zobrazit_adresy.png"))); // NOI18N
537        zobrazitSQLPrijemceTlacitko.setToolTipText("<html>\nZobrazí seznam adres načtených z databáze.<br/>\n(Při velkých počtech záznamů může být tato operace náročná.)\n</html>");
538        zobrazitSQLPrijemceTlacitko.addActionListener(new java.awt.event.ActionListener() {
539            public void actionPerformed(java.awt.event.ActionEvent evt) {
540                zobrazitSQLPrijemceTlacitkoActionPerformed(evt);
541            }
542        });
543
544        javax.swing.GroupLayout panelPrijemciLayout = new javax.swing.GroupLayout(panelPrijemci);
545        panelPrijemci.setLayout(panelPrijemciLayout);
546        panelPrijemciLayout.setHorizontalGroup(
547            panelPrijemciLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
548            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelPrijemciLayout.createSequentialGroup()
549                .addContainerGap()
550                .addGroup(panelPrijemciLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
551                    .addComponent(prijemciDodatecni, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 344, Short.MAX_VALUE)
552                    .addComponent(jSeparator1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 344, Short.MAX_VALUE)
553                    .addComponent(jScrollPane3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 344, Short.MAX_VALUE)
554                    .addComponent(jLabel13, javax.swing.GroupLayout.Alignment.LEADING)
555                    .addGroup(panelPrijemciLayout.createSequentialGroup()
556                        .addComponent(vystupSQLZprava, javax.swing.GroupLayout.DEFAULT_SIZE, 52, Short.MAX_VALUE)
557                        .addGap(127, 127, 127)
558                        .addComponent(vyzkousetSQLTlacitko)
559                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
560                        .addComponent(zobrazitSQLPrijemceTlacitko))
561                    .addComponent(jLabel16, javax.swing.GroupLayout.Alignment.LEADING))
562                .addContainerGap())
563        );
564        panelPrijemciLayout.setVerticalGroup(
565            panelPrijemciLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
566            .addGroup(panelPrijemciLayout.createSequentialGroup()
567                .addContainerGap()
568                .addComponent(jLabel13)
569                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
570                .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
571                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
572                .addGroup(panelPrijemciLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
573                    .addComponent(vystupSQLZprava, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
574                    .addComponent(zobrazitSQLPrijemceTlacitko)
575                    .addComponent(vyzkousetSQLTlacitko))
576                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
577                .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
578                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
579                .addComponent(jLabel16)
580                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
581                .addComponent(prijemciDodatecni, javax.swing.GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE)
582                .addContainerGap())
583        );
584
585        jLabel4.setText("SMTP server");
586
587        jLabel5.setText("Port");
588
589        vstupSMTPserver.setText("localhost");
590
591        vstupSMTPport.setValue(25);
592
593        napovedaSMTP.setColumns(20);
594        napovedaSMTP.setEditable(false);
595        napovedaSMTP.setLineWrap(true);
596        napovedaSMTP.setRows(5);
597        napovedaSMTP.setText("Tip: některé SMTP servery mají omezený seznam počítačů, ze kterých přijímají poštu");
598        napovedaSMTP.setWrapStyleWord(true);
599        napovedaSMTPscroll.setViewportView(napovedaSMTP);
600
601        jLabel6.setText("Jméno");
602
603        jLabel7.setText("Heslo");
604
605        vstupSMTPlimitPrijemcu.setValue(1000);
606
607        jLabel8.setText("Limit příjemců");
608
609        javax.swing.GroupLayout panelServerLayout = new javax.swing.GroupLayout(panelServer);
610        panelServer.setLayout(panelServerLayout);
611        panelServerLayout.setHorizontalGroup(
612            panelServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
613            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelServerLayout.createSequentialGroup()
614                .addContainerGap()
615                .addGroup(panelServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
616                    .addComponent(napovedaSMTPscroll, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 318, Short.MAX_VALUE)
617                    .addGroup(panelServerLayout.createSequentialGroup()
618                        .addGroup(panelServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
619                            .addComponent(jLabel4)
620                            .addComponent(jLabel6)
621                            .addComponent(jLabel5)
622                            .addComponent(jLabel7)
623                            .addComponent(jLabel8))
624                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
625                        .addGroup(panelServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
626                            .addComponent(vstupSMTPserver, javax.swing.GroupLayout.DEFAULT_SIZE, 230, Short.MAX_VALUE)
627                            .addComponent(vstupSMTPport, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 230, Short.MAX_VALUE)
628                            .addComponent(vstupSMTPjmeno, javax.swing.GroupLayout.DEFAULT_SIZE, 230, Short.MAX_VALUE)
629                            .addComponent(vstupSMTPheslo, javax.swing.GroupLayout.DEFAULT_SIZE, 230, Short.MAX_VALUE)
630                            .addComponent(vstupSMTPlimitPrijemcu, javax.swing.GroupLayout.DEFAULT_SIZE, 230, Short.MAX_VALUE))))
631                .addContainerGap())
632        );
633        panelServerLayout.setVerticalGroup(
634            panelServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
635            .addGroup(panelServerLayout.createSequentialGroup()
636                .addContainerGap()
637                .addGroup(panelServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
638                    .addComponent(jLabel4)
639                    .addComponent(vstupSMTPserver, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
640                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
641                .addGroup(panelServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
642                    .addComponent(vstupSMTPport, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
643                    .addComponent(jLabel5))
644                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
645                .addGroup(panelServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
646                    .addComponent(jLabel6)
647                    .addComponent(vstupSMTPjmeno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
648                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
649                .addGroup(panelServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
650                    .addComponent(vstupSMTPheslo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
651                    .addComponent(jLabel7))
652                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
653                .addGroup(panelServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
654                    .addComponent(vstupSMTPlimitPrijemcu, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
655                    .addComponent(jLabel8))
656                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
657                .addComponent(napovedaSMTPscroll, javax.swing.GroupLayout.DEFAULT_SIZE, 145, Short.MAX_VALUE)
658                .addContainerGap())
659        );
660
661        jLabel12.setText("Těmto lidem přijde hromadný e-mail vždy (netýká se zkušebního rozeslání zprávy).");
662
663        javax.swing.GroupLayout panelVychoziPrijemciLayout = new javax.swing.GroupLayout(panelVychoziPrijemci);
664        panelVychoziPrijemci.setLayout(panelVychoziPrijemciLayout);
665        panelVychoziPrijemciLayout.setHorizontalGroup(
666            panelVychoziPrijemciLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
667            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelVychoziPrijemciLayout.createSequentialGroup()
668                .addContainerGap()
669                .addGroup(panelVychoziPrijemciLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
670                    .addComponent(prijemciVychozi, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE)
671                    .addComponent(jLabel12, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE))
672                .addContainerGap())
673        );
674        panelVychoziPrijemciLayout.setVerticalGroup(
675            panelVychoziPrijemciLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
676            .addGroup(panelVychoziPrijemciLayout.createSequentialGroup()
677                .addContainerGap()
678                .addComponent(jLabel12)
679                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
680                .addComponent(prijemciVychozi, javax.swing.GroupLayout.DEFAULT_SIZE, 261, Short.MAX_VALUE)
681                .addContainerGap())
682        );
683
684        jLabel1.setLabelFor(vstupPredmet);
685        jLabel1.setText("Předmět");
686
687        vstupPredmet.addActionListener(new java.awt.event.ActionListener() {
688            public void actionPerformed(java.awt.event.ActionEvent evt) {
689                vstupPredmetActionPerformed(evt);
690            }
691        });
692
693        jLabel2.setText("Jméno odesílatele");
694
695        vstupZprava.setColumns(20);
696        vstupZprava.setRows(5);
697        jScrollPane1.setViewportView(vstupZprava);
698
699        jLabel15.setText("Formát zprávy");
700
701        vstupFormatHTML.setMnemonic('h');
702        vstupFormatHTML.setText("HTML");
703        vstupFormatHTML.setToolTipText("Při nezaškrtnutí se odešle jako prostý text");
704
705        odpovedetKomuOdkaz.setForeground(javax.swing.UIManager.getDefaults().getColor("windowText"));
706        odpovedetKomuOdkaz.setMnemonic('e');
707        odpovedetKomuOdkaz.setText("Adresa odesílatele");
708        odpovedetKomuOdkaz.setToolTipText("<html><p>Klikněte sem pro nastavení adresy,</p><p>na kterou mají chodit odpovědi</p></html>");
709        odpovedetKomuOdkaz.setClickedColor(javax.swing.UIManager.getDefaults().getColor("windowText"));
710        odpovedetKomuOdkaz.setUnclickedColor(javax.swing.UIManager.getDefaults().getColor("windowText"));
711        odpovedetKomuOdkaz.addActionListener(new java.awt.event.ActionListener() {
712            public void actionPerformed(java.awt.event.ActionEvent evt) {
713                odpovedetKomuOdkazActionPerformed(evt);
714            }
715        });
716
717        javax.swing.GroupLayout panelZpravaLayout = new javax.swing.GroupLayout(panelZprava);
718        panelZprava.setLayout(panelZpravaLayout);
719        panelZpravaLayout.setHorizontalGroup(
720            panelZpravaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
721            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelZpravaLayout.createSequentialGroup()
722                .addContainerGap()
723                .addGroup(panelZpravaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
724                    .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 438, Short.MAX_VALUE)
725                    .addGroup(panelZpravaLayout.createSequentialGroup()
726                        .addGroup(panelZpravaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
727                            .addGroup(panelZpravaLayout.createSequentialGroup()
728                                .addGroup(panelZpravaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
729                                    .addComponent(jLabel2)
730                                    .addComponent(jLabel1))
731                                .addGap(17, 17, 17))
732                            .addGroup(panelZpravaLayout.createSequentialGroup()
733                                .addComponent(odpovedetKomuOdkaz, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
734                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)))
735                        .addGroup(panelZpravaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
736                            .addComponent(vstupJmenoOdesilatele, javax.swing.GroupLayout.DEFAULT_SIZE, 328, Short.MAX_VALUE)
737                            .addComponent(vstupAdresaOdesilatele, javax.swing.GroupLayout.DEFAULT_SIZE, 328, Short.MAX_VALUE)
738                            .addComponent(vstupPredmet, javax.swing.GroupLayout.DEFAULT_SIZE, 328, Short.MAX_VALUE)))
739                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, panelZpravaLayout.createSequentialGroup()
740                        .addComponent(jLabel15)
741                        .addGap(33, 33, 33)
742                        .addComponent(vstupFormatHTML, javax.swing.GroupLayout.DEFAULT_SIZE, 81, Short.MAX_VALUE)
743                        .addGap(247, 247, 247)))
744                .addContainerGap())
745        );
746        panelZpravaLayout.setVerticalGroup(
747            panelZpravaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
748            .addGroup(panelZpravaLayout.createSequentialGroup()
749                .addContainerGap()
750                .addGroup(panelZpravaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
751                    .addComponent(jLabel1)
752                    .addComponent(vstupPredmet, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
753                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
754                .addGroup(panelZpravaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
755                    .addComponent(jLabel2)
756                    .addComponent(vstupJmenoOdesilatele, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
757                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
758                .addGroup(panelZpravaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
759                    .addComponent(vstupAdresaOdesilatele, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
760                    .addComponent(odpovedetKomuOdkaz, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
761                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
762                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 184, Short.MAX_VALUE)
763                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
764                .addGroup(panelZpravaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
765                    .addComponent(jLabel15)
766                    .addComponent(vstupFormatHTML))
767                .addContainerGap())
768        );
769
770        odpovedetKomuDialog.setTitle("Adresa pro odpovědi");
771        odpovedetKomuDialog.setModal(true);
772
773        jLabel18.setText("Jméno");
774
775        jLabel19.setText("Adresa");
776
777        jLabel17.setText("<html>\n<p>Pokud bude příjemce na hromadnou zprávu odpovídat,</p>\n<p>odpověď přijde na tuto adresu.</p>\n<p>Pokud tyto údaje nevyplníte, nebo zadáte chybný e-mail,</p>\n<p>budou odpovědi chodit odesílateli.</p>\n</html>");
778
779        odpovedetKomuHotovo.setText("Hotovo");
780        odpovedetKomuHotovo.addActionListener(new java.awt.event.ActionListener() {
781            public void actionPerformed(java.awt.event.ActionEvent evt) {
782                odpovedetKomuHotovoActionPerformed(evt);
783            }
784        });
785
786        javax.swing.GroupLayout odpovedetKomuDialogLayout = new javax.swing.GroupLayout(odpovedetKomuDialog.getContentPane());
787        odpovedetKomuDialog.getContentPane().setLayout(odpovedetKomuDialogLayout);
788        odpovedetKomuDialogLayout.setHorizontalGroup(
789            odpovedetKomuDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
790            .addGroup(odpovedetKomuDialogLayout.createSequentialGroup()
791                .addContainerGap()
792                .addGroup(odpovedetKomuDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
793                    .addGroup(odpovedetKomuDialogLayout.createSequentialGroup()
794                        .addGroup(odpovedetKomuDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
795                            .addComponent(jLabel19)
796                            .addComponent(jLabel18))
797                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
798                        .addGroup(odpovedetKomuDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
799                            .addComponent(odpovedetKomuAdresa, javax.swing.GroupLayout.DEFAULT_SIZE, 332, Short.MAX_VALUE)
800                            .addComponent(odpovedetKomuJmeno, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 332, Short.MAX_VALUE)))
801                    .addComponent(jLabel17, javax.swing.GroupLayout.DEFAULT_SIZE, 382, Short.MAX_VALUE)
802                    .addComponent(odpovedetKomuHotovo, javax.swing.GroupLayout.Alignment.TRAILING))
803                .addContainerGap())
804        );
805        odpovedetKomuDialogLayout.setVerticalGroup(
806            odpovedetKomuDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
807            .addGroup(odpovedetKomuDialogLayout.createSequentialGroup()
808                .addContainerGap()
809                .addGroup(odpovedetKomuDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
810                    .addComponent(jLabel18)
811                    .addComponent(odpovedetKomuJmeno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
812                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
813                .addGroup(odpovedetKomuDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
814                    .addComponent(jLabel19)
815                    .addComponent(odpovedetKomuAdresa, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
816                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
817                .addComponent(jLabel17)
818                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
819                .addComponent(odpovedetKomuHotovo)
820                .addContainerGap())
821        );
822
823        setTitle("SuperPošťák");
824        addWindowListener(new java.awt.event.WindowAdapter() {
825            public void windowClosing(java.awt.event.WindowEvent evt) {
826                formWindowClosing(evt);
827            }
828        });
829
830        jXHeader1.setDescription("Program pro posílání hromadných zpráv elektronickou poštou.\nNezneužívejte pro rozesílání spamu.");
831        jXHeader1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/xfmail.png"))); // NOI18N
832        jXHeader1.setTitle("SuperPošťák");
833
834        taskPanel.setBackground(javax.swing.UIManager.getDefaults().getColor("Button.background"));
835
836        jXTaskPane1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/mail_generic.png"))); // NOI18N
837        jXTaskPane1.setTitle("Hromadná zpráva");
838
839        lnText.setMnemonic('z');
840        lnText.setText("Text zprávy");
841        lnText.setActionCommand("Zpráva");
842        lnText.addActionListener(new java.awt.event.ActionListener() {
843            public void actionPerformed(java.awt.event.ActionEvent evt) {
844                lnTextActionPerformed(evt);
845            }
846        });
847        jXTaskPane1.getContentPane().add(lnText);
848
849        lnPrijemci.setMnemonic('p');
850        lnPrijemci.setText("Příjemci");
851        lnPrijemci.addActionListener(new java.awt.event.ActionListener() {
852            public void actionPerformed(java.awt.event.ActionEvent evt) {
853                lnPrijemciActionPerformed(evt);
854            }
855        });
856        jXTaskPane1.getContentPane().add(lnPrijemci);
857
858        lnOdeslat.setMnemonic('o');
859        lnOdeslat.setText("Odeslat");
860        lnOdeslat.addActionListener(new java.awt.event.ActionListener() {
861            public void actionPerformed(java.awt.event.ActionEvent evt) {
862                lnOdeslatActionPerformed(evt);
863            }
864        });
865        jXTaskPane1.getContentPane().add(lnOdeslat);
866
867        taskPanel.add(jXTaskPane1);
868
869        jXTaskPane2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/gear.png"))); // NOI18N
870        jXTaskPane2.setTitle("Nastavení");
871
872        lnServer.setMnemonic('s');
873        lnServer.setText("Poštovní server");
874        lnServer.addActionListener(new java.awt.event.ActionListener() {
875            public void actionPerformed(java.awt.event.ActionEvent evt) {
876                lnServerActionPerformed(evt);
877            }
878        });
879        jXTaskPane2.getContentPane().add(lnServer);
880
881        lnDatabaze.setMnemonic('d');
882        lnDatabaze.setText("Databáze");
883        lnDatabaze.addActionListener(new java.awt.event.ActionListener() {
884            public void actionPerformed(java.awt.event.ActionEvent evt) {
885                lnDatabazeActionPerformed(evt);
886            }
887        });
888        jXTaskPane2.getContentPane().add(lnDatabaze);
889
890        lnVychoziPrijemci.setMnemonic('v');
891        lnVychoziPrijemci.setText("Výchozí příjemci");
892        lnVychoziPrijemci.addActionListener(new java.awt.event.ActionListener() {
893            public void actionPerformed(java.awt.event.ActionEvent evt) {
894                lnVychoziPrijemciActionPerformed(evt);
895            }
896        });
897        jXTaskPane2.getContentPane().add(lnVychoziPrijemci);
898
899        taskPanel.add(jXTaskPane2);
900
901        panel.setLayout(new java.awt.CardLayout());
902
903        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
904        getContentPane().setLayout(layout);
905        layout.setHorizontalGroup(
906            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
907            .addGroup(layout.createSequentialGroup()
908                .addComponent(taskPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 196, javax.swing.GroupLayout.PREFERRED_SIZE)
909                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
910                .addComponent(panel, javax.swing.GroupLayout.DEFAULT_SIZE, 342, Short.MAX_VALUE))
911            .addComponent(jXHeader1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 544, Short.MAX_VALUE)
912        );
913        layout.setVerticalGroup(
914            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
915            .addGroup(layout.createSequentialGroup()
916                .addComponent(jXHeader1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
917                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
918                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
919                    .addComponent(taskPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 340, Short.MAX_VALUE)
920                    .addComponent(panel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 340, Short.MAX_VALUE)))
921        );
922
923        pack();
924    }// </editor-fold>//GEN-END:initComponents
925    private void vstupPredmetActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_vstupPredmetActionPerformed
926}//GEN-LAST:event_vstupPredmetActionPerformed
927
928    private void lnTextActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lnTextActionPerformed
929        setPanel(panelZprava);
930    }//GEN-LAST:event_lnTextActionPerformed
931
932    private void lnPrijemciActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lnPrijemciActionPerformed
933        setPanel(panelPrijemci);
934    }//GEN-LAST:event_lnPrijemciActionPerformed
935
936    private void lnOdeslatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lnOdeslatActionPerformed
937        setPanel(panelOdeslat);
938    }//GEN-LAST:event_lnOdeslatActionPerformed
939
940    private void lnServerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lnServerActionPerformed
941        setPanel(panelServer);
942    }//GEN-LAST:event_lnServerActionPerformed
943
944    private void lnDatabazeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lnDatabazeActionPerformed
945        setPanel(panelDatabaze);
946    }//GEN-LAST:event_lnDatabazeActionPerformed
947
948    private void lnVychoziPrijemciActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lnVychoziPrijemciActionPerformed
949        setPanel(panelVychoziPrijemci);
950    }//GEN-LAST:event_lnVychoziPrijemciActionPerformed
951
952    private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
953        ulozNastaveni();
954        log.log(Level.WARNING, "Ukončuji program.");
955    }//GEN-LAST:event_formWindowClosing
956
957    /**
958     * Sestaví zprávu na základě GUI vstupů. Všechno kromě příjemců,
959     * ti se přidají až dodatečně, podle toho,
960     * jestli jde o zkušební nebo skutečné rozesílání.
961     */
962    private HromadnaZprava getZprava() throws UnsupportedEncodingException {
963        HromadnaZprava zprava = new HromadnaZprava();
964        zprava.setOdesilatel(new InternetAddress(vstupAdresaOdesilatele.getText(), vstupJmenoOdesilatele.getText()));
965        zprava.setPredmet(vstupPredmet.getText());
966        zprava.setText(vstupZprava.getText());
967        zprava.setFormatHTML(vstupFormatHTML.isSelected());
968
969        if (Postak.zkontrolujAdresu(odpovedetKomuAdresa.getText())) {
970            InternetAddress komu = new InternetAddress();
971            komu.setPersonal(odpovedetKomuJmeno.getText());
972            komu.setAddress(odpovedetKomuAdresa.getText());
973            zprava.setOdpovedetKomu(komu);
974        }
975
976        return zprava;
977    }
978
979    /** Všichni příjemci, kterým bude odeslána ostrá zpráva. */
980    private ArrayList<InternetAddressKomu> getPrijemciVsichni() throws SQLException, UnsupportedEncodingException {
981        ArrayList<InternetAddressKomu> vsichni = new ArrayList<InternetAddressKomu>();
982        Collection<InternetAddressKomu> adresyVychozi = nastaveni.getVychoziPrijemci();
983        Collection<InternetAddressKomu> adresySQL = getPrijemciSQL();
984        Collection<InternetAddressKomu> adresyDodatecne = prijemciDodatecni.getAdresy();
985
986        if (adresyVychozi != null) {
987            vsichni.addAll(adresyVychozi);
988        }
989        if (adresySQL != null) {
990            vsichni.addAll(adresySQL);
991        }
992        if (adresyDodatecne != null) {
993            vsichni.addAll(adresyDodatecne);
994        }
995        return vsichni;
996    }
997
998    private void rozeslatHromadnouZpravuTlacitkoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rozeslatHromadnouZpravuTlacitkoActionPerformed
999        try {
1000            ulozNastaveniGUI();
1001            HromadnaZprava zprava = getZprava();
1002            zprava.setPrijemci(getPrijemciVsichni());
1003
1004            int volba = JOptionPane.showOptionDialog(this, "Počet příjemců hromadné zprávy: " + zprava.getPrijemci().size() + "\nPřejete si zprávu odeslat?", "Potvrdit odeslání", JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);
1005            if (volba == JOptionPane.YES_OPTION) {
1006                odesli(zprava);
1007                Postak.vypisPrijemce(zprava.getPrijemci());
1008                zobrazInformacniDialog("Odesláno", "Zpráva byla odeslána.\nPočet příjemců: " + zprava.getPrijemci().size(), true);
1009            }
1010        } catch (Exception e) {
1011            zobrazChybovyDialog("Zprávu se nepodařilo odeslat", e, Level.SEVERE, true);
1012        }
1013}//GEN-LAST:event_rozeslatHromadnouZpravuTlacitkoActionPerformed
1014
1015    private void rozeslatZkusebniTlacitkoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rozeslatZkusebniTlacitkoActionPerformed
1016        try {
1017            ulozNastaveniGUI();
1018            HromadnaZprava zprava = getZprava();
1019            zprava.setPrijemci(prijemciZkusebni.getAdresy());
1020
1021            odesli(zprava);
1022
1023            zobrazInformacniDialog("Odesláno", "Zkušební zpráva byla odeslána.\nPočet adresátů: " + zprava.getPrijemci().size(), true);
1024        } catch (Exception e) {
1025            zobrazChybovyDialog("Zkušební zprávu se nepodařilo odeslat", e, Level.SEVERE, true);
1026        }
1027    }//GEN-LAST:event_rozeslatZkusebniTlacitkoActionPerformed
1028
1029    private void vyzkousetPripojeniTlacitkoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_vyzkousetPripojeniTlacitkoActionPerformed
1030        try {
1031            getSpojeni();//GEN-LAST:event_vyzkousetPripojeniTlacitkoActionPerformed
1032            zobrazInformacniDialog("Připojeno k DB", "Připojení k DB proběhlo úspěšně", false);
1033        } catch (SQLException e) {
1034            zobrazChybovyDialog("Spojení s DB", "Připojení k databázi selhalo", null, e, Level.SEVERE, true);
1035        }
1036    }
1037
1038    private void vyzkousetSQLTlacitkoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_vyzkousetSQLTlacitkoActionPerformed
1039        try {
1040            Collection<InternetAddressKomu> adresy = getPrijemciSQL();//GEN-LAST:event_vyzkousetSQLTlacitkoActionPerformed
1041            if (adresy == null) {
1042                zobrazInformacniDialog("SQL dotaz", "Dotaz do databáze neproběhl.\nSQL dotaz je prázdný.", false);
1043            } else {
1044                zobrazInformacniDialog("SQL dotaz", "Dotaz do databáze byl úspěšný.\nPočet získaných záznamů: " + adresy.size(), false);
1045            }
1046        } catch (Exception e) {
1047            zobrazChybovyDialog("SQL dotaz", "Provedení SQL příkazu selhalo selhalo", null, e, Level.SEVERE, true);
1048        }
1049    }
1050
1051    private void zobrazitSQLPrijemceTlacitkoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_zobrazitSQLPrijemceTlacitkoActionPerformed
1052        try {
1053            Collection<InternetAddressKomu> adresy = getPrijemciSQL();
1054
1055            ZobrazovacAdres zobrazovac = new ZobrazovacAdres(this, false);
1056                        zobrazovac.setNastaveni(nastaveni);
1057            zobrazovac.setAdresy(adresy);
1058            zobrazovac.setLocationRelativeTo(this);
1059            zobrazovac.setVisible(true);
1060
1061        } catch (Exception e) {
1062            zobrazChybovyDialog("SQL dotaz", "Provedení SQL příkazu selhalo selhalo", null, e, Level.SEVERE, true);
1063        }
1064    }//GEN-LAST:event_zobrazitSQLPrijemceTlacitkoActionPerformed
1065
1066    private void zobrazitVsechnyPrijemceTlacitkoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_zobrazitVsechnyPrijemceTlacitkoActionPerformed
1067        try {
1068            Collection<InternetAddressKomu> adresy = getPrijemciVsichni();
1069
1070            ZobrazovacAdres zobrazovac = new ZobrazovacAdres(this, false);
1071            zobrazovac.setAdresy(adresy);
1072            zobrazovac.setLocationRelativeTo(this);
1073            zobrazovac.setVisible(true);
1074
1075        } catch (Exception e) {
1076            zobrazChybovyDialog("SQL dotaz", "Provedení SQL příkazu selhalo selhalo", null, e, Level.SEVERE, true);
1077        }
1078    }//GEN-LAST:event_zobrazitVsechnyPrijemceTlacitkoActionPerformed
1079
1080    private void odpovedetKomuOdkazActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_odpovedetKomuOdkazActionPerformed
1081        odpovedetKomuDialog.pack();
1082        odpovedetKomuDialog.setLocationRelativeTo(this);
1083        odpovedetKomuDialog.setModalityType(ModalityType.APPLICATION_MODAL);
1084        odpovedetKomuDialog.getRootPane().setDefaultButton(odpovedetKomuHotovo);
1085        odpovedetKomuDialog.setVisible(true);
1086}//GEN-LAST:event_odpovedetKomuOdkazActionPerformed
1087
1088    private void odpovedetKomuHotovoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_odpovedetKomuHotovoActionPerformed
1089        odpovedetKomuDialog.setVisible(false);
1090}//GEN-LAST:event_odpovedetKomuHotovoActionPerformed
1091
1092    /** Provede uživatelem zadaný SQL dotaz a vrátí získané příjemce */
1093    private Collection<InternetAddressKomu> getPrijemciSQL() throws SQLException, UnsupportedEncodingException {
1094        if ("".equals(vstupSQL.getText())) {
1095            return null;
1096        } else {
1097            return getSpojeni().getAdresy(vstupSQL.getText());
1098        }
1099    }
1100
1101    private DataSQL getSpojeni() throws SQLException {
1102        return Data.getSpojeniSQL(vstupDatabaze.getText(), vstupDBjmeno.getText(), vstupDBheslo.getPassword());
1103    }
1104
1105    /** Obalovací třída, která v průběhu odesílání zobrazuje kurzor s hodinami. */
1106    private void odesli(HromadnaZprava zprava) throws MessagingException {
1107        setCursor(new Cursor(Cursor.WAIT_CURSOR));
1108        try {
1109            postak.setNastaveni(nastaveni);
1110            postak.odesli(zprava);
1111
1112        } catch (MessagingException e) {
1113            throw e;
1114        } finally {
1115            setCursor(Cursor.getDefaultCursor());
1116        }
1117    }
1118
1119    private void setPanel(JComponent komponenta) {
1120
1121        if (panel.getLayout() instanceof CardLayout) {
1122            CardLayout l = (CardLayout) panel.getLayout();
1123            l.show(panel, komponenta.getName());
1124        } else {
1125            log.log(Level.WARNING, "Neplatí: panel.getLayout() instanceof CardLayout");
1126        }
1127
1128    }
1129
1130    /** Změní chování tabulátoru v textovém poli - aby se pomocí TABu dalo skočit na další komponentu */
1131    private void vyresitTabFocusProblem(JTextArea textArea) {
1132        textArea.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, null);
1133        textArea.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, null);
1134    }
1135
1136    public JXTaskPaneContainer getTaskPanel() {
1137        return taskPanel;
1138    }
1139
1140    /**
1141     * @param args the command line arguments
1142     */
1143    public static void main(String args[]) {
1144        final boolean ladit = (args != null && args.length > 0 && args[0].equals("ladit"));
1145
1146        try {
1147            //LookAndFeel laf = UIManager.getLookAndFeel();
1148
1149            //laf = new SubstanceLookAndFeel();
1150            //laf = new SubstanceBusinessLookAndFeel();
1151            //laf = new SubstanceBusinessBlueSteelLookAndFeel();
1152            //laf = new SubstanceBusinessBlackSteelLookAndFeel();
1153
1154            UIManager.setLookAndFeel("org.jvnet.substance.skin.SubstanceBusinessBlueSteelLookAndFeel");
1155        } catch (ClassNotFoundException ex) {
1156            log.log(Level.SEVERE, null, ex);
1157        } catch (InstantiationException ex) {
1158            log.log(Level.SEVERE, null, ex);
1159        } catch (IllegalAccessException ex) {
1160            log.log(Level.SEVERE, null, ex);
1161        } catch (UnsupportedLookAndFeelException ex) {
1162            log.log(Level.SEVERE, null, ex);
1163        }
1164
1165        java.awt.EventQueue.invokeLater(new Runnable() {
1166
1167            public void run() {
1168                new SuperPostak(ladit, true).setVisible(true);
1169            }
1170        });
1171    }
1172    // Variables declaration - do not modify//GEN-BEGIN:variables
1173    private javax.swing.JLabel jLabel1;
1174    private javax.swing.JLabel jLabel10;
1175    private javax.swing.JLabel jLabel11;
1176    private javax.swing.JLabel jLabel12;
1177    private javax.swing.JLabel jLabel13;
1178    private javax.swing.JLabel jLabel14;
1179    private javax.swing.JLabel jLabel15;
1180    private javax.swing.JLabel jLabel16;
1181    private javax.swing.JLabel jLabel17;
1182    private javax.swing.JLabel jLabel18;
1183    private javax.swing.JLabel jLabel19;
1184    private javax.swing.JLabel jLabel2;
1185    private javax.swing.JLabel jLabel4;
1186    private javax.swing.JLabel jLabel5;
1187    private javax.swing.JLabel jLabel6;
1188    private javax.swing.JLabel jLabel7;
1189    private javax.swing.JLabel jLabel8;
1190    private javax.swing.JLabel jLabel9;
1191    private javax.swing.JPanel jPanel1;
1192    private javax.swing.JScrollPane jScrollPane1;
1193    private javax.swing.JScrollPane jScrollPane3;
1194    private javax.swing.JSeparator jSeparator1;
1195    private javax.swing.JSeparator jSeparator2;
1196    private org.jdesktop.swingx.JXHeader jXHeader1;
1197    private org.jdesktop.swingx.JXTaskPane jXTaskPane1;
1198    private org.jdesktop.swingx.JXTaskPane jXTaskPane2;
1199    private org.jdesktop.swingx.JXHyperlink lnDatabaze;
1200    private org.jdesktop.swingx.JXHyperlink lnOdeslat;
1201    private org.jdesktop.swingx.JXHyperlink lnPrijemci;
1202    private org.jdesktop.swingx.JXHyperlink lnServer;
1203    private org.jdesktop.swingx.JXHyperlink lnText;
1204    private org.jdesktop.swingx.JXHyperlink lnVychoziPrijemci;
1205    private javax.swing.JTextArea napovedaSMTP;
1206    private javax.swing.JScrollPane napovedaSMTPscroll;
1207    private javax.swing.JTextField odpovedetKomuAdresa;
1208    private javax.swing.JDialog odpovedetKomuDialog;
1209    private javax.swing.JButton odpovedetKomuHotovo;
1210    private javax.swing.JTextField odpovedetKomuJmeno;
1211    private org.jdesktop.swingx.JXHyperlink odpovedetKomuOdkaz;
1212    private org.jdesktop.swingx.JXPanel panel;
1213    private org.jdesktop.swingx.JXPanel panelDatabaze;
1214    private org.jdesktop.swingx.JXPanel panelOdeslat;
1215    private org.jdesktop.swingx.JXPanel panelPrijemci;
1216    private org.jdesktop.swingx.JXPanel panelServer;
1217    private org.jdesktop.swingx.JXPanel panelVychoziPrijemci;
1218    private org.jdesktop.swingx.JXPanel panelZprava;
1219    private cz.frantovo.superPostak.PanelPrijemcu prijemciDodatecni;
1220    private cz.frantovo.superPostak.PanelPrijemcu prijemciVychozi;
1221    private cz.frantovo.superPostak.PanelPrijemcu prijemciZkusebni;
1222    private javax.swing.JButton rozeslatHromadnouZpravuTlacitko;
1223    private javax.swing.JButton rozeslatZkusebniTlacitko;
1224    private org.jdesktop.swingx.JXTaskPaneContainer taskPanel;
1225    private javax.swing.JTextField vstupAdresaOdesilatele;
1226    private javax.swing.JPasswordField vstupDBheslo;
1227    private javax.swing.JTextField vstupDBjmeno;
1228    private javax.swing.JTextField vstupDatabaze;
1229    private javax.swing.JCheckBox vstupFormatHTML;
1230    private javax.swing.JTextField vstupJmenoOdesilatele;
1231    private javax.swing.JTextField vstupPredmet;
1232    private javax.swing.JPasswordField vstupSMTPheslo;
1233    private javax.swing.JTextField vstupSMTPjmeno;
1234    private javax.swing.JSpinner vstupSMTPlimitPrijemcu;
1235    private javax.swing.JSpinner vstupSMTPport;
1236    private javax.swing.JTextField vstupSMTPserver;
1237    private javax.swing.JTextArea vstupSQL;
1238    private javax.swing.JTextArea vstupZprava;
1239    private javax.swing.JLabel vystupDBzprava;
1240    private javax.swing.JLabel vystupSQLZprava;
1241    private javax.swing.JButton vyzkousetPripojeniTlacitko;
1242    private javax.swing.JButton vyzkousetSQLTlacitko;
1243    private javax.swing.JButton zobrazitSQLPrijemceTlacitko;
1244    private javax.swing.JButton zobrazitVsechnyPrijemceTlacitko;
1245    // End of variables declaration//GEN-END:variables
1246}
Note: See TracBrowser for help on using the browser.