Home | History | Annotate | Download | only in wizard
      1 package autotest.moblab.wizard;
      2 
      3 import autotest.moblab.rpc.MoblabRpcCallbacks;
      4 import autotest.moblab.rpc.VersionInfo;
      5 import com.google.gwt.event.dom.client.ClickEvent;
      6 import com.google.gwt.event.dom.client.ClickHandler;
      7 import com.google.gwt.json.client.JSONValue;
      8 import com.google.gwt.user.client.Window;
      9 import com.google.gwt.user.client.ui.Button;
     10 import com.google.gwt.user.client.ui.Composite;
     11 import com.google.gwt.user.client.ui.FlexTable;
     12 import com.google.gwt.user.client.ui.FlowPanel;
     13 import com.google.gwt.user.client.ui.Label;
     14 import com.google.gwt.user.client.ui.SimplePanel;
     15 import com.google.gwt.user.client.ui.VerticalPanel;
     16 import com.google.gwt.user.client.ui.Widget;
     17 
     18 import autotest.common.JsonRpcCallback;
     19 import autotest.common.ui.NotifyManager;
     20 import autotest.moblab.rpc.MoblabRpcHelper;
     21 
     22 import java.util.Collection;
     23 
     24 /**
     25  * The configuration wizard for Moblab. A wizard supports multiple modes -
     26  * the view mode and the edit mode. Each mode has its own UI. A wizard has
     27  * a list of cards. Each card is responsible for the configuration of one
     28  * piece of information.
     29  */
     30 public class ConfigWizard extends Composite {
     31   // All the wizard cards.
     32   private WizardCard[] cards;
     33 
     34   // The wizard header widget
     35   private Widget headerContainer;
     36 
     37   // The wizard footer widget
     38   private Widget footerContainer;
     39 
     40   // The container panel for wizard content widget.
     41   private SimplePanel contentContainer;
     42 
     43   // The current mode of the wizard - edit vs view
     44   private Mode mode;
     45 
     46   // The view mode controller.
     47   private ConfigViewMode viewMode;
     48 
     49   // The edit mode controller.
     50   private ConfigEditMode editMode;
     51 
     52   // Constructor.
     53   public ConfigWizard() {
     54     cards = new WizardCard[] {};
     55 
     56     VerticalPanel pnlWizard = new VerticalPanel();
     57     pnlWizard.setStyleName("wizard-layout");
     58 
     59     headerContainer = createWizardHeader();
     60     pnlWizard.add(headerContainer);
     61 
     62     contentContainer = new SimplePanel();
     63     contentContainer.setStyleName("wizard-panel");
     64     pnlWizard.add(contentContainer);
     65 
     66     footerContainer = createWizardFooter();
     67     pnlWizard.add(footerContainer);
     68 
     69     initWidget(pnlWizard);
     70 
     71     setStyleName("config-wizard");
     72 
     73     viewMode = new ConfigViewMode(this);
     74     editMode = new ConfigEditMode(this);
     75 
     76     // Default to view mode.
     77     setMode(Mode.View);
     78   }
     79 
     80   /**
     81    * Creates the wizard header widget.
     82    */
     83   protected Widget createWizardHeader() {
     84     FlowPanel headerPanel = new FlowPanel();
     85     headerPanel.setStyleName("wizard-header");
     86     Button btnStartConfig = new Button("Configure");
     87     headerPanel.add(btnStartConfig);
     88     btnStartConfig.addClickHandler(new ClickHandler() {
     89       @Override
     90       public void onClick(ClickEvent event) {
     91         onStartEdit();
     92       }
     93     });
     94 
     95     Button btnReboot = new Button("Reboot");
     96     headerPanel.add(btnReboot);
     97     btnReboot.addClickHandler(new ClickHandler() {
     98       @Override
     99       public void onClick(ClickEvent event) {
    100         if (Window.confirm("Are you sure you want to reboot the Moblab device?")) {
    101           MoblabRpcHelper.rebootMoblab(new JsonRpcCallback() {
    102             @Override
    103             public void onSuccess(JSONValue result) {
    104               NotifyManager.getInstance().showMessage("Reboot command has been issued.");
    105             }
    106           });
    107         }
    108       }
    109     });
    110     return headerPanel;
    111   }
    112 
    113   /**
    114    * Creates the wizard header widget.
    115    */
    116   protected Widget createWizardFooter() {
    117     final FlexTable layoutTable = new FlexTable();
    118     MoblabRpcHelper.fetchMoblabBuildVersionInfo(new MoblabRpcCallbacks.FetchVersionInfoCallback() {
    119       @Override
    120       public void onVersionInfoFetched(VersionInfo info) {
    121         int row = 0;
    122         layoutTable.setWidget(row, 0, new Label("Version"));
    123         layoutTable.setWidget(row, 1, new Label(info.getVersion()));
    124         row++;
    125         layoutTable.setWidget(row, 0, new Label("Track"));
    126         layoutTable.setWidget(row, 1, new Label(info.getReleaseTrack()));
    127         row++;
    128         layoutTable.setWidget(row, 0, new Label("Description"));
    129         layoutTable.setWidget(row, 1, new Label(info.getReleaseDescription()));
    130         row++;
    131         layoutTable.setWidget(row, 0, new Label("Moblab Identification"));
    132         layoutTable.setWidget(row, 1, new Label(
    133             info.getMoblabIdentification()));
    134         row++;
    135         layoutTable.setWidget(row, 0, new Label("Moblab Mac Address"));
    136         layoutTable.setWidget(row, 1, new Label(info.getMoblabMacAddress()));
    137       }
    138     });
    139     return layoutTable;
    140   }
    141 
    142   public WizardCard[] getCards() {
    143     return cards;
    144   }
    145 
    146   public void setCards(WizardCard[] cards) {
    147     if (cards != null) {
    148       this.cards = cards;
    149     } else {
    150       this.cards = new WizardCard[] {};
    151     }
    152     for (WizardCard card : cards) {
    153       card.setDataStatusListener(editMode);
    154     }
    155     updateModeUI();
    156   }
    157 
    158   public void setCards(Collection<WizardCard> cards) {
    159     WizardCard[] cardArray = null;
    160     if (cards != null) {
    161       cardArray = (WizardCard[]) cards.toArray();
    162     }
    163     setCards(cardArray);
    164     updateModeUI();
    165   }
    166 
    167   public Mode getMode() {
    168     return mode;
    169   }
    170 
    171   public void onFinishEdit() {
    172     setMode(Mode.View);
    173   }
    174 
    175   public void onCancelEdit() {
    176     setMode(Mode.View);
    177   }
    178 
    179   public void onStartEdit() {
    180     setMode(Mode.Edit);
    181   }
    182 
    183   private void setMode(Mode mode) {
    184     this.mode = mode;
    185     headerContainer.setVisible(Mode.View == mode);
    186     footerContainer.setVisible(Mode.View == mode);
    187     updateModeUI();
    188   }
    189 
    190   private void updateModeUI() {
    191     switch(this.mode) {
    192       case Edit:
    193         contentContainer.setWidget(editMode.display());
    194         viewMode.hide();
    195         break;
    196       case View:
    197         contentContainer.setWidget(viewMode.display());
    198         editMode.hide();
    199         break;
    200     }
    201   }
    202 
    203   public enum Mode {
    204     View,
    205     Edit
    206   }
    207 
    208   public interface ConfigWizardMode {
    209     public void hide();
    210     public Widget display();
    211   }
    212 }
    213