| 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<HeaderField> selectedFields; |
| |
| public List<HeaderField> getSelectedFields() { |
| return new ArrayList<HeaderField>(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<Item> 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<HeaderField> getSelectedItemsFromView() { |
| List<HeaderField> selectedFields = new ArrayList<HeaderField>(); |
| for (Item item : multiListSelect.getSelectedItems()) { |
| selectedFields.add(headerFields.getFieldBySqlName(item.value)); |
| } |
| return selectedFields; |
| } |
| |
| public List<HeaderField> getSelectedItems() { |
| return savedState.getSelectedFields(); |
| } |
| |
| public void updateViewFromState() { |
| loadFromState(savedState); |
| } |
| |
| public void loadFromState(State state) { |
| setSelectedItemsInView(state.selectedFields); |
| } |
| |
| private void setSelectedItemsInView(List<HeaderField> fields) { |
| List<String> fieldNames = new ArrayList<String>(); |
| 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<HeaderField> fields) { |
| savedState.selectedFields = new ArrayList<HeaderField>(fields); |
| } |
| |
| public void setSelectedItem(HeaderField field) { |
| setSelectedItems(Arrays.asList(new HeaderField[] {field})); |
| } |
| |
| public void selectItemInView(HeaderField field) { |
| List<HeaderField> fields = getSelectedItemsFromView(); |
| if (!fields.contains(field)) { |
| fields.add(field); |
| setSelectedItemsInView(fields); |
| } |
| } |
| |
| public void deselectItemInView(HeaderField field) { |
| List<HeaderField> fields = getSelectedItemsFromView(); |
| if (fields.remove(field)) { |
| setSelectedItemsInView(fields); |
| } |
| } |
| |
| public void addHistoryArguments(Map<String, String> arguments, String name) { |
| List<String> fields = new ArrayList<String>(); |
| for (HeaderField field : getSelectedItems()) { |
| fields.add(field.getSqlName()); |
| } |
| String fieldList = Utils.joinStrings(",", fields); |
| arguments.put(name, fieldList); |
| } |
| |
| public void handleHistoryArguments(Map<String, String> arguments, String name) { |
| String[] fields = arguments.get(name).split(","); |
| List<HeaderField> selectedFields = getHeaderFieldsFromValues(fields); |
| setSelectedItems(selectedFields); |
| } |
| |
| private List<HeaderField> getHeaderFieldsFromValues(String[] fieldSqlNames) { |
| List<HeaderField> fields = new ArrayList<HeaderField>(); |
| for (String sqlName : fieldSqlNames) { |
| fields.add(headerFields.getFieldBySqlName(sqlName)); |
| } |
| return fields; |
| } |
| |
| protected State getState() { |
| return savedState; |
| } |
| |
| public void setGeneratorHandler(GeneratorHandler handler) { |
| multiListSelect.setGeneratorHandler(handler); |
| } |
| } |