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