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
1. | Mediator pattern in Java | ||
2. | Mediator Pattern 2 |