root/java/SuperPostak/src/cz/frantovo/superPostak/SuperPostak.java @ 0:e76872ad5226

Revision 0:e76872ad5226, 65.7 KB (checked in by František Kučera <franta-hg@…>, 15 years ago)

Přidání SuperPošťáka? do Mercurialu (původně byl v Subversionu)
Postak – základ, knihovna
SuperPostak? – GUI nadstavba
SuperPostak?2 – pokus o implementaci aplikace jako modulu pro Netbeans, POZOR: není přidán do Mercurialu, možná později (pravděpodobně se ale nebude používat)

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