Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

adding new 3.x dirs

  • Loading branch information...
commit ea15b3723adc94066c19a3a7db31e81ed6bc6df3 1 parent 597a969
geremy cohen authored
Showing with 27,898 additions and 0 deletions.
  1. +83 −0 j2me/3.2/j2me/build.xml
  2. +1 −0  j2me/3.2/j2me/build/.timestamp
  3. +7 −0 j2me/3.2/j2me/build/manifest.mf
  4. +892 −0 j2me/3.2/j2me/build/preprocessed/org/json/me/JSONArray.java
  5. +27 −0 j2me/3.2/j2me/build/preprocessed/org/json/me/JSONException.java
  6. +1,317 −0 j2me/3.2/j2me/build/preprocessed/org/json/me/JSONObject.java
  7. +18 −0 j2me/3.2/j2me/build/preprocessed/org/json/me/JSONString.java
  8. +76 −0 j2me/3.2/j2me/build/preprocessed/org/json/me/JSONStringer.java
  9. +472 −0 j2me/3.2/j2me/build/preprocessed/org/json/me/JSONTokener.java
  10. +320 −0 j2me/3.2/j2me/build/preprocessed/org/json/me/JSONWriter.java
  11. +64 −0 j2me/3.2/j2me/build/preprocessed/org/json/me/StringWriter.java
  12. +403 −0 j2me/3.2/j2me/build/preprocessed/org/json/me/util/XML.java
  13. +393 −0 j2me/3.2/j2me/build/preprocessed/org/json/me/util/XMLTokener.java
  14. +15 −0 j2me/3.2/j2me/build/preprocessed/pubnub/Callback.java
  15. +764 −0 j2me/3.2/j2me/build/preprocessed/pubnub/Pubnub.java
  16. +48 −0 j2me/3.2/j2me/build/preprocessed/pubnub/ServiceProviderException.java
  17. +142 −0 j2me/3.2/j2me/build/preprocessed/pubnub/crypto/Base64Encoder.java
  18. +437 −0 j2me/3.2/j2me/build/preprocessed/pubnub/crypto/PubnubCrypto.java
  19. +357 −0 j2me/3.2/j2me/build/preprocessed/test/PubnubTestMIDlet.java
  20. +9 −0 j2me/3.2/j2me/dist/Pubnub-J2me.jad
  21. BIN  j2me/3.2/j2me/dist/Pubnub-J2me.jar
  22. BIN  j2me/3.2/j2me/libs/async-http.jar
  23. BIN  j2me/3.2/j2me/libs/bouncycastle.jar
  24. BIN  j2me/3.2/j2me/libs/tinylinegzip.zip
  25. +1,432 −0 j2me/3.2/j2me/nbproject/build-impl.xml
  26. +8 −0 j2me/3.2/j2me/nbproject/genfiles.properties
  27. +7 −0 j2me/3.2/j2me/nbproject/private/private.properties
  28. +4 −0 j2me/3.2/j2me/nbproject/private/private.xml
  29. +145 −0 j2me/3.2/j2me/nbproject/project.properties
  30. +11 −0 j2me/3.2/j2me/nbproject/project.xml
  31. +892 −0 j2me/3.2/j2me/src/org/json/me/JSONArray.java
  32. +27 −0 j2me/3.2/j2me/src/org/json/me/JSONException.java
  33. +1,317 −0 j2me/3.2/j2me/src/org/json/me/JSONObject.java
  34. +18 −0 j2me/3.2/j2me/src/org/json/me/JSONString.java
  35. +76 −0 j2me/3.2/j2me/src/org/json/me/JSONStringer.java
  36. +472 −0 j2me/3.2/j2me/src/org/json/me/JSONTokener.java
  37. +320 −0 j2me/3.2/j2me/src/org/json/me/JSONWriter.java
  38. +64 −0 j2me/3.2/j2me/src/org/json/me/StringWriter.java
  39. +403 −0 j2me/3.2/j2me/src/org/json/me/util/XML.java
  40. +393 −0 j2me/3.2/j2me/src/org/json/me/util/XMLTokener.java
  41. +15 −0 j2me/3.2/j2me/src/pubnub/Callback.java
  42. +932 −0 j2me/3.2/j2me/src/pubnub/Pubnub.java
  43. +48 −0 j2me/3.2/j2me/src/pubnub/ServiceProviderException.java
  44. +142 −0 j2me/3.2/j2me/src/pubnub/crypto/Base64Encoder.java
  45. +437 −0 j2me/3.2/j2me/src/pubnub/crypto/PubnubCrypto.java
  46. +380 −0 j2me/3.2/j2me/src/test/PubnubTestMIDlet.java
  47. +83 −0 j2me/3.3/PubnubUnitTest/build.xml
  48. +1 −0  j2me/3.3/PubnubUnitTest/build/.timestamp
  49. +6 −0 j2me/3.3/PubnubUnitTest/build/manifest.mf
  50. +892 −0 j2me/3.3/PubnubUnitTest/build/preprocessed/org/json/me/JSONArray.java
  51. +27 −0 j2me/3.3/PubnubUnitTest/build/preprocessed/org/json/me/JSONException.java
  52. +1,317 −0 j2me/3.3/PubnubUnitTest/build/preprocessed/org/json/me/JSONObject.java
  53. +18 −0 j2me/3.3/PubnubUnitTest/build/preprocessed/org/json/me/JSONString.java
  54. +76 −0 j2me/3.3/PubnubUnitTest/build/preprocessed/org/json/me/JSONStringer.java
  55. +472 −0 j2me/3.3/PubnubUnitTest/build/preprocessed/org/json/me/JSONTokener.java
  56. +320 −0 j2me/3.3/PubnubUnitTest/build/preprocessed/org/json/me/JSONWriter.java
  57. +64 −0 j2me/3.3/PubnubUnitTest/build/preprocessed/org/json/me/StringWriter.java
  58. +403 −0 j2me/3.3/PubnubUnitTest/build/preprocessed/org/json/me/util/XML.java
  59. +393 −0 j2me/3.3/PubnubUnitTest/build/preprocessed/org/json/me/util/XMLTokener.java
  60. +20 −0 j2me/3.3/PubnubUnitTest/build/preprocessed/pubnub/Callback.java
  61. +1,165 −0 j2me/3.3/PubnubUnitTest/build/preprocessed/pubnub/Pubnub.java
  62. +48 −0 j2me/3.3/PubnubUnitTest/build/preprocessed/pubnub/ServiceProviderException.java
  63. +142 −0 j2me/3.3/PubnubUnitTest/build/preprocessed/pubnub/crypto/Base64Encoder.java
  64. +437 −0 j2me/3.3/PubnubUnitTest/build/preprocessed/pubnub/crypto/PubnubCrypto.java
  65. +230 −0 j2me/3.3/PubnubUnitTest/build/preprocessed/test/PubnubMIDlet.java
  66. +294 −0 j2me/3.3/PubnubUnitTest/build/preprocessed/test/UnitTestForDetailedHistory.java
  67. +8 −0 j2me/3.3/PubnubUnitTest/dist/PubnubUnitTest.jad
  68. BIN  j2me/3.3/PubnubUnitTest/dist/PubnubUnitTest.jar
  69. BIN  j2me/3.3/PubnubUnitTest/libs/async-http.jar
  70. BIN  j2me/3.3/PubnubUnitTest/libs/bouncycastle.jar
  71. BIN  j2me/3.3/PubnubUnitTest/libs/tinylinegzip.zip
  72. +1,432 −0 j2me/3.3/PubnubUnitTest/nbproject/build-impl.xml
  73. +8 −0 j2me/3.3/PubnubUnitTest/nbproject/genfiles.properties
  74. +7 −0 j2me/3.3/PubnubUnitTest/nbproject/private/private.properties
  75. +4 −0 j2me/3.3/PubnubUnitTest/nbproject/private/private.xml
  76. +145 −0 j2me/3.3/PubnubUnitTest/nbproject/project.properties
  77. +11 −0 j2me/3.3/PubnubUnitTest/nbproject/project.xml
  78. +892 −0 j2me/3.3/PubnubUnitTest/src/org/json/me/JSONArray.java
  79. +27 −0 j2me/3.3/PubnubUnitTest/src/org/json/me/JSONException.java
  80. +1,317 −0 j2me/3.3/PubnubUnitTest/src/org/json/me/JSONObject.java
  81. +18 −0 j2me/3.3/PubnubUnitTest/src/org/json/me/JSONString.java
  82. +76 −0 j2me/3.3/PubnubUnitTest/src/org/json/me/JSONStringer.java
  83. +472 −0 j2me/3.3/PubnubUnitTest/src/org/json/me/JSONTokener.java
  84. +320 −0 j2me/3.3/PubnubUnitTest/src/org/json/me/JSONWriter.java
  85. +64 −0 j2me/3.3/PubnubUnitTest/src/org/json/me/StringWriter.java
  86. +403 −0 j2me/3.3/PubnubUnitTest/src/org/json/me/util/XML.java
  87. +393 −0 j2me/3.3/PubnubUnitTest/src/org/json/me/util/XMLTokener.java
  88. +20 −0 j2me/3.3/PubnubUnitTest/src/pubnub/Callback.java
  89. +1,165 −0 j2me/3.3/PubnubUnitTest/src/pubnub/Pubnub.java
  90. +48 −0 j2me/3.3/PubnubUnitTest/src/pubnub/ServiceProviderException.java
  91. +142 −0 j2me/3.3/PubnubUnitTest/src/pubnub/crypto/Base64Encoder.java
  92. +437 −0 j2me/3.3/PubnubUnitTest/src/pubnub/crypto/PubnubCrypto.java
  93. +230 −0 j2me/3.3/PubnubUnitTest/src/test/PubnubMIDlet.java
  94. +78 −0 j2me/3.3/PubnubUnitTest/src/test/PubnubMIDlet.vmd
  95. +294 −0 j2me/3.3/PubnubUnitTest/src/test/UnitTestForDetailedHistory.java
  96. +83 −0 j2me/3.3/j2me/build.xml
  97. +1 −0  j2me/3.3/j2me/build/.timestamp
  98. +7 −0 j2me/3.3/j2me/build/manifest.mf
