Design Pattern Java

/*
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