package autotest.tko; import autotest.common.Utils; import autotest.common.ui.MultiListSelectPresenter; import autotest.common.ui.ToggleControl; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.json.client.JSONObject; import com.google.gwt.user.client.ui.HasText; import java.util.Arrays; import java.util.List; import java.util.Map; public class SpreadsheetHeaderSelect implements ClickHandler { public static final String HISTORY_FIXED_VALUES = "_fixed_values"; public static class State { private HeaderSelect.State baseState = new HeaderSelect.State(); private String fixedValues; } public interface Display { public MultiListSelectPresenter.DoubleListDisplay getDoubleListDisplay(); public MultiListSelectPresenter.ToggleDisplay getToggleDisplay(); public HasText getFixedValuesInput(); public void setFixedValuesVisible(boolean visible); public ToggleControl getFixedValuesToggle(); } private Display display; private final State savedState = new State(); private HeaderSelect headerSelect; public SpreadsheetHeaderSelect(HeaderFieldCollection headerFields) { headerSelect = new HeaderSelect(headerFields, savedState.baseState); } public void bindDisplay(Display display) { this.display = display; headerSelect.bindDisplay(display.getDoubleListDisplay()); headerSelect.multiListSelect.bindToggleDisplay(display.getToggleDisplay()); display.getFixedValuesToggle().addClickHandler(this); display.setFixedValuesVisible(false); } protected void saveToState(State state) { headerSelect.saveToState(state.baseState); state.fixedValues = getFixedValuesText(); } private String getFixedValuesText() { if (!isFixedValuesActive()) { return ""; } return display.getFixedValuesInput().getText(); } private List getFixedValues() { String valueText = savedState.fixedValues.trim(); if (valueText.equals("")) { return null; } return Utils.splitListWithSpaces(valueText); } private boolean isFixedValuesActive() { return !display.getToggleDisplay().getToggleMultipleLink().isActive() && display.getFixedValuesToggle().isActive(); } public void loadFromState(State state) { headerSelect.loadFromState(state.baseState); display.getFixedValuesInput().setText(state.fixedValues); display.getFixedValuesToggle().setActive(!state.fixedValues.equals("")); } public void setSelectedItems(List fields) { headerSelect.setSelectedItems(fields); savedState.fixedValues = ""; } public void onClick(ClickEvent event) { assert event.getSource() == display.getFixedValuesToggle(); display.setFixedValuesVisible(isFixedValuesActive()); } public void addHistoryArguments(Map arguments, String name) { headerSelect.addHistoryArguments(arguments, name); if (isFixedValuesActive()) { arguments.put(name + HISTORY_FIXED_VALUES, display.getFixedValuesInput().getText()); } } public void handleHistoryArguments(Map arguments, String name) { headerSelect.handleHistoryArguments(arguments, name); String fixedValuesText = arguments.get(name + HISTORY_FIXED_VALUES); savedState.fixedValues = fixedValuesText; } public void addQueryParameters(JSONObject parameters) { List fixedValues = getFixedValues(); if (fixedValues != null) { JSONObject fixedValuesObject = Utils.setDefaultValue(parameters, "fixed_headers", new JSONObject()).isObject(); fixedValuesObject.put(getSelectedItems().get(0).getSqlName(), Utils.stringsToJSON(fixedValues)); } } public List getSelectedItems() { return headerSelect.getSelectedItems(); } public void refreshFields() { headerSelect.refreshFields(); } public void setSelectedItem(HeaderField field) { setSelectedItems(Arrays.asList(new HeaderField[] {field})); } public State getStateFromView() { State state = new State(); saveToState(state); return state; } public void updateStateFromView() { saveToState(savedState); } public void updateViewFromState() { loadFromState(savedState); } }