Mega Code Archive

 
Categories / Java / Design Pattern
 

Design Patterns By Example in Java- Mediator Pattern

/* Software Architecture Design Patterns in Java by Partha Kuchana  Auerbach Publications */ import java.awt.BorderLayout; import java.awt.Container; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import com.sun.java.swing.plaf.windows.WindowsLookAndFeel; public class MediatorPatternFTPGUI extends JFrame {   public static final String newline = "\n";   public static final String UPLOAD = "Upload";   public static final String DOWNLOAD = "Download";   public static final String DELETE = "Delete";   public static final String EXIT = "Exit";   private JPanel pnlFTPUI;   private LocalList localList;   private RemoteList remoteList;   private DefaultListModel defLocalList, defRemoteList;   private Mediator mdtr = new Mediator();   public MediatorPatternFTPGUI() throws Exception {     super("Design Patterns By Example - Mediator Pattern ");     // Create controls     defLocalList = new DefaultListModel();     defRemoteList = new DefaultListModel();     localList = new LocalList(defLocalList, mdtr);     remoteList = new RemoteList(defRemoteList, mdtr);     pnlFTPUI = new JPanel();     localList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);     localList.setSelectedIndex(-1);     JScrollPane spLocalList = new JScrollPane(localList);     remoteList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);     remoteList.setSelectedIndex(-1);     JScrollPane spRemoteList = new JScrollPane(remoteList);     //Create Labels     JLabel lblLocalList = new JLabel("Local List:");     JLabel lblRemoteList = new JLabel("Remote List:");     JLabel lblSpacer = new JLabel("         ");     //Create buttons     UploadButton btnUpload = new UploadButton(MediatorPatternFTPGUI.UPLOAD,         mdtr);     btnUpload.setMnemonic(KeyEvent.VK_U);     DownloadButton btnDownload = new DownloadButton(         MediatorPatternFTPGUI.DOWNLOAD, mdtr);     btnDownload.setMnemonic(KeyEvent.VK_N);     DeleteButton btnDelete = new DeleteButton(MediatorPatternFTPGUI.DELETE,         mdtr);     btnDelete.setMnemonic(KeyEvent.VK_D);     JButton btnExit = new JButton(MediatorPatternFTPGUI.EXIT);     btnExit.setMnemonic(KeyEvent.VK_X);     buttonHandler vf = new buttonHandler();     listHandler lh = new listHandler();     btnUpload.addActionListener(vf);     btnDownload.addActionListener(vf);     btnDelete.addActionListener(vf);     btnExit.addActionListener(vf);     localList.addListSelectionListener(lh);     remoteList.addListSelectionListener(lh);     JPanel lstPanel = new JPanel();     GridBagLayout gridbag2 = new GridBagLayout();     lstPanel.setLayout(gridbag2);     GridBagConstraints gbc2 = new GridBagConstraints();     lstPanel.add(lblLocalList);     lstPanel.add(lblRemoteList);     lstPanel.add(spLocalList);     lstPanel.add(spRemoteList);     lstPanel.add(lblSpacer);     gbc2.gridx = 0;     gbc2.gridy = 0;     gridbag2.setConstraints(lblLocalList, gbc2);     gbc2.gridx = 1;     gbc2.gridy = 0;     gridbag2.setConstraints(lblSpacer, gbc2);     gbc2.gridx = 5;     gbc2.gridy = 0;     gridbag2.setConstraints(lblRemoteList, gbc2);     gbc2.gridx = 0;     gbc2.gridy = 1;     gridbag2.setConstraints(spLocalList, gbc2);     gbc2.gridx = 5;     gbc2.gridy = 1;     gridbag2.setConstraints(spRemoteList, gbc2);     //-----------------------------------     //For layout purposes, put the buttons in a separate panel     JPanel buttonPanel = new JPanel();     //----------------------------------------------     GridBagLayout gridbag = new GridBagLayout();     buttonPanel.setLayout(gridbag);     GridBagConstraints gbc = new GridBagConstraints();     buttonPanel.add(lstPanel);     buttonPanel.add(btnUpload);     buttonPanel.add(btnDownload);     buttonPanel.add(btnDelete);     buttonPanel.add(btnExit);     gbc.insets.top = 5;     gbc.insets.bottom = 5;     gbc.insets.left = 5;     gbc.insets.right = 5;     gbc.anchor = GridBagConstraints.WEST;     gbc.gridx = 1;     gbc.gridy = 0;     gridbag.setConstraints(btnUpload, gbc);     gbc.gridx = 2;     gbc.gridy = 0;     gridbag.setConstraints(btnDownload, gbc);     gbc.gridx = 3;     gbc.gridy = 0;     gridbag.setConstraints(btnDelete, gbc);     gbc.gridx = 4;     gbc.gridy = 0;     gridbag.setConstraints(btnExit, gbc);     gbc.gridx = 0;     gbc.gridy = 1;     gridbag.setConstraints(lstPanel, gbc);     gbc.anchor = GridBagConstraints.EAST;     gbc.insets.left = 2;     gbc.insets.right = 2;     gbc.insets.top = 40;     //****************************************************     //Add the buttons and the log to the frame     Container contentPane = getContentPane();     contentPane.add(lstPanel, BorderLayout.CENTER);     contentPane.add(buttonPanel, BorderLayout.SOUTH);     btnUpload.setEnabled(false);     btnDelete.setEnabled(false);     btnDownload.setEnabled(false);     initialize();     try {       UIManager.setLookAndFeel(new WindowsLookAndFeel());       SwingUtilities.updateComponentTreeUI(MediatorPatternFTPGUI.this);     } catch (Exception ex) {       System.out.println(ex);     }   }   private void initialize() {     // fill some test data here into the listbox.     defLocalList.addElement("first.html");     defLocalList.addElement("second.html");     defLocalList.addElement("third.html");     defLocalList.addElement("fourth.html");     defLocalList.addElement("fifth.html");     defLocalList.addElement("Design Patterns.html");     defRemoteList.addElement("sixth.html");     defRemoteList.addElement("seventh.html");     defRemoteList.addElement("eighth.html");     defRemoteList.addElement("ninth.html");     defRemoteList.addElement("Design Patterns By Ex.html");   }   public static void main(String[] args) throws Exception {     JFrame frame = new MediatorPatternFTPGUI();     frame.addWindowListener(new WindowAdapter() {       public void windowClosing(WindowEvent e) {         System.exit(0);       }     });     //frame.pack();     frame.setSize(450, 300);     frame.setVisible(true);   }   class listHandler implements ListSelectionListener {     public void valueChanged(ListSelectionEvent e) {       CommandInterface CommandObj = (CommandInterface) e.getSource();       CommandObj.processEvent();     }   }   class buttonHandler implements ActionListener {     public void actionPerformed(ActionEvent e) {       if (e.getActionCommand().equals(MediatorPatternFTPGUI.EXIT)) {         System.exit(1);       }       CommandInterface CommandObj = (CommandInterface) e.getSource();       CommandObj.processEvent();     }     public buttonHandler() {     }   }   interface CommandInterface {     public void processEvent();   }   class UploadButton extends JButton implements CommandInterface {     Mediator mdtr;     public void processEvent() {       mdtr.UploadItem();     }     public UploadButton(String name, Mediator inp_mdtr) {       super(name);       mdtr = inp_mdtr;       mdtr.registerUploadButton(this);     }   }   class DownloadButton extends JButton implements CommandInterface {     Mediator mdtr;     public void processEvent() {       mdtr.DownloadItem();     }     public DownloadButton(String name, Mediator inp_mdtr) {       super(name);       mdtr = inp_mdtr;       mdtr.registerDownloadButton(this);     }   }   class DeleteButton extends JButton implements CommandInterface {     Mediator mdtr;     public void processEvent() {       mdtr.DeleteItem();     }     public DeleteButton(String name, Mediator inp_mdtr) {       super(name);       mdtr = inp_mdtr;       mdtr.registerDeleteButton(this);     }   }   class LocalList extends JList implements CommandInterface {     Mediator mdtr;     public void processEvent() {       mdtr.LocalListSelect();     }     public LocalList(DefaultListModel defObj, Mediator inp_mdtr) {       super(defObj);       mdtr = inp_mdtr;       mdtr.registerLocalList(this);     }   }   class RemoteList extends JList implements CommandInterface {     Mediator mdtr;     public void processEvent() {       mdtr.RemoteListSelect();     }     public RemoteList(DefaultListModel defObj, Mediator inp_mdtr) {       super(defObj);       mdtr = inp_mdtr;       mdtr.registerRemoteList(this);     }   }   class Mediator {     private UploadButton btnUpload;     private DownloadButton btnDownload;     private DeleteButton btnDelete;     private LocalList localList;     private RemoteList remoteList;     public void registerUploadButton(UploadButton inp_ib) {       btnUpload = inp_ib;     }     public void registerDownloadButton(DownloadButton inp_dnb) {       btnDownload = inp_dnb;     }     public void registerDeleteButton(DeleteButton inp_db) {       btnDelete = inp_db;     }     public void registerLocalList(LocalList inp_arl) {       localList = inp_arl;     }     public void registerRemoteList(RemoteList inp_drl) {       remoteList = inp_drl;     }     public void UploadItem() {       int index = localList.getSelectedIndex();       String selectedItem = localList.getSelectedValue().toString();       ((DefaultListModel) localList.getModel()).remove(index);       ((DefaultListModel) remoteList.getModel()).addElement(selectedItem);       btnUpload.setEnabled(false);       btnDelete.setEnabled(false);       btnDownload.setEnabled(false);     }     public void DownloadItem() {       int index = remoteList.getSelectedIndex();       String selectedItem = remoteList.getSelectedValue().toString();       ((DefaultListModel) remoteList.getModel()).remove(index);       ((DefaultListModel) localList.getModel()).addElement(selectedItem);       btnUpload.setEnabled(false);       btnDelete.setEnabled(false);       btnDownload.setEnabled(false);     }     public void DeleteItem() {       int index = localList.getSelectedIndex();       if (index >= 0) {         ((DefaultListModel) localList.getModel()).remove(index);       }       index = remoteList.getSelectedIndex();       if (index >= 0) {         ((DefaultListModel) remoteList.getModel()).remove(index);       }       btnUpload.setEnabled(false);       btnDelete.setEnabled(false);       btnDownload.setEnabled(false);     }     public void LocalListSelect() {       remoteList.setSelectedIndex(-1);       btnUpload.setEnabled(true);       btnDelete.setEnabled(true);       btnDownload.setEnabled(false);     }     public void RemoteListSelect() {       localList.setSelectedIndex(-1);       btnUpload.setEnabled(false);       btnDelete.setEnabled(true);       btnDownload.setEnabled(true);     }   } }// end of class