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