java/SuperPostak/src/cz/frantovo/superPostak/SuperPostak.java
author František Kučera <franta-hg@frantovo.cz>
Fri, 30 Mar 2012 15:20:56 +0200
changeset 14 3a12bd9312b1
parent 13 b15d81be8af3
child 15 9175a185d9c0
permissions -rw-r--r--
Doplňování jména a adresy odesílatele na základě hodnot „odpovědět komu“ (přidáme noreply).
     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 {0} byl úspěšně načten.", jmeno);
   154 		} catch (ClassNotFoundException e) {
   155 			log.log(Level.INFO, "JDBC ovladač pro {0} se nepodařilo načíst.", jmeno);
   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: {0}", 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, "{0}: {1}", new Object[]{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 
  1091 		if (vstupJmenoOdesilatele.getText().isEmpty()) {
  1092 			vstupJmenoOdesilatele.setText(odpovedetKomuJmeno.getText());
  1093 		}
  1094 
  1095 		if (vstupAdresaOdesilatele.getText().isEmpty()) {
  1096 			String[] částiAdresy = odpovedetKomuAdresa.getText().split("@");
  1097 			if (částiAdresy.length == 2) {
  1098 				vstupAdresaOdesilatele.setText("noreply@" + částiAdresy[1]);
  1099 			}
  1100 		}
  1101 }//GEN-LAST:event_odpovedetKomuHotovoActionPerformed
  1102 
  1103 	/** Provede uživatelem zadaný SQL dotaz a vrátí získané příjemce */
  1104 	private Collection<InternetAddressKomu> getPrijemciSQL() throws SQLException, UnsupportedEncodingException {
  1105 		if ("".equals(vstupSQL.getText())) {
  1106 			return null;
  1107 		} else {
  1108 			return getSpojeni().getAdresy(vstupSQL.getText());
  1109 		}
  1110 	}
  1111 
  1112 	private DataSQL getSpojeni() throws SQLException {
  1113 		return Data.getSpojeniSQL(vstupDatabaze.getText(), vstupDBjmeno.getText(), vstupDBheslo.getPassword());
  1114 	}
  1115 
  1116 	/** Obalovací třída, která v průběhu odesílání zobrazuje kurzor s hodinami. */
  1117 	private void odesli(HromadnaZprava zprava) throws MessagingException {
  1118 		setCursor(new Cursor(Cursor.WAIT_CURSOR));
  1119 		try {
  1120 			postak.setNastaveni(nastaveni);
  1121 			postak.odesli(zprava);
  1122 
  1123 		} catch (MessagingException e) {
  1124 			throw e;
  1125 		} finally {
  1126 			setCursor(Cursor.getDefaultCursor());
  1127 		}
  1128 	}
  1129 
  1130 	private void setPanel(JComponent komponenta) {
  1131 
  1132 		if (panel.getLayout() instanceof CardLayout) {
  1133 			CardLayout l = (CardLayout) panel.getLayout();
  1134 			l.show(panel, komponenta.getName());
  1135 		} else {
  1136 			log.log(Level.WARNING, "Neplatí: panel.getLayout() instanceof CardLayout");
  1137 		}
  1138 
  1139 	}
  1140 
  1141 	/** Změní chování tabulátoru v textovém poli - aby se pomocí TABu dalo skočit na další komponentu */
  1142 	private void vyresitTabFocusProblem(JTextArea textArea) {
  1143 		textArea.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, null);
  1144 		textArea.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, null);
  1145 	}
  1146 
  1147 	public JXTaskPaneContainer getTaskPanel() {
  1148 		return taskPanel;
  1149 	}
  1150 
  1151 	/**
  1152 	 * @param args the command line arguments
  1153 	 */
  1154 	public static void main(String args[]) {
  1155 		final boolean ladit = (args != null && args.length > 0 && args[0].equals("ladit"));
  1156 
  1157 		try {
  1158 			//LookAndFeel laf = UIManager.getLookAndFeel();
  1159 
  1160 			//laf = new SubstanceLookAndFeel();
  1161 			//laf = new SubstanceBusinessLookAndFeel();
  1162 			//laf = new SubstanceBusinessBlueSteelLookAndFeel();
  1163 			//laf = new SubstanceBusinessBlackSteelLookAndFeel();
  1164 
  1165 			UIManager.setLookAndFeel("org.jvnet.substance.skin.SubstanceBusinessBlueSteelLookAndFeel");
  1166 		} catch (ClassNotFoundException ex) {
  1167 			log.log(Level.SEVERE, null, ex);
  1168 		} catch (InstantiationException ex) {
  1169 			log.log(Level.SEVERE, null, ex);
  1170 		} catch (IllegalAccessException ex) {
  1171 			log.log(Level.SEVERE, null, ex);
  1172 		} catch (UnsupportedLookAndFeelException ex) {
  1173 			log.log(Level.SEVERE, null, ex);
  1174 		}
  1175 
  1176 		java.awt.EventQueue.invokeLater(new Runnable() {
  1177 
  1178 			public void run() {
  1179 				new SuperPostak(ladit, true).setVisible(true);
  1180 			}
  1181 		});
  1182 	}
  1183     // Variables declaration - do not modify//GEN-BEGIN:variables
  1184     private javax.swing.JLabel jLabel1;
  1185     private javax.swing.JLabel jLabel10;
  1186     private javax.swing.JLabel jLabel11;
  1187     private javax.swing.JLabel jLabel12;
  1188     private javax.swing.JLabel jLabel13;
  1189     private javax.swing.JLabel jLabel14;
  1190     private javax.swing.JLabel jLabel15;
  1191     private javax.swing.JLabel jLabel16;
  1192     private javax.swing.JLabel jLabel17;
  1193     private javax.swing.JLabel jLabel18;
  1194     private javax.swing.JLabel jLabel19;
  1195     private javax.swing.JLabel jLabel2;
  1196     private javax.swing.JLabel jLabel4;
  1197     private javax.swing.JLabel jLabel5;
  1198     private javax.swing.JLabel jLabel6;
  1199     private javax.swing.JLabel jLabel7;
  1200     private javax.swing.JLabel jLabel8;
  1201     private javax.swing.JLabel jLabel9;
  1202     private javax.swing.JPanel jPanel1;
  1203     private javax.swing.JScrollPane jScrollPane1;
  1204     private javax.swing.JScrollPane jScrollPane3;
  1205     private javax.swing.JSeparator jSeparator1;
  1206     private javax.swing.JSeparator jSeparator2;
  1207     private org.jdesktop.swingx.JXHeader jXHeader1;
  1208     private org.jdesktop.swingx.JXTaskPane jXTaskPane1;
  1209     private org.jdesktop.swingx.JXTaskPane jXTaskPane2;
  1210     private org.jdesktop.swingx.JXHyperlink lnDatabaze;
  1211     private org.jdesktop.swingx.JXHyperlink lnOdeslat;
  1212     private org.jdesktop.swingx.JXHyperlink lnPrijemci;
  1213     private org.jdesktop.swingx.JXHyperlink lnServer;
  1214     private org.jdesktop.swingx.JXHyperlink lnText;
  1215     private org.jdesktop.swingx.JXHyperlink lnVychoziPrijemci;
  1216     private javax.swing.JTextArea napovedaSMTP;
  1217     private javax.swing.JScrollPane napovedaSMTPscroll;
  1218     private javax.swing.JTextField odpovedetKomuAdresa;
  1219     private javax.swing.JDialog odpovedetKomuDialog;
  1220     private javax.swing.JButton odpovedetKomuHotovo;
  1221     private javax.swing.JTextField odpovedetKomuJmeno;
  1222     private org.jdesktop.swingx.JXHyperlink odpovedetKomuOdkaz;
  1223     private org.jdesktop.swingx.JXPanel panel;
  1224     private org.jdesktop.swingx.JXPanel panelDatabaze;
  1225     private org.jdesktop.swingx.JXPanel panelOdeslat;
  1226     private org.jdesktop.swingx.JXPanel panelPrijemci;
  1227     private org.jdesktop.swingx.JXPanel panelServer;
  1228     private org.jdesktop.swingx.JXPanel panelVychoziPrijemci;
  1229     private org.jdesktop.swingx.JXPanel panelZprava;
  1230     private cz.frantovo.superPostak.PanelPrijemcu prijemciDodatecni;
  1231     private cz.frantovo.superPostak.PanelPrijemcu prijemciVychozi;
  1232     private cz.frantovo.superPostak.PanelPrijemcu prijemciZkusebni;
  1233     private javax.swing.JButton rozeslatHromadnouZpravuTlacitko;
  1234     private javax.swing.JButton rozeslatZkusebniTlacitko;
  1235     private org.jdesktop.swingx.JXTaskPaneContainer taskPanel;
  1236     private javax.swing.JTextField vstupAdresaOdesilatele;
  1237     private javax.swing.JPasswordField vstupDBheslo;
  1238     private javax.swing.JTextField vstupDBjmeno;
  1239     private javax.swing.JTextField vstupDatabaze;
  1240     private javax.swing.JCheckBox vstupFormatHTML;
  1241     private javax.swing.JTextField vstupJmenoOdesilatele;
  1242     private javax.swing.JTextField vstupPredmet;
  1243     private javax.swing.JPasswordField vstupSMTPheslo;
  1244     private javax.swing.JTextField vstupSMTPjmeno;
  1245     private javax.swing.JSpinner vstupSMTPlimitPrijemcu;
  1246     private javax.swing.JSpinner vstupSMTPport;
  1247     private javax.swing.JTextField vstupSMTPserver;
  1248     private javax.swing.JTextArea vstupSQL;
  1249     private javax.swing.JTextArea vstupZprava;
  1250     private javax.swing.JLabel vystupDBzprava;
  1251     private javax.swing.JLabel vystupSQLZprava;
  1252     private javax.swing.JButton vyzkousetPripojeniTlacitko;
  1253     private javax.swing.JButton vyzkousetSQLTlacitko;
  1254     private javax.swing.JButton zobrazitSQLPrijemceTlacitko;
  1255     private javax.swing.JButton zobrazitVsechnyPrijemceTlacitko;
  1256     // End of variables declaration//GEN-END:variables
  1257 }