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