/**
* Copyright (C) 2011 Brian Ferris <bdferris@onebusaway.org>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onebusaway.webapp.gwt.common.rpc;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONBoolean;
import com.google.gwt.json.client.JSONNumber;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONString;
import com.google.gwt.json.client.JSONValue;
public class JsonLibrary {
public native static void getJson(String requestId, String url,
JsonCallback handler, int timeout) /*-{
var callback = "callback" + requestId;
var callbackDone = callback + "done";
var script = document.createElement("script");
script.setAttribute("src", url+callback);
script.setAttribute("type", "text/javascript");
window[callback] = function(jsonObj) {
window[callbackDone] = true;
handler.@org.onebusaway.webapp.gwt.common.rpc.JsonCallback::onSuccess(Lcom/google/gwt/core/client/JavaScriptObject;)(jsonObj);
}
// JSON download has a timeout, after which we check that it is completed, throw an error if not, and then cleanup
setTimeout(function() {
if (!window[callbackDone]) {
handler.@org.onebusaway.webapp.gwt.common.rpc.JsonCallback::onFailure()();
}
// cleanup
// Garbage collect the callbacks at minimum, delete if supported
window[ callback ] = undefined;
try{ delete window[ callback ]; } catch(e){}
window[ callbackDone ] = undefined;
try{ delete window[ callbackDone ]; } catch(e){}
document.body.removeChild(script);
}, timeout);
document.body.appendChild(script);
}-*/;
public static Double getJsonDouble(JSONObject object, String key) {
JSONValue value = object.get(key);
if (value == null)
return null;
JSONNumber v = value.isNumber();
if (v == null)
return null;
return new Double(v.doubleValue());
}
public static Boolean getJsonBoolean(JSONObject object, String key) {
JSONValue value = object.get(key);
if(value == null)
return null;
JSONBoolean b = value.isBoolean();
if( b == null)
return null;
return new Boolean(b.booleanValue());
}
public static String getJsonString(JSONObject object, String key) {
JSONValue value = object.get(key);
if (value == null)
return null;
JSONString string = value.isString();
if (string == null)
return null;
return string.stringValue();
}
public static JSONObject getJsonObj(JSONObject object, String key) {
JSONValue value = object.get(key);
if (value == null)
return null;
return value.isObject();
}
public static JSONArray getJsonArray(JSONObject object, String key) {
JSONValue value = object.get(key);
if (value == null)
return null;
return value.isArray();
}
}