1acdbe3535529a24555d874a8038993c62fd690c2showardpackage autotest.common;
2e3f6868dac3b4c4714637d12b93d97823011a35cshoward
3e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh
4e8819cdf80ca0e0602d22551a50f970aa68e108dmblighimport com.google.gwt.json.client.JSONObject;
5e8819cdf80ca0e0602d22551a50f970aa68e108dmblighimport com.google.gwt.json.client.JSONValue;
67d658cf6bade565c1098fd7b47075e96e7b542caAlex Millerimport com.google.gwt.json.client.JSONArray;
77d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller
87d658cf6bade565c1098fd7b47075e96e7b542caAlex Millerimport java.util.HashMap;
9e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh
10e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh/**
11e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh * A singleton class to manage a set of static data, such as the list of users.
12e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh * The data will most likely be retrieved once at the beginning of program
13e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh * execution.  Other classes can then retrieve the data from this shared
14e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh * storage.
15e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh */
16e8819cdf80ca0e0602d22551a50f970aa68e108dmblighpublic class StaticDataRepository {
17acdbe3535529a24555d874a8038993c62fd690c2showard    public interface FinishedCallback {
18e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh        public void onFinished();
19e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh    }
20e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh    // singleton
21e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh    public static final StaticDataRepository theInstance = new StaticDataRepository();
225d84dc7f52f71992f4ac2719bc099d55f815c37fAviv Keshet
23e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh    protected JSONObject dataObject = null;
247d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller    protected HashMap<Double, String> priorityMap = null;
255d84dc7f52f71992f4ac2719bc099d55f815c37fAviv Keshet
26e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh    private StaticDataRepository() {}
275d84dc7f52f71992f4ac2719bc099d55f815c37fAviv Keshet
28e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh    public static StaticDataRepository getRepository() {
29e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh        return theInstance;
30e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh    }
315d84dc7f52f71992f4ac2719bc099d55f815c37fAviv Keshet
32e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh    /**
33e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh     * Update the local copy of the static data from the server.
34e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh     * @param finished callback to be notified once data has been retrieved
35e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh     */
36e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh    public void refresh(final FinishedCallback finished) {
375d84dc7f52f71992f4ac2719bc099d55f815c37fAviv Keshet        JsonRpcProxy.getProxy().rpcCall("get_static_data", null,
38e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh                                        new JsonRpcCallback() {
396bc47015cce0ebc2fc255d3950bfeaf4851f36fdshoward            @Override
40e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh            public void onSuccess(JSONValue result) {
41e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh                dataObject = result.isObject();
427d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller                priorityMap = new HashMap<Double, String>();
437d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller                populatePriorities(dataObject.get("priorities").isArray());
44e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh                finished.onFinished();
45e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh            }
46e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh        });
47e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh    }
485d84dc7f52f71992f4ac2719bc099d55f815c37fAviv Keshet
497d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller    private void populatePriorities(JSONArray priorities) {
507d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller        for(int i = 0; i < priorities.size(); i++) {
517d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller            JSONArray priorityData = priorities.get(i).isArray();
527d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller            String priority = priorityData.get(1).isString().stringValue();
537d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller            Double priority_value = priorityData.get(0).isNumber().getValue();
547d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller            priorityMap.put(priority_value, priority);
557d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller        }
567d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller    }
577d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller
58e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh    /**
59e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh     * Get a value from the static data object.
60e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh     */
61e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh    public JSONValue getData(String key) {
62e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh        return dataObject.get(key);
63e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh    }
645d84dc7f52f71992f4ac2719bc099d55f815c37fAviv Keshet
657f69e4383fa7be06c28fe54d1a0c834fa1de313ashoward    /**
667f69e4383fa7be06c28fe54d1a0c834fa1de313ashoward     * Set a value in the repository.
677f69e4383fa7be06c28fe54d1a0c834fa1de313ashoward     */
687f69e4383fa7be06c28fe54d1a0c834fa1de313ashoward    public void setData(String key, JSONValue data) {
697f69e4383fa7be06c28fe54d1a0c834fa1de313ashoward        dataObject.put(key, data);
707f69e4383fa7be06c28fe54d1a0c834fa1de313ashoward    }
715d84dc7f52f71992f4ac2719bc099d55f815c37fAviv Keshet
720fc3830f17d644bab74bfe38556299f5e58bc0fashoward    public String getCurrentUserLogin() {
730fc3830f17d644bab74bfe38556299f5e58bc0fashoward        return Utils.jsonToString(dataObject.get("current_user").isObject().get("login"));
740fc3830f17d644bab74bfe38556299f5e58bc0fashoward    }
757d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller
767d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller    public String getPriorityName(Double value) {
777d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller        if (priorityMap == null) {
787d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller            return "Unknown";
797d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller        }
807d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller
817d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller        String priorityName = priorityMap.get(value);
827d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller        if (priorityName == null) {
837d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller            priorityName = value.toString();
847d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller        }
857d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller
867d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller        return priorityName;
877d658cf6bade565c1098fd7b47075e96e7b542caAlex Miller    }
88e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh}
89