github.com/keysonZZZ/kmg@v0.0.0-20151121023212-05317bfd7d39/kmgRpc/kmgRpcJava/java/src/com/google/gson/JsonElement.java (about)

     1  /*
     2   * Copyright (C) 2008 Google Inc.
     3   *
     4   * Licensed under the Apache License, Version 2.0 (the "License");
     5   * you may not use this file except in compliance with the License.
     6   * You may obtain a copy of the License at
     7   *
     8   * http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   */
    16  
    17  package com.google.gson;
    18  
    19  import com.google.gson.internal.Streams;
    20  import com.google.gson.stream.JsonWriter;
    21  import java.io.IOException;
    22  import java.io.StringWriter;
    23  import java.math.BigDecimal;
    24  import java.math.BigInteger;
    25  
    26  /**
    27   * A class representing an element of Json. It could either be a {@link JsonObject}, a
    28   * {@link JsonArray}, a {@link JsonPrimitive} or a {@link JsonNull}.
    29   *
    30   * @author Inderjeet Singh
    31   * @author Joel Leitch
    32   */
    33  public abstract class JsonElement {
    34    /**
    35     * Returns a deep copy of this element. Immutable elements like primitives
    36     * and nulls are not copied.
    37     */
    38    abstract JsonElement deepCopy();
    39  
    40    /**
    41     * provides check for verifying if this element is an array or not.
    42     *
    43     * @return true if this element is of type {@link JsonArray}, false otherwise.
    44     */
    45    public boolean isJsonArray() {
    46      return this instanceof JsonArray;
    47    }
    48  
    49    /**
    50     * provides check for verifying if this element is a Json object or not.
    51     *
    52     * @return true if this element is of type {@link JsonObject}, false otherwise.
    53     */
    54    public boolean isJsonObject() {
    55      return this instanceof JsonObject;
    56    }
    57  
    58    /**
    59     * provides check for verifying if this element is a primitive or not.
    60     *
    61     * @return true if this element is of type {@link JsonPrimitive}, false otherwise.
    62     */
    63    public boolean isJsonPrimitive() {
    64      return this instanceof JsonPrimitive;
    65    }
    66  
    67    /**
    68     * provides check for verifying if this element represents a null value or not.
    69     *
    70     * @return true if this element is of type {@link JsonNull}, false otherwise.
    71     * @since 1.2
    72     */
    73    public boolean isJsonNull() {
    74      return this instanceof JsonNull;
    75    }
    76  
    77    /**
    78     * convenience method to get this element as a {@link JsonObject}. If the element is of some
    79     * other type, a {@link IllegalStateException} will result. Hence it is best to use this method
    80     * after ensuring that this element is of the desired type by calling {@link #isJsonObject()}
    81     * first.
    82     *
    83     * @return get this element as a {@link JsonObject}.
    84     * @throws IllegalStateException if the element is of another type.
    85     */
    86    public JsonObject getAsJsonObject() {
    87      if (isJsonObject()) {
    88        return (JsonObject) this;
    89      }
    90      throw new IllegalStateException("Not a JSON Object: " + this);
    91    }
    92  
    93    /**
    94     * convenience method to get this element as a {@link JsonArray}. If the element is of some
    95     * other type, a {@link IllegalStateException} will result. Hence it is best to use this method
    96     * after ensuring that this element is of the desired type by calling {@link #isJsonArray()}
    97     * first.
    98     *
    99     * @return get this element as a {@link JsonArray}.
   100     * @throws IllegalStateException if the element is of another type.
   101     */
   102    public JsonArray getAsJsonArray() {
   103      if (isJsonArray()) {
   104        return (JsonArray) this;
   105      }
   106      throw new IllegalStateException("This is not a JSON Array.");
   107    }
   108  
   109    /**
   110     * convenience method to get this element as a {@link JsonPrimitive}. If the element is of some
   111     * other type, a {@link IllegalStateException} will result. Hence it is best to use this method
   112     * after ensuring that this element is of the desired type by calling {@link #isJsonPrimitive()}
   113     * first.
   114     *
   115     * @return get this element as a {@link JsonPrimitive}.
   116     * @throws IllegalStateException if the element is of another type.
   117     */
   118    public JsonPrimitive getAsJsonPrimitive() {
   119      if (isJsonPrimitive()) {
   120        return (JsonPrimitive) this;
   121      }
   122      throw new IllegalStateException("This is not a JSON Primitive.");
   123    }
   124  
   125    /**
   126     * convenience method to get this element as a {@link JsonNull}. If the element is of some
   127     * other type, a {@link IllegalStateException} will result. Hence it is best to use this method
   128     * after ensuring that this element is of the desired type by calling {@link #isJsonNull()}
   129     * first.
   130     *
   131     * @return get this element as a {@link JsonNull}.
   132     * @throws IllegalStateException if the element is of another type.
   133     * @since 1.2
   134     */
   135    public JsonNull getAsJsonNull() {
   136      if (isJsonNull()) {
   137        return (JsonNull) this;
   138      }
   139      throw new IllegalStateException("This is not a JSON Null.");
   140    }
   141  
   142    /**
   143     * convenience method to get this element as a boolean value.
   144     *
   145     * @return get this element as a primitive boolean value.
   146     * @throws ClassCastException if the element is of not a {@link JsonPrimitive} and is not a valid
   147     * boolean value.
   148     * @throws IllegalStateException if the element is of the type {@link JsonArray} but contains
   149     * more than a single element.
   150     */
   151    public boolean getAsBoolean() {
   152      throw new UnsupportedOperationException(getClass().getSimpleName());
   153    }
   154  
   155    /**
   156     * convenience method to get this element as a {@link Boolean} value.
   157     *
   158     * @return get this element as a {@link Boolean} value.
   159     * @throws ClassCastException if the element is of not a {@link JsonPrimitive} and is not a valid
   160     * boolean value.
   161     * @throws IllegalStateException if the element is of the type {@link JsonArray} but contains
   162     * more than a single element.
   163     */
   164    Boolean getAsBooleanWrapper() {
   165      throw new UnsupportedOperationException(getClass().getSimpleName());
   166    }
   167  
   168    /**
   169     * convenience method to get this element as a {@link Number}.
   170     *
   171     * @return get this element as a {@link Number}.
   172     * @throws ClassCastException if the element is of not a {@link JsonPrimitive} and is not a valid
   173     * number.
   174     * @throws IllegalStateException if the element is of the type {@link JsonArray} but contains
   175     * more than a single element.
   176     */
   177    public Number getAsNumber() {
   178      throw new UnsupportedOperationException(getClass().getSimpleName());
   179    }
   180  
   181    /**
   182     * convenience method to get this element as a string value.
   183     *
   184     * @return get this element as a string value.
   185     * @throws ClassCastException if the element is of not a {@link JsonPrimitive} and is not a valid
   186     * string value.
   187     * @throws IllegalStateException if the element is of the type {@link JsonArray} but contains
   188     * more than a single element.
   189     */
   190    public String getAsString() {
   191      throw new UnsupportedOperationException(getClass().getSimpleName());
   192    }
   193  
   194    /**
   195     * convenience method to get this element as a primitive double value.
   196     *
   197     * @return get this element as a primitive double value.
   198     * @throws ClassCastException if the element is of not a {@link JsonPrimitive} and is not a valid
   199     * double value.
   200     * @throws IllegalStateException if the element is of the type {@link JsonArray} but contains
   201     * more than a single element.
   202     */
   203    public double getAsDouble() {
   204      throw new UnsupportedOperationException(getClass().getSimpleName());
   205    }
   206  
   207    /**
   208     * convenience method to get this element as a primitive float value.
   209     *
   210     * @return get this element as a primitive float value.
   211     * @throws ClassCastException if the element is of not a {@link JsonPrimitive} and is not a valid
   212     * float value.
   213     * @throws IllegalStateException if the element is of the type {@link JsonArray} but contains
   214     * more than a single element.
   215     */
   216    public float getAsFloat() {
   217      throw new UnsupportedOperationException(getClass().getSimpleName());
   218    }
   219  
   220    /**
   221     * convenience method to get this element as a primitive long value.
   222     *
   223     * @return get this element as a primitive long value.
   224     * @throws ClassCastException if the element is of not a {@link JsonPrimitive} and is not a valid
   225     * long value.
   226     * @throws IllegalStateException if the element is of the type {@link JsonArray} but contains
   227     * more than a single element.
   228     */
   229    public long getAsLong() {
   230      throw new UnsupportedOperationException(getClass().getSimpleName());
   231    }
   232  
   233    /**
   234     * convenience method to get this element as a primitive integer value.
   235     *
   236     * @return get this element as a primitive integer value.
   237     * @throws ClassCastException if the element is of not a {@link JsonPrimitive} and is not a valid
   238     * integer value.
   239     * @throws IllegalStateException if the element is of the type {@link JsonArray} but contains
   240     * more than a single element.
   241     */
   242    public int getAsInt() {
   243      throw new UnsupportedOperationException(getClass().getSimpleName());
   244    }
   245  
   246    /**
   247     * convenience method to get this element as a primitive byte value.
   248     *
   249     * @return get this element as a primitive byte value.
   250     * @throws ClassCastException if the element is of not a {@link JsonPrimitive} and is not a valid
   251     * byte value.
   252     * @throws IllegalStateException if the element is of the type {@link JsonArray} but contains
   253     * more than a single element.
   254     * @since 1.3
   255     */
   256    public byte getAsByte() {
   257      throw new UnsupportedOperationException(getClass().getSimpleName());
   258    }
   259  
   260    /**
   261     * convenience method to get this element as a primitive character value.
   262     *
   263     * @return get this element as a primitive char value.
   264     * @throws ClassCastException if the element is of not a {@link JsonPrimitive} and is not a valid
   265     * char value.
   266     * @throws IllegalStateException if the element is of the type {@link JsonArray} but contains
   267     * more than a single element.
   268     * @since 1.3
   269     */
   270    public char getAsCharacter() {
   271      throw new UnsupportedOperationException(getClass().getSimpleName());
   272    }
   273  
   274    /**
   275     * convenience method to get this element as a {@link BigDecimal}.
   276     *
   277     * @return get this element as a {@link BigDecimal}.
   278     * @throws ClassCastException if the element is of not a {@link JsonPrimitive}.
   279     * * @throws NumberFormatException if the element is not a valid {@link BigDecimal}.
   280     * @throws IllegalStateException if the element is of the type {@link JsonArray} but contains
   281     * more than a single element.
   282     * @since 1.2
   283     */
   284    public BigDecimal getAsBigDecimal() {
   285      throw new UnsupportedOperationException(getClass().getSimpleName());
   286    }
   287  
   288    /**
   289     * convenience method to get this element as a {@link BigInteger}.
   290     *
   291     * @return get this element as a {@link BigInteger}.
   292     * @throws ClassCastException if the element is of not a {@link JsonPrimitive}.
   293     * @throws NumberFormatException if the element is not a valid {@link BigInteger}.
   294     * @throws IllegalStateException if the element is of the type {@link JsonArray} but contains
   295     * more than a single element.
   296     * @since 1.2
   297     */
   298    public BigInteger getAsBigInteger() {
   299      throw new UnsupportedOperationException(getClass().getSimpleName());
   300    }
   301  
   302    /**
   303     * convenience method to get this element as a primitive short value.
   304     *
   305     * @return get this element as a primitive short value.
   306     * @throws ClassCastException if the element is of not a {@link JsonPrimitive} and is not a valid
   307     * short value.
   308     * @throws IllegalStateException if the element is of the type {@link JsonArray} but contains
   309     * more than a single element.
   310     */
   311    public short getAsShort() {
   312      throw new UnsupportedOperationException(getClass().getSimpleName());
   313    }
   314  
   315    /**
   316     * Returns a String representation of this element.
   317     */
   318    @Override
   319    public String toString() {
   320      try {
   321        StringWriter stringWriter = new StringWriter();
   322        JsonWriter jsonWriter = new JsonWriter(stringWriter);
   323        jsonWriter.setLenient(true);
   324        Streams.write(this, jsonWriter);
   325        return stringWriter.toString();
   326      } catch (IOException e) {
   327        throw new AssertionError(e);
   328      }
   329    }
   330  }