Advertisement
manek93

Dishwasher GUI

May 30th, 2015
250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.23 KB | None | 0 0
  1.  
  2. //Title:        Dishwasher Sample
  3. //Version:
  4. //Copyright:    Copyright (c) 2009
  5. //Author:       Eldad Palachi
  6. //Company:      IBM Rational
  7. //Description:  GUI Components for Dishwasher sample (Observer pattern)
  8. //              IMPORTANT: This was built using Borland JBuilder's
  9. //                         XYLayout manager. Therefore, it is required
  10. //                         to use jbcl3.0.jar for compilation and
  11. //                         execution of this GUI.
  12. import java.awt.*;
  13. import javax.swing.*;
  14. import java.awt.event.*;
  15. import javax.swing.event.*;
  16. import com.borland.jbcl.layout.*;
  17. import com.borland.jbcl.control.*;
  18.  
  19.  
  20. // Rhapsody's oxf framework
  21. import com.ibm.rational.rhapsody.oxf.*;
  22.  
  23. import Default.*;
  24.  
  25. public class DishwasherFrame extends JFrame implements Observer {
  26.  
  27.  
  28.     // link with events in order to register them in the animation browser
  29.     // This is required for injecting event in animation right from the start
  30.     static {
  31.       // Registering Events
  32.       try {
  33.        
  34.         Class.forName("Default.evStart");
  35.         Class.forName("Default.evOpen");
  36.         Class.forName("Default.evClose");
  37.         Class.forName("Default.evIntensive");
  38.         Class.forName("Default.evQuick");
  39.         Class.forName("Default.evNormal");
  40.         Class.forName("Default.evService");
  41.         Class.forName("Default.evJetOff");
  42.         Class.forName("Default.evJetPulse");
  43.         Class.forName("Default.evJetSpray");
  44.         Class.forName("Default.evHeaterOn");
  45.         Class.forName("Default.evHeaterOff");
  46.         Class.forName("Default.evTankFill");
  47.         Class.forName("Default.evTankDrain");
  48.         Class.forName("Default.evFull");
  49.         Class.forName("Default.evEmpty");
  50.       }
  51.       catch(Exception e) {
  52.          System.err.println(e.toString());
  53.          e.printStackTrace(System.err);
  54.       }
  55.     }
  56.  
  57.  
  58.  
  59.   XYLayout xYLayout1 = new XYLayout();
  60.   JToggleButton doorBtn = new JToggleButton();
  61.   JButton serviceBtn = new JButton();
  62.   JLabel faulty = new JLabel();
  63.   JLabel jLabel1 = new JLabel();
  64.   JTextField cyclesCounter = new JTextField();
  65.   JPanel modePanel = new JPanel();
  66.   JLabel modeLabel = new JLabel();
  67.   XYLayout xYLayout2 = new XYLayout();
  68.   JRadioButton normalRb = new JRadioButton();
  69.   JRadioButton quickRb = new JRadioButton();
  70.   JRadioButton intenseRb = new JRadioButton();
  71.   XYLayout xYLayout3 = new XYLayout();
  72.   JPanel modePanel1 = new JPanel();
  73.   JLabel statusLabel = new JLabel();
  74.   JProgressBar statusProgress = new JProgressBar();
  75.   JTextField statusField = new JTextField();
  76.   JButton washBtn = new JButton();  
  77.  
  78.  
  79.   Dishwasher dishW;
  80.  
  81.   public DishwasherFrame() {
  82.     try  {                      
  83.       jbInit();                      
  84.       Thread.currentThread().setName("GUI Thread");
  85.       RiJMainThread.OXFInit();
  86.       dishW = new Dishwasher(RiJMainThread.instance());
  87.       dishW.setItsObserver(this);
  88.       dishW.startBehavior();
  89.       RiJMainThread.OXFStart(true);      
  90.       update(0, 0);
  91.     }
  92.     catch(Exception e) {
  93.       e.printStackTrace();
  94.     }
  95.   }
  96.  
  97.   private void jbInit() throws Exception {
  98.     doorBtn.setToolTipText("Press to open/close door");
  99.     doorBtn.setText("Open/Close");
  100.     doorBtn.setHorizontalAlignment(SwingConstants.LEFT);
  101.     doorBtn.setVerticalAlignment(SwingConstants.TOP);
  102.     doorBtn.addItemListener(new ItemListener() {
  103.       public void itemStateChanged(ItemEvent e) {
  104.         doorBtn_itemStateChanged(e);
  105.       }
  106.     });
  107.  
  108.  
  109.     this.setResizable(false);
  110.     this.setTitle("IBM Rational Dishwasher");
  111.     xYLayout1.setHeight(496);
  112.     xYLayout1.setWidth(463);
  113.     this.getContentPane().setLayout(xYLayout1);
  114.     serviceBtn.setEnabled(false);
  115.     serviceBtn.setToolTipText("Press to perform service action");
  116.     serviceBtn.setActionCommand("service");
  117.     serviceBtn.setText("SERVICE");
  118.     serviceBtn.addActionListener(new java.awt.event.ActionListener() {
  119.       public void actionPerformed(ActionEvent e) {
  120.         serviceBtn_actionPerformed(e);
  121.       }
  122.     });
  123.     faulty.setEnabled(false);
  124.     faulty.setForeground(Color.red);
  125.     faulty.setToolTipText("Fault indicator");
  126.     faulty.setText("FAULT");
  127.     jLabel1.setText("cycles");
  128.     cyclesCounter.setBackground(Color.lightGray);
  129.     cyclesCounter.setToolTipText("How many cycles since last service");
  130.     cyclesCounter.setEditable(false);
  131.     cyclesCounter.setText("0");
  132.     modePanel.setBorder(BorderFactory.createLoweredBevelBorder());
  133.     modePanel.setLayout(xYLayout2);
  134.     modeLabel.setFont(new java.awt.Font("Dialog", 2, 12));
  135.     modeLabel.setText("mode");
  136.    
  137.     normalRb.setToolTipText("normal washing mode");
  138.     normalRb.setText("normal");
  139.     normalRb.addActionListener(new java.awt.event.ActionListener() {
  140.       public void actionPerformed(ActionEvent e) {
  141.         normalRb_actionPerformed(e);
  142.       }
  143.     });
  144.     intenseRb.setToolTipText("intensive washing mode");
  145.     intenseRb.setText("intensive");
  146.     intenseRb.addActionListener(new java.awt.event.ActionListener() {
  147.       public void actionPerformed(ActionEvent e) {
  148.         intenseRb_actionPerformed(e);
  149.       }
  150.     });
  151.  
  152.     quickRb.addActionListener(new java.awt.event.ActionListener() {
  153.       public void actionPerformed(ActionEvent e) {
  154.         quickRb_actionPerformed(e);
  155.       }
  156.     });
  157.     quickRb.setToolTipText("quick washing mode");
  158.     quickRb.setText("quick");
  159.     // Group radio buttons
  160.     ButtonGroup group = new ButtonGroup();
  161.     statusProgress.setToolTipText("Progress indicator");
  162.     statusField.setToolTipText("Current status");
  163.     washBtn.setToolTipText("Press to start washing dishes");
  164.     group.add(normalRb);
  165.     group.add(quickRb);
  166.     group.add(intenseRb);
  167.  
  168.     modePanel1.setLayout(xYLayout3);
  169.     modePanel1.setBorder(BorderFactory.createLoweredBevelBorder());
  170.     statusLabel.setFont(new java.awt.Font("Dialog", 2, 12));
  171.     statusLabel.setText("status");
  172.     statusField.setEditable(false);
  173.     statusField.setText("IDLE");
  174.     washBtn.setText("Wash");
  175.     washBtn.addActionListener(new java.awt.event.ActionListener() {
  176.       public void actionPerformed(ActionEvent e) {
  177.         washBtn_actionPerformed(e);
  178.       }
  179.     });
  180.  
  181.     this.getContentPane().add(cyclesCounter, new XYConstraints(386, 442, 56, -1));
  182.     this.getContentPane().add(serviceBtn, new XYConstraints(19, 442, 88, 21));
  183.     this.getContentPane().add(faulty, new XYConstraints(114, 442, -1, 21));
  184.     this.getContentPane().add(jLabel1, new XYConstraints(347, 442, -1, 21));
  185.     this.getContentPane().add(doorBtn, new XYConstraints(6, 112, 449, 308));
  186.     this.getContentPane().add(modePanel1, new XYConstraints(108, 5, 166, 95));
  187.     modePanel1.add(statusLabel, new XYConstraints(47, 0, -1, -1));
  188.     modePanel1.add(statusProgress, new XYConstraints(7, 23, 149, -1));
  189.     modePanel1.add(statusField, new XYConstraints(7, 55, 147, 19));
  190.     this.getContentPane().add(modePanel, new XYConstraints(280, 4, 164, 95));
  191.     modePanel.add(modeLabel, new XYConstraints(47, 0, -1, -1));
  192.     modePanel.add(normalRb, new XYConstraints(15, 20, -1, -1));
  193.     modePanel.add(quickRb, new XYConstraints(15, 40, -1, -1));
  194.     modePanel.add(intenseRb, new XYConstraints(15, 60, -1, -1));
  195.  
  196.     this.getContentPane().add(washBtn, new XYConstraints(20, 9, -1, -1));
  197.  
  198.   }
  199.   void doorBtn_itemStateChanged(ItemEvent e) {
  200.     if (!dishW.isIn(Dishwasher.doorOpened) &&
  201.       !dishW.isIn(Dishwasher.maintenanceRequired) )
  202.        dishW.gen(new evOpen());
  203.     else
  204.       dishW.gen(new evClose());
  205.   }
  206.  
  207.   public int getHeight() {
  208.     return xYLayout1.getHeight();
  209.   }
  210.   public int getWidth() {
  211.     return xYLayout1.getWidth();
  212.   }
  213.  
  214.   void intenseRb_actionPerformed(ActionEvent e) {
  215.       dishW.gen(new evIntensive());
  216.   }
  217.  
  218.   void normalRb_actionPerformed(ActionEvent e) {
  219.       dishW.gen(new evNormal());
  220.   }
  221.  
  222.   void quickRb_actionPerformed(ActionEvent e) {
  223.       dishW.gen(new evQuick());
  224.   }
  225.  
  226.   void washBtn_actionPerformed(ActionEvent e) {
  227.     dishW.gen(new evStart());
  228.   }
  229.  
  230.   void serviceBtn_actionPerformed(ActionEvent e) {
  231.     dishW.gen(new evService());
  232.   }
  233.  
  234.  
  235.   // observer interface implementation
  236.   public void update(int maxEstTime, int elapsedTime) {
  237.     updateModeView();
  238.     updateServiceBtn();
  239.     updateStatus(maxEstTime, elapsedTime);
  240.     updateWashBtn();
  241.   }
  242.  
  243.   void updateModeView() {
  244.       normalRb.setSelected(dishW.isIn(Dishwasher.normalMode));
  245.       quickRb.setSelected(dishW.isIn(Dishwasher.quickMode));
  246.       intenseRb.setSelected(dishW.isIn(Dishwasher.intensiveMode));
  247.       boolean disable = !(dishW.isIn(Dishwasher.off));
  248.       quickRb.setEnabled(!disable);
  249.       normalRb.setEnabled(!disable);                    
  250.       intenseRb.setEnabled(!disable);
  251.   }
  252.  
  253.   void updateServiceBtn() {
  254.     serviceBtn.setEnabled(dishW.isIn(Dishwasher.maintenanceRequired));
  255.     faulty.setEnabled(dishW.isIn(Dishwasher.maintenanceRequired));
  256.     Integer dummy = new Integer(dishW.getCycles());
  257.     cyclesCounter.setText(dummy.toString());
  258.   }
  259.  
  260.   void updateWashBtn() {
  261.     washBtn.setEnabled(dishW.isIn(Dishwasher.off));
  262.   }
  263.  
  264.   void updateStatus(int maxEstTime, int elapsedTime) {
  265.     String statusText = "";
  266.     int maxVal = 100, val = 0;
  267.     if (dishW.isIn(Dishwasher.off)) {
  268.       statusText = "IDLE";
  269.     }
  270.     else if (dishW.isIn(Dishwasher.filling)) {
  271.       statusText = "Filling...";
  272.     }
  273.     else if (dishW.isIn(Dishwasher.rinsing)) {
  274.       statusText = "Rinsing...";
  275.     }
  276.     else if (dishW.isIn(Dishwasher.washing)) {
  277.       statusText = "Washing...";
  278.     }
  279.     else if (dishW.isIn(Dishwasher.draining)) {
  280.       statusText = "Draining...";
  281.     }
  282.     else if (dishW.isIn(Dishwasher.drying)) {
  283.       statusText = "Drying...";
  284.     }
  285.     else if (dishW.isIn(Dishwasher.doorOpened)) {
  286.       statusText = "Door Open";
  287.     }        
  288.     statusField.setText(statusText);                      
  289.     statusProgress.setMaximum(maxEstTime);
  290.     statusProgress.setValue(elapsedTime);
  291.   }
  292.  
  293.   public static void main(String[] args) {
  294.     System.out.println("Initializing GUI...");
  295.     DishwasherFrame dg = new DishwasherFrame();
  296.     dg.setBounds(50, 50, dg.getWidth(), dg.getHeight());
  297.     dg.addWindowListener(new WindowAdapter() {
  298.                             public void windowClosing(WindowEvent e) {
  299.                                 System.exit(1);
  300.                             }    
  301.                          });
  302.    
  303.     dg.setVisible(true);
  304.   }
  305.  
  306.  
  307. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement