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