org.onebusaway.webapp.gwt.common.rpc.JsonLibrary.java Source code

Java tutorial

Introduction

Here is the source code for org.onebusaway.webapp.gwt.common.rpc.JsonLibrary.java

Source

/**
 * 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();
    }
}