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