Mega Code Archive

 
Categories / Java / Design Pattern
 

Command Pattern 2 in Java

//[C] 2002 Sun Microsystems, Inc.--- import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.Serializable; import java.util.Calendar; import java.util.Date; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; public class RunCommandPattern {     private static Calendar dateCreator = Calendar.getInstance();          public static void main(String [] arguments){         System.out.println("Example for the Command pattern");         System.out.println();         System.out.println("This sample will use a command class called");         System.out.println(" ChangeLocationCommand to update the location");         System.out.println(" of an Appointment object.");         System.out.println("The ChangeLocationCommand has the additional");         System.out.println(" ability to undo and redo commands, so it can");         System.out.println(" set the locaition back to its original value,");         System.out.println(" if desired.");         System.out.println();                  System.out.println("Creating an Appointment for use in the demo");         Contact [] people = { new ContactImpl(), new ContactImpl() };         Appointment appointment = new Appointment("Java Twister Semi-Finals",             people, new LocationImpl(""), createDate(2001, 10, 31, 14, 30),             createDate(2001, 10, 31, 14, 31));                  System.out.println("Creating the ChangeLocationCommand");         ChangeLocationCommand cmd = new ChangeLocationCommand();         cmd.setAppointment(appointment);                  System.out.println("Creating the GUI");         CommandGui application = new CommandGui(cmd);         application.setAppointment(appointment);         cmd.setLocationEditor(application);         application.createGui();              }     public static Date createDate(int year, int month, int day, int hour, int minute){         dateCreator.set(year, month, day, hour, minute);         return dateCreator.getTime();     } } class CommandGui implements ActionListener, LocationEditor{     private JFrame mainFrame;     private JTextArea display;     private JTextField updatedLocation;     private JButton update, undo, redo, exit;     private JPanel controlPanel, displayPanel, editorPanel;     private UndoableCommand command;     private Appointment appointment;          public CommandGui(UndoableCommand newCommand){         command = newCommand;     }          public void setAppointment(Appointment newAppointment){         appointment = newAppointment;     }          public void createGui(){         mainFrame = new JFrame("Command Pattern Example");         Container content = mainFrame.getContentPane();         content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));                  editorPanel = new JPanel();         editorPanel.add(new JLabel("Location"));         updatedLocation = new JTextField(20);         editorPanel.add(updatedLocation);         content.add(editorPanel);                  displayPanel = new JPanel();         display = new JTextArea(10, 40);         display.setEditable(false);         displayPanel.add(display);         content.add(displayPanel);                  controlPanel = new JPanel();         update = new JButton("Update Location");         undo = new JButton("Undo Location");         redo = new JButton("Redo Location");         exit = new JButton("Exit");         controlPanel.add(update);         controlPanel.add(undo);         controlPanel.add(redo);         controlPanel.add(exit);         content.add(controlPanel);                  update.addActionListener(this);         undo.addActionListener(this);         redo.addActionListener(this);         exit.addActionListener(this);                  refreshDisplay();         mainFrame.addWindowListener(new WindowCloseManager());         mainFrame.pack();         mainFrame.setVisible(true);     }          public void actionPerformed(ActionEvent evt){         Object originator = evt.getSource();         if (originator == update){             executeCommand();         }         if (originator == undo){             undoCommand();         }         if (originator == redo){             redoCommand();         }         else if (originator == exit){             exitApplication();         }     }          private class WindowCloseManager extends WindowAdapter{         public void windowClosing(WindowEvent evt){             exitApplication();         }     }          public Location getNewLocation(){         return new LocationImpl(updatedLocation.getText());     }          private void executeCommand(){         command.execute();         refreshDisplay();     }          private void undoCommand(){         command.undo();         refreshDisplay();     }          private void redoCommand(){         command.redo();         refreshDisplay();     }          private void refreshDisplay(){         display.setText(appointment.toString());     }          private void exitApplication(){         System.exit(0);     } } interface Command{     public void execute(); } interface Contact extends Serializable{     public static final String SPACE = " ";     public String getFirstName();     public String getLastName();     public String getTitle();     public String getOrganization();          public void setFirstName(String newFirstName);     public void setLastName(String newLastName);     public void setTitle(String newTitle);     public void setOrganization(String newOrganization); } class ContactImpl implements Contact{     private String firstName;     private String lastName;     private String title;     private String organization;     public static final String EOL_STRING =         System.getProperty("line.separator");          public ContactImpl(){ }     public ContactImpl(String newFirstName, String newLastName,         String newTitle, String newOrganization){             firstName = newFirstName;             lastName = newLastName;             title = newTitle;             organization = newOrganization;     }          public String getFirstName(){ return firstName; }     public String getLastName(){ return lastName; }     public String getTitle(){ return title; }     public String getOrganization(){ return organization; }          public void setFirstName(String newFirstName){ firstName = newFirstName; }     public void setLastName(String newLastName){ lastName = newLastName; }     public void setTitle(String newTitle){ title = newTitle; }     public void setOrganization(String newOrganization){ organization = newOrganization; }          public String toString(){         return firstName + " " + lastName;     } } class Appointment{     private String reason;     private Contact[] contacts;     private Location location;     private Date startDate;     private Date endDate;     public Appointment(String reason, Contact[] contacts, Location location, Date startDate, Date endDate){         this.reason = reason;         this.contacts = contacts;         this.location = location;         this.startDate = startDate;         this.endDate = endDate;     }          public String getReason(){ return reason; }     public Contact[] getContacts(){ return contacts; }     public Location getLocation(){ return location; }     public Date getStartDate(){ return startDate; }     public Date getEndDate(){ return endDate; }          public void setLocation(Location location){ this.location = location; }          public String toString(){         return "Appointment:" + "\n    Reason: " + reason +     "\n    Location: " + location + "\n    Start: " +             startDate + "\n    End: " + endDate + "\n";     } } interface Location extends Serializable{     public String getLocation();     public void setLocation(String newLocation); } class ChangeLocationCommand implements UndoableCommand{     private Appointment appointment;     private Location oldLocation;     private Location newLocation;     private LocationEditor editor;          public Appointment getAppointment(){ return appointment; }          public void setAppointment(Appointment appointment){ this.appointment = appointment; }     public void setLocationEditor(LocationEditor locationEditor){ editor = locationEditor; }          public void execute(){         oldLocation = appointment.getLocation();         newLocation = editor.getNewLocation();         appointment.setLocation(newLocation);     }     public void undo(){         appointment.setLocation(oldLocation);     }     public void redo(){         appointment.setLocation(newLocation);     } } interface LocationEditor{     public Location getNewLocation(); } class LocationImpl implements Location{     private String location;          public LocationImpl(){ }     public LocationImpl(String newLocation){         location = newLocation;     }          public String getLocation(){ return location; }          public void setLocation(String newLocation){ location = newLocation; }          public String toString(){ return location; } } interface UndoableCommand extends Command{     public void undo();     public void redo(); }