1package autotest.tko;
2
3import autotest.common.JsonRpcCallback;
4import autotest.common.JsonRpcProxy;
5import autotest.common.StaticDataRepository;
6import autotest.common.Utils;
7import autotest.common.ui.ExtendedListBox;
8
9import com.google.gwt.event.dom.client.ChangeEvent;
10import com.google.gwt.event.dom.client.ChangeHandler;
11import com.google.gwt.json.client.JSONObject;
12import com.google.gwt.json.client.JSONString;
13import com.google.gwt.json.client.JSONValue;
14import com.google.gwt.user.client.ui.Composite;
15
16import java.util.HashMap;
17import java.util.Map;
18import java.util.Set;
19
20public class PreconfigSelector extends Composite {
21    public static final String NO_PRECONFIG = "----------";
22
23    public static interface PreconfigHandler {
24        public void handlePreconfig(Map<String, String> preconfigParameters);
25    }
26
27    private ExtendedListBox selector = new ExtendedListBox();
28    private JsonRpcProxy rpcProxy = JsonRpcProxy.getProxy();
29    private String preconfigType;
30    private PreconfigHandler listener;
31
32    public PreconfigSelector(final String preconfigType, final PreconfigHandler listener) {
33        this.preconfigType = preconfigType;
34        this.listener = listener;
35
36        initializePreconfigList(preconfigType);
37
38        selector.addChangeHandler(new ChangeHandler() {
39            public void onChange(ChangeEvent event) {
40                loadSelectedPreconfig();
41            }
42        });
43
44        initWidget(selector);
45    }
46
47    private void initializePreconfigList(final String preconfigType) {
48        selector.addItem(NO_PRECONFIG);
49        StaticDataRepository staticData = StaticDataRepository.getRepository();
50        JSONObject preconfigs = staticData.getData("preconfigs").isObject();
51        Set<String> keys = preconfigs.get(preconfigType).isObject().keySet();
52        for (String key : keys) {
53            selector.addItem(key);
54        }
55    }
56
57    private void loadSelectedPreconfig() {
58        String name = selector.getSelectedValue();
59        if (name.equals(NO_PRECONFIG)) {
60            return;
61        }
62        selector.setSelectedIndex(0);
63
64        JSONObject params = new JSONObject();
65        params.put("name", new JSONString(name));
66        params.put("type", new JSONString(preconfigType));
67        rpcProxy.rpcCall("get_preconfig", params, new JsonRpcCallback() {
68            @Override
69            public void onSuccess(JSONValue result) {
70                JSONObject config = result.isObject();
71                Map<String, String> map = new HashMap<String, String>();
72                for (String key : config.keySet()) {
73                    map.put(key, Utils.jsonToString(config.get(key)));
74                }
75                listener.handlePreconfig(map);
76            }
77        });
78    }
79}
80