Home | History | Annotate | Download | only in tko
      1 package autotest.tko;
      2 
      3 import autotest.common.Utils;
      4 import autotest.common.ui.MultiListSelectPresenter;
      5 import autotest.common.ui.ToggleControl;
      6 
      7 import com.google.gwt.event.dom.client.ClickEvent;
      8 import com.google.gwt.event.dom.client.ClickHandler;
      9 import com.google.gwt.json.client.JSONObject;
     10 import com.google.gwt.user.client.ui.HasText;
     11 
     12 import java.util.Arrays;
     13 import java.util.List;
     14 import java.util.Map;
     15 
     16 public class SpreadsheetHeaderSelect implements ClickHandler {
     17     public static final String HISTORY_FIXED_VALUES = "_fixed_values";
     18 
     19     public static class State {
     20         private HeaderSelect.State baseState = new HeaderSelect.State();
     21         private String fixedValues;
     22     }
     23 
     24     public interface Display {
     25         public MultiListSelectPresenter.DoubleListDisplay getDoubleListDisplay();
     26         public MultiListSelectPresenter.ToggleDisplay getToggleDisplay();
     27         public HasText getFixedValuesInput();
     28         public void setFixedValuesVisible(boolean visible);
     29         public ToggleControl getFixedValuesToggle();
     30     }
     31 
     32     private Display display;
     33     private final State savedState = new State();
     34     private HeaderSelect headerSelect;
     35 
     36     public SpreadsheetHeaderSelect(HeaderFieldCollection headerFields) {
     37         headerSelect = new HeaderSelect(headerFields, savedState.baseState);
     38     }
     39 
     40     public void bindDisplay(Display display) {
     41         this.display = display;
     42 
     43         headerSelect.bindDisplay(display.getDoubleListDisplay());
     44         headerSelect.multiListSelect.bindToggleDisplay(display.getToggleDisplay());
     45         display.getFixedValuesToggle().addClickHandler(this);
     46         display.setFixedValuesVisible(false);
     47     }
     48 
     49     protected void saveToState(State state) {
     50         headerSelect.saveToState(state.baseState);
     51         state.fixedValues = getFixedValuesText();
     52     }
     53 
     54     private String getFixedValuesText() {
     55         if (!isFixedValuesActive()) {
     56             return "";
     57         }
     58 
     59         return display.getFixedValuesInput().getText();
     60     }
     61 
     62     private List<String> getFixedValues() {
     63         String valueText = savedState.fixedValues.trim();
     64         if (valueText.equals("")) {
     65             return null;
     66         }
     67         return Utils.splitListWithSpaces(valueText);
     68     }
     69 
     70     private boolean isFixedValuesActive() {
     71         return !display.getToggleDisplay().getToggleMultipleLink().isActive()
     72                && display.getFixedValuesToggle().isActive();
     73     }
     74 
     75     public void loadFromState(State state) {
     76         headerSelect.loadFromState(state.baseState);
     77         display.getFixedValuesInput().setText(state.fixedValues);
     78         display.getFixedValuesToggle().setActive(!state.fixedValues.equals(""));
     79     }
     80 
     81     public void setSelectedItems(List<HeaderField> fields) {
     82         headerSelect.setSelectedItems(fields);
     83         savedState.fixedValues = "";
     84     }
     85 
     86     public void onClick(ClickEvent event) {
     87         assert event.getSource() == display.getFixedValuesToggle();
     88         display.setFixedValuesVisible(isFixedValuesActive());
     89     }
     90 
     91     public void addHistoryArguments(Map<String, String> arguments, String name) {
     92         headerSelect.addHistoryArguments(arguments, name);
     93         if (isFixedValuesActive()) {
     94             arguments.put(name + HISTORY_FIXED_VALUES, display.getFixedValuesInput().getText());
     95         }
     96     }
     97 
     98     public void handleHistoryArguments(Map<String, String> arguments, String name) {
     99         headerSelect.handleHistoryArguments(arguments, name);
    100         String fixedValuesText = arguments.get(name + HISTORY_FIXED_VALUES);
    101         savedState.fixedValues = fixedValuesText;
    102     }
    103 
    104     public void addQueryParameters(JSONObject parameters) {
    105         List<String> fixedValues = getFixedValues();
    106         if (fixedValues != null) {
    107             JSONObject fixedValuesObject =
    108                 Utils.setDefaultValue(parameters, "fixed_headers", new JSONObject()).isObject();
    109             fixedValuesObject.put(getSelectedItems().get(0).getSqlName(),
    110                                   Utils.stringsToJSON(fixedValues));
    111         }
    112     }
    113 
    114     public List<HeaderField> getSelectedItems() {
    115         return headerSelect.getSelectedItems();
    116     }
    117 
    118     public void refreshFields() {
    119         headerSelect.refreshFields();
    120     }
    121 
    122     public void setSelectedItem(HeaderField field) {
    123         setSelectedItems(Arrays.asList(new HeaderField[] {field}));
    124     }
    125 
    126     public State getStateFromView() {
    127         State state = new State();
    128         saveToState(state);
    129         return state;
    130     }
    131 
    132     public void updateStateFromView() {
    133         saveToState(savedState);
    134     }
    135 
    136     public void updateViewFromState() {
    137         loadFromState(savedState);
    138     }
    139 }
    140