franta-hg@0: package cz.frantovo.superPostak; franta-hg@0: franta-hg@0: import cz.frantovo.gui.tabulky.TableSorterModel; franta-hg@0: import cz.frantovo.postak.InternetAddressKomu; franta-hg@0: import cz.frantovo.postak.Postak; franta-hg@0: import java.awt.Cursor; franta-hg@0: import java.io.BufferedReader; franta-hg@0: import java.io.File; franta-hg@0: import java.io.FileReader; franta-hg@0: import java.io.FileWriter; franta-hg@0: import java.io.OutputStreamWriter; franta-hg@0: import java.util.ArrayList; franta-hg@0: import java.util.Collection; franta-hg@0: import java.util.HashSet; franta-hg@0: import java.util.logging.Level; franta-hg@0: import java.util.logging.Logger; franta-hg@0: import javax.swing.DefaultListSelectionModel; franta-hg@0: import javax.swing.JFileChooser; franta-hg@0: import javax.swing.event.TableModelEvent; franta-hg@0: import javax.swing.event.TableModelListener; franta-hg@0: import javax.swing.table.TableModel; franta-hg@0: franta-hg@0: /** franta-hg@0: * franta-hg@0: * @author fiki franta-hg@0: */ franta-hg@0: public class PanelPrijemcu extends javax.swing.JPanel { franta-hg@0: franta-hg@0: private static Logger log = Logger.getLogger(PanelPrijemcu.class.getName()); franta-hg@0: private ModelTabulky data = new ModelTabulky(); franta-hg@0: franta-hg@0: /** Creates new form PanelPrijemcu */ franta-hg@0: public PanelPrijemcu() { franta-hg@0: initComponents(); franta-hg@0: tabulka.setModel(data); franta-hg@0: tabulka.setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION); franta-hg@0: } franta-hg@0: franta-hg@0: public ArrayList getAdresy() { franta-hg@0: /** TODO: vracet kopii? */ franta-hg@0: return data.data; franta-hg@0: } franta-hg@0: franta-hg@0: /** franta-hg@0: * @param prijemci pokud je null, nastaví prázdná kolekce. franta-hg@0: */ franta-hg@0: public void setAdresy(Collection adresy) { franta-hg@0: data.data = new ArrayList(); franta-hg@0: pridejAdresu(adresy); franta-hg@0: } franta-hg@0: franta-hg@0: public void pridejAdresu(Collection adresy) { franta-hg@0: if (adresy == null) { franta-hg@0: log.log(Level.FINER, "Prázdná množina adres - nic nepřidáme"); franta-hg@0: } else { franta-hg@0: data.data.addAll(adresy); franta-hg@0: data.upozorniPosluchace(); franta-hg@0: } franta-hg@0: } franta-hg@0: franta-hg@0: /** franta-hg@0: * Pokud je needitovatelný, nelze měnit data v tabuce franta-hg@0: * a z tlačítek je povoleno pouze tlačítko pro uložení do souboru. franta-hg@0: */ franta-hg@0: public void setEditovatelny(boolean editovatelny) { franta-hg@0: otevrit.setEnabled(editovatelny); franta-hg@0: pridat.setEnabled(editovatelny); franta-hg@0: odebrat.setEnabled(editovatelny); franta-hg@0: tabulka.setEnabled(editovatelny); franta-hg@0: } franta-hg@0: franta-hg@0: /** This method is called from within the constructor to franta-hg@0: * initialize the form. franta-hg@0: * WARNING: Do NOT modify this code. The content of this method is franta-hg@0: * always regenerated by the Form Editor. franta-hg@0: */ franta-hg@0: // //GEN-BEGIN:initComponents franta-hg@0: private void initComponents() { franta-hg@0: franta-hg@0: jScrollPane1 = new javax.swing.JScrollPane(); franta-hg@0: tabulka = new cz.frantovo.gui.tabulky.JTable(); franta-hg@0: pridat = new javax.swing.JButton(); franta-hg@0: odebrat = new javax.swing.JButton(); franta-hg@0: ulozit = new javax.swing.JButton(); franta-hg@0: otevrit = new javax.swing.JButton(); franta-hg@0: franta-hg@0: tabulka.setModel(new javax.swing.table.DefaultTableModel( franta-hg@0: new Object [][] { franta-hg@0: {null, null, null, null}, franta-hg@0: {null, null, null, null}, franta-hg@0: {null, null, null, null}, franta-hg@0: {null, null, null, null} franta-hg@0: }, franta-hg@0: new String [] { franta-hg@0: "Title 1", "Title 2", "Title 3", "Title 4" franta-hg@0: } franta-hg@0: )); franta-hg@0: jScrollPane1.setViewportView(tabulka); franta-hg@0: franta-hg@0: pridat.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/vlozit.png"))); // NOI18N franta-hg@0: pridat.setMnemonic('i'); franta-hg@0: pridat.setText("Přidat"); franta-hg@0: pridat.setToolTipText("\nPřidá prázdný řádek pro vložení nového příjemce
\nAby se napsaná změna projevila, je potřeba kliknout jinam do tabulky
\n(tzn. ukončit režim editace buňky)
\n"); franta-hg@0: pridat.addActionListener(new java.awt.event.ActionListener() { franta-hg@0: public void actionPerformed(java.awt.event.ActionEvent evt) { franta-hg@0: pridatActionPerformed(evt); franta-hg@0: } franta-hg@0: }); franta-hg@0: franta-hg@0: odebrat.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/editdelete.png"))); // NOI18N franta-hg@0: odebrat.setMnemonic('r'); franta-hg@0: odebrat.setText("Odebrat"); franta-hg@0: odebrat.setToolTipText("Odebere vybraného příjemce"); franta-hg@0: odebrat.addActionListener(new java.awt.event.ActionListener() { franta-hg@0: public void actionPerformed(java.awt.event.ActionEvent evt) { franta-hg@0: odebratActionPerformed(evt); franta-hg@0: } franta-hg@0: }); franta-hg@0: franta-hg@0: ulozit.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/ulozit.png"))); // NOI18N franta-hg@0: ulozit.setToolTipText("Uložit seznam příjemců do souboru."); franta-hg@0: ulozit.addActionListener(new java.awt.event.ActionListener() { franta-hg@0: public void actionPerformed(java.awt.event.ActionEvent evt) { franta-hg@0: ulozitActionPerformed(evt); franta-hg@0: } franta-hg@0: }); franta-hg@0: franta-hg@0: otevrit.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/otevrit.png"))); // NOI18N franta-hg@0: otevrit.setToolTipText("Přidat příjemce ze souboru.
Na každém řádku se očekává jedna adresa."); franta-hg@0: otevrit.addActionListener(new java.awt.event.ActionListener() { franta-hg@0: public void actionPerformed(java.awt.event.ActionEvent evt) { franta-hg@0: otevritActionPerformed(evt); franta-hg@0: } franta-hg@0: }); franta-hg@0: franta-hg@0: javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); franta-hg@0: this.setLayout(layout); franta-hg@0: layout.setHorizontalGroup( franta-hg@0: layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) franta-hg@0: .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() franta-hg@0: .addContainerGap(97, Short.MAX_VALUE) franta-hg@0: .addComponent(otevrit) franta-hg@0: .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) franta-hg@0: .addComponent(ulozit) franta-hg@0: .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) franta-hg@0: .addComponent(odebrat) franta-hg@0: .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) franta-hg@0: .addComponent(pridat) franta-hg@0: .addContainerGap()) franta-hg@0: .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 410, Short.MAX_VALUE) franta-hg@0: ); franta-hg@0: layout.setVerticalGroup( franta-hg@0: layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) franta-hg@0: .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() franta-hg@0: .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 253, Short.MAX_VALUE) franta-hg@0: .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) franta-hg@0: .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) franta-hg@0: .addComponent(pridat) franta-hg@0: .addComponent(odebrat) franta-hg@0: .addComponent(ulozit) franta-hg@0: .addComponent(otevrit)) franta-hg@0: .addContainerGap()) franta-hg@0: ); franta-hg@0: }//
//GEN-END:initComponents franta-hg@0: private void pridatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pridatActionPerformed franta-hg@0: data.pridejRadek(); franta-hg@0: }//GEN-LAST:event_pridatActionPerformed franta-hg@0: franta-hg@0: private void odebratActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_odebratActionPerformed franta-hg@0: int radkaV = tabulka.getSelectedRow(); franta-hg@0: int radka = ((TableSorterModel) tabulka.getModel()).modelIndex(radkaV); franta-hg@0: if (radka > -1 && radka < data.getRowCount()) { franta-hg@0: data.odeberRadek(radka); franta-hg@0: } franta-hg@0: }//GEN-LAST:event_odebratActionPerformed franta-hg@0: franta-hg@0: private void ulozitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ulozitActionPerformed franta-hg@0: JFileChooser dialog = new JFileChooser(); franta-hg@0: dialog.setMultiSelectionEnabled(false); franta-hg@0: dialog.setDialogTitle("Uložit seznam do souboru"); franta-hg@0: int vysledek = dialog.showSaveDialog(this); franta-hg@0: if (vysledek == JFileChooser.APPROVE_OPTION) { franta-hg@0: File soubor = dialog.getSelectedFile(); franta-hg@0: try { franta-hg@0: setCursor(new Cursor(Cursor.WAIT_CURSOR)); franta-hg@0: OutputStreamWriter zapisovac = new FileWriter(soubor); franta-hg@0: int pocetDobrych = 0; franta-hg@0: int pocetPreskocenych = 0; franta-hg@0: franta-hg@0: for (InternetAddressKomu adresa : data.data) { franta-hg@0: /** TODO: různé formátování, případně jména */ franta-hg@0: if (Postak.zkontrolujAdresu(adresa.getAddress())) { franta-hg@0: zapisovac.write(adresa.getAddress() + "\n"); franta-hg@0: pocetDobrych++; franta-hg@0: } else { franta-hg@0: pocetPreskocenych++; franta-hg@0: } franta-hg@0: } franta-hg@0: franta-hg@0: zapisovac.close(); franta-hg@0: String preskocene = ""; franta-hg@0: if (pocetPreskocenych > 0) { franta-hg@0: preskocene = "\nPočet přeskočených: " + pocetPreskocenych + "\n(Přeskočené neodpovídaly regulárnímu výrazu.)"; franta-hg@0: franta-hg@0: } franta-hg@0: SuperPostak.zobrazInformacniDialog(this, "Uložení seznamu", "Adresy příjemců byly úspěšně uloženy do souboru:\n" + soubor.getAbsolutePath() + "\nPočet uložených adres: " + pocetDobrych + preskocene, true); franta-hg@0: } catch (Exception e) { franta-hg@0: SuperPostak.zobrazChybovyDialog(this, "Uložení seznamu selhalo", "Adresy se nepodařilo uložit do souboru.", null, e, Level.WARNING, false); franta-hg@0: } finally { franta-hg@0: setCursor(Cursor.getDefaultCursor()); franta-hg@0: } franta-hg@0: } franta-hg@0: }//GEN-LAST:event_ulozitActionPerformed franta-hg@0: franta-hg@0: private void otevritActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_otevritActionPerformed franta-hg@0: JFileChooser dialog = new JFileChooser(); franta-hg@0: dialog.setMultiSelectionEnabled(false); franta-hg@0: dialog.setDialogTitle("Načíst adresy ze souboru"); franta-hg@0: int vysledek = dialog.showOpenDialog(this); franta-hg@0: if (vysledek == JFileChooser.APPROVE_OPTION) { franta-hg@0: File soubor = dialog.getSelectedFile(); franta-hg@0: try { franta-hg@0: setCursor(new Cursor(Cursor.WAIT_CURSOR)); franta-hg@0: BufferedReader ctenar = new BufferedReader(new FileReader(soubor)); franta-hg@0: int pocetDobrych = 0; franta-hg@0: int pocetPreskocenych = 0; franta-hg@0: String radka = ctenar.readLine(); franta-hg@0: ArrayList adresy = new ArrayList(); franta-hg@0: franta-hg@0: while (radka != null) { franta-hg@0: if (Postak.zkontrolujAdresu(radka)) { franta-hg@0: adresy.add(new InternetAddressKomu(radka, null)); franta-hg@0: pocetDobrych++; franta-hg@0: franta-hg@0: } else { franta-hg@0: pocetPreskocenych++; franta-hg@0: } franta-hg@0: franta-hg@0: radka = ctenar.readLine(); franta-hg@0: } franta-hg@0: franta-hg@0: setAdresy(adresy); franta-hg@0: ctenar.close(); franta-hg@0: String preskocene = ""; franta-hg@0: if (pocetPreskocenych > 0) { franta-hg@0: preskocene = "\nPočet přeskočených: " + pocetPreskocenych + "\n(Přeskočené neodpovídaly regulárnímu výrazu.)"; franta-hg@0: franta-hg@0: } franta-hg@0: franta-hg@0: SuperPostak.zobrazInformacniDialog(this, "Načtení adres", "Byl načten seznam adres ze souboru:\n" + soubor.getAbsolutePath() + "\nPočet načtených adres: " + pocetDobrych + preskocene, true); franta-hg@0: } catch (Exception e) { franta-hg@0: SuperPostak.zobrazChybovyDialog(this, "Načtení souboru selhalo", "Nepodařilo se načíst soubor s adresami.", null, e, Level.WARNING, false); franta-hg@0: } finally { franta-hg@0: setCursor(Cursor.getDefaultCursor()); franta-hg@0: } franta-hg@0: franta-hg@0: } franta-hg@0: }//GEN-LAST:event_otevritActionPerformed franta-hg@0: franta-hg@0: // Variables declaration - do not modify//GEN-BEGIN:variables franta-hg@0: private javax.swing.JScrollPane jScrollPane1; franta-hg@0: private javax.swing.JButton odebrat; franta-hg@0: private javax.swing.JButton otevrit; franta-hg@0: private javax.swing.JButton pridat; franta-hg@0: private cz.frantovo.gui.tabulky.JTable tabulka; franta-hg@0: private javax.swing.JButton ulozit; franta-hg@0: // End of variables declaration//GEN-END:variables franta-hg@0: private class ModelTabulky implements TableModel { franta-hg@0: franta-hg@0: private String[] sloupecky = {"Jméno", "e-mail"}; franta-hg@0: private ArrayList data = new ArrayList(); franta-hg@0: private HashSet posluchace = new HashSet(); franta-hg@0: franta-hg@0: public int getRowCount() { franta-hg@0: return data.size(); franta-hg@0: } franta-hg@0: franta-hg@0: public int getColumnCount() { franta-hg@0: return sloupecky.length; franta-hg@0: } franta-hg@0: franta-hg@0: public String getColumnName(int n) { franta-hg@0: return sloupecky[n]; franta-hg@0: } franta-hg@0: franta-hg@0: public Class getColumnClass(int n) { franta-hg@0: return String.class; franta-hg@0: } franta-hg@0: franta-hg@0: public boolean isCellEditable(int m, int n) { franta-hg@0: return true; franta-hg@0: } franta-hg@0: franta-hg@0: public Object getValueAt(int m, int n) { franta-hg@0: if (n == 0) { franta-hg@0: return data.get(m).getPersonal(); franta-hg@0: } else if (n == 1) { franta-hg@0: return data.get(m).getAddress(); franta-hg@0: } else { franta-hg@0: return null; franta-hg@0: } franta-hg@0: } franta-hg@0: franta-hg@0: public void setValueAt(Object value, int m, int n) { franta-hg@0: if (n == 0) { franta-hg@0: try { franta-hg@0: data.get(m).setPersonal(String.valueOf(value.toString())); franta-hg@0: } catch (Exception ex) { franta-hg@0: log.log(Level.SEVERE, "ModelTabulky.setValueAt(" + m + ", " + n + ")", ex); franta-hg@0: } franta-hg@0: } else if (n == 1) { franta-hg@0: data.get(m).setAddress(String.valueOf(value.toString())); franta-hg@0: } franta-hg@0: } franta-hg@0: franta-hg@0: public void addTableModelListener(TableModelListener l) { franta-hg@0: posluchace.add(l); franta-hg@0: } franta-hg@0: franta-hg@0: public void removeTableModelListener(TableModelListener l) { franta-hg@0: posluchace.remove(l); franta-hg@0: } franta-hg@0: franta-hg@0: public void pridejRadek() { franta-hg@0: data.add(new InternetAddressKomu()); franta-hg@0: franta-hg@0: upozorniPosluchace(); franta-hg@0: } franta-hg@0: franta-hg@0: public void odeberRadek(int m) { franta-hg@0: data.remove(m); franta-hg@0: upozorniPosluchace(); franta-hg@0: } franta-hg@0: franta-hg@0: private void upozorniPosluchace() { franta-hg@0: for (TableModelListener p : posluchace) { franta-hg@0: p.tableChanged(new TableModelEvent(this)); franta-hg@0: } franta-hg@0: } franta-hg@0: } franta-hg@0: }