root/java/SuperPostak/src/cz/frantovo/superPostak/SuperPostak.java @ 17:9cb46ca7e26c

Revision 17:9cb46ca7e26c, 66.4 KB (checked in by František Kučera <franta-hg@…>, 12 years ago)

#4 multipart/alternative zprávy: XHTML + prostý text (generuje se pomocí XSLT)

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