package autotest.tko; import autotest.common.JsonRpcCallback; import autotest.common.JsonRpcProxy; import autotest.common.StaticDataRepository; import autotest.common.Utils; import autotest.common.ui.ExtendedListBox; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.json.client.JSONObject; import com.google.gwt.json.client.JSONString; import com.google.gwt.json.client.JSONValue; import com.google.gwt.user.client.ui.Composite; import java.util.HashMap; import java.util.Map; import java.util.Set; public class PreconfigSelector extends Composite { public static final String NO_PRECONFIG = "----------"; public static interface PreconfigHandler { public void handlePreconfig(Map preconfigParameters); } private ExtendedListBox selector = new ExtendedListBox(); private JsonRpcProxy rpcProxy = JsonRpcProxy.getProxy(); private String preconfigType; private PreconfigHandler listener; public PreconfigSelector(final String preconfigType, final PreconfigHandler listener) { this.preconfigType = preconfigType; this.listener = listener; initializePreconfigList(preconfigType); selector.addChangeHandler(new ChangeHandler() { public void onChange(ChangeEvent event) { loadSelectedPreconfig(); } }); initWidget(selector); } private void initializePreconfigList(final String preconfigType) { selector.addItem(NO_PRECONFIG); StaticDataRepository staticData = StaticDataRepository.getRepository(); JSONObject preconfigs = staticData.getData("preconfigs").isObject(); Set keys = preconfigs.get(preconfigType).isObject().keySet(); for (String key : keys) { selector.addItem(key); } } private void loadSelectedPreconfig() { String name = selector.getSelectedValue(); if (name.equals(NO_PRECONFIG)) { return; } selector.setSelectedIndex(0); JSONObject params = new JSONObject(); params.put("name", new JSONString(name)); params.put("type", new JSONString(preconfigType)); rpcProxy.rpcCall("get_preconfig", params, new JsonRpcCallback() { @Override public void onSuccess(JSONValue result) { JSONObject config = result.isObject(); Map map = new HashMap(); for (String key : config.keySet()) { map.put(key, Utils.jsonToString(config.get(key))); } listener.handlePreconfig(map); } }); } }