package autotest.tko; import autotest.common.Utils; import autotest.common.ui.MultiListSelectPresenter; import autotest.common.ui.MultiListSelectPresenter.DoubleListDisplay; import autotest.common.ui.MultiListSelectPresenter.GeneratorHandler; import autotest.common.ui.MultiListSelectPresenter.Item; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; class HeaderSelect { public static class State { private List selectedFields; public List getSelectedFields() { return new ArrayList(selectedFields); } } private HeaderFieldCollection headerFields; private final State savedState; protected MultiListSelectPresenter multiListSelect = new MultiListSelectPresenter(); public HeaderSelect(HeaderFieldCollection headerFields, State state) { this.headerFields = headerFields; savedState = state; } public void bindDisplay(DoubleListDisplay display) { multiListSelect.bindDisplay(display); refreshFields(); } public void refreshFields() { List selection = multiListSelect.getSelectedItems(); multiListSelect.clearItems(); for (HeaderField field : headerFields) { if (field.isUserSelectable()) { multiListSelect.addItem(field.getItem()); } } multiListSelect.restoreSelectedItems(selection); } public void updateStateFromView() { saveToState(savedState); } protected void saveToState(State state) { state.selectedFields = getSelectedItemsFromView(); } public State getStateFromView() { State state = new State(); saveToState(state); return state; } private List getSelectedItemsFromView() { List selectedFields = new ArrayList(); for (Item item : multiListSelect.getSelectedItems()) { selectedFields.add(headerFields.getFieldBySqlName(item.value)); } return selectedFields; } public List getSelectedItems() { return savedState.getSelectedFields(); } public void updateViewFromState() { loadFromState(savedState); } public void loadFromState(State state) { setSelectedItemsInView(state.selectedFields); } private void setSelectedItemsInView(List fields) { List fieldNames = new ArrayList(); for (HeaderField field : fields) { Item item = field.getItem(); if (item.isGeneratedItem) { multiListSelect.addItem(item); } fieldNames.add(field.getName()); } multiListSelect.setSelectedItemsByName(fieldNames); } public void setSelectedItems(List fields) { savedState.selectedFields = new ArrayList(fields); } public void setSelectedItem(HeaderField field) { setSelectedItems(Arrays.asList(new HeaderField[] {field})); } public void selectItemInView(HeaderField field) { List fields = getSelectedItemsFromView(); if (!fields.contains(field)) { fields.add(field); setSelectedItemsInView(fields); } } public void deselectItemInView(HeaderField field) { List fields = getSelectedItemsFromView(); if (fields.remove(field)) { setSelectedItemsInView(fields); } } public void addHistoryArguments(Map arguments, String name) { List fields = new ArrayList(); for (HeaderField field : getSelectedItems()) { fields.add(field.getSqlName()); } String fieldList = Utils.joinStrings(",", fields); arguments.put(name, fieldList); } public void handleHistoryArguments(Map arguments, String name) { String[] fields = arguments.get(name).split(","); List selectedFields = getHeaderFieldsFromValues(fields); setSelectedItems(selectedFields); } private List getHeaderFieldsFromValues(String[] fieldSqlNames) { List fields = new ArrayList(); for (String sqlName : fieldSqlNames) { fields.add(headerFields.getFieldBySqlName(sqlName)); } return fields; } protected State getState() { return savedState; } public void setGeneratorHandler(GeneratorHandler handler) { multiListSelect.setGeneratorHandler(handler); } }