1package autotest.common;
2
3
4import com.google.gwt.json.client.JSONObject;
5import com.google.gwt.json.client.JSONValue;
6import com.google.gwt.json.client.JSONArray;
7
8import java.util.HashMap;
9
10/**
11 * A singleton class to manage a set of static data, such as the list of users.
12 * The data will most likely be retrieved once at the beginning of program
13 * execution.  Other classes can then retrieve the data from this shared
14 * storage.
15 */
16public class StaticDataRepository {
17    public interface FinishedCallback {
18        public void onFinished();
19    }
20    // singleton
21    public static final StaticDataRepository theInstance = new StaticDataRepository();
22
23    protected JSONObject dataObject = null;
24    protected HashMap<Double, String> priorityMap = null;
25
26    private StaticDataRepository() {}
27
28    public static StaticDataRepository getRepository() {
29        return theInstance;
30    }
31
32    /**
33     * Update the local copy of the static data from the server.
34     * @param finished callback to be notified once data has been retrieved
35     */
36    public void refresh(final FinishedCallback finished) {
37        JsonRpcProxy.getProxy().rpcCall("get_static_data", null,
38                                        new JsonRpcCallback() {
39            @Override
40            public void onSuccess(JSONValue result) {
41                dataObject = result.isObject();
42                priorityMap = new HashMap<Double, String>();
43                populatePriorities(dataObject.get("priorities").isArray());
44                finished.onFinished();
45            }
46        });
47    }
48
49    private void populatePriorities(JSONArray priorities) {
50        for(int i = 0; i < priorities.size(); i++) {
51            JSONArray priorityData = priorities.get(i).isArray();
52            String priority = priorityData.get(1).isString().stringValue();
53            Double priority_value = priorityData.get(0).isNumber().getValue();
54            priorityMap.put(priority_value, priority);
55        }
56    }
57
58    /**
59     * Get a value from the static data object.
60     */
61    public JSONValue getData(String key) {
62        return dataObject.get(key);
63    }
64
65    /**
66     * Set a value in the repository.
67     */
68    public void setData(String key, JSONValue data) {
69        dataObject.put(key, data);
70    }
71
72    public String getCurrentUserLogin() {
73        return Utils.jsonToString(dataObject.get("current_user").isObject().get("login"));
74    }
75
76    public String getPriorityName(Double value) {
77        if (priorityMap == null) {
78            return "Unknown";
79        }
80
81        String priorityName = priorityMap.get(value);
82        if (priorityName == null) {
83            priorityName = value.toString();
84        }
85
86        return priorityName;
87    }
88}
89