nl.strohalm.cyclos.mobile.client.utils.JsonHelper.java Source code

Java tutorial

Introduction

Here is the source code for nl.strohalm.cyclos.mobile.client.utils.JsonHelper.java

Source

/*
This file is part of Cyclos (www.cyclos.org).
A project of the Social Trade Organisation (www.socialtrade.org).
    
Cyclos is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
    
Cyclos is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
    
You should have received a copy of the GNU General Public License
along with Cyclos; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
    
 */
package nl.strohalm.cyclos.mobile.client.utils;

import java.util.List;

import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArray;

/**
 * Provides helper methods for JSON manipulation
 */
public class JsonHelper {

    @SuppressWarnings("unchecked")
    public static <T extends JavaScriptObject> T deepCopy(T obj) {
        return (T) deepCopyImpl(obj);
    }

    private static native JavaScriptObject deepCopyImpl(JavaScriptObject obj) /*-{
                                                                                  
                                                                              if (obj == null) return obj;
                                                                                  
                                                                              var copy;        
                                                                                  
                                                                              if (obj instanceof Date) {
                                                                              // Handle Date
                                                                              copy = new Date();
                                                                              copy.setTime(obj.getTime());
                                                                              } else if (obj instanceof Array) {
                                                                              // Handle Array
                                                                              copy = [];
                                                                              for (var i = 0, len = obj.length; i < len; i++) {
                                                                              if (obj[i] == null || typeof obj[i] != "object") copy[i] = obj[i];
                                                                              else copy[i] = @nl.strohalm.cyclos.mobile.client.utils.JsonHelper::deepCopyImpl(Lcom/google/gwt/core/client/JavaScriptObject;)(obj[i]);
                                                                              }
                                                                              } else {
                                                                              // Handle Object
                                                                              copy = {};
                                                                              for (var attr in obj) {
                                                                              if (obj.hasOwnProperty(attr)) {
                                                                              if (obj[attr] == null || typeof obj[attr] != "object") copy[attr] = obj[attr];
                                                                              else copy[attr] = @nl.strohalm.cyclos.mobile.client.utils.JsonHelper::deepCopyImpl(Lcom/google/gwt/core/client/JavaScriptObject;)(obj[attr]);
                                                                              }
                                                                              }
                                                                              }        
                                                                              return copy;
                                                                              }-*/;

    public static native String stringify(JavaScriptObject json) /*-{
                                                                 return $wnd.JSON.stringify(json);
                                                                 }-*/;

    public static native JsArray<? extends JavaScriptObject> parseArray(String json) /*-{
                                                                                     return $wnd.JSON.parse(json);  
                                                                                     }-*/;

    public static native <T extends JavaScriptObject> T parseObject(String json) /*-{
                                                                                 return $wnd.JSON.parse(json);
                                                                                 }-*/;

    public static <T extends JavaScriptObject> JsArray<T> createGenericArray(List<T> objects) {
        JsArray<T> array = JavaScriptObject.createArray().cast();
        for (T object : objects) {
            array.push(object);
        }
        return array;
    }

}