/* * MailServerInfoComponent.java * * Created on den 25 september 2001, 22:34 */ package ip1.u9; import ip1.u7.b.*; import javax.swing.event.EventListenerList; import javax.swing.DefaultComboBoxModel; import java.io.*; /** Komponent för att visa upp och hantera konton. * * @author Henrik Johansson, DS80 * @version ht2001 */ public class MailServerInfoComponent extends javax.swing.JPanel implements ServerInfoPanel { private EventListenerList serverInfoChangeListener = null; private boolean changed = false; /** Skapar en ny MailServerInfoComponent */ public MailServerInfoComponent() { serverInfoChangeListener = new EventListenerList(); initComponents(); } /** Låter Lyssnarklasser säga upp prenumerationen på de ServerInfoChangeEvents som komponenten producerar. * * @param listener Lyssnarklassen som säger upp prenumerationen. */ public void removeServerInfoChangeListener(ServerInfoChangeListener listener) { serverInfoChangeListener.remove(MessageChosenListener.class, listener); } /** Skickar ServerInfoChangeEvents till eventuella prenumeranter. * * @param evt det ServerInfoChangeEvent som skall skickas. */ public void fireServerInfoChangeListener(ServerInfoChangeEvent evt) { Object[] listeners = serverInfoChangeListener.getListenerList(); int numListeners = listeners.length; for(int i = 0; i < numListeners; i++) { if (listeners[i] == ServerInfoChangeListener.class) { ((ServerInfoChangeListener)listeners[i + 1]).dispatchServerInfoChange(evt); } } } /** Låter Lyssnarklasser prenumerera på de ServerInfoChangeEvents som komponenten producerar. * * @param listener Lyssnarklassen som prenumererar. */ public void addServerInfoChangeListener(ServerInfoChangeListener listener) { serverInfoChangeListener.add(ServerInfoChangeListener.class, listener); } /** Sätter kontrollklassen. * *@param controller Kontrollklassen */ public void setController(MailReceiverGUI controller) { } /** Anropas av komponentens kontrollklass vid uppstart. Om det finns någon kontoinformation * sparad i det bibliotek varifrån MailClient-applikationen startades (lagras i en fil * kallad MailClientAccounts.mca) läses denna in av komponenten, annars öppnas en * ServerInfoDialog, för att konfigurera ett nytt konto. */ public void start() { try { File file = new File("./MailClientAccounts.mca"); if(file.exists()) { FileInputStream fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis); serverInfo.setModel((DefaultComboBoxModel) ois.readObject()); ois.close(); fis.close(); } else { createNewAccount(false); } } catch(FileNotFoundException e) { System.err.println(e.getMessage()); } catch(IOException e) { System.err.println(e.getMessage()); } catch(ClassNotFoundException e) { System.err.println(e.getMessage()); } } /** Anropas av komponentens kontrollklass när programmet avslutas. Om det skett någon * förändring i kontonas status (konton har ändrats, lagts till eller tagits bort) sparas * kontona till hårddisken( i filen MailClientAccounts.mca) */ public void stop() { if(changed) { try { File file = new File("./MailClientAccounts.mca"); if(! file.exists()) file.createNewFile(); FileOutputStream fos = new FileOutputStream(file); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(serverInfo.getModel()); oos.close(); fos.close(); } catch(FileNotFoundException e) { System.err.println(e.getMessage()); } catch(IOException e) { System.err.println(e.getMessage()); } } } /** Skapar ett nytt eller uppdaterar ett redan existerande konto. Om ett nytt konto skapats * läggs det till i den JComboBox som håller konton, annars uppdateras det redan existerande * kontot. * *@param update om true uppdateras det av användaren valda kontot, annars skapas ett nytt konto. */ protected void createNewAccount(boolean update) { changed = true; DefaultComboBoxModel model = (DefaultComboBoxModel) serverInfo.getModel(); ServerInfoDialog dialog = null; if(update) { ServerInfo si = (ServerInfo) serverInfo.getSelectedItem(); dialog = new ServerInfoDialog(null, si, model); } else dialog = new ServerInfoDialog(null, model); dialog.show(); switch(dialog.getResult()) { case ServerInfoDialog.NEW: { //Ett nytt konto har skapats ((DefaultComboBoxModel) serverInfo.getModel()).addElement(dialog.getServerInfo()); break; } case ServerInfoDialog.UPDATE: { // Ett redan existerande konto har uppdaterats ((ServerInfo) serverInfo.getSelectedItem()).update(dialog.getServerInfo()); serverInfo.updateUI(); break; } case ServerInfoDialog.SERVER_UPDATE:{ // Ett redan existerande konto har uppdaterats med en int index = serverInfo.getSelectedIndex(); // ny mailserver. ServerInfoChangeEvent måste skapas DefaultComboBoxModel mdl = (DefaultComboBoxModel) serverInfo.getModel(); mdl.removeElementAt(index); mdl.insertElementAt(dialog.getServerInfo(), index); //Genom att ta bort och lägga till provoseras ett serverInfo.setModel(mdl); //ServerInfoChangeEvent fram serverInfo.setSelectedIndex(index); } } } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ private void initComponents() {//GEN-BEGIN:initComponents serverInfo = new javax.swing.JComboBox(); deleteAccount = new javax.swing.JButton(); jPanel1 = new javax.swing.JPanel(); newAccount = new javax.swing.JButton(); changeAccount = new javax.swing.JButton(); setLayout(new java.awt.GridBagLayout()); java.awt.GridBagConstraints gridBagConstraints1; setBackground(java.awt.Color.white); serverInfo.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { serverInfoActionPerformed(evt); } }); gridBagConstraints1 = new java.awt.GridBagConstraints(); gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints1.insets = new java.awt.Insets(5, 5, 5, 5); gridBagConstraints1.weightx = 1.0; add(serverInfo, gridBagConstraints1); deleteAccount.setText("Ta bort konto"); deleteAccount.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { deleteAccountActionPerformed(evt); } }); gridBagConstraints1 = new java.awt.GridBagConstraints(); gridBagConstraints1.gridx = 0; gridBagConstraints1.gridy = 2; gridBagConstraints1.insets = new java.awt.Insets(5, 5, 5, 5); add(deleteAccount, gridBagConstraints1); jPanel1.setBackground(java.awt.Color.white); newAccount.setText("NyttKonto"); newAccount.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { newAccountActionPerformed(evt); } }); jPanel1.add(newAccount); changeAccount.setText("\u00c4ndra konto"); changeAccount.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { changeAccountActionPerformed(evt); } }); jPanel1.add(changeAccount); gridBagConstraints1 = new java.awt.GridBagConstraints(); gridBagConstraints1.gridx = 0; gridBagConstraints1.gridy = 1; add(jPanel1, gridBagConstraints1); }//GEN-END:initComponents private void changeAccountActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_changeAccountActionPerformed createNewAccount(true); }//GEN-LAST:event_changeAccountActionPerformed private void newAccountActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newAccountActionPerformed createNewAccount(false); }//GEN-LAST:event_newAccountActionPerformed private void deleteAccountActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteAccountActionPerformed changed = true; DefaultComboBoxModel model = (DefaultComboBoxModel) serverInfo.getModel(); model.removeElementAt(serverInfo.getSelectedIndex()); serverInfo.setModel(model); }//GEN-LAST:event_deleteAccountActionPerformed private void serverInfoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_serverInfoActionPerformed fireServerInfoChangeListener(new ServerInfoChangeEvent((ServerInfo) serverInfo.getSelectedItem())); }//GEN-LAST:event_serverInfoActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JComboBox serverInfo; private javax.swing.JButton deleteAccount; private javax.swing.JPanel jPanel1; private javax.swing.JButton newAccount; private javax.swing.JButton changeAccount; // End of variables declaration//GEN-END:variables }