Sorry, we could not display the entire diff because it was too big.
View
83 j2me/3.2/j2me/build.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- You may freely edit this file. See commented blocks below for -->
+<!-- some examples of how to customize the build. -->
+<!-- (If you delete it and reopen the project it will be recreated.) -->
+<project name="Pubnub-J2me" default="jar" basedir=".">
+ <description>Builds, tests, and runs the project .</description>
+ <import file="nbproject/build-impl.xml"/>
+ <!--
+
+ There exist several targets which are by default empty and which can be
+ used for execution of your tasks. These targets are usually executed
+ before and after some main targets. They are:
+
+ pre-init: called before initialization of project properties
+ post-init: called after initialization of project properties
+ pre-preprocess: called before text preprocessing of sources
+ post-preprocess: called after text preprocessing of sources
+ pre-compile: called before source compilation
+ post-compile: called after source compilation
+ pre-obfuscate: called before obfuscation
+ post-obfuscate: called after obfuscation
+ pre-preverify: called before preverification
+ post-preverify: called after preverification
+ pre-jar: called before jar building
+ post-jar: called after jar building
+ pre-build: called before final distribution building
+ post-build: called after final distribution building
+ pre-clean: called before cleaning build products
+ post-clean: called after cleaning build products
+
+ Example of pluging a my-special-task after the compilation could look like
+
+ <target name="post-compile">
+ <my-special-task>
+ <fileset dir="${build.classes.dir}"/>
+ </my-special-task>
+ </target>
+
+ For list of available properties check the imported
+ nbproject/build-impl.xml file.
+
+ Other way how to customize the build is by overriding existing main targets.
+ The target of interest are:
+
+ preprocess: preprocessing
+ extract-libs: extraction of libraries and resources
+ compile: compilation
+ create-jad: construction of jad and jar manifest source
+ obfuscate: obfuscation
+ preverify: preverification
+ jar: jar archive building
+ run: execution
+ debug: execution in debug mode
+ build: building of the final distribution
+ javadoc: javadoc generation
+
+ Example of overriding the target for project execution could look like
+
+ <target name="run" depends="init,jar">
+ <my-special-exec jadfile="${dist.dir}/${dist.jad}"/>
+ </target>
+
+ Be careful about correct dependencies when overriding original target.
+ Again, for list of available properties which you can use check the target
+ you are overriding in nbproject/build-impl.xml file.
+
+ A special target for-all-configs can be used to run some specific targets for
+ all project configurations in a sequence. File nbproject/build-impl.xml
+ already contains some "for-all" targets:
+
+ jar-all
+ javadoc-all
+ clean-all
+
+ Example of definition of target iterating over all project configurations:
+
+ <target name="jar-all">
+ <property name="target.to.call" value="jar"/>
+ <antcall target="for-all-configs"/>
+ </target>
+
+ -->
+</project>
View
1  j2me/3.2/j2me/build/.timestamp
@@ -0,0 +1 @@
+ignore me
View
7 j2me/3.2/j2me/build/manifest.mf
@@ -0,0 +1,7 @@
+MIDlet-1: PubnubTestMIDlet,,test.PubnubTestMIDlet
+MIDlet-Permissions: javax.microedition.io.Connector.https, javax.microedition.io.Connector.http
+MIDlet-Vendor: Vendor
+MIDlet-Name: Pubnub-J2me
+MIDlet-Version: 1.0
+MicroEdition-Configuration: CLDC-1.1
+MicroEdition-Profile: MIDP-2.0
View
892 j2me/3.2/j2me/build/preprocessed/org/json/me/JSONArray.java
@@ -0,0 +1,892 @@
+package org.json.me;
+
+/*
+Copyright (c) 2002 JSON.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+The Software shall be used for Good, not Evil.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Hashtable;
+import java.util.Vector;
+
+/**
+ * A JSONArray is an ordered sequence of values. Its external text form is a
+ * string wrapped in square brackets with commas separating the values. The
+ * internal form is an object having <code>get</code> and <code>opt</code>
+ * methods for accessing the values by index, and <code>put</code> methods for
+ * adding or replacing values. The values can be any of these types:
+ * <code>Boolean</code>, <code>JSONArray</code>, <code>JSONObject</code>,
+ * <code>Number</code>, <code>String</code>, or the
+ * <code>JSONObject.NULL object</code>.
+ * <p>
+ * The constructor can convert a JSON text into a Java object. The
+ * <code>toString</code> method converts to JSON text.
+ * <p>
+ * A <code>get</code> method returns a value if one can be found, and throws an
+ * exception if one cannot be found. An <code>opt</code> method returns a
+ * default value instead of throwing an exception, and so is useful for
+ * obtaining optional values.
+ * <p>
+ * The generic <code>get()</code> and <code>opt()</code> methods return an
+ * object which you can cast or query for type. There are also typed
+ * <code>get</code> and <code>opt</code> methods that do type checking and type
+ * coersion for you.
+ * <p>
+ * The texts produced by the <code>toString</code> methods strictly conform to
+ * JSON syntax rules. The constructors are more forgiving in the texts they will
+ * accept:
+ * <ul>
+ * <li>An extra <code>,</code>&nbsp;<small>(comma)</small> may appear just
+ * before the closing bracket.</li>
+ * <li>The <code>null</code> value will be inserted when there
+ * is <code>,</code>&nbsp;<small>(comma)</small> elision.</li>
+ * <li>Strings may be quoted with <code>'</code>&nbsp;<small>(single
+ * quote)</small>.</li>
+ * <li>Strings do not need to be quoted at all if they do not begin with a quote
+ * or single quote, and if they do not contain leading or trailing spaces,
+ * and if they do not contain any of these characters:
+ * <code>{ } [ ] / \ : , = ; #</code> and if they do not look like numbers
+ * and if they are not the reserved words <code>true</code>,
+ * <code>false</code>, or <code>null</code>.</li>
+ * <li>Values can be separated by <code>;</code> <small>(semicolon)</small> as
+ * well as by <code>,</code> <small>(comma)</small>.</li>
+ * <li>Numbers may have the <code>0-</code> <small>(octal)</small> or
+ * <code>0x-</code> <small>(hex)</small> prefix.</li>
+ * <li>Comments written in the slashshlash, slashstar, and hash conventions
+ * will be ignored.</li>
+ * </ul>
+
+ * @author JSON.org
+ * @version 2
+ */
+public class JSONArray {
+
+
+ /**
+ * The Vector where the JSONArray's properties are kept.
+ */
+ private Vector myArrayList;
+
+
+ /**
+ * Construct an empty JSONArray.
+ */
+ public JSONArray() {
+ this.myArrayList = new Vector();
+ }
+
+ /**
+ * Construct a JSONArray from a JSONTokener.
+ * @param x A JSONTokener
+ * @throws JSONException If there is a syntax error.
+ */
+ public JSONArray(JSONTokener x) throws JSONException {
+ this();
+ if (x.nextClean() != '[') {
+ throw x.syntaxError("A JSONArray text must start with '['");
+ }
+ if (x.nextClean() == ']') {
+ return;
+ }
+ x.back();
+ for (;;) {
+ if (x.nextClean() == ',') {
+ x.back();
+ this.myArrayList.addElement(null);
+ } else {
+ x.back();
+ this.myArrayList.addElement(x.nextValue());
+ }
+ switch (x.nextClean()) {
+ case ';':
+ case ',':
+ if (x.nextClean() == ']') {
+ return;
+ }
+ x.back();
+ break;
+ case ']':
+ return;
+ default:
+ throw x.syntaxError("Expected a ',' or ']'");
+ }
+ }
+ }
+
+
+ /**
+ * Construct a JSONArray from a source sJSON text.
+ * @param string A string that begins with
+ * <code>[</code>&nbsp;<small>(left bracket)</small>
+ * and ends with <code>]</code>&nbsp;<small>(right bracket)</small>.
+ * @throws JSONException If there is a syntax error.
+ */
+ public JSONArray(String string) throws JSONException {
+ this(new JSONTokener(string));
+ }
+
+
+ /**
+ * Construct a JSONArray from a Collection.
+ * @param collection A Collection.
+ */
+ public JSONArray(Vector collection) {
+ if (collection == null) {
+ this.myArrayList = new Vector();
+ } else {
+ int size = collection.size();
+ this.myArrayList = new Vector(size);
+ for (int i=0; i < size; i++) {
+ this.myArrayList.addElement(collection.elementAt(i));
+ }
+ }
+ }
+
+ /**
+ * Get the object value associated with an index.
+ * @param index
+ * The index must be between 0 and length() - 1.
+ * @return An object value.
+ * @throws JSONException If there is no value for the index.
+ */
+ public Object get(int index) throws JSONException {
+ Object o = opt(index);
+ if (o == null) {
+ throw new JSONException("JSONArray[" + index + "] not found.");
+ }
+ return o;
+ }
+
+ /**
+ * Get the boolean value associated with an index.
+ * The string values "true" and "false" are converted to boolean.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return The truth.
+ * @throws JSONException If there is no value for the index or if the
+ * value is not convertable to boolean.
+ */
+ public boolean getBoolean(int index) throws JSONException {
+ Object o = get(index);
+//#if CLDC!="1.0"
+ if (o.equals(Boolean.FALSE) ||
+//#else
+//# if (o.equals(JSONObject.FALSE) ||
+//#endif
+ (o instanceof String &&
+ ((String)o).toLowerCase().equals("false"))) {
+ return false;
+//#if CLDC!="1.0"
+ } else if (o.equals(Boolean.TRUE) ||
+//#else
+//# } else if (o.equals(JSONObject.TRUE) ||
+//#endif
+ (o instanceof String &&
+ ((String)o).toLowerCase().equals("true"))) {
+ return true;
+ }
+ throw new JSONException("JSONArray[" + index + "] is not a Boolean.");
+ }
+
+//#if CLDC!="1.0"
+ /**
+ * Get the double value associated with an index.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return The value.
+ * @throws JSONException If the key is not found or if the value cannot
+ * be converted to a number.
+ */
+ public double getDouble(int index) throws JSONException {
+ Object o = get(index);
+ try {
+ return Double.valueOf((String)o).doubleValue();
+ } catch (Exception e) {
+ throw new JSONException("JSONArray[" + index +
+ "] is not a number.");
+ }
+ }
+//#endif
+
+//#if CLDC!="1.0"
+ /**
+ * Get the int value associated with an index.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return The value.
+ * @throws JSONException If the key is not found or if the value cannot
+ * be converted to a number.
+ * if the value cannot be converted to a number.
+ */
+ public int getInt(int index) throws JSONException {
+ Object o = get(index);
+ return (int)getDouble(index);
+ }
+//#endif
+
+ /**
+ * Get the JSONArray associated with an index.
+ * @param index The index must be between 0 and length() - 1.
+ * @return A JSONArray value.
+ * @throws JSONException If there is no value for the index. or if the
+ * value is not a JSONArray
+ */
+ public JSONArray getJSONArray(int index) throws JSONException {
+ Object o = get(index);
+ if (o instanceof JSONArray) {
+ return (JSONArray)o;
+ }
+ throw new JSONException("JSONArray[" + index +
+ "] is not a JSONArray.");
+ }
+
+
+ /**
+ * Get the JSONObject associated with an index.
+ * @param index subscript
+ * @return A JSONObject value.
+ * @throws JSONException If there is no value for the index or if the
+ * value is not a JSONObject
+ */
+ public JSONObject getJSONObject(int index) throws JSONException {
+ Object o = get(index);
+ if (o instanceof JSONObject) {
+ return (JSONObject)o;
+ }
+ throw new JSONException("JSONArray[" + index +
+ "] is not a JSONObject.");
+ }
+
+
+//#if CLDC!="1.0"
+ /**
+ * Get the long value associated with an index.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return The value.
+ * @throws JSONException If the key is not found or if the value cannot
+ * be converted to a number.
+ */
+ public long getLong(int index) throws JSONException {
+ Object o = get(index);
+ return (long)getDouble(index);
+ }
+//#endif
+
+ /**
+ * Get the string associated with an index.
+ * @param index The index must be between 0 and length() - 1.
+ * @return A string value.
+ * @throws JSONException If there is no value for the index.
+ */
+ public String getString(int index) throws JSONException {
+ return get(index).toString();
+ }
+
+
+ /**
+ * Determine if the value is null.
+ * @param index The index must be between 0 and length() - 1.
+ * @return true if the value at the index is null, or if there is no value.
+ */
+ public boolean isNull(int index) {
+ return JSONObject.NULL.equals(opt(index));
+ }
+
+
+ /**
+ * Make a string from the contents of this JSONArray. The
+ * <code>separator</code> string is inserted between each element.
+ * Warning: This method assumes that the data structure is acyclical.
+ * @param separator A string that will be inserted between the elements.
+ * @return a string.
+ * @throws JSONException If the array contains an invalid number.
+ */
+ public String join(String separator) throws JSONException {
+ int len = length();
+ StringBuffer sb = new StringBuffer();
+
+ for (int i = 0; i < len; i += 1) {
+ if (i > 0) {
+ sb.append(separator);
+ }
+ sb.append(JSONObject.valueToString(this.myArrayList.elementAt(i)));
+ }
+ return sb.toString();
+ }
+
+
+ /**
+ * Get the number of elements in the JSONArray, included nulls.
+ *
+ * @return The length (or size).
+ */
+ public int length() {
+ return this.myArrayList.size();
+ }
+
+
+ /**
+ * Get the optional object value associated with an index.
+ * @param index The index must be between 0 and length() - 1.
+ * @return An object value, or null if there is no
+ * object at that index.
+ */
+ public Object opt(int index) {
+ return (index < 0 || index >= length()) ?
+ null : this.myArrayList.elementAt(index);
+ }
+
+ /**
+ * Get the optional boolean value associated with an index.
+ * It returns false if there is no value at that index,
+ * or if the value is not Boolean.TRUE or the String "true".
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return The truth.
+ */
+ public boolean optBoolean(int index) {
+ return optBoolean(index, false);
+ }
+
+ /**
+ * Get the optional boolean value associated with an index.
+ * It returns the defaultValue if there is no value at that index or if
+ * it is not a Boolean or the String "true" or "false" (case insensitive).
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @param defaultValue A boolean default.
+ * @return The truth.
+ */
+ public boolean optBoolean(int index, boolean defaultValue) {
+ try {
+ return getBoolean(index);
+ } catch (Exception e) {
+ return defaultValue;
+ }
+ }
+
+//#if CLDC!="1.0"
+ /**
+ * Get the optional double value associated with an index.
+ * NaN is returned if there is no value for the index,
+ * or if the value is not a number and cannot be converted to a number.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return The value.
+ */
+ public double optDouble(int index) {
+ return optDouble(index, Double.NaN);
+ }
+//#endif
+
+//#if CLDC!="1.0"
+ /**
+ * Get the optional double value associated with an index.
+ * The defaultValue is returned if there is no value for the index,
+ * or if the value is not a number and cannot be converted to a number.
+ *
+ * @param index subscript
+ * @param defaultValue The default value.
+ * @return The value.
+ */
+ public double optDouble(int index, double defaultValue) {
+ try {
+ return getDouble(index);
+ } catch (Exception e) {
+ return defaultValue;
+ }
+ }
+//#endif
+
+//#if CLDC!="1.0"
+ /**
+ * Get the optional int value associated with an index.
+ * Zero is returned if there is no value for the index,
+ * or if the value is not a number and cannot be converted to a number.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return The value.
+ */
+ public int optInt(int index) {
+ return optInt(index, 0);
+ }
+//#endif
+
+//#if CLDC!="1.0"
+ /**
+ * Get the optional int value associated with an index.
+ * The defaultValue is returned if there is no value for the index,
+ * or if the value is not a number and cannot be converted to a number.
+ * @param index The index must be between 0 and length() - 1.
+ * @param defaultValue The default value.
+ * @return The value.
+ */
+ public int optInt(int index, int defaultValue) {
+ try {
+ return getInt(index);
+ } catch (Exception e) {
+ return defaultValue;
+ }
+ }
+//#endif
+
+ /**
+ * Get the optional JSONArray associated with an index.
+ * @param index subscript
+ * @return A JSONArray value, or null if the index has no value,
+ * or if the value is not a JSONArray.
+ */
+ public JSONArray optJSONArray(int index) {
+ Object o = opt(index);
+ return o instanceof JSONArray ? (JSONArray)o : null;
+ }
+
+
+ /**
+ * Get the optional JSONObject associated with an index.
+ * Null is returned if the key is not found, or null if the index has
+ * no value, or if the value is not a JSONObject.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return A JSONObject value.
+ */
+ public JSONObject optJSONObject(int index) {
+ Object o = opt(index);
+ return o instanceof JSONObject ? (JSONObject)o : null;
+ }
+
+//#if CLDC!="1.0"
+ /**
+ * Get the optional long value associated with an index.
+ * Zero is returned if there is no value for the index,
+ * or if the value is not a number and cannot be converted to a number.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return The value.
+ */
+ public long optLong(int index) {
+ return optLong(index, 0);
+ }
+//#endif
+
+//#if CLDC!="1.0"
+ /**
+ * Get the optional long value associated with an index.
+ * The defaultValue is returned if there is no value for the index,
+ * or if the value is not a number and cannot be converted to a number.
+ * @param index The index must be between 0 and length() - 1.
+ * @param defaultValue The default value.
+ * @return The value.
+ */
+ public long optLong(int index, long defaultValue) {
+ try {
+ return getLong(index);
+ } catch (Exception e) {
+ return defaultValue;
+ }
+ }
+//#endif
+
+ /**
+ * Get the optional string value associated with an index. It returns an
+ * empty string if there is no value at that index. If the value
+ * is not a string and is not null, then it is coverted to a string.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return A String value.
+ */
+ public String optString(int index) {
+ return optString(index, "");
+ }
+
+
+ /**
+ * Get the optional string associated with an index.
+ * The defaultValue is returned if the key is not found.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @param defaultValue The default value.
+ * @return A String value.
+ */
+ public String optString(int index, String defaultValue) {
+ Object o = opt(index);
+ return o != null ? o.toString() : defaultValue;
+ }
+
+
+ /**
+ * Append a boolean value. This increases the array's length by one.
+ *
+ * @param value A boolean value.
+ * @return this.
+ */
+ public JSONArray put(boolean value) {
+//#if CLDC!="1.0"
+ put(value ? Boolean.TRUE : Boolean.FALSE);
+//#else
+//# put(value ? JSONObject.TRUE : JSONObject.FALSE);
+//#endif
+ return this;
+ }
+
+ /**
+ * Put a value in the JSONArray, where the value will be a
+ * JSONArray which is produced from a Collection.
+ * @param value A Collection value.
+ * @return this.
+ */
+ public JSONArray put(Vector value) {
+ put(new JSONArray(value));
+ return this;
+ }
+
+
+//#if CLDC!="1.0"
+ /**
+ * Append a double value. This increases the array's length by one.
+ *
+ * @param value A double value.
+ * @throws JSONException if the value is not finite.
+ * @return this.
+ */
+ public JSONArray put(double value) throws JSONException {
+ Double d = new Double(value);
+ JSONObject.testValidity(d);
+ put(d);
+ return this;
+ }
+//#endif
+
+ /**
+ * Append an int value. This increases the array's length by one.
+ *
+ * @param value An int value.
+ * @return this.
+ */
+ public JSONArray put(int value) {
+ put(new Integer(value));
+ return this;
+ }
+
+
+ /**
+ * Append an long value. This increases the array's length by one.
+ *
+ * @param value A long value.
+ * @return this.
+ */
+ public JSONArray put(long value) {
+ put(new Long(value));
+ return this;
+ }
+
+
+//#ifdef PRODUCER
+//# /**
+//# * Put a value in the JSONArray, where the value will be a
+//# * JSONObject which is produced from a Map.
+//# * @param value A Map value.
+//# * @return this.
+//# */
+//# public JSONArray put(Hashtable value) {
+//# put(new JSONObject(value));
+//# return this;
+//# }
+//#endif
+
+ /**
+ * Append an object value. This increases the array's length by one.
+ * @param value An object value. The value should be a
+ * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the
+ * JSONObject.NULL object.
+ * @return this.
+ */
+ public JSONArray put(Object value) {
+ this.myArrayList.addElement(value);
+ return this;
+ }
+
+
+ /**
+ * Put or replace a boolean value in the JSONArray. If the index is greater
+ * than the length of the JSONArray, then null elements will be added as
+ * necessary to pad it out.
+ * @param index The subscript.
+ * @param value A boolean value.
+ * @return this.
+ * @throws JSONException If the index is negative.
+ */
+ public JSONArray put(int index, boolean value) throws JSONException {
+//#if CLDC!="1.0"
+ put(index, value ? Boolean.TRUE : Boolean.FALSE);
+//#else
+//# put(index, value ? JSONObject.TRUE : JSONObject.FALSE);
+//#endif
+ return this;
+ }
+
+ /**
+ * Put a value in the JSONArray, where the value will be a
+ * JSONArray which is produced from a Collection.
+ * @param index The subscript.
+ * @param value A Collection value.
+ * @return this.
+ * @throws JSONException If the index is negative or if the value is
+ * not finite.
+ */
+ public JSONArray put(int index, Vector value) throws JSONException {
+ put(index, new JSONArray(value));
+ return this;
+ }
+
+
+//#if CLDC!="1.0"
+ /**
+ * Put or replace a double value. If the index is greater than the length of
+ * the JSONArray, then null elements will be added as necessary to pad
+ * it out.
+ * @param index The subscript.
+ * @param value A double value.
+ * @return this.
+ * @throws JSONException If the index is negative or if the value is
+ * not finite.
+ */
+ public JSONArray put(int index, double value) throws JSONException {
+ put(index, new Double(value));
+ return this;
+ }
+//#endif
+
+ /**
+ * Put or replace an int value. If the index is greater than the length of
+ * the JSONArray, then null elements will be added as necessary to pad
+ * it out.
+ * @param index The subscript.
+ * @param value An int value.
+ * @return this.
+ * @throws JSONException If the index is negative.
+ */
+ public JSONArray put(int index, int value) throws JSONException {
+ put(index, new Integer(value));
+ return this;
+ }
+
+
+ /**
+ * Put or replace a long value. If the index is greater than the length of
+ * the JSONArray, then null elements will be added as necessary to pad
+ * it out.
+ * @param index The subscript.
+ * @param value A long value.
+ * @return this.
+ * @throws JSONException If the index is negative.
+ */
+ public JSONArray put(int index, long value) throws JSONException {
+ put(index, new Long(value));
+ return this;
+ }
+
+
+//#ifdef PRODUCER
+//# /**
+//# * Put a value in the JSONArray, where the value will be a
+//# * JSONObject which is produced from a Map.
+//# * @param index The subscript.
+//# * @param value The Map value.
+//# * @return this.
+//# * @throws JSONException If the index is negative or if the the value is
+//# * an invalid number.
+//# */
+//# public JSONArray put(int index, Hashtable value) throws JSONException {
+//# put(index, new JSONObject(value));
+//# return this;
+//# }
+//#endif
+
+ /**
+ * Put or replace an object value in the JSONArray. If the index is greater
+ * than the length of the JSONArray, then null elements will be added as
+ * necessary to pad it out.
+ * @param index The subscript.
+ * @param value The value to put into the array. The value should be a
+ * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the
+ * JSONObject.NULL object.
+ * @return this.
+ * @throws JSONException If the index is negative or if the the value is
+ * an invalid number.
+ */
+ public JSONArray put(int index, Object value) throws JSONException {
+ JSONObject.testValidity(value);
+ if (index < 0) {
+ throw new JSONException("JSONArray[" + index + "] not found.");
+ }
+ if (index < length()) {
+ this.myArrayList.setElementAt(value, index);
+ } else {
+ while (index != length()) {
+ put(JSONObject.NULL);
+ }
+ put(value);
+ }
+ return this;
+ }
+
+
+ /**
+ * Produce a JSONObject by combining a JSONArray of names with the values
+ * of this JSONArray.
+ * @param names A JSONArray containing a list of key strings. These will be
+ * paired with the values.
+ * @return A JSONObject, or null if there are no names or if this JSONArray
+ * has no values.
+ * @throws JSONException If any of the names are null.
+ */
+ public JSONObject toJSONObject(JSONArray names) throws JSONException {
+ if (names == null || names.length() == 0 || length() == 0) {
+ return null;
+ }
+ JSONObject jo = new JSONObject();
+ for (int i = 0; i < names.length(); i += 1) {
+ jo.put(names.getString(i), this.opt(i));
+ }
+ return jo;
+ }
+
+
+ /**
+ * Make a JSON text of this JSONArray. For compactness, no
+ * unnecessary whitespace is added. If it is not possible to produce a
+ * syntactically correct JSON text then null will be returned instead. This
+ * could occur if the array contains an invalid number.
+ * <p>
+ * Warning: This method assumes that the data structure is acyclical.
+ *
+ * @return a printable, displayable, transmittable
+ * representation of the array.
+ */
+ public String toString() {
+ try {
+ return '[' + join(",") + ']';
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+
+ /**
+ * Make a prettyprinted JSON text of this JSONArray.
+ * Warning: This method assumes that the data structure is acyclical.
+ * @param indentFactor The number of spaces to add to each level of
+ * indentation.
+ * @return a printable, displayable, transmittable
+ * representation of the object, beginning
+ * with <code>[</code>&nbsp;<small>(left bracket)</small> and ending
+ * with <code>]</code>&nbsp;<small>(right bracket)</small>.
+ * @throws JSONException
+ */
+ public String toString(int indentFactor) throws JSONException {
+ return toString(indentFactor, 0);
+ }
+
+
+ /**
+ * Make a prettyprinted JSON text of this JSONArray.
+ * Warning: This method assumes that the data structure is acyclical.
+ * @param indentFactor The number of spaces to add to each level of
+ * indentation.
+ * @param indent The indention of the top level.
+ * @return a printable, displayable, transmittable
+ * representation of the array.
+ * @throws JSONException
+ */
+ String toString(int indentFactor, int indent) throws JSONException {
+ int len = length();
+ if (len == 0) {
+ return "[]";
+ }
+ int i;
+ StringBuffer sb = new StringBuffer("[");
+ if (len == 1) {
+ sb.append(JSONObject.valueToString(this.myArrayList.elementAt(0),
+ indentFactor, indent));
+ } else {
+ int newindent = indent + indentFactor;
+ sb.append('\n');
+ for (i = 0; i < len; i += 1) {
+ if (i > 0) {
+ sb.append(",\n");
+ }
+ for (int j = 0; j < newindent; j += 1) {
+ sb.append(' ');
+ }
+ sb.append(JSONObject.valueToString(this.myArrayList.elementAt(i),
+ indentFactor, newindent));
+ }
+ sb.append('\n');
+ for (i = 0; i < indent; i += 1) {
+ sb.append(' ');
+ }
+ }
+ sb.append(']');
+ return sb.toString();
+ }
+
+
+ /**
+ * Write the contents of the JSONArray as JSON text to a writer.
+ * For compactness, no whitespace is added.
+ * <p>
+ * Warning: This method assumes that the data structure is acyclical.
+ *
+ * @return The writer.
+ * @throws JSONException
+ */
+ public Writer write(Writer writer) throws JSONException {
+ try {
+ boolean b = false;
+ int len = length();
+
+ writer.write('[');
+
+ for (int i = 0; i < len; i += 1) {
+ if (b) {
+ writer.write(',');
+ }
+ Object v = this.myArrayList.elementAt(i);
+ if (v instanceof JSONObject) {
+ ((JSONObject)v).write(writer);
+ } else if (v instanceof JSONArray) {
+ ((JSONArray)v).write(writer);
+ } else {
+ writer.write(JSONObject.valueToString(v));
+ }
+ b = true;
+ }
+ writer.write(']');
+ return writer;
+ } catch (IOException e) {
+ throw new JSONException(e);
+ }
+ }
+}
View
27 j2me/3.2/j2me/build/preprocessed/org/json/me/JSONException.java
@@ -0,0 +1,27 @@
+package org.json.me;
+
+/**
+ * The JSONException is thrown by the JSON.org classes then things are amiss.
+ * @author JSON.org
+ * @version 2
+ */
+public class JSONException extends Exception {
+ private Throwable cause;
+
+ /**
+ * Constructs a JSONException with an explanatory message.
+ * @param message Detail about the reason for the exception.
+ */
+ public JSONException(String message) {
+ super(message);
+ }
+
+ public JSONException(Throwable t) {
+ super(t.getMessage());
+ this.cause = t;
+ }
+
+ public Throwable getCause() {
+ return this.cause;
+ }
+}
View
1,317 j2me/3.2/j2me/build/preprocessed/org/json/me/JSONObject.java
@@ -0,0 +1,1317 @@
+package org.json.me;
+
+/*
+Copyright (c) 2002 JSON.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+The Software shall be used for Good, not Evil.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Vector;
+
+/**
+ * A JSONObject is an unordered collection of name/value pairs. Its
+ * external form is a string wrapped in curly braces with colons between the
+ * names and values, and commas between the values and names. The internal form
+ * is an object having <code>get</code> and <code>opt</code> methods for
+ * accessing the values by name, and <code>put</code> methods for adding or
+ * replacing values by name. The values can be any of these types:
+ * <code>Boolean</code>, <code>JSONArray</code>, <code>JSONObject</code>,
+ * <code>Number</code>, <code>String</code>, or the <code>JSONObject.NULL</code>
+ * object. A JSONObject constructor can be used to convert an external form
+ * JSON text into an internal form whose values can be retrieved with the
+ * <code>get</code> and <code>opt</code> methods, or to convert values into a
+ * JSON text using the <code>put</code> and <code>toString</code> methods.
+ * A <code>get</code> method returns a value if one can be found, and throws an
+ * exception if one cannot be found. An <code>opt</code> method returns a
+ * default value instead of throwing an exception, and so is useful for
+ * obtaining optional values.
+ * <p>
+ * The generic <code>get()</code> and <code>opt()</code> methods return an
+ * object, which you can cast or query for type. There are also typed
+ * <code>get</code> and <code>opt</code> methods that do type checking and type
+ * coersion for you.
+ * <p>
+ * The <code>put</code> methods adds values to an object. For example, <pre>
+ * myString = new JSONObject().put("JSON", "Hello, World!").toString();</pre>
+ * produces the string <code>{"JSON": "Hello, World"}</code>.
+ * <p>
+ * The texts produced by the <code>toString</code> methods strictly conform to
+ * the JSON sysntax rules.
+ * The constructors are more forgiving in the texts they will accept:
+ * <ul>
+ * <li>An extra <code>,</code>&nbsp;<small>(comma)</small> may appear just
+ * before the closing brace.</li>
+ * <li>Strings may be quoted with <code>'</code>&nbsp;<small>(single
+ * quote)</small>.</li>
+ * <li>Strings do not need to be quoted at all if they do not begin with a quote
+ * or single quote, and if they do not contain leading or trailing spaces,
+ * and if they do not contain any of these characters:
+ * <code>{ } [ ] / \ : , = ; #</code> and if they do not look like numbers
+ * and if they are not the reserved words <code>true</code>,
+ * <code>false</code>, or <code>null</code>.</li>
+ * <li>Keys can be followed by <code>=</code> or <code>=></code> as well as
+ * by <code>:</code>.</li>
+ * <li>Values can be followed by <code>;</code> <small>(semicolon)</small> as
+ * well as by <code>,</code> <small>(comma)</small>.</li>
+ * <li>Numbers may have the <code>0-</code> <small>(octal)</small> or
+ * <code>0x-</code> <small>(hex)</small> prefix.</li>
+ * <li>Comments written in the slashshlash, slashstar, and hash conventions
+ * will be ignored.</li>
+ * </ul>
+ * @author JSON.org
+ * @version 2
+ */
+public class JSONObject {
+
+//#ifdef polish.cldc1.0
+//# public static final Boolean TRUE = new Boolean(true);
+//# public static final Boolean FALSE = new Boolean(false);
+//#endif
+
+ /**
+ * JSONObject.NULL is equivalent to the value that JavaScript calls null,
+ * whilst Java's null is equivalent to the value that JavaScript calls
+ * undefined.
+ */
+ private static final class Null {
+
+ /**
+ * There is only intended to be a single instance of the NULL object,
+ * so the clone method returns itself.
+ * @return NULL.
+ */
+ protected final Object clone() {
+ return this;
+ }
+
+
+ /**
+ * A Null object is equal to the null value and to itself.
+ * @param object An object to test for nullness.
+ * @return true if the object parameter is the JSONObject.NULL object
+ * or null.
+ */
+ public boolean equals(Object object) {
+ return object == null || object == this;
+ }
+
+
+ /**
+ * Get the "null" string value.
+ * @return The string "null".
+ */
+ public String toString() {
+ return "null";
+ }
+ }
+
+
+ /**
+ * The hash map where the JSONObject's properties are kept.
+ */
+ private Hashtable myHashMap;
+
+
+ /**
+ * It is sometimes more convenient and less ambiguous to have a
+ * <code>NULL</code> object than to use Java's <code>null</code> value.
+ * <code>JSONObject.NULL.equals(null)</code> returns <code>true</code>.
+ * <code>JSONObject.NULL.toString()</code> returns <code>"null"</code>.
+ */
+ public static final Object NULL = new Null();
+
+ /**
+ * Construct an empty JSONObject.
+ */
+ public JSONObject() {
+ this.myHashMap = new Hashtable();
+ }
+
+
+//#ifdef PRODUCER
+//# /**
+//# * Construct a JSONObject from a subset of another JSONObject.
+//# * An array of strings is used to identify the keys that should be copied.
+//# * Missing keys are ignored.
+//# * @param jo A JSONObject.
+//# * @param sa An array of strings.
+//# * @exception JSONException If a value is a non-finite number.
+//# */
+//# public JSONObject(JSONObject jo, String[] sa) throws JSONException {
+//# this();
+//# for (int i = 0; i < sa.length; i += 1) {
+//# putOpt(sa[i], jo.opt(sa[i]));
+//# }
+//# }
+//#endif
+
+ /**
+ * Construct a JSONObject from a JSONTokener.
+ * @param x A JSONTokener object containing the source string.
+ * @throws JSONException If there is a syntax error in the source string.
+ */
+ public JSONObject(JSONTokener x) throws JSONException {
+ this();
+ char c;
+ String key;
+
+ if (x.nextClean() != '{') {
+ throw x.syntaxError("A JSONObject text must begin with '{'");
+ }
+ for (;;) {
+ c = x.nextClean();
+ switch (c) {
+ case 0:
+ throw x.syntaxError("A JSONObject text must end with '}'");
+ case '}':
+ return;
+ default:
+ x.back();
+ key = x.nextValue().toString();
+ }
+
+ /*
+ * The key is followed by ':'. We will also tolerate '=' or '=>'.
+ */
+
+ c = x.nextClean();
+ if (c == '=') {
+ if (x.next() != '>') {
+ x.back();
+ }
+ } else if (c != ':') {
+ throw x.syntaxError("Expected a ':' after a key");
+ }
+ put(key, x.nextValue());
+
+ /*
+ * Pairs are separated by ','. We will also tolerate ';'.
+ */
+
+ switch (x.nextClean()) {
+ case ';':
+ case ',':
+ if (x.nextClean() == '}') {
+ return;
+ }
+ x.back();
+ break;
+ case '}':
+ return;
+ default:
+ throw x.syntaxError("Expected a ',' or '}'");
+ }
+ }
+ }
+
+
+//#ifdef PRODUCER
+//# /**
+//# * Construct a JSONObject from a Map.
+//# * @param map A map object that can be used to initialize the contents of
+//# * the JSONObject.
+//# */
+//# public JSONObject(Hashtable map) {
+//# if (map == null) {
+//# this.myHashMap = new Hashtable();
+//# } else {
+//# this.myHashMap = new Hashtable(map.size());
+//# Enumeration keys = map.keys();
+//# while (keys.hasMoreElements()) {
+//# Object key = keys.nextElement();
+//# this.myHashMap.put(key, map.get(key));
+//# }
+//# }
+//# }
+//#endif
+
+ /**
+ * Construct a JSONObject from a string.
+ * This is the most commonly used JSONObject constructor.
+ * @param string A string beginning
+ * with <code>{</code>&nbsp;<small>(left brace)</small> and ending
+ * with <code>}</code>&nbsp;<small>(right brace)</small>.
+ * @exception JSONException If there is a syntax error in the source string.
+ */
+ public JSONObject(String string) throws JSONException {
+ this(new JSONTokener(string));
+ }
+
+
+ /**
+ * Accumulate values under a key. It is similar to the put method except
+ * that if there is already an object stored under the key then a
+ * JSONArray is stored under the key to hold all of the accumulated values.
+ * If there is already a JSONArray, then the new value is appended to it.
+ * In contrast, the put method replaces the previous value.
+ * @param key A key string.
+ * @param value An object to be accumulated under the key.
+ * @return this.
+ * @throws JSONException If the value is an invalid number
+ * or if the key is null.
+ */
+ public JSONObject accumulate(String key, Object value)
+ throws JSONException {
+ testValidity(value);
+ Object o = opt(key);
+ if (o == null) {
+ put(key, value);
+ } else if (o instanceof JSONArray) {
+ ((JSONArray)o).put(value);
+ } else {
+ put(key, new JSONArray().put(o).put(value));
+ }
+ return this;
+ }
+
+//#ifdef PRODUCER
+//# /**
+//# * Append values to the array under a key. If the key does not exist in the
+//# * JSONObject, then the key is put in the JSONObject with its value being a
+//# * JSONArray containing the value parameter. If the key was already
+//# * associated with a JSONArray, then the value parameter is appended to it.
+//# * @param key A key string.
+//# * @param value An object to be accumulated under the key.
+//# * @return this.
+//# * @throws JSONException If the key is null or if the current value
+//# * associated with the key is not a JSONArray.
+//# */
+//# public JSONObject append(String key, Object value)
+//# throws JSONException {
+//# testValidity(value);
+//# Object o = opt(key);
+//# if (o == null) {
+//# put(key, new JSONArray().put(value));
+//# } else if (o instanceof JSONArray) {
+//# throw new JSONException("JSONObject[" + key +
+//# "] is not a JSONArray.");
+//# } else {
+//# put(key, new JSONArray().put(o).put(value));
+//# }
+//# return this;
+//# }
+//#endif
+
+//#ifndef polish.cldc1.0
+ /**
+ * Produce a string from a double. The string "null" will be returned if
+ * the number is not finite.
+ * @param d A double.
+ * @return A String.
+ */
+ static public String doubleToString(double d) {
+ if (Double.isInfinite(d) || Double.isNaN(d)) {
+ return "null";
+ }
+
+// Shave off trailing zeros and decimal point, if possible.
+
+ String s = Double.toString(d);
+ if (s.indexOf('.') > 0 && s.indexOf('e') < 0 && s.indexOf('E') < 0) {
+ while (s.endsWith("0")) {
+ s = s.substring(0, s.length() - 1);
+ }
+ if (s.endsWith(".")) {
+ s = s.substring(0, s.length() - 1);
+ }
+ }
+ return s;
+ }
+//#endif
+
+ /**
+ * Get the value object associated with a key.
+ *
+ * @param key A key string.
+ * @return The object associated with the key.
+ * @throws JSONException if the key is not found.
+ */
+ public Object get(String key) throws JSONException {
+ Object o = opt(key);
+ if (o == null) {
+ throw new JSONException("JSONObject[" + quote(key) +
+ "] not found.");
+ }
+ return o;
+ }
+
+
+ /**
+ * Get the boolean value associated with a key.
+ *
+ * @param key A key string.
+ * @return The truth.
+ * @throws JSONException
+ * if the value is not a Boolean or the String "true" or "false".
+ */
+ public boolean getBoolean(String key) throws JSONException {
+ Object o = get(key);
+//#ifndef polish.cldc1.0
+ if (o.equals(Boolean.FALSE) ||
+//#else
+//# if (o.equals(FALSE) ||
+//#endif
+ (o instanceof String &&
+ ((String)o).toLowerCase().equals("false"))) {
+ return false;
+//#ifndef polish.cldc1.0
+ } else if (o.equals(Boolean.TRUE) ||
+//#else
+//# } else if (o.equals(TRUE) ||
+//#endif
+ (o instanceof String &&
+ ((String)o).toLowerCase().equals("true"))) {
+ return true;
+ }
+ throw new JSONException("JSONObject[" + quote(key) +
+ "] is not a Boolean.");
+ }
+
+//#ifndef polish.cldc1.0
+ /**
+ * Get the double value associated with a key.
+ * @param key A key string.
+ * @return The numeric value.
+ * @throws JSONException if the key is not found or
+ * if the value is not a Number object and cannot be converted to a number.
+ */
+ public double getDouble(String key) throws JSONException {
+ Object o = get(key);
+ if (o instanceof Byte) {
+ return (double) ((Byte)o).byteValue();
+ } else if (o instanceof Short) {
+ return (double) ((Short)o).shortValue();
+ } else if (o instanceof Integer) {
+ return (double) ((Integer)o).intValue();
+ } else if (o instanceof Long) {
+ return (double) ((Long)o).longValue();
+ } else if (o instanceof Float) {
+ return (double) ((Float)o).floatValue();
+ } else if (o instanceof Double) {
+ return ((Double)o).doubleValue();
+ } else if (o instanceof String) {
+ try {
+ return Double.valueOf((String)o).doubleValue();
+ } catch (Exception e) {
+ throw new JSONException("JSONObject[" + quote(key) +
+ "] is not a number.");
+ }
+ }
+ throw new JSONException("JSONObject[" + quote(key) +
+ "] is not a number.");
+ }
+//#endif
+
+
+ /**
+ * Get the int value associated with a key. If the number value is too
+ * large for an int, it will be clipped.
+ *
+ * @param key A key string.
+ * @return The integer value.
+ * @throws JSONException if the key is not found or if the value cannot
+ * be converted to an integer.
+ */
+ public int getInt(String key) throws JSONException {
+ Object o = get(key);
+ if (o instanceof Byte) {
+ return ((Byte)o).byteValue();
+ } else if (o instanceof Short) {
+ return ((Short)o).shortValue();
+ } else if (o instanceof Integer) {
+ return ((Integer)o).intValue();
+ } else if (o instanceof Long) {
+ return (int) ((Long)o).longValue();
+//#ifndef polish.cldc1.0
+ } else if (o instanceof Float) {
+ return (int) ((Float)o).floatValue();
+ } else if (o instanceof Double) {
+ return (int) ((Double)o).doubleValue();
+ } else if (o instanceof String) {
+ return (int) getDouble(key);
+//#endif
+ }
+ throw new JSONException("JSONObject[" + quote(key) +
+ "] is not a number.");
+ }
+
+
+ /**
+ * Get the JSONArray value associated with a key.
+ *
+ * @param key A key string.
+ * @return A JSONArray which is the value.
+ * @throws JSONException if the key is not found or
+ * if the value is not a JSONArray.
+ */
+ public JSONArray getJSONArray(String key) throws JSONException {
+ Object o = get(key);
+ if (o instanceof JSONArray) {
+ return (JSONArray)o;
+ }
+ throw new JSONException("JSONObject[" + quote(key) +
+ "] is not a JSONArray.");
+ }
+
+ /**
+ * Get the JSONObject value associated with a key.
+ *
+ * @param key A key string.
+ * @return A JSONObject which is the value.
+ * @throws JSONException if the key is not found or
+ * if the value is not a JSONObject.
+ */
+ public JSONObject getJSONObject(String key) throws JSONException {
+ Object o = get(key);
+ if (o instanceof JSONObject) {
+ return (JSONObject)o;
+ }
+ throw new JSONException("JSONObject[" + quote(key) +
+ "] is not a JSONObject.");
+ }
+
+ /**
+ * Get the long value associated with a key. If the number value is too
+ * long for a long, it will be clipped.
+ *
+ * @param key A key string.
+ * @return The long value.
+ * @throws JSONException if the key is not found or if the value cannot
+ * be converted to a long.
+ */
+ public long getLong(String key) throws JSONException {
+ Object o = get(key);
+ if (o instanceof Byte) {
+ return ((Byte)o).byteValue();
+ } else if (o instanceof Short) {
+ return ((Short)o).shortValue();
+ } else if (o instanceof Integer) {
+ return ((Integer)o).intValue();
+ } else if (o instanceof Long) {
+ return ((Long)o).longValue();
+//#ifndef polish.cldc1.0
+ } else if (o instanceof Float) {
+ return (long) ((Float)o).floatValue();
+ } else if (o instanceof Double) {
+ return (long) ((Double)o).doubleValue();
+ } else if (o instanceof String) {
+ return (long) getDouble(key);
+//#endif
+ }
+ throw new JSONException("JSONObject[" + quote(key) +
+ "] is not a number.");
+ }
+
+ /**
+ * Get the string associated with a key.
+ *
+ * @param key A key string.
+ * @return A string which is the value.
+ * @throws JSONException if the key is not found.
+ */
+ public String getString(String key) throws JSONException {
+ return get(key).toString();
+ }
+
+ /**
+ * Determine if the JSONObject contains a specific key.
+ * @param key A key string.
+ * @return true if the key exists in the JSONObject.
+ */
+ public boolean has(String key) {
+ return this.myHashMap.containsKey(key);
+ }
+
+
+ /**
+ * Determine if the value associated with the key is null or if there is
+ * no value.
+ * @param key A key string.
+ * @return true if there is no value associated with the key or if
+ * the value is the JSONObject.NULL object.
+ */
+ public boolean isNull(String key) {
+ return JSONObject.NULL.equals(opt(key));
+ }
+
+
+ /**
+ * Get an enumeration of the keys of the JSONObject.
+ *
+ * @return An iterator of the keys.
+ */
+ public Enumeration keys() {
+ return this.myHashMap.keys();
+ }
+
+
+ /**
+ * Get the number of keys stored in the JSONObject.
+ *
+ * @return The number of keys in the JSONObject.
+ */
+ public int length() {
+ return this.myHashMap.size();
+ }
+
+
+ /**
+ * Produce a JSONArray containing the names of the elements of this
+ * JSONObject.
+ * @return A JSONArray containing the key strings, or null if the JSONObject
+ * is empty.
+ */
+ public JSONArray names() {
+ JSONArray ja = new JSONArray();
+ Enumeration keys = keys();
+ while (keys.hasMoreElements()) {
+ ja.put(keys.nextElement());
+ }
+ return ja.length() == 0 ? null : ja;
+ }
+
+
+ /**
+ * Shave off trailing zeros and decimal point, if possible.
+ */
+ static public String trimNumber(String s) {
+ if (s.indexOf('.') > 0 && s.indexOf('e') < 0 && s.indexOf('E') < 0) {
+ while (s.endsWith("0")) {
+ s = s.substring(0, s.length() - 1);
+ }
+ if (s.endsWith(".")) {
+ s = s.substring(0, s.length() - 1);
+ }
+ }
+ return s;
+ }
+
+ /**
+ * Produce a string from a Number.
+ * @param n A Number
+ * @return A String.
+ * @throws JSONException If n is a non-finite number.
+ */
+ static public String numberToString(Object n)
+ throws JSONException {
+ if (n == null) {
+ throw new JSONException("Null pointer");
+ }
+ testValidity(n);
+ return trimNumber(n.toString());
+ }
+
+ /**
+ * Get an optional value associated with a key.
+ * @param key A key string.
+ * @return An object which is the value, or null if there is no value.
+ */
+ public Object opt(String key) {
+ return key == null ? null : this.myHashMap.get(key);
+ }
+
+
+ /**
+ * Get an optional boolean associated with a key.
+ * It returns false if there is no such key, or if the value is not
+ * Boolean.TRUE or the String "true".
+ *
+ * @param key A key string.
+ * @return The truth.
+ */
+ public boolean optBoolean(String key) {
+ return optBoolean(key, false);
+ }
+
+
+ /**
+ * Get an optional boolean associated with a key.
+ * It returns the defaultValue if there is no such key, or if it is not
+ * a Boolean or the String "true" or "false" (case insensitive).
+ *
+ * @param key A key string.
+ * @param defaultValue The default.
+ * @return The truth.
+ */
+ public boolean optBoolean(String key, boolean defaultValue) {
+ try {
+ return getBoolean(key);
+ } catch (Exception e) {
+ return defaultValue;
+ }
+ }
+
+
+ /**
+ * Put a key/value pair in the JSONObject, where the value will be a
+ * JSONArray which is produced from a Collection.
+ * @param key A key string.
+ * @param value A Collection value.
+ * @return this.
+ * @throws JSONException
+ */
+ public JSONObject put(String key, Vector value) throws JSONException {
+ put(key, new JSONArray(value));
+ return this;
+ }
+
+
+//#ifndef polish.cldc1.0
+ /**
+ * Get an optional double associated with a key,
+ * or NaN if there is no such key or if its value is not a number.
+ * If the value is a string, an attempt will be made to evaluate it as
+ * a number.
+ *
+ * @param key A string which is the key.
+ * @return An object which is the value.
+ */
+ public double optDouble(String key) {
+ return optDouble(key, Double.NaN);
+ }
+//#endif
+
+//#ifndef polish.cldc1.0
+ /**
+ * Get an optional double associated with a key, or the
+ * defaultValue if there is no such key or if its value is not a number.
+ * If the value is a string, an attempt will be made to evaluate it as
+ * a number.
+ *
+ * @param key A key string.
+ * @param defaultValue The default.
+ * @return An object which is the value.
+ */
+ public double optDouble(String key, double defaultValue) {
+ try {
+ Object o = opt(key);
+ return Double.parseDouble((String)o);
+ } catch (Exception e) {
+ return defaultValue;
+ }
+ }
+//#endif
+
+ /**
+ * Get an optional int value associated with a key,
+ * or zero if there is no such key or if the value is not a number.
+ * If the value is a string, an attempt will be made to evaluate it as
+ * a number.
+ *
+ * @param key A key string.
+ * @return An object which is the value.
+ */
+ public int optInt(String key) {
+ return optInt(key, 0);
+ }
+
+
+ /**
+ * Get an optional int value associated with a key,
+ * or the default if there is no such key or if the value is not a number.
+ * If the value is a string, an attempt will be made to evaluate it as
+ * a number.
+ *
+ * @param key A key string.
+ * @param defaultValue The default.
+ * @return An object which is the value.
+ */
+ public int optInt(String key, int defaultValue) {
+ try {
+ return getInt(key);
+ } catch (Exception e) {
+ return defaultValue;
+ }
+ }
+
+
+ /**
+ * Get an optional JSONArray associated with a key.
+ * It returns null if there is no such key, or if its value is not a
+ * JSONArray.
+ *
+ * @param key A key string.
+ * @return A JSONArray which is the value.
+ */
+ public JSONArray optJSONArray(String key) {
+ Object o = opt(key);
+ return o instanceof JSONArray ? (JSONArray)o : null;
+ }
+
+
+ /**
+ * Get an optional JSONObject associated with a key.
+ * It returns null if there is no such key, or if its value is not a
+ * JSONObject.
+ *
+ * @param key A key string.
+ * @return A JSONObject which is the value.
+ */
+ public JSONObject optJSONObject(String key) {
+ Object o = opt(key);
+ return o instanceof JSONObject ? (JSONObject)o : null;
+ }
+
+
+ /**
+ * Get an optional long value associated with a key,
+ * or zero if there is no such key or if the value is not a number.
+ * If the value is a string, an attempt will be made to evaluate it as
+ * a number.
+ *
+ * @param key A key string.
+ * @return An object which is the value.
+ */
+ public long optLong(String key) {
+ return optLong(key, 0);
+ }
+
+
+ /**
+ * Get an optional long value associated with a key,
+ * or the default if there is no such key or if the value is not a number.
+ * If the value is a string, an attempt will be made to evaluate it as
+ * a number.
+ *
+ * @param key A key string.
+ * @param defaultValue The default.
+ * @return An object which is the value.
+ */
+ public long optLong(String key, long defaultValue) {
+ try {
+ return getLong(key);
+ } catch (Exception e) {
+ return defaultValue;
+ }
+ }
+
+
+ /**
+ * Get an optional string associated with a key.
+ * It returns an empty string if there is no such key. If the value is not
+ * a string and is not null, then it is coverted to a string.
+ *
+ * @param key A key string.
+ * @return A string which is the value.
+ */
+ public String optString(String key) {
+ return optString(key, "");
+ }
+
+
+ /**
+ * Get an optional string associated with a key.
+ * It returns the defaultValue if there is no such key.
+ *
+ * @param key A key string.
+ * @param defaultValue The default.
+ * @return A string which is the value.
+ */
+ public String optString(String key, String defaultValue) {
+ Object o = opt(key);
+ return o != null ? o.toString() : defaultValue;
+ }
+
+
+ /**
+ * Put a key/boolean pair in the JSONObject.
+ *
+ * @param key A key string.
+ * @param value A boolean which is the value.
+ * @return this.
+ * @throws JSONException If the key is null.
+ */
+ public JSONObject put(String key, boolean value) throws JSONException {
+//#ifndef polish.cldc1.0
+ put(key, value ? Boolean.TRUE : Boolean.FALSE);
+//#else
+//# put(key, value ? TRUE : FALSE);
+//#endif
+ return this;
+ }
+
+
+//#ifndef polish.cldc1.0
+ /**
+ * Put a key/double pair in the JSONObject.
+ *
+ * @param key A key string.
+ * @param value A double which is the value.
+ * @return this.
+ * @throws JSONException If the key is null or if the number is invalid.
+ */
+ public JSONObject put(String key, double value) throws JSONException {
+ put(key, new Double(value));
+ return this;
+ }
+//#endif
+
+ /**
+ * Put a key/int pair in the JSONObject.
+ *
+ * @param key A key string.
+ * @param value An int which is the value.
+ * @return this.
+ * @throws JSONException If the key is null.
+ */
+ public JSONObject put(String key, int value) throws JSONException {
+ put(key, new Integer(value));
+ return this;
+ }
+
+
+ /**
+ * Put a key/long pair in the JSONObject.
+ *
+ * @param key A key string.
+ * @param value A long which is the value.
+ * @return this.
+ * @throws JSONException If the key is null.
+ */
+ public JSONObject put(String key, long value) throws JSONException {
+ put(key, new Long(value));
+ return this;
+ }
+
+
+//#ifdef PRODUCER
+//# /**
+//# * Put a key/value pair in the JSONObject, where the value will be a
+//# * JSONObject which is produced from a Map.
+//# * @param key A key string.
+//# * @param value A Map value.
+//# * @return this.
+//# * @throws JSONException
+//# */
+//# public JSONObject put(String key, Hashtable value) throws JSONException {
+//# put(key, new JSONObject(value));
+//# return this;
+//# }
+//#endif
+
+ /**
+ * Put a key/value pair in the JSONObject. If the value is null,
+ * then the key will be removed from the JSONObject if it is present.
+ * @param key A key string.
+ * @param value An object which is the value. It should be of one of these
+ * types: Boolean, Double, Integer, JSONArray, JSONObject, Long, String,
+ * or the JSONObject.NULL object.
+ * @return this.
+ * @throws JSONException If the value is non-finite number
+ * or if the key is null.
+ */
+ public JSONObject put(String key, Object value) throws JSONException {
+ if (key == null) {
+ throw new JSONException("Null key.");
+ }
+ if (value != null) {
+ testValidity(value);
+ this.myHashMap.put(key, value);
+ } else {
+ remove(key);
+ }
+ return this;
+ }
+
+ /**
+ * Put a key/value pair in the JSONObject, but only if the
+ * key and the value are both non-null.
+ * @param key A key string.
+ * @param value An object which is the value. It should be of one of these
+ * types: Boolean, Double, Integer, JSONArray, JSONObject, Long, String,
+ * or the JSONObject.NULL object.
+ * @return this.
+ * @throws JSONException If the value is a non-finite number.
+ */
+ public JSONObject putOpt(String key, Object value) throws JSONException {
+ if (key != null && value != null) {
+ put(key, value);
+ }
+ return this;
+ }
+
+ /**
+ * Produce a string in double quotes with backslash sequences in all the
+ * right places. A backslash will be inserted within </, allowing JSON
+ * text to be delivered in HTML. In JSON text, a string cannot contain a
+ * control character or an unescaped quote or backslash.
+ * @param string A String
+ * @return A String correctly formatted for insertion in a JSON text.
+ */
+ public static String quote(String string) {
+ if (string == null || string.length() == 0) {
+ return "\"\"";
+ }
+
+ char b;
+ char c = 0;
+ int i;
+ int len = string.length();
+ StringBuffer sb = new StringBuffer(len + 4);
+ String t;
+
+ sb.append('"');
+ for (i = 0; i < len; i += 1) {
+ b = c;
+ c = string.charAt(i);
+ switch (c) {
+ case '\\':
+ case '"':
+ sb.append('\\');
+ sb.append(c);
+ break;
+ case '/':
+ if (b == '<') {
+ sb.append('\\');
+ }
+ sb.append(c);
+ break;
+ case '\b':
+ sb.append("\\b");
+ break;
+ case '\t':
+ sb.append("\\t");
+ break;
+ case '\n':
+ sb.append("\\n");
+ break;
+ case '\f':
+ sb.append("\\f");
+ break;
+ case '\r':
+ sb.append("\\r");
+ break;
+ default:
+ if (c < ' ') {
+ t = "000" + Integer.toHexString(c);
+ sb.append("\\u" + t.substring(t.length() - 4));
+ } else {
+ sb.append(c);
+ }
+ }
+ }
+ sb.append('"');
+ return sb.toString();
+ }
+
+ /**
+ * Remove a name and its value, if present.
+ * @param key The name to be removed.
+ * @return The value that was associated with the name,
+ * or null if there was no value.
+ */
+ public Object remove(String key) {
+ return this.myHashMap.remove(key);
+ }
+
+ /**
+ * Throw an exception if the object is an NaN or infinite number.
+ * @param o The object to test.
+ * @throws JSONException If o is a non-finite number.
+ */
+ static void testValidity(Object o) throws JSONException {
+ if (o != null) {
+//#ifndef polish.cldc1.0
+ if (o instanceof Double) {
+ if (((Double)o).isInfinite() || ((Double)o).isNaN()) {
+ throw new JSONException(
+ "JSON does not allow non-finite numbers");
+ }
+ } else if (o instanceof Float) {
+ if (((Float)o).isInfinite() || ((Float)o).isNaN()) {
+ throw new JSONException(
+ "JSON does not allow non-finite numbers.");
+ }
+ }
+//#endif
+ }
+ }
+
+ /**
+ * Produce a JSONArray containing the values of the members of this
+ * JSONObject.
+ * @param names A JSONArray containing a list of key strings. This
+ * determines the sequence of the values in the result.
+ * @return A JSONArray of values.
+ * @throws JSONException If any of the values are non-finite numbers.
+ */
+ public JSONArray toJSONArray(JSONArray names) throws JSONException {
+ if (names == null || names.length() == 0) {
+ return null;
+ }
+ JSONArray ja = new JSONArray();
+ for (int i = 0; i < names.length(); i += 1) {
+ ja.put(this.opt(names.getString(i)));
+ }
+ return ja;
+ }
+
+ /**
+ * Make a JSON text of this JSONObject. For compactness, no whitespace
+ * is added. If this would not result in a syntactically correct JSON text,
+ * then null will be returned instead.
+ * <p>
+ * Warning: This method assumes that the data structure is acyclical.
+ *
+ * @return a printable, displayable, portable, transmittable
+ * representation of the object, beginning
+ * with <code>{</code>&nbsp;<small>(left brace)</small> and ending
+ * with <code>}</code>&nbsp;<small>(right brace)</small>.
+ */
+ public String toString() {
+ try {
+ Enumeration keys = keys();
+ StringBuffer sb = new StringBuffer("{");
+
+ while (keys.hasMoreElements()) {
+ if (sb.length() > 1) {
+ sb.append(',');
+ }
+ Object o = keys.nextElement();
+ sb.append(quote(o.toString()));
+ sb.append(':');
+ sb.append(valueToString(this.myHashMap.get(o)));
+ }
+ sb.append('}');
+ return sb.toString();
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+
+ /**
+ * Make a prettyprinted JSON text of this JSONObject.
+ * <p>
+ * Warning: This method assumes that the data structure is acyclical.
+ * @param indentFactor The number of spaces to add to each level of
+ * indentation.
+ * @return a printable, displayable, portable, transmittable
+ * representation of the object, beginning
+ * with <code>{</code>&nbsp;<small>(left brace)</small> and ending
+ * with <code>}</code>&nbsp;<small>(right brace)</small>.
+ * @throws JSONException If the object contains an invalid number.
+ */
+ public String toString(int indentFactor) throws JSONException {
+ return toString(indentFactor, 0);
+ }
+
+
+ /**
+ * Make a prettyprinted JSON text of this JSONObject.
+ * <p>
+ * Warning: This method assumes that the data structure is acyclical.
+ * @param indentFactor The number of spaces to add to each level of
+ * indentation.
+ * @param indent The indentation of the top level.
+ * @return a printable, displayable, transmittable
+ * representation of the object, beginning
+ * with <code>{</code>&nbsp;<small>(left brace)</small> and ending
+ * with <code>}</code>&nbsp;<small>(right brace)</small>.
+ * @throws JSONException If the object contains an invalid number.
+ */
+ String toString(int indentFactor, int indent) throws JSONException {
+ int i;
+ int n = length();
+ if (n == 0) {
+ return "{}";
+ }
+ Enumeration keys = keys();
+ StringBuffer sb = new StringBuffer("{");
+ int newindent = indent + indentFactor;
+ Object o;
+ if (n == 1) {
+ o = keys.nextElement();
+ sb.append(quote(o.toString()));
+ sb.append(": ");
+ sb.append(valueToString(this.myHashMap.get(o), indentFactor,
+ indent));
+ } else {
+ while (keys.hasMoreElements()) {
+ o = keys.nextElement();
+ if (sb.length() > 1) {
+ sb.append(",\n");
+ } else {
+ sb.append('\n');
+ }
+ for (i = 0; i < newindent; i += 1) {
+ sb.append(' ');
+ }
+ sb.append(quote(o.toString()));
+ sb.append(": ");
+ sb.append(valueToString(this.myHashMap.get(o), indentFactor,
+ newindent));
+ }
+ if (sb.length() > 1) {
+ sb.append('\n');
+ for (i = 0; i < indent; i += 1) {
+ sb.append(' ');
+ }
+ }
+ }
+ sb.append('}');
+ return sb.toString();
+ }
+
+
+ /**
+ * Make a JSON text of an Object value. If the object has an
+ * value.toJSONString() method, then that method will be used to produce
+ * the JSON text. The method is required to produce a strictly
+ * conforming text. If the object does not contain a toJSONString
+ * method (which is the most common case), then a text will be
+ * produced by the rules.
+ * <p>
+ * Warning: This method assumes that the data structure is acyclical.
+ * @param value The value to be serialized.
+ * @return a printable, displayable, transmittable
+ * representation of the object, beginning
+ * with <code>{</code>&nbsp;<small>(left brace)</small> and ending
+ * with <code>}</code>&nbsp;<small>(right brace)</small>.
+ * @throws JSONException If the value is or contains an invalid number.
+ */
+ static String valueToString(Object value) throws JSONException {
+ if (value == null || value.equals(null)) {
+ return "null";
+ }
+ if (value instanceof JSONString) {
+ Object o;
+ try {
+ o = ((JSONString)value).toJSONString();
+ } catch (Exception e) {
+ throw new JSONException(e);
+ }
+ if (o instanceof String) {
+ return (String)o;
+ }
+ throw new JSONException("Bad value from toJSONString: " + o);
+ }
+//#ifndef polish.cldc1.0
+ if (value instanceof Float || value instanceof Double ||
+//#else
+//# if (
+//#endif
+ value instanceof Byte || value instanceof Short ||
+ value instanceof Integer || value instanceof Long) {
+ return numberToString(value);
+ }
+ if (value instanceof Boolean || value instanceof JSONObject ||
+ value instanceof JSONArray) {
+ return value.toString();
+ }
+ return quote(value.toString());
+ }
+
+
+ /**
+ * Make a prettyprinted JSON text of an object value.
+ * <p>
+ * Warning: This method assumes that the data structure is acyclical.
+ * @param value The value to be serialized.
+ * @param indentFactor The number of spaces to add to each level of
+ * indentation.
+ * @param indent The indentation of the top level.
+ * @return a printable, displayable, transmittable
+ * representation of the object, beginning
+ * with <code>{</code>&nbsp;<small>(left brace)</small> and ending
+ * with <code>}</code>&nbsp;<small>(right brace)</small>.
+ * @throws JSONException If the object contains an invalid number.
+ */
+ static String valueToString(Object value, int indentFactor, int indent)
+ throws JSONException {
+ if (value == null || value.equals(null)) {
+ return "null";
+ }
+ try {
+ if (value instanceof JSONString) {
+ Object o = ((JSONString)value).toJSONString();
+ if (o instanceof String) {
+ return (String)o;
+ }
+ }
+ } catch (Exception e) {
+ /* forget about it */
+ }
+//#ifndef polish.cldc1.0
+ if (value instanceof Float || value instanceof Double ||
+//#else
+//# if (
+//#endif
+ value instanceof Byte || value instanceof Short ||
+ value instanceof Integer || value instanceof Long) {
+ return numberToString(value);
+ }
+ if (value instanceof Boolean) {
+ return value.toString();
+ }
+ if (value instanceof JSONObject) {
+ return ((JSONObject)value).toString(indentFactor, indent);
+ }
+ if (value instanceof JSONArray) {
+ return ((JSONArray)value).toString(indentFactor, indent);
+ }
+ return quote(value.toString());
+ }
+
+
+ /**