135444864c7b6f49865a7e17aa0052987b72e4728showardpackage autotest.tko;
235444864c7b6f49865a7e17aa0052987b72e4728showard
38c9b839c2f5073a755952a8a865a04db3b2d4547showardimport autotest.common.Utils;
4d9e04c1a7950691cc348e70fa2470f8c414ae94fshowardimport autotest.common.ui.MultiListSelectPresenter;
58b0ea2285c1327a686ff0b6ab245915e7fd20094showardimport autotest.common.ui.MultiListSelectPresenter.DoubleListDisplay;
68b0ea2285c1327a686ff0b6ab245915e7fd20094showardimport autotest.common.ui.MultiListSelectPresenter.GeneratorHandler;
7d9e04c1a7950691cc348e70fa2470f8c414ae94fshowardimport autotest.common.ui.MultiListSelectPresenter.Item;
835444864c7b6f49865a7e17aa0052987b72e4728showard
98c9b839c2f5073a755952a8a865a04db3b2d4547showardimport java.util.ArrayList;
10c674d3ea684f75f3e05f5834b598050eb1c8856dshowardimport java.util.Arrays;
1135444864c7b6f49865a7e17aa0052987b72e4728showardimport java.util.List;
128c9b839c2f5073a755952a8a865a04db3b2d4547showardimport java.util.Map;
1335444864c7b6f49865a7e17aa0052987b72e4728showard
148b0ea2285c1327a686ff0b6ab245915e7fd20094showardclass HeaderSelect {
153f2110914421a50e509e619e6e876e0af096144cshoward    public static class State {
163f2110914421a50e509e619e6e876e0af096144cshoward        private List<HeaderField> selectedFields;
170fb9335593fed571e94b9242e4afdaf298153dfeshoward
188b0ea2285c1327a686ff0b6ab245915e7fd20094showard        public List<HeaderField> getSelectedFields() {
198b0ea2285c1327a686ff0b6ab245915e7fd20094showard            return new ArrayList<HeaderField>(selectedFields);
208b0ea2285c1327a686ff0b6ab245915e7fd20094showard        }
21f248952e42ea33c34e41a49817e50f98c65c2716showard    }
2235444864c7b6f49865a7e17aa0052987b72e4728showard
233f2110914421a50e509e619e6e876e0af096144cshoward    private HeaderFieldCollection headerFields;
248b0ea2285c1327a686ff0b6ab245915e7fd20094showard    private final State savedState;
25d9e04c1a7950691cc348e70fa2470f8c414ae94fshoward
268b0ea2285c1327a686ff0b6ab245915e7fd20094showard    protected MultiListSelectPresenter multiListSelect = new MultiListSelectPresenter();
27d9e04c1a7950691cc348e70fa2470f8c414ae94fshoward
288b0ea2285c1327a686ff0b6ab245915e7fd20094showard    public HeaderSelect(HeaderFieldCollection headerFields, State state) {
29227a7a1d0484dcfa4c6d996a1c10e95437d059efshoward        this.headerFields = headerFields;
308b0ea2285c1327a686ff0b6ab245915e7fd20094showard        savedState = state;
31d9e04c1a7950691cc348e70fa2470f8c414ae94fshoward    }
32d9e04c1a7950691cc348e70fa2470f8c414ae94fshoward
338b0ea2285c1327a686ff0b6ab245915e7fd20094showard    public void bindDisplay(DoubleListDisplay display) {
348b0ea2285c1327a686ff0b6ab245915e7fd20094showard        multiListSelect.bindDisplay(display);
358b0ea2285c1327a686ff0b6ab245915e7fd20094showard        refreshFields();
368b0ea2285c1327a686ff0b6ab245915e7fd20094showard    }
37d9e04c1a7950691cc348e70fa2470f8c414ae94fshoward
388b0ea2285c1327a686ff0b6ab245915e7fd20094showard    public void refreshFields() {
398b0ea2285c1327a686ff0b6ab245915e7fd20094showard        List<Item> selection = multiListSelect.getSelectedItems();
408b0ea2285c1327a686ff0b6ab245915e7fd20094showard        multiListSelect.clearItems();
41227a7a1d0484dcfa4c6d996a1c10e95437d059efshoward        for (HeaderField field : headerFields) {
428b0ea2285c1327a686ff0b6ab245915e7fd20094showard            if (field.isUserSelectable()) {
438b0ea2285c1327a686ff0b6ab245915e7fd20094showard                multiListSelect.addItem(field.getItem());
448b0ea2285c1327a686ff0b6ab245915e7fd20094showard            }
45227a7a1d0484dcfa4c6d996a1c10e95437d059efshoward        }
468b0ea2285c1327a686ff0b6ab245915e7fd20094showard        multiListSelect.restoreSelectedItems(selection);
47f248952e42ea33c34e41a49817e50f98c65c2716showard    }
48f248952e42ea33c34e41a49817e50f98c65c2716showard
49c674d3ea684f75f3e05f5834b598050eb1c8856dshoward    public void updateStateFromView() {
503f2110914421a50e509e619e6e876e0af096144cshoward        saveToState(savedState);
51c674d3ea684f75f3e05f5834b598050eb1c8856dshoward    }
523f2110914421a50e509e619e6e876e0af096144cshoward
538b0ea2285c1327a686ff0b6ab245915e7fd20094showard    protected void saveToState(State state) {
543f2110914421a50e509e619e6e876e0af096144cshoward        state.selectedFields = getSelectedItemsFromView();
553f2110914421a50e509e619e6e876e0af096144cshoward    }
563f2110914421a50e509e619e6e876e0af096144cshoward
573f2110914421a50e509e619e6e876e0af096144cshoward    public State getStateFromView() {
583f2110914421a50e509e619e6e876e0af096144cshoward        State state = new State();
593f2110914421a50e509e619e6e876e0af096144cshoward        saveToState(state);
603f2110914421a50e509e619e6e876e0af096144cshoward        return state;
613f2110914421a50e509e619e6e876e0af096144cshoward    }
62c674d3ea684f75f3e05f5834b598050eb1c8856dshoward
63c674d3ea684f75f3e05f5834b598050eb1c8856dshoward    private List<HeaderField> getSelectedItemsFromView() {
64f248952e42ea33c34e41a49817e50f98c65c2716showard        List<HeaderField> selectedFields = new ArrayList<HeaderField>();
65d9e04c1a7950691cc348e70fa2470f8c414ae94fshoward        for (Item item : multiListSelect.getSelectedItems()) {
66227a7a1d0484dcfa4c6d996a1c10e95437d059efshoward            selectedFields.add(headerFields.getFieldBySqlName(item.value));
67f248952e42ea33c34e41a49817e50f98c65c2716showard        }
68f248952e42ea33c34e41a49817e50f98c65c2716showard        return selectedFields;
6935444864c7b6f49865a7e17aa0052987b72e4728showard    }
70c674d3ea684f75f3e05f5834b598050eb1c8856dshoward
71c674d3ea684f75f3e05f5834b598050eb1c8856dshoward    public List<HeaderField> getSelectedItems() {
728b0ea2285c1327a686ff0b6ab245915e7fd20094showard        return savedState.getSelectedFields();
7335444864c7b6f49865a7e17aa0052987b72e4728showard    }
7435444864c7b6f49865a7e17aa0052987b72e4728showard
75c674d3ea684f75f3e05f5834b598050eb1c8856dshoward    public void updateViewFromState() {
763f2110914421a50e509e619e6e876e0af096144cshoward        loadFromState(savedState);
7735444864c7b6f49865a7e17aa0052987b72e4728showard    }
7835444864c7b6f49865a7e17aa0052987b72e4728showard
793f2110914421a50e509e619e6e876e0af096144cshoward    public void loadFromState(State state) {
808b0ea2285c1327a686ff0b6ab245915e7fd20094showard        setSelectedItemsInView(state.selectedFields);
813f2110914421a50e509e619e6e876e0af096144cshoward    }
823f2110914421a50e509e619e6e876e0af096144cshoward
838b0ea2285c1327a686ff0b6ab245915e7fd20094showard    private void setSelectedItemsInView(List<HeaderField> fields) {
84d9e04c1a7950691cc348e70fa2470f8c414ae94fshoward        List<String> fieldNames = new ArrayList<String>();
85d9e04c1a7950691cc348e70fa2470f8c414ae94fshoward        for (HeaderField field : fields) {
8616ab5250da1e2e5fb1549774063a8099ce4fdbb8showard            Item item = field.getItem();
8716ab5250da1e2e5fb1549774063a8099ce4fdbb8showard            if (item.isGeneratedItem) {
8816ab5250da1e2e5fb1549774063a8099ce4fdbb8showard                multiListSelect.addItem(item);
8916ab5250da1e2e5fb1549774063a8099ce4fdbb8showard            }
90d9e04c1a7950691cc348e70fa2470f8c414ae94fshoward            fieldNames.add(field.getName());
91c674d3ea684f75f3e05f5834b598050eb1c8856dshoward        }
92d9e04c1a7950691cc348e70fa2470f8c414ae94fshoward        multiListSelect.setSelectedItemsByName(fieldNames);
93c674d3ea684f75f3e05f5834b598050eb1c8856dshoward    }
94c674d3ea684f75f3e05f5834b598050eb1c8856dshoward
958b0ea2285c1327a686ff0b6ab245915e7fd20094showard    public void setSelectedItems(List<HeaderField> fields) {
963f2110914421a50e509e619e6e876e0af096144cshoward        savedState.selectedFields = new ArrayList<HeaderField>(fields);
97c674d3ea684f75f3e05f5834b598050eb1c8856dshoward    }
98c674d3ea684f75f3e05f5834b598050eb1c8856dshoward
998b0ea2285c1327a686ff0b6ab245915e7fd20094showard    public void setSelectedItem(HeaderField field) {
1008b0ea2285c1327a686ff0b6ab245915e7fd20094showard        setSelectedItems(Arrays.asList(new HeaderField[] {field}));
101c674d3ea684f75f3e05f5834b598050eb1c8856dshoward    }
1028b0ea2285c1327a686ff0b6ab245915e7fd20094showard
1038b0ea2285c1327a686ff0b6ab245915e7fd20094showard    public void selectItemInView(HeaderField field) {
1048b0ea2285c1327a686ff0b6ab245915e7fd20094showard        List<HeaderField> fields = getSelectedItemsFromView();
1058b0ea2285c1327a686ff0b6ab245915e7fd20094showard        if (!fields.contains(field)) {
1068b0ea2285c1327a686ff0b6ab245915e7fd20094showard            fields.add(field);
1078b0ea2285c1327a686ff0b6ab245915e7fd20094showard            setSelectedItemsInView(fields);
1088b0ea2285c1327a686ff0b6ab245915e7fd20094showard        }
1098b0ea2285c1327a686ff0b6ab245915e7fd20094showard    }
1108b0ea2285c1327a686ff0b6ab245915e7fd20094showard
1118b0ea2285c1327a686ff0b6ab245915e7fd20094showard    public void deselectItemInView(HeaderField field) {
1128b0ea2285c1327a686ff0b6ab245915e7fd20094showard        List<HeaderField> fields = getSelectedItemsFromView();
1138b0ea2285c1327a686ff0b6ab245915e7fd20094showard        if (fields.remove(field)) {
1148b0ea2285c1327a686ff0b6ab245915e7fd20094showard            setSelectedItemsInView(fields);
1158b0ea2285c1327a686ff0b6ab245915e7fd20094showard        }
116f248952e42ea33c34e41a49817e50f98c65c2716showard    }
117f248952e42ea33c34e41a49817e50f98c65c2716showard
1188c9b839c2f5073a755952a8a865a04db3b2d4547showard    public void addHistoryArguments(Map<String, String> arguments, String name) {
1198c9b839c2f5073a755952a8a865a04db3b2d4547showard        List<String> fields = new ArrayList<String>();
120f248952e42ea33c34e41a49817e50f98c65c2716showard        for (HeaderField field : getSelectedItems()) {
121f248952e42ea33c34e41a49817e50f98c65c2716showard            fields.add(field.getSqlName());
1228c9b839c2f5073a755952a8a865a04db3b2d4547showard        }
1238c9b839c2f5073a755952a8a865a04db3b2d4547showard        String fieldList = Utils.joinStrings(",", fields);
1248c9b839c2f5073a755952a8a865a04db3b2d4547showard        arguments.put(name, fieldList);
125d9e04c1a7950691cc348e70fa2470f8c414ae94fshoward    }
126d9e04c1a7950691cc348e70fa2470f8c414ae94fshoward
1278c9b839c2f5073a755952a8a865a04db3b2d4547showard    public void handleHistoryArguments(Map<String, String> arguments, String name) {
1282b50af17e5fa602821a8917bbb9fa1ddb1176ee3showard        String[] fields = arguments.get(name).split(",");
129cb6ae7dca0f7eff64e3c9e413f0c30e008a2a6aeshoward        List<HeaderField> selectedFields = getHeaderFieldsFromValues(fields);
1308b0ea2285c1327a686ff0b6ab245915e7fd20094showard        setSelectedItems(selectedFields);
131f248952e42ea33c34e41a49817e50f98c65c2716showard    }
132f248952e42ea33c34e41a49817e50f98c65c2716showard
133227a7a1d0484dcfa4c6d996a1c10e95437d059efshoward    private List<HeaderField> getHeaderFieldsFromValues(String[] fieldSqlNames) {
134227a7a1d0484dcfa4c6d996a1c10e95437d059efshoward        List<HeaderField> fields = new ArrayList<HeaderField>();
135227a7a1d0484dcfa4c6d996a1c10e95437d059efshoward        for (String sqlName : fieldSqlNames) {
136227a7a1d0484dcfa4c6d996a1c10e95437d059efshoward            fields.add(headerFields.getFieldBySqlName(sqlName));
137f248952e42ea33c34e41a49817e50f98c65c2716showard        }
138227a7a1d0484dcfa4c6d996a1c10e95437d059efshoward        return fields;
139f248952e42ea33c34e41a49817e50f98c65c2716showard    }
1402b50af17e5fa602821a8917bbb9fa1ddb1176ee3showard
1418b0ea2285c1327a686ff0b6ab245915e7fd20094showard    protected State getState() {
1428b0ea2285c1327a686ff0b6ab245915e7fd20094showard        return savedState;
143c674d3ea684f75f3e05f5834b598050eb1c8856dshoward    }
144f248952e42ea33c34e41a49817e50f98c65c2716showard
1458b0ea2285c1327a686ff0b6ab245915e7fd20094showard    public void setGeneratorHandler(GeneratorHandler handler) {
1468b0ea2285c1327a686ff0b6ab245915e7fd20094showard        multiListSelect.setGeneratorHandler(handler);
147c674d3ea684f75f3e05f5834b598050eb1c8856dshoward    }
14835444864c7b6f49865a7e17aa0052987b72e4728showard}
149