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.MultiListSelectPresenter.DoubleListDisplay;
      6 import autotest.common.ui.MultiListSelectPresenter.GeneratorHandler;
      7 import autotest.common.ui.MultiListSelectPresenter.Item;
      8 
      9 import java.util.ArrayList;
     10 import java.util.Arrays;
     11 import java.util.List;
     12 import java.util.Map;
     13 
     14 class HeaderSelect {
     15     public static class State {
     16         private List<HeaderField> selectedFields;
     17 
     18         public List<HeaderField> getSelectedFields() {
     19             return new ArrayList<HeaderField>(selectedFields);
     20         }
     21     }
     22 
     23     private HeaderFieldCollection headerFields;
     24     private final State savedState;
     25 
     26     protected MultiListSelectPresenter multiListSelect = new MultiListSelectPresenter();
     27 
     28     public HeaderSelect(HeaderFieldCollection headerFields, State state) {
     29         this.headerFields = headerFields;
     30         savedState = state;
     31     }
     32 
     33     public void bindDisplay(DoubleListDisplay display) {
     34         multiListSelect.bindDisplay(display);
     35         refreshFields();
     36     }
     37 
     38     public void refreshFields() {
     39         List<Item> selection = multiListSelect.getSelectedItems();
     40         multiListSelect.clearItems();
     41         for (HeaderField field : headerFields) {
     42             if (field.isUserSelectable()) {
     43                 multiListSelect.addItem(field.getItem());
     44             }
     45         }
     46         multiListSelect.restoreSelectedItems(selection);
     47     }
     48 
     49     public void updateStateFromView() {
     50         saveToState(savedState);
     51     }
     52 
     53     protected void saveToState(State state) {
     54         state.selectedFields = getSelectedItemsFromView();
     55     }
     56 
     57     public State getStateFromView() {
     58         State state = new State();
     59         saveToState(state);
     60         return state;
     61     }
     62 
     63     private List<HeaderField> getSelectedItemsFromView() {
     64         List<HeaderField> selectedFields = new ArrayList<HeaderField>();
     65         for (Item item : multiListSelect.getSelectedItems()) {
     66             selectedFields.add(headerFields.getFieldBySqlName(item.value));
     67         }
     68         return selectedFields;
     69     }
     70 
     71     public List<HeaderField> getSelectedItems() {
     72         return savedState.getSelectedFields();
     73     }
     74 
     75     public void updateViewFromState() {
     76         loadFromState(savedState);
     77     }
     78 
     79     public void loadFromState(State state) {
     80         setSelectedItemsInView(state.selectedFields);
     81     }
     82 
     83     private void setSelectedItemsInView(List<HeaderField> fields) {
     84         List<String> fieldNames = new ArrayList<String>();
     85         for (HeaderField field : fields) {
     86             Item item = field.getItem();
     87             if (item.isGeneratedItem) {
     88                 multiListSelect.addItem(item);
     89             }
     90             fieldNames.add(field.getName());
     91         }
     92         multiListSelect.setSelectedItemsByName(fieldNames);
     93     }
     94 
     95     public void setSelectedItems(List<HeaderField> fields) {
     96         savedState.selectedFields = new ArrayList<HeaderField>(fields);
     97     }
     98 
     99     public void setSelectedItem(HeaderField field) {
    100         setSelectedItems(Arrays.asList(new HeaderField[] {field}));
    101     }
    102 
    103     public void selectItemInView(HeaderField field) {
    104         List<HeaderField> fields = getSelectedItemsFromView();
    105         if (!fields.contains(field)) {
    106             fields.add(field);
    107             setSelectedItemsInView(fields);
    108         }
    109     }
    110 
    111     public void deselectItemInView(HeaderField field) {
    112         List<HeaderField> fields = getSelectedItemsFromView();
    113         if (fields.remove(field)) {
    114             setSelectedItemsInView(fields);
    115         }
    116     }
    117 
    118     public void addHistoryArguments(Map<String, String> arguments, String name) {
    119         List<String> fields = new ArrayList<String>();
    120         for (HeaderField field : getSelectedItems()) {
    121             fields.add(field.getSqlName());
    122         }
    123         String fieldList = Utils.joinStrings(",", fields);
    124         arguments.put(name, fieldList);
    125     }
    126 
    127     public void handleHistoryArguments(Map<String, String> arguments, String name) {
    128         String[] fields = arguments.get(name).split(",");
    129         List<HeaderField> selectedFields = getHeaderFieldsFromValues(fields);
    130         setSelectedItems(selectedFields);
    131     }
    132 
    133     private List<HeaderField> getHeaderFieldsFromValues(String[] fieldSqlNames) {
    134         List<HeaderField> fields = new ArrayList<HeaderField>();
    135         for (String sqlName : fieldSqlNames) {
    136             fields.add(headerFields.getFieldBySqlName(sqlName));
    137         }
    138         return fields;
    139     }
    140 
    141     protected State getState() {
    142         return savedState;
    143     }
    144 
    145     public void setGeneratorHandler(GeneratorHandler handler) {
    146         multiListSelect.setGeneratorHandler(handler);
    147     }
    148 }
    149