com.google.gwt.json.client.JSONArray.java Source code

Java tutorial

Introduction

Here is the source code for com.google.gwt.json.client.JSONArray.java

Source

/*
 * Copyright 2008 Google Inc.
 * 
 * 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 com.google.gwt.json.client;

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

/**
 * Represents an array of {@link com.google.gwt.json.client.JSONValue} objects.
 */
public class JSONArray extends JSONValue {

    /**
     * Called from {@link #getUnwrapper()}. 
     */
    private static JavaScriptObject unwrap(JSONArray value) {
        return value.jsArray;
    }

    private final JavaScriptObject jsArray;

    /**
     * Creates an empty JSONArray.
     */
    public JSONArray() {
        jsArray = JavaScriptObject.createArray();
    }

    /**
     * Creates a new JSONArray from the supplied JavaScriptObject representing a
     * JavaScript array.
     * 
     * @param arr a JavaScript array
     */
    public JSONArray(JavaScriptObject arr) {
        jsArray = arr;
    }

    /**
     * Returns <code>true</code> if <code>other</code> is a {@link JSONArray}
     * wrapping the same underlying object.
     */
    @Override
    public boolean equals(Object other) {
        if (!(other instanceof JSONArray)) {
            return false;
        }
        return jsArray.equals(((JSONArray) other).jsArray);
    }

    /**
     * Returns the value at the specified index position.
     * 
     * @param index the index of the array item to retrieve
     * @return the value at this index, or <code>null</code> if this index is
     *         empty
     */
    public native JSONValue get(int index) /*-{
                                           var v = this.@com.google.gwt.json.client.JSONArray::jsArray[index];
                                           var func = @com.google.gwt.json.client.JSONParser::typeMap[typeof v];
                                           return func ? func(v) : @com.google.gwt.json.client.JSONParser::throwUnknownTypeException(Ljava/lang/String;)(typeof v);
                                           }-*/;

    /**
     * Returns the underlying JavaScript array that this object wraps.
     */
    public JavaScriptObject getJavaScriptObject() {
        return jsArray;
    }

    @Override
    public int hashCode() {
        return jsArray.hashCode();
    }

    /**
     * Returns <code>this</code>, as this is a JSONArray.
     */
    @Override
    public JSONArray isArray() {
        return this;
    }

    /**
     * Sets the specified index to the given value.
     * 
     * @param index the index to set
     * @param value the value to set
     * @return the previous value at this index, or <code>null</code> if this
     *         index was empty
     */
    public JSONValue set(int index, JSONValue value) {
        JSONValue previous = get(index);
        set0(index, value);
        return previous;
    }

    /**
     * Returns the number of elements in this array.
     * 
     * @return size of this array
     */
    public native int size() /*-{
                             return this.@com.google.gwt.json.client.JSONArray::jsArray.length;
                             }-*/;

    /**
     * Create the JSON encoded string representation of this JSONArray instance.
     * This method may take a long time to execute if the underlying array is
     * large.
     */
    @Override
    public String toString() {
        StringBuffer sb = new StringBuffer();
        sb.append("[");
        for (int i = 0, c = size(); i < c; i++) {
            if (i > 0) {
                sb.append(",");
            }
            sb.append(get(i));
        }
        sb.append("]");
        return sb.toString();
    }

    @Override
    native JavaScriptObject getUnwrapper() /*-{
                                           return @com.google.gwt.json.client.JSONArray::unwrap(Lcom/google/gwt/json/client/JSONArray;);
                                           }-*/;

    private native void set0(int index, JSONValue value) /*-{
                                                         if (value) {
                                                         var func = value.@com.google.gwt.json.client.JSONValue::getUnwrapper()();
                                                         value = func(value);
                                                         } else {
                                                         // Coerce Java null to undefined; there's a JSONNull for null.
                                                         value = undefined;
                                                         }
                                                         this.@com.google.gwt.json.client.JSONArray::jsArray[index] = value;
                                                         }-*/;
}