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