Config en .json terminée + advancedstatus refait.

This commit is contained in:
M4TH1EU 2019-07-20 21:57:52 +02:00
parent f0a0e539a3
commit bdad98669b
27 changed files with 2539 additions and 2620 deletions

View File

@ -40,6 +40,7 @@ SOFTWARE.
* A comma delimited list can be converted into a JSONArray of JSONObjects.
* The names for the elements in the JSONObjects can be taken from the names
* in the first row.
*
* @author JSON.org
* @version 2016-05-01
*/
@ -48,6 +49,7 @@ public class CDL {
/**
* Get the next value. The value can be wrapped in quotes. The value can
* be empty.
*
* @param x A JSONTokener of the source text.
* @return The value string, or null if empty.
* @throws JSONException if the quoted string is badly formed.
@ -96,6 +98,7 @@ public class CDL {
/**
* Produce a JSONArray of strings from a row of comma delimited values.
*
* @param x A JSONTokener of the source text.
* @return A JSONArray of strings.
* @throws JSONException
@ -129,6 +132,7 @@ public class CDL {
/**
* Produce a JSONObject from a row of comma delimited text, using a
* parallel JSONArray of strings to provides the names of the elements.
*
* @param names A JSONArray of names. This is commonly obtained from the
* first row of a comma delimited text file using the rowToJSONArray
* method.
@ -146,6 +150,7 @@ public class CDL {
* Produce a comma delimited text row from a JSONArray. Values containing
* the comma character will be quoted. Troublesome characters may be
* removed.
*
* @param ja A JSONArray of strings.
* @return A string ending in NEWLINE.
*/
@ -182,6 +187,7 @@ public class CDL {
/**
* Produce a JSONArray of JSONObjects from a comma delimited text string,
* using the first row as a source of names.
*
* @param string The comma delimited text.
* @return A JSONArray of JSONObjects.
* @throws JSONException
@ -193,6 +199,7 @@ public class CDL {
/**
* Produce a JSONArray of JSONObjects from a comma delimited text string,
* using the first row as a source of names.
*
* @param x The JSONTokener containing the comma delimited text.
* @return A JSONArray of JSONObjects.
* @throws JSONException
@ -204,6 +211,7 @@ public class CDL {
/**
* Produce a JSONArray of JSONObjects from a comma delimited text string
* using a supplied JSONArray as the source of element names.
*
* @param names A JSONArray of strings.
* @param string The comma delimited text.
* @return A JSONArray of JSONObjects.
@ -217,6 +225,7 @@ public class CDL {
/**
* Produce a JSONArray of JSONObjects from a comma delimited text string
* using a supplied JSONArray as the source of element names.
*
* @param names A JSONArray of strings.
* @param x A JSONTokener of the source text.
* @return A JSONArray of JSONObjects.
@ -246,6 +255,7 @@ public class CDL {
* Produce a comma delimited text from a JSONArray of JSONObjects. The
* first row will be a list of names obtained by inspecting the first
* JSONObject.
*
* @param ja A JSONArray of JSONObjects.
* @return A comma delimited text.
* @throws JSONException
@ -265,6 +275,7 @@ public class CDL {
* Produce a comma delimited text from a JSONArray of JSONObjects using
* a provided list of names. The list of names is not included in the
* output.
*
* @param names A JSONArray of strings.
* @param ja A JSONArray of JSONObjects.
* @return A comma delimited text.

View File

@ -27,6 +27,7 @@ SOFTWARE.
/**
* Convert a web browser cookie specification to a JSONObject and back.
* JSON and Cookies are both notations for name/value pairs.
*
* @author JSON.org
* @version 2015-12-09
*/
@ -41,6 +42,7 @@ public class Cookie {
* only a convention, not a standard. Often, cookies are expected to have
* encoded values. We encode '=' and ';' because we must. We encode '%' and
* '+' because they are meta characters in URL encoding.
*
* @param string The source string.
* @return The escaped result.
*/
@ -73,6 +75,7 @@ public class Cookie {
* stored under the key "value". This method does not do checking or
* validation of the parameters. It only converts the cookie string into
* a JSONObject.
*
* @param string The cookie specification string.
* @return A JSONObject containing "name", "value", and possibly other
* members.
@ -111,6 +114,7 @@ public class Cookie {
* If the JSONObject contains "expires", "domain", "path", or "secure"
* members, they will be appended to the cookie specification string.
* All other members are ignored.
*
* @param jo A JSONObject
* @return A cookie specification string
* @throws JSONException
@ -142,6 +146,7 @@ public class Cookie {
/**
* Convert <code>%</code><i>hh</i> sequences to single characters, and
* convert plus to space.
*
* @param string A string that may contain
* <code>+</code>&nbsp;<small>(plus)</small> and
* <code>%</code><i>hh</i> sequences.

View File

@ -26,6 +26,7 @@ SOFTWARE.
/**
* Convert a web browser cookie list string to a JSONObject and back.
*
* @author JSON.org
* @version 2015-12-09
*/
@ -36,10 +37,11 @@ public class CookieList {
* of name/value pairs. The names are separated from the values by '='.
* The pairs are separated by ';'. The names and the values
* will be unescaped, possibly converting '+' and '%' sequences.
*
* <p>
* To add a cookie to a cookie list,
* cookielistJSONObject.put(cookieJSONObject.getString("name"),
* cookieJSONObject.getString("value"));
*
* @param string A cookie list string
* @return A JSONObject
* @throws JSONException
@ -61,6 +63,7 @@ public class CookieList {
* of name/value pairs. The names are separated from the values by '='.
* The pairs are separated by ';'. The characters '%', '+', '=', and ';'
* in the names and values are replaced by "%hh".
*
* @param jo A JSONObject
* @return A cookie list string
* @throws JSONException

View File

@ -28,12 +28,15 @@ import java.util.Locale;
/**
* Convert an HTTP header to a JSONObject and back.
*
* @author JSON.org
* @version 2015-12-09
*/
public class HTTP {
/** Carriage return/line feed. */
/**
* Carriage return/line feed.
*/
public static final String CRLF = "\r\n";
/**
@ -63,6 +66,7 @@ public class HTTP {
* ...}</pre>
* It does no further checking or conversion. It does not parse dates.
* It does not do '%' transforms on URLs.
*
* @param string An HTTP header string.
* @return A JSONObject containing the elements and attributes
* of the XML string.
@ -119,6 +123,7 @@ public class HTTP {
* }</pre>
* Any other members of the JSONObject will be output as HTTP fields.
* The result will end with two CRLF pairs.
*
* @param jo A JSONObject
* @return An HTTP header string.
* @throws JSONException if the object does not contain enough

View File

@ -27,6 +27,7 @@ SOFTWARE.
/**
* The HTTPTokener extends the JSONTokener to provide additional methods
* for the parsing of HTTP headers.
*
* @author JSON.org
* @version 2015-12-09
*/
@ -34,6 +35,7 @@ public class HTTPTokener extends JSONTokener {
/**
* Construct an HTTPTokener from a string.
*
* @param string A source string.
*/
public HTTPTokener(String string) {
@ -43,8 +45,9 @@ public class HTTPTokener extends JSONTokener {
/**
* Get the next token or string. This is used in parsing HTTP headers.
* @throws JSONException
*
* @return A String.
* @throws JSONException
*/
public String nextToken() throws JSONException {
char c;

View File

@ -30,11 +30,7 @@ import java.io.Writer;
import java.lang.reflect.Array;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
@ -98,10 +94,8 @@ public class JSONArray implements Iterable<Object> {
/**
* Construct a JSONArray from a JSONTokener.
*
* @param x
* A JSONTokener
* @throws JSONException
* If there is a syntax error.
* @param x A JSONTokener
* @throws JSONException If there is a syntax error.
*/
public JSONArray(JSONTokener x) throws JSONException {
this();
@ -151,12 +145,10 @@ public class JSONArray implements Iterable<Object> {
/**
* Construct a JSONArray from a source JSON text.
*
* @param source
* A string that begins with <code>[</code>&nbsp;<small>(left
* @param source 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.
* @throws JSONException If there is a syntax error.
*/
public JSONArray(String source) throws JSONException {
this(new JSONTokener(source));
@ -165,8 +157,7 @@ public class JSONArray implements Iterable<Object> {
/**
* Construct a JSONArray from a Collection.
*
* @param collection
* A Collection.
* @param collection A Collection.
*/
public JSONArray(Collection<?> collection) {
if (collection == null) {
@ -182,14 +173,10 @@ public class JSONArray implements Iterable<Object> {
/**
* Construct a JSONArray from an array.
*
* @param array
* Array. If the parameter passed is null, or not an array, an
* @param array Array. If the parameter passed is null, or not an array, an
* exception will be thrown.
*
* @throws JSONException
* If not an array or if an array value is non-finite number.
* @throws NullPointerException
* Thrown if the array parameter is null.
* @throws JSONException If not an array or if an array value is non-finite number.
* @throws NullPointerException Thrown if the array parameter is null.
*/
public JSONArray(Object array) throws JSONException {
this();
@ -213,11 +200,9 @@ public class JSONArray implements Iterable<Object> {
/**
* Get the object value associated with an index.
*
* @param index
* The index must be between 0 and length() - 1.
* @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.
* @throws JSONException If there is no value for the index.
*/
public Object get(int index) throws JSONException {
Object object = this.opt(index);
@ -231,11 +216,9 @@ public class JSONArray implements Iterable<Object> {
* 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.
* @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
* @throws JSONException If there is no value for the index or if the value is not
* convertible to boolean.
*/
public boolean getBoolean(int index) throws JSONException {
@ -255,11 +238,9 @@ public class JSONArray implements Iterable<Object> {
/**
* Get the double value associated with an index.
*
* @param index
* The index must be between 0 and length() - 1.
* @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
* @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 {
@ -269,11 +250,9 @@ public class JSONArray implements Iterable<Object> {
/**
* Get the float value associated with a key.
*
* @param index
* The index must be between 0 and length() - 1.
* @param index The index must be between 0 and length() - 1.
* @return The numeric value.
* @throws JSONException
* if the key is not found or if the value is not a Number
* @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 float getFloat(int index) throws JSONException {
@ -283,11 +262,9 @@ public class JSONArray implements Iterable<Object> {
/**
* Get the Number value associated with a key.
*
* @param index
* The index must be between 0 and length() - 1.
* @param index The index must be between 0 and length() - 1.
* @return The numeric value.
* @throws JSONException
* if the key is not found or if the value is not a Number
* @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 Number getNumber(int index) throws JSONException {
@ -305,15 +282,11 @@ public class JSONArray implements Iterable<Object> {
/**
* Get the enum value associated with an index.
*
* @param <E>
* Enum Type
* @param clazz
* The type of enum to retrieve.
* @param index
* The index must be between 0 and length() - 1.
* @param <E> Enum Type
* @param clazz The type of enum to retrieve.
* @param index The index must be between 0 and length() - 1.
* @return The enum value at the index location
* @throws JSONException
* if the key is not found or if the value cannot be converted
* @throws JSONException if the key is not found or if the value cannot be converted
* to an enum.
*/
public <E extends Enum<E>> E getEnum(Class<E> clazz, int index) throws JSONException {
@ -334,11 +307,9 @@ public class JSONArray implements Iterable<Object> {
* will be used. See notes on the constructor for conversion issues that
* may arise.
*
* @param index
* The index must be between 0 and length() - 1.
* @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
* @throws JSONException If the key is not found or if the value cannot be converted
* to a BigDecimal.
*/
public BigDecimal getBigDecimal(int index) throws JSONException {
@ -354,11 +325,9 @@ public class JSONArray implements Iterable<Object> {
/**
* Get the BigInteger value associated with an index.
*
* @param index
* The index must be between 0 and length() - 1.
* @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
* @throws JSONException If the key is not found or if the value cannot be converted
* to a BigInteger.
*/
public BigInteger getBigInteger(int index) throws JSONException {
@ -374,11 +343,9 @@ public class JSONArray implements Iterable<Object> {
/**
* Get the int value associated with an index.
*
* @param index
* The index must be between 0 and length() - 1.
* @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 is not a number.
* @throws JSONException If the key is not found or if the value is not a number.
*/
public int getInt(int index) throws JSONException {
return this.getNumber(index).intValue();
@ -387,11 +354,9 @@ public class JSONArray implements Iterable<Object> {
/**
* Get the JSONArray associated with an index.
*
* @param index
* The index must be between 0 and length() - 1.
* @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
* @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 {
@ -405,11 +370,9 @@ public class JSONArray implements Iterable<Object> {
/**
* Get the JSONObject associated with an index.
*
* @param index
* subscript
* @param index subscript
* @return A JSONObject value.
* @throws JSONException
* If there is no value for the index or if the value is not a
* @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 {
@ -423,11 +386,9 @@ public class JSONArray implements Iterable<Object> {
/**
* Get the long value associated with an index.
*
* @param index
* The index must be between 0 and length() - 1.
* @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
* @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 {
@ -437,11 +398,9 @@ public class JSONArray implements Iterable<Object> {
/**
* Get the string associated with an index.
*
* @param index
* The index must be between 0 and length() - 1.
* @param index The index must be between 0 and length() - 1.
* @return A string value.
* @throws JSONException
* If there is no string value for the index.
* @throws JSONException If there is no string value for the index.
*/
public String getString(int index) throws JSONException {
Object object = this.get(index);
@ -454,8 +413,7 @@ public class JSONArray implements Iterable<Object> {
/**
* Determine if the value is <code>null</code>.
*
* @param index
* The index must be between 0 and length() - 1.
* @param index The index must be between 0 and length() - 1.
* @return true if the value at the index is <code>null</code>, or if there is no value.
*/
public boolean isNull(int index) {
@ -467,11 +425,9 @@ public class JSONArray implements Iterable<Object> {
* <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.
* @param separator A string that will be inserted between the elements.
* @return a string.
* @throws JSONException
* If the array contains an invalid number.
* @throws JSONException If the array contains an invalid number.
*/
public String join(String separator) throws JSONException {
int len = this.length();
@ -501,8 +457,7 @@ public class JSONArray implements Iterable<Object> {
/**
* Get the optional object value associated with an index.
*
* @param index
* The index must be between 0 and length() - 1. If not, null is returned.
* @param index The index must be between 0 and length() - 1. If not, null is returned.
* @return An object value, or null if there is no object at that index.
*/
public Object opt(int index) {
@ -515,8 +470,7 @@ public class JSONArray implements Iterable<Object> {
* 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.
* @param index The index must be between 0 and length() - 1.
* @return The truth.
*/
public boolean optBoolean(int index) {
@ -528,10 +482,8 @@ public class JSONArray implements Iterable<Object> {
* 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.
* @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) {
@ -547,8 +499,7 @@ public class JSONArray implements Iterable<Object> {
* 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 index The index must be between 0 and length() - 1.
* @return The value.
*/
public double optDouble(int index) {
@ -560,10 +511,8 @@ public class JSONArray implements Iterable<Object> {
* 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.
* @param index subscript
* @param defaultValue The default value.
* @return The value.
*/
public double optDouble(int index, double defaultValue) {
@ -583,8 +532,7 @@ public class JSONArray implements Iterable<Object> {
* 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 index The index must be between 0 and length() - 1.
* @return The value.
*/
public float optFloat(int index) {
@ -596,10 +544,8 @@ public class JSONArray implements Iterable<Object> {
* 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.
* @param index subscript
* @param defaultValue The default value.
* @return The value.
*/
public float optFloat(int index, float defaultValue) {
@ -619,8 +565,7 @@ public class JSONArray implements Iterable<Object> {
* 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 index The index must be between 0 and length() - 1.
* @return The value.
*/
public int optInt(int index) {
@ -632,10 +577,8 @@ public class JSONArray implements Iterable<Object> {
* 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.
* @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) {
@ -649,12 +592,9 @@ public class JSONArray implements Iterable<Object> {
/**
* Get the enum value associated with a key.
*
* @param <E>
* Enum Type
* @param clazz
* The type of enum to retrieve.
* @param index
* The index must be between 0 and length() - 1.
* @param <E> Enum Type
* @param clazz The type of enum to retrieve.
* @param index The index must be between 0 and length() - 1.
* @return The enum value at the index location or null if not found
*/
public <E extends Enum<E>> E optEnum(Class<E> clazz, int index) {
@ -664,14 +604,10 @@ public class JSONArray implements Iterable<Object> {
/**
* Get the enum value associated with a key.
*
* @param <E>
* Enum Type
* @param clazz
* The type of enum to retrieve.
* @param index
* The index must be between 0 and length() - 1.
* @param defaultValue
* The default in case the value is not found
* @param <E> Enum Type
* @param clazz The type of enum to retrieve.
* @param index The index must be between 0 and length() - 1.
* @param defaultValue The default in case the value is not found
* @return The enum value at the index location or defaultValue if
* the value is not found or cannot be assigned to clazz
*/
@ -700,10 +636,8 @@ public class JSONArray implements Iterable<Object> {
* 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.
* @param index The index must be between 0 and length() - 1.
* @param defaultValue The default value.
* @return The value.
*/
public BigInteger optBigInteger(int index, BigInteger defaultValue) {
@ -719,10 +653,8 @@ public class JSONArray implements Iterable<Object> {
* constructor will be used. See notes on the constructor for conversion
* issues that may arise.
*
* @param index
* The index must be between 0 and length() - 1.
* @param defaultValue
* The default value.
* @param index The index must be between 0 and length() - 1.
* @param defaultValue The default value.
* @return The value.
*/
public BigDecimal optBigDecimal(int index, BigDecimal defaultValue) {
@ -733,8 +665,7 @@ public class JSONArray implements Iterable<Object> {
/**
* Get the optional JSONArray associated with an index.
*
* @param index
* subscript
* @param index subscript
* @return A JSONArray value, or null if the index has no value, or if the
* value is not a JSONArray.
*/
@ -748,8 +679,7 @@ public class JSONArray implements Iterable<Object> {
* 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.
* @param index The index must be between 0 and length() - 1.
* @return A JSONObject value.
*/
public JSONObject optJSONObject(int index) {
@ -762,8 +692,7 @@ public class JSONArray implements Iterable<Object> {
* 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 index The index must be between 0 and length() - 1.
* @return The value.
*/
public long optLong(int index) {
@ -775,10 +704,8 @@ public class JSONArray implements Iterable<Object> {
* 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.
* @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) {
@ -795,8 +722,7 @@ public class JSONArray implements Iterable<Object> {
* an attempt will be made to evaluate it as a number ({@link BigDecimal}). This method
* would be used in cases where type coercion of the number value is unwanted.
*
* @param index
* The index must be between 0 and length() - 1.
* @param index The index must be between 0 and length() - 1.
* @return An object which is the value.
*/
public Number optNumber(int index) {
@ -809,10 +735,8 @@ public class JSONArray implements Iterable<Object> {
* an attempt will be made to evaluate it as a number ({@link BigDecimal}). This method
* would be used in cases where type coercion of the number value is unwanted.
*
* @param index
* The index must be between 0 and length() - 1.
* @param defaultValue
* The default.
* @param index The index must be between 0 and length() - 1.
* @param defaultValue The default.
* @return An object which is the value.
*/
public Number optNumber(int index, Number defaultValue) {
@ -839,8 +763,7 @@ public class JSONArray implements Iterable<Object> {
* empty string if there is no value at that index. If the value is not a
* string and is not null, then it is converted to a string.
*
* @param index
* The index must be between 0 and length() - 1.
* @param index The index must be between 0 and length() - 1.
* @return A String value.
*/
public String optString(int index) {
@ -851,10 +774,8 @@ public class JSONArray implements Iterable<Object> {
* 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.
* @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) {
@ -866,8 +787,7 @@ public class JSONArray implements Iterable<Object> {
/**
* Append a boolean value. This increases the array's length by one.
*
* @param value
* A boolean value.
* @param value A boolean value.
* @return this.
*/
public JSONArray put(boolean value) {
@ -878,11 +798,9 @@ public class JSONArray implements Iterable<Object> {
* Put a value in the JSONArray, where the value will be a JSONArray which
* is produced from a Collection.
*
* @param value
* A Collection value.
* @param value A Collection value.
* @return this.
* @throws JSONException
* If the value is non-finite number.
* @throws JSONException If the value is non-finite number.
*/
public JSONArray put(Collection<?> value) {
return this.put(new JSONArray(value));
@ -891,11 +809,9 @@ public class JSONArray implements Iterable<Object> {
/**
* Append a double value. This increases the array's length by one.
*
* @param value
* A double value.
* @param value A double value.
* @return this.
* @throws JSONException
* if the value is not finite.
* @throws JSONException if the value is not finite.
*/
public JSONArray put(double value) throws JSONException {
return this.put(Double.valueOf(value));
@ -904,11 +820,9 @@ public class JSONArray implements Iterable<Object> {
/**
* Append a float value. This increases the array's length by one.
*
* @param value
* A float value.
* @param value A float value.
* @return this.
* @throws JSONException
* if the value is not finite.
* @throws JSONException if the value is not finite.
*/
public JSONArray put(float value) throws JSONException {
return this.put(Float.valueOf(value));
@ -917,8 +831,7 @@ public class JSONArray implements Iterable<Object> {
/**
* Append an int value. This increases the array's length by one.
*
* @param value
* An int value.
* @param value An int value.
* @return this.
*/
public JSONArray put(int value) {
@ -928,8 +841,7 @@ public class JSONArray implements Iterable<Object> {
/**
* Append an long value. This increases the array's length by one.
*
* @param value
* A long value.
* @param value A long value.
* @return this.
*/
public JSONArray put(long value) {
@ -940,13 +852,10 @@ public class JSONArray implements Iterable<Object> {
* Put a value in the JSONArray, where the value will be a JSONObject which
* is produced from a Map.
*
* @param value
* A Map value.
* @param value A Map value.
* @return this.
* @throws JSONException
* If a value in the map is non-finite number.
* @throws NullPointerException
* If a key in the map is <code>null</code>
* @throws JSONException If a value in the map is non-finite number.
* @throws NullPointerException If a key in the map is <code>null</code>
*/
public JSONArray put(Map<?, ?> value) {
return this.put(new JSONObject(value));
@ -955,13 +864,11 @@ public class JSONArray implements Iterable<Object> {
/**
* Append an object value. This increases the array's length by one.
*
* @param value
* An object value. The value should be a Boolean, Double,
* @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.
* @throws JSONException
* If the value is non-finite number.
* @throws JSONException If the value is non-finite number.
*/
public JSONArray put(Object value) {
JSONObject.testValidity(value);
@ -974,13 +881,10 @@ public class JSONArray implements Iterable<Object> {
* 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.
* @param index The subscript.
* @param value A boolean value.
* @return this.
* @throws JSONException
* If the index is negative.
* @throws JSONException If the index is negative.
*/
public JSONArray put(int index, boolean value) throws JSONException {
return this.put(index, value ? Boolean.TRUE : Boolean.FALSE);
@ -990,13 +894,10 @@ public class JSONArray implements Iterable<Object> {
* 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.
* @param index The subscript.
* @param value A Collection value.
* @return this.
* @throws JSONException
* If the index is negative or if the value is non-finite.
* @throws JSONException If the index is negative or if the value is non-finite.
*/
public JSONArray put(int index, Collection<?> value) throws JSONException {
return this.put(index, new JSONArray(value));
@ -1007,13 +908,10 @@ public class JSONArray implements Iterable<Object> {
* the JSONArray, then null elements will be added as necessary to pad it
* out.
*
* @param index
* The subscript.
* @param value
* A double value.
* @param index The subscript.
* @param value A double value.
* @return this.
* @throws JSONException
* If the index is negative or if the value is non-finite.
* @throws JSONException If the index is negative or if the value is non-finite.
*/
public JSONArray put(int index, double value) throws JSONException {
return this.put(index, Double.valueOf(value));
@ -1024,13 +922,10 @@ public class JSONArray implements Iterable<Object> {
* the JSONArray, then null elements will be added as necessary to pad it
* out.
*
* @param index
* The subscript.
* @param value
* A float value.
* @param index The subscript.
* @param value A float value.
* @return this.
* @throws JSONException
* If the index is negative or if the value is non-finite.
* @throws JSONException If the index is negative or if the value is non-finite.
*/
public JSONArray put(int index, float value) throws JSONException {
return this.put(index, Float.valueOf(value));
@ -1041,13 +936,10 @@ public class JSONArray implements Iterable<Object> {
* the JSONArray, then null elements will be added as necessary to pad it
* out.
*
* @param index
* The subscript.
* @param value
* An int value.
* @param index The subscript.
* @param value An int value.
* @return this.
* @throws JSONException
* If the index is negative.
* @throws JSONException If the index is negative.
*/
public JSONArray put(int index, int value) throws JSONException {
return this.put(index, Integer.valueOf(value));
@ -1058,13 +950,10 @@ public class JSONArray implements Iterable<Object> {
* the JSONArray, then null elements will be added as necessary to pad it
* out.
*
* @param index
* The subscript.
* @param value
* A long value.
* @param index The subscript.
* @param value A long value.
* @return this.
* @throws JSONException
* If the index is negative.
* @throws JSONException If the index is negative.
*/
public JSONArray put(int index, long value) throws JSONException {
return this.put(index, Long.valueOf(value));
@ -1074,16 +963,12 @@ public class JSONArray implements Iterable<Object> {
* Put a value in the JSONArray, where the value will be a JSONObject that
* is produced from a Map.
*
* @param index
* The subscript.
* @param value
* The Map value.
* @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
* @throws JSONException If the index is negative or if the the value is an invalid
* number.
* @throws NullPointerException
* If a key in the map is <code>null</code>
* @throws NullPointerException If a key in the map is <code>null</code>
*/
public JSONArray put(int index, Map<?, ?> value) throws JSONException {
this.put(index, new JSONObject(value));
@ -1095,15 +980,12 @@ public class JSONArray implements Iterable<Object> {
* 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
* @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
* @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 {
@ -1206,8 +1088,7 @@ public class JSONArray implements Iterable<Object> {
/**
* Remove an index and close the hole.
*
* @param index
* The index of the element to be removed.
* @param index The index of the element to be removed.
* @return The value that was associated with the index, or null if there
* was no value.
*/
@ -1260,13 +1141,11 @@ public class JSONArray implements Iterable<Object> {
* 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
* @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.
* @throws JSONException If any of the names are null.
*/
public JSONObject toJSONObject(JSONArray names) throws JSONException {
if (names == null || names.isEmpty() || this.isEmpty()) {
@ -1319,8 +1198,7 @@ public class JSONArray implements Iterable<Object> {
* Warning: This method assumes that the data structure is acyclical.
* </b>
*
* @param indentFactor
* The number of spaces to add to each level of indentation.
* @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>
@ -1367,12 +1245,9 @@ public class JSONArray implements Iterable<Object> {
* Warning: This method assumes that the data structure is acyclical.
* </b>
*
* @param writer
* Writes the serialized JSON
* @param indentFactor
* The number of spaces to add to each level of indentation.
* @param indent
* The indentation of the top level.
* @param writer Writes the serialized JSON
* @param indentFactor The number of spaces to add to each level of indentation.
* @param indent The indentation of the top level.
* @return The writer.
* @throws JSONException
*/

View File

@ -7,14 +7,15 @@ package ch.m4th1eu.json;
* @version 2015-12-09
*/
public class JSONException extends RuntimeException {
/** Serialization ID */
/**
* Serialization ID
*/
private static final long serialVersionUID = 0;
/**
* Constructs a JSONException with an explanatory message.
*
* @param message
* Detail about the reason for the exception.
* @param message Detail about the reason for the exception.
*/
public JSONException(final String message) {
super(message);
@ -23,10 +24,8 @@ public class JSONException extends RuntimeException {
/**
* Constructs a JSONException with an explanatory message and cause.
*
* @param message
* Detail about the reason for the exception.
* @param cause
* The cause.
* @param message Detail about the reason for the exception.
* @param cause The cause.
*/
public JSONException(final String message, final Throwable cause) {
super(message, cause);
@ -35,8 +34,7 @@ public class JSONException extends RuntimeException {
/**
* Constructs a new JSONException with the specified cause.
*
* @param cause
* The cause.
* @param cause The cause.
*/
public JSONException(final Throwable cause) {
super(cause.getMessage(), cause);

View File

@ -35,6 +35,7 @@ SOFTWARE.
public class JSONML {
/**
* Parse XML values and store them in a JSONArray.
*
* @param x The XMLTokener containing the source string.
* @param arrayForm true if array form, false if object form.
* @param ja The JSONArray that is containing the current tag or null
@ -239,6 +240,7 @@ public class JSONML {
* name/value pairs. If the tag contains children, then strings and
* JSONArrays will represent the child tags.
* Comments, prologs, DTDs, and <code>&lt;[ [ ]]></code> are ignored.
*
* @param string The source string.
* @return A JSONArray containing the structured data from the XML string.
* @throws JSONException Thrown on error converting to a JSONArray
@ -259,6 +261,7 @@ public class JSONML {
* any text node or attribute value to any type
* but just leaves it as a string.
* Comments, prologs, DTDs, and <code>&lt;[ [ ]]></code> are ignored.
*
* @param string The source string.
* @param keepStrings If true, then values will not be coerced into boolean
* or numeric values and will instead be left as strings
@ -281,6 +284,7 @@ public class JSONML {
* any text node or attribute value to any type
* but just leaves it as a string.
* Comments, prologs, DTDs, and <code>&lt;[ [ ]]></code> are ignored.
*
* @param x An XMLTokener.
* @param keepStrings If true, then values will not be coerced into boolean
* or numeric values and will instead be left as strings
@ -300,6 +304,7 @@ public class JSONML {
* name/value pairs. If the tag contains children, then strings and
* JSONArrays will represent the child content and tags.
* Comments, prologs, DTDs, and <code>&lt;[ [ ]]></code> are ignored.
*
* @param x An XMLTokener.
* @return A JSONArray containing the structured data from the XML string.
* @throws JSONException Thrown on error converting to a JSONArray
@ -316,8 +321,9 @@ public class JSONML {
* the attributes will be in the JSONObject as properties. If the tag
* contains children, the object will have a "childNodes" property which
* will be an array of strings and JsonML JSONObjects.
* <p>
* Comments, prologs, DTDs, and <code>&lt;[ [ ]]></code> are ignored.
*
* @param string The XML source text.
* @return A JSONObject containing the structured data from the XML string.
* @throws JSONException Thrown on error converting to a JSONObject
@ -334,8 +340,9 @@ public class JSONML {
* the attributes will be in the JSONObject as properties. If the tag
* contains children, the object will have a "childNodes" property which
* will be an array of strings and JsonML JSONObjects.
* <p>
* Comments, prologs, DTDs, and <code>&lt;[ [ ]]></code> are ignored.
*
* @param string The XML source text.
* @param keepStrings If true, then values will not be coerced into boolean
* or numeric values and will instead be left as strings
@ -354,8 +361,9 @@ public class JSONML {
* the attributes will be in the JSONObject as properties. If the tag
* contains children, the object will have a "childNodes" property which
* will be an array of strings and JsonML JSONObjects.
* <p>
* Comments, prologs, DTDs, and <code>&lt;[ [ ]]></code> are ignored.
*
* @param x An XMLTokener of the XML source text.
* @return A JSONObject containing the structured data from the XML string.
* @throws JSONException Thrown on error converting to a JSONObject
@ -372,8 +380,9 @@ public class JSONML {
* the attributes will be in the JSONObject as properties. If the tag
* contains children, the object will have a "childNodes" property which
* will be an array of strings and JsonML JSONObjects.
* <p>
* Comments, prologs, DTDs, and <code>&lt;[ [ ]]></code> are ignored.
*
* @param x An XMLTokener of the XML source text.
* @param keepStrings If true, then values will not be coerced into boolean
* or numeric values and will instead be left as strings
@ -387,6 +396,7 @@ public class JSONML {
/**
* Reverse the JSONML transformation, making an XML text from a JSONArray.
*
* @param ja A JSONArray.
* @return An XML string.
* @throws JSONException Thrown on error converting to a string
@ -467,6 +477,7 @@ public class JSONML {
* The JSONObject must contain a "tagName" property. If it has children,
* then it must have a "childNodes" property containing an array of objects.
* The other properties are attributes with string values.
*
* @param jo A JSONObject.
* @return An XML string.
* @throws JSONException Thrown on error converting to a string

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,5 @@
package ch.m4th1eu.json;
import static java.lang.String.format;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
@ -9,6 +7,8 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static java.lang.String.format;
/*
Copyright (c) 2002 JSON.org
@ -36,7 +36,7 @@ SOFTWARE.
/**
* A JSON Pointer is a simple query language defined for JSON documents by
* <a href="https://tools.ietf.org/html/rfc6901">RFC 6901</a>.
*
* <p>
* In a nutshell, JSONPointer allows the user to navigate into a JSON document
* using strings, and retrieve targeted objects, like a simple form of XPATH.
* Path segments are separated by the '/' char, which signifies the root of
@ -55,76 +55,6 @@ public class JSONPointer {
// used for URL encoding and decoding
private static final String ENCODING = "utf-8";
/**
* This class allows the user to build a JSONPointer in steps, using
* exactly one segment in each step.
*/
public static class Builder {
// Segments for the eventual JSONPointer string
private final List<String> refTokens = new ArrayList<String>();
/**
* Creates a {@code JSONPointer} instance using the tokens previously set using the
* {@link #append(String)} method calls.
*/
public JSONPointer build() {
return new JSONPointer(this.refTokens);
}
/**
* Adds an arbitrary token to the list of reference tokens. It can be any non-null value.
*
* Unlike in the case of JSON string or URI fragment representation of JSON pointers, the
* argument of this method MUST NOT be escaped. If you want to query the property called
* {@code "a~b"} then you should simply pass the {@code "a~b"} string as-is, there is no
* need to escape it as {@code "a~0b"}.
*
* @param token the new token to be appended to the list
* @return {@code this}
* @throws NullPointerException if {@code token} is null
*/
public Builder append(String token) {
if (token == null) {
throw new NullPointerException("token cannot be null");
}
this.refTokens.add(token);
return this;
}
/**
* Adds an integer to the reference token list. Although not necessarily, mostly this token will
* denote an array index.
*
* @param arrayIndex the array index to be added to the token list
* @return {@code this}
*/
public Builder append(int arrayIndex) {
this.refTokens.add(String.valueOf(arrayIndex));
return this;
}
}
/**
* Static factory method for {@link Builder}. Example usage:
*
* <pre><code>
* JSONPointer pointer = JSONPointer.builder()
* .append("obj")
* .append("other~key").append("another/key")
* .append("\"")
* .append(0)
* .build();
* </code></pre>
*
* @return a builder instance which can be used to construct a {@code JSONPointer} instance by chained
* {@link Builder#append(String)} calls.
*/
public static Builder builder() {
return new Builder();
}
// Segments for the JSONPointer string
private final List<String> refTokens;
@ -186,6 +116,25 @@ public class JSONPointer {
this.refTokens = new ArrayList<String>(refTokens);
}
/**
* Static factory method for {@link Builder}. Example usage:
*
* <pre><code>
* JSONPointer pointer = JSONPointer.builder()
* .append("obj")
* .append("other~key").append("another/key")
* .append("\"")
* .append(0)
* .build();
* </code></pre>
*
* @return a builder instance which can be used to construct a {@code JSONPointer} instance by chained
* {@link Builder#append(String)} calls.
*/
public static Builder builder() {
return new Builder();
}
private String unescape(String token) {
return token.replace("~1", "/").replace("~0", "~")
.replace("\\\"", "\"")
@ -223,6 +172,7 @@ public class JSONPointer {
/**
* Matches a JSONArray element by ordinal position
*
* @param current the JSONArray to be evaluated
* @param indexToken the array index in string form
* @return the matched object. If no matching item is found a
@ -252,7 +202,7 @@ public class JSONPointer {
*/
@Override
public String toString() {
StringBuilder rval = new StringBuilder("");
StringBuilder rval = new StringBuilder();
for (String token : this.refTokens) {
rval.append('/').append(escape(token));
}
@ -264,6 +214,7 @@ public class JSONPointer {
* The escape char to be inserted is '~'. The chars to be escaped
* are ~, which maps to ~0, and /, which maps to ~1. Backslashes
* and double quote chars are also escaped.
*
* @param token the JSONPointer segment value to be escaped
* @return the escaped value for the token
*/
@ -290,4 +241,54 @@ public class JSONPointer {
}
}
/**
* This class allows the user to build a JSONPointer in steps, using
* exactly one segment in each step.
*/
public static class Builder {
// Segments for the eventual JSONPointer string
private final List<String> refTokens = new ArrayList<String>();
/**
* Creates a {@code JSONPointer} instance using the tokens previously set using the
* {@link #append(String)} method calls.
*/
public JSONPointer build() {
return new JSONPointer(this.refTokens);
}
/**
* Adds an arbitrary token to the list of reference tokens. It can be any non-null value.
* <p>
* Unlike in the case of JSON string or URI fragment representation of JSON pointers, the
* argument of this method MUST NOT be escaped. If you want to query the property called
* {@code "a~b"} then you should simply pass the {@code "a~b"} string as-is, there is no
* need to escape it as {@code "a~0b"}.
*
* @param token the new token to be appended to the list
* @return {@code this}
* @throws NullPointerException if {@code token} is null
*/
public Builder append(String token) {
if (token == null) {
throw new NullPointerException("token cannot be null");
}
this.refTokens.add(token);
return this;
}
/**
* Adds an integer to the reference token list. Although not necessarily, mostly this token will
* denote an array index.
*
* @param arrayIndex the array index to be added to the token list
* @return {@code this}
*/
public Builder append(int arrayIndex) {
this.refTokens.add(String.valueOf(arrayIndex));
return this;
}
}
}

View File

@ -24,13 +24,13 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Documented
@Retention(RUNTIME)
@Target({METHOD})
@ -40,4 +40,5 @@ import java.lang.annotation.Target;
* present at any level in the class hierarchy, then the method will
* not be serialized from the bean into the JSONObject.
*/
public @interface JSONPropertyIgnore { }
public @interface JSONPropertyIgnore {
}

View File

@ -24,13 +24,13 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Documented
@Retention(RUNTIME)
@Target({METHOD})

View File

@ -1,4 +1,5 @@
package ch.m4th1eu.json;
/**
* The <code>JSONString</code> interface allows a <code>toJSONString()</code>
* method so that a class can change the behavior of
@ -14,5 +15,5 @@ public interface JSONString {
*
* @return A strictly syntactically correct JSON text.
*/
public String toJSONString();
String toJSONString();
}

View File

@ -53,6 +53,7 @@ import java.io.StringWriter;
* you. Objects and arrays can be nested up to 20 levels deep.
* <p>
* This can sometimes be easier than using a JSONObject to build a string.
*
* @author JSON.org
* @version 2015-12-09
*/
@ -70,6 +71,7 @@ public class JSONStringer extends JSONWriter {
* problem in the construction of the JSON text (such as the calls to
* <code>array</code> were not properly balanced with calls to
* <code>endArray</code>).
*
* @return The JSON text.
*/
@Override

View File

@ -1,11 +1,6 @@
package ch.m4th1eu.json;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringReader;
import java.io.*;
/*
Copyright (c) 2002 JSON.org
@ -35,25 +30,42 @@ SOFTWARE.
* A JSONTokener takes a source string and extracts characters and tokens from
* it. It is used by the JSONObject and JSONArray constructors to parse
* JSON source strings.
*
* @author JSON.org
* @version 2014-05-03
*/
public class JSONTokener {
/** current read character position on the current line. */
private long character;
/** flag to indicate if the end of the input has been found. */
private boolean eof;
/** current read index of the input. */
private long index;
/** current line of the input. */
private long line;
/** previous character read from the input. */
private char previous;
/** Reader for the input. */
/**
* Reader for the input.
*/
private final Reader reader;
/** flag to indicate that a previous character was requested. */
/**
* current read character position on the current line.
*/
private long character;
/**
* flag to indicate if the end of the input has been found.
*/
private boolean eof;
/**
* current read index of the input.
*/
private long index;
/**
* current line of the input.
*/
private long line;
/**
* previous character read from the input.
*/
private char previous;
/**
* flag to indicate that a previous character was requested.
*/
private boolean usePrevious;
/** the number of characters read in the previous line. */
/**
* the number of characters read in the previous line.
*/
private long characterPreviousLine;
@ -78,6 +90,7 @@ public class JSONTokener {
/**
* Construct a JSONTokener from an InputStream. The caller must close the input stream.
*
* @param inputStream The source.
*/
public JSONTokener(InputStream inputStream) {
@ -94,11 +107,31 @@ public class JSONTokener {
this(new StringReader(s));
}
/**
* Get the hex value of a character (base16).
*
* @param c A character between '0' and '9' or between 'A' and 'F' or
* between 'a' and 'f'.
* @return An int between 0 and 15, or -1 if c was not a hex digit.
*/
public static int dehexchar(char c) {
if (c >= '0' && c <= '9') {
return c - '0';
}
if (c >= 'A' && c <= 'F') {
return c - ('A' - 10);
}
if (c >= 'a' && c <= 'f') {
return c - ('a' - 10);
}
return -1;
}
/**
* Back up one character. This provides a sort of lookahead capability,
* so that you can test for a digit or letter before attempting to parse
* the next number or identifier.
*
* @throws JSONException Thrown if trying to step back more than 1 step
* or if already at the start of the string
*/
@ -124,25 +157,6 @@ public class JSONTokener {
}
}
/**
* Get the hex value of a character (base16).
* @param c A character between '0' and '9' or between 'A' and 'F' or
* between 'a' and 'f'.
* @return An int between 0 and 15, or -1 if c was not a hex digit.
*/
public static int dehexchar(char c) {
if (c >= '0' && c <= '9') {
return c - '0';
}
if (c >= 'A' && c <= 'F') {
return c - ('A' - 10);
}
if (c >= 'a' && c <= 'f') {
return c - ('a' - 10);
}
return -1;
}
/**
* Checks if the end of the input has been reached.
*
@ -156,6 +170,7 @@ public class JSONTokener {
/**
* Determine if the source string still contains characters that next()
* can consume.
*
* @return true if not yet at the end of the source.
* @throws JSONException thrown if there is an error stepping forward
* or backward while checking for more data.
@ -213,6 +228,7 @@ public class JSONTokener {
/**
* Increments the internal indexes according to the previous character
* read and the character passed as the current character.
*
* @param c the current character read.
*/
private void incrementIndexes(int c) {
@ -237,6 +253,7 @@ public class JSONTokener {
/**
* Consume the next character, and check that it matches a specified
* character.
*
* @param c The character to match.
* @return The character.
* @throws JSONException if the character does not match.
@ -259,8 +276,7 @@ public class JSONTokener {
*
* @param n The number of characters to take.
* @return A string of n characters.
* @throws JSONException
* Substring bounds error if there are not
* @throws JSONException Substring bounds error if there are not
* n characters remaining in the source string.
*/
public String next(int n) throws JSONException {
@ -284,8 +300,9 @@ public class JSONTokener {
/**
* Get the next char in the string, skipping whitespace.
* @throws JSONException Thrown if there is an error reading the source string.
*
* @return A character, or 0 if there are no more characters.
* @throws JSONException Thrown if there is an error reading the source string.
*/
public char nextClean() throws JSONException {
for (; ; ) {
@ -302,6 +319,7 @@ public class JSONTokener {
* Backslash processing is done. The formal JSON format does not
* allow strings in single quotes, but an implementation is allowed to
* accept them.
*
* @param quote The quoting character, either
* <code>"</code>&nbsp;<small>(double quote)</small> or
* <code>'</code>&nbsp;<small>(single quote)</small>.
@ -366,6 +384,7 @@ public class JSONTokener {
/**
* Get the text up but not including the specified character or the
* end of line, whichever comes first.
*
* @param delimiter A delimiter character.
* @return A string.
* @throws JSONException Thrown if there is an error while searching
@ -389,6 +408,7 @@ public class JSONTokener {
/**
* Get the text up but not including one of the specified delimiter
* characters or the end of line, whichever comes first.
*
* @param delimiters A set of delimiter characters.
* @return A string, trimmed.
* @throws JSONException Thrown if there is an error while searching
@ -414,9 +434,9 @@ public class JSONTokener {
/**
* Get the next value. The value can be a Boolean, Double, Integer,
* JSONArray, JSONObject, Long, or String, or the JSONObject.NULL object.
* @throws JSONException If syntax error.
*
* @return An object.
* @throws JSONException If syntax error.
*/
public Object nextValue() throws JSONException {
char c = this.nextClean();
@ -463,6 +483,7 @@ public class JSONTokener {
/**
* Skip characters until the next character is the requested character.
* If the requested character is not found, no characters are skipped.
*
* @param to A character to skip to.
* @return The requested character, or zero if the requested character
* is not found.

View File

@ -54,18 +54,16 @@ SOFTWARE.
* you. Objects and arrays can be nested up to 200 levels deep.
* <p>
* This can sometimes be easier than using a JSONObject to build a string.
*
* @author JSON.org
* @version 2016-08-08
*/
public class JSONWriter {
private static final int maxdepth = 200;
/**
* The comma flag determines if a comma should be output before the next
* value.
* The object/array stack.
*/
private boolean comma;
private final JSONObject[] stack;
/**
* The current mode. Values:
* 'a' (array),
@ -75,21 +73,19 @@ public class JSONWriter {
* 'o' (object).
*/
protected char mode;
/**
* The object/array stack.
*/
private final JSONObject stack[];
/**
* The stack top index. A value of 0 indicates that the stack is empty.
*/
private int top;
/**
* The writer that will receive the output.
*/
protected Appendable writer;
/**
* The comma flag determines if a comma should be output before the next
* value.
*/
private boolean comma;
/**
* The stack top index. A value of 0 indicates that the stack is empty.
*/
private int top;
/**
* Make a fresh JSONWriter. It can be used to build one JSON text.
@ -102,200 +98,6 @@ public class JSONWriter {
this.writer = w;
}
/**
* Append a value.
* @param string A string value.
* @return this
* @throws JSONException If the value is out of sequence.
*/
private JSONWriter append(String string) throws JSONException {
if (string == null) {
throw new JSONException("Null pointer");
}
if (this.mode == 'o' || this.mode == 'a') {
try {
if (this.comma && this.mode == 'a') {
this.writer.append(',');
}
this.writer.append(string);
} catch (IOException e) {
// Android as of API 25 does not support this exception constructor
// however we won't worry about it. If an exception is happening here
// it will just throw a "Method not found" exception instead.
throw new JSONException(e);
}
if (this.mode == 'o') {
this.mode = 'k';
}
this.comma = true;
return this;
}
throw new JSONException("Value out of sequence.");
}
/**
* Begin appending a new array. All values until the balancing
* <code>endArray</code> will be appended to this array. The
* <code>endArray</code> method must be called to mark the array's end.
* @return this
* @throws JSONException If the nesting is too deep, or if the object is
* started in the wrong place (for example as a key or after the end of the
* outermost array or object).
*/
public JSONWriter array() throws JSONException {
if (this.mode == 'i' || this.mode == 'o' || this.mode == 'a') {
this.push(null);
this.append("[");
this.comma = false;
return this;
}
throw new JSONException("Misplaced array.");
}
/**
* End something.
* @param m Mode
* @param c Closing character
* @return this
* @throws JSONException If unbalanced.
*/
private JSONWriter end(char m, char c) throws JSONException {
if (this.mode != m) {
throw new JSONException(m == 'a'
? "Misplaced endArray."
: "Misplaced endObject.");
}
this.pop(m);
try {
this.writer.append(c);
} catch (IOException e) {
// Android as of API 25 does not support this exception constructor
// however we won't worry about it. If an exception is happening here
// it will just throw a "Method not found" exception instead.
throw new JSONException(e);
}
this.comma = true;
return this;
}
/**
* End an array. This method most be called to balance calls to
* <code>array</code>.
* @return this
* @throws JSONException If incorrectly nested.
*/
public JSONWriter endArray() throws JSONException {
return this.end('a', ']');
}
/**
* End an object. This method most be called to balance calls to
* <code>object</code>.
* @return this
* @throws JSONException If incorrectly nested.
*/
public JSONWriter endObject() throws JSONException {
return this.end('k', '}');
}
/**
* Append a key. The key will be associated with the next value. In an
* object, every value must be preceded by a key.
* @param string A key string.
* @return this
* @throws JSONException If the key is out of place. For example, keys
* do not belong in arrays or if the key is null.
*/
public JSONWriter key(String string) throws JSONException {
if (string == null) {
throw new JSONException("Null key.");
}
if (this.mode == 'k') {
try {
JSONObject topObject = this.stack[this.top - 1];
// don't use the built in putOnce method to maintain Android support
if(topObject.has(string)) {
throw new JSONException("Duplicate key \"" + string + "\"");
}
topObject.put(string, true);
if (this.comma) {
this.writer.append(',');
}
this.writer.append(JSONObject.quote(string));
this.writer.append(':');
this.comma = false;
this.mode = 'o';
return this;
} catch (IOException e) {
// Android as of API 25 does not support this exception constructor
// however we won't worry about it. If an exception is happening here
// it will just throw a "Method not found" exception instead.
throw new JSONException(e);
}
}
throw new JSONException("Misplaced key.");
}
/**
* Begin appending a new object. All keys and values until the balancing
* <code>endObject</code> will be appended to this object. The
* <code>endObject</code> method must be called to mark the object's end.
* @return this
* @throws JSONException If the nesting is too deep, or if the object is
* started in the wrong place (for example as a key or after the end of the
* outermost array or object).
*/
public JSONWriter object() throws JSONException {
if (this.mode == 'i') {
this.mode = 'o';
}
if (this.mode == 'o' || this.mode == 'a') {
this.append("{");
this.push(new JSONObject());
this.comma = false;
return this;
}
throw new JSONException("Misplaced object.");
}
/**
* Pop an array or object scope.
* @param c The scope to close.
* @throws JSONException If nesting is wrong.
*/
private void pop(char c) throws JSONException {
if (this.top <= 0) {
throw new JSONException("Nesting error.");
}
char m = this.stack[this.top - 1] == null ? 'a' : 'k';
if (m != c) {
throw new JSONException("Nesting error.");
}
this.top -= 1;
this.mode = this.top == 0
? 'd'
: this.stack[this.top - 1] == null
? 'a'
: 'k';
}
/**
* Push an array or object scope.
* @param jo The scope to open.
* @throws JSONException If nesting is too deep.
*/
private void push(JSONObject jo) throws JSONException {
if (this.top >= maxdepth) {
throw new JSONException("Nesting too deep.");
}
this.stack[this.top] = jo;
this.mode = jo == null ? 'a' : 'k';
this.top += 1;
}
/**
* 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
@ -311,14 +113,12 @@ public class JSONWriter {
* <p>
* Warning: This method assumes that the data structure is acyclical.
*
* @param value
* The value to be serialized.
* @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.
* @throws JSONException If the value is or contains an invalid number.
*/
public static String valueToString(Object value) throws JSONException {
if (value == null || value.equals(null)) {
@ -368,9 +168,211 @@ public class JSONWriter {
return JSONObject.quote(value.toString());
}
/**
* Append a value.
*
* @param string A string value.
* @return this
* @throws JSONException If the value is out of sequence.
*/
private JSONWriter append(String string) throws JSONException {
if (string == null) {
throw new JSONException("Null pointer");
}
if (this.mode == 'o' || this.mode == 'a') {
try {
if (this.comma && this.mode == 'a') {
this.writer.append(',');
}
this.writer.append(string);
} catch (IOException e) {
// Android as of API 25 does not support this exception constructor
// however we won't worry about it. If an exception is happening here
// it will just throw a "Method not found" exception instead.
throw new JSONException(e);
}
if (this.mode == 'o') {
this.mode = 'k';
}
this.comma = true;
return this;
}
throw new JSONException("Value out of sequence.");
}
/**
* Begin appending a new array. All values until the balancing
* <code>endArray</code> will be appended to this array. The
* <code>endArray</code> method must be called to mark the array's end.
*
* @return this
* @throws JSONException If the nesting is too deep, or if the object is
* started in the wrong place (for example as a key or after the end of the
* outermost array or object).
*/
public JSONWriter array() throws JSONException {
if (this.mode == 'i' || this.mode == 'o' || this.mode == 'a') {
this.push(null);
this.append("[");
this.comma = false;
return this;
}
throw new JSONException("Misplaced array.");
}
/**
* End something.
*
* @param m Mode
* @param c Closing character
* @return this
* @throws JSONException If unbalanced.
*/
private JSONWriter end(char m, char c) throws JSONException {
if (this.mode != m) {
throw new JSONException(m == 'a'
? "Misplaced endArray."
: "Misplaced endObject.");
}
this.pop(m);
try {
this.writer.append(c);
} catch (IOException e) {
// Android as of API 25 does not support this exception constructor
// however we won't worry about it. If an exception is happening here
// it will just throw a "Method not found" exception instead.
throw new JSONException(e);
}
this.comma = true;
return this;
}
/**
* End an array. This method most be called to balance calls to
* <code>array</code>.
*
* @return this
* @throws JSONException If incorrectly nested.
*/
public JSONWriter endArray() throws JSONException {
return this.end('a', ']');
}
/**
* End an object. This method most be called to balance calls to
* <code>object</code>.
*
* @return this
* @throws JSONException If incorrectly nested.
*/
public JSONWriter endObject() throws JSONException {
return this.end('k', '}');
}
/**
* Append a key. The key will be associated with the next value. In an
* object, every value must be preceded by a key.
*
* @param string A key string.
* @return this
* @throws JSONException If the key is out of place. For example, keys
* do not belong in arrays or if the key is null.
*/
public JSONWriter key(String string) throws JSONException {
if (string == null) {
throw new JSONException("Null key.");
}
if (this.mode == 'k') {
try {
JSONObject topObject = this.stack[this.top - 1];
// don't use the built in putOnce method to maintain Android support
if (topObject.has(string)) {
throw new JSONException("Duplicate key \"" + string + "\"");
}
topObject.put(string, true);
if (this.comma) {
this.writer.append(',');
}
this.writer.append(JSONObject.quote(string));
this.writer.append(':');
this.comma = false;
this.mode = 'o';
return this;
} catch (IOException e) {
// Android as of API 25 does not support this exception constructor
// however we won't worry about it. If an exception is happening here
// it will just throw a "Method not found" exception instead.
throw new JSONException(e);
}
}
throw new JSONException("Misplaced key.");
}
/**
* Begin appending a new object. All keys and values until the balancing
* <code>endObject</code> will be appended to this object. The
* <code>endObject</code> method must be called to mark the object's end.
*
* @return this
* @throws JSONException If the nesting is too deep, or if the object is
* started in the wrong place (for example as a key or after the end of the
* outermost array or object).
*/
public JSONWriter object() throws JSONException {
if (this.mode == 'i') {
this.mode = 'o';
}
if (this.mode == 'o' || this.mode == 'a') {
this.append("{");
this.push(new JSONObject());
this.comma = false;
return this;
}
throw new JSONException("Misplaced object.");
}
/**
* Pop an array or object scope.
*
* @param c The scope to close.
* @throws JSONException If nesting is wrong.
*/
private void pop(char c) throws JSONException {
if (this.top <= 0) {
throw new JSONException("Nesting error.");
}
char m = this.stack[this.top - 1] == null ? 'a' : 'k';
if (m != c) {
throw new JSONException("Nesting error.");
}
this.top -= 1;
this.mode = this.top == 0
? 'd'
: this.stack[this.top - 1] == null
? 'a'
: 'k';
}
/**
* Push an array or object scope.
*
* @param jo The scope to open.
* @throws JSONException If nesting is too deep.
*/
private void push(JSONObject jo) throws JSONException {
if (this.top >= maxdepth) {
throw new JSONException("Nesting too deep.");
}
this.stack[this.top] = jo;
this.mode = jo == null ? 'a' : 'k';
this.top += 1;
}
/**
* Append either the value <code>true</code> or the value
* <code>false</code>.
*
* @param b A boolean.
* @return this
* @throws JSONException
@ -381,6 +383,7 @@ public class JSONWriter {
/**
* Append a double value.
*
* @param d A double.
* @return this
* @throws JSONException If the number is not finite.
@ -391,6 +394,7 @@ public class JSONWriter {
/**
* Append a long value.
*
* @param l A long.
* @return this
* @throws JSONException
@ -402,6 +406,7 @@ public class JSONWriter {
/**
* Append an object value.
*
* @param object The object to append. It can be null, or a Boolean, Number,
* String, JSONObject, or JSONArray, or an object that implements JSONString.
* @return this

View File

@ -29,12 +29,14 @@ import java.util.Properties;
/**
* Converts a Property file data into JSONObject and back.
*
* @author JSON.org
* @version 2015-05-05
*/
public class Property {
/**
* Converts a property file object into a JSONObject. The property file object is a table of name value pairs.
*
* @param properties java.util.Properties
* @return JSONObject
* @throws JSONException
@ -55,6 +57,7 @@ public class Property {
/**
* Converts the JSONObject into a property file object.
*
* @param jo JSONObject
* @return java.util.Properties
* @throws JSONException

View File

@ -38,31 +38,49 @@ import java.util.Iterator;
@SuppressWarnings("boxing")
public class XML {
/** The Character '&amp;'. */
/**
* The Character '&amp;'.
*/
public static final Character AMP = '&';
/** The Character '''. */
/**
* The Character '''.
*/
public static final Character APOS = '\'';
/** The Character '!'. */
/**
* The Character '!'.
*/
public static final Character BANG = '!';
/** The Character '='. */
/**
* The Character '='.
*/
public static final Character EQ = '=';
/** The Character '>'. */
/**
* The Character '>'.
*/
public static final Character GT = '>';
/** The Character '&lt;'. */
/**
* The Character '&lt;'.
*/
public static final Character LT = '<';
/** The Character '?'. */
/**
* The Character '?'.
*/
public static final Character QUEST = '?';
/** The Character '"'. */
/**
* The Character '"'.
*/
public static final Character QUOT = '"';
/** The Character '/'. */
/**
* The Character '/'.
*/
public static final Character SLASH = '/';
/**
@ -121,8 +139,7 @@ public class XML {
* &apos; <small>(single quote / apostrophe)</small> is replaced by &amp;apos;
* </pre>
*
* @param string
* The string to be escaped.
* @param string The string to be escaped.
* @return The escaped string.
*/
public static String escape(String string) {
@ -186,8 +203,7 @@ public class XML {
/**
* Removes XML escapes from the string.
*
* @param string
* string to remove escapes from
* @param string string to remove escapes from
* @return string with converted entities
*/
public static String unescape(String string) {
@ -218,8 +234,7 @@ public class XML {
* Throw an exception if the string contains whitespace. Whitespace is not
* allowed in tagNames and attributes.
*
* @param string
* A string.
* @param string A string.
* @throws JSONException Thrown if the string contains whitespace or is empty.
*/
public static void noSpace(String string) throws JSONException {
@ -238,12 +253,9 @@ public class XML {
/**
* Scan the content following the named tag, attaching it to the context.
*
* @param x
* The XMLTokener containing the source string.
* @param context
* The JSONObject that will include the new material.
* @param name
* The tag name.
* @param x The XMLTokener containing the source string.
* @param context The JSONObject that will include the new material.
* @param name The tag name.
* @return true if the close tag is processed.
* @throws JSONException
*/
@ -481,8 +493,7 @@ public class XML {
* "content" member. Comments, prologs, DTDs, and <code>&lt;[ [ ]]></code>
* are ignored.
*
* @param string
* The source string.
* @param string The source string.
* @return A JSONObject containing the structured data from the XML string.
* @throws JSONException Thrown if there is an errors while parsing the string
*/
@ -519,7 +530,7 @@ public class XML {
* elements are represented as JSONArrays. Content text may be placed in a
* "content" member. Comments, prologs, DTDs, and <code>&lt;[ [ ]]></code>
* are ignored.
*
* <p>
* All values are converted as strings, for 1, 01, 29.0 will not be coerced to
* numbers but will instead be the exact value as seen in the XML document.
*
@ -546,7 +557,7 @@ public class XML {
* elements are represented as JSONArrays. Content text may be placed in a
* "content" member. Comments, prologs, DTDs, and <code>&lt;[ [ ]]></code>
* are ignored.
*
* <p>
* All values are converted as strings, for 1, 01, 29.0 will not be coerced to
* numbers but will instead be the exact value as seen in the XML document.
*
@ -577,12 +588,11 @@ public class XML {
* elements are represented as JSONArrays. Content text may be placed in a
* "content" member. Comments, prologs, DTDs, and <code>&lt;[ [ ]]></code>
* are ignored.
*
* <p>
* All values are converted as strings, for 1, 01, 29.0 will not be coerced to
* numbers but will instead be the exact value as seen in the XML document.
*
* @param string
* The source string.
* @param string The source string.
* @param keepStrings If true, then values will not be coerced into boolean
* or numeric values and will instead be left as strings
* @return A JSONObject containing the structured data from the XML string.
@ -602,12 +612,11 @@ public class XML {
* elements are represented as JSONArrays. Content text may be placed in a
* "content" member. Comments, prologs, DTDs, and <code>&lt;[ [ ]]></code>
* are ignored.
*
* <p>
* All values are converted as strings, for 1, 01, 29.0 will not be coerced to
* numbers but will instead be the exact value as seen in the XML document.
*
* @param string
* The source string.
* @param string The source string.
* @param config Configuration options for the parser.
* @return A JSONObject containing the structured data from the XML string.
* @throws JSONException Thrown if there is an errors while parsing the string
@ -619,8 +628,7 @@ public class XML {
/**
* Convert a JSONObject into a well-formed, element-normal XML string.
*
* @param object
* A JSONObject.
* @param object A JSONObject.
* @return A string.
* @throws JSONException Thrown if there is an error parsing the string
*/
@ -631,10 +639,8 @@ public class XML {
/**
* Convert a JSONObject into a well-formed, element-normal XML string.
*
* @param object
* A JSONObject.
* @param tagName
* The optional name of the enclosing tag.
* @param object A JSONObject.
* @param tagName The optional name of the enclosing tag.
* @return A string.
* @throws JSONException Thrown if there is an error parsing the string
*/
@ -645,12 +651,9 @@ public class XML {
/**
* Convert a JSONObject into a well-formed, element-normal XML string.
*
* @param object
* A JSONObject.
* @param tagName
* The optional name of the enclosing tag.
* @param config
* Configuration that can control output to XML.
* @param object A JSONObject.
* @param tagName The optional name of the enclosing tag.
* @param config Configuration that can control output to XML.
* @return A string.
* @throws JSONException Thrown if there is an error parsing the string
*/

View File

@ -25,13 +25,17 @@ SOFTWARE.
/**
* Configuration object for the XML parser.
* @author AylwardJ
*
* @author AylwardJ
*/
public class XMLParserConfiguration {
/** Original Configuration of the XML Parser. */
/**
* Original Configuration of the XML Parser.
*/
public static final XMLParserConfiguration ORIGINAL = new XMLParserConfiguration();
/** Original configuration of the XML Parser except that values are kept as strings. */
/**
* Original configuration of the XML Parser except that values are kept as strings.
*/
public static final XMLParserConfiguration KEEP_STRINGS = new XMLParserConfiguration(true);
/**
* When parsing the XML into JSON, specifies if values should be kept as strings (true), or if
@ -59,6 +63,7 @@ public class XMLParserConfiguration {
/**
* Configure the parser string processing and use the default CDATA Tag Name as "content".
*
* @param keepStrings <code>true</code> to parse all values as string.
* <code>false</code> to try and convert XML string values into a JSON value.
*/
@ -70,6 +75,7 @@ public class XMLParserConfiguration {
* Configure the parser string processing to try and convert XML values to JSON values and
* use the passed CDATA Tag Name the processing value. Pass <code>null</code> to
* disable CDATA processing
*
* @param cDataTagName<code>null</code> to disable CDATA processing. Any other value
* to use that value as the JSONObject key name to process as CDATA.
*/
@ -79,6 +85,7 @@ public class XMLParserConfiguration {
/**
* Configure the parser to use custom settings.
*
* @param keepStrings <code>true</code> to parse all values as string.
* <code>false</code> to try and convert XML string values into a JSON value.
* @param cDataTagName<code>null</code> to disable CDATA processing. Any other value
@ -92,6 +99,7 @@ public class XMLParserConfiguration {
/**
* Configure the parser to use custom settings.
*
* @param keepStrings <code>true</code> to parse all values as string.
* <code>false</code> to try and convert XML string values into a JSON value.
* @param cDataTagName <code>null</code> to disable CDATA processing. Any other value

View File

@ -29,13 +29,15 @@ import java.io.Reader;
/**
* The XMLTokener extends the JSONTokener to provide additional methods
* for the parsing of XML texts.
*
* @author JSON.org
* @version 2015-12-09
*/
public class XMLTokener extends JSONTokener {
/** The table of entity values. It initially contains Character values for
/**
* The table of entity values. It initially contains Character values for
* amp, apos, gt, lt, quot.
*/
public static final java.util.HashMap<String, Character> entity;
@ -51,6 +53,7 @@ public class XMLTokener extends JSONTokener {
/**
* Construct an XMLTokener from a Reader.
*
* @param r A source reader.
*/
public XMLTokener(Reader r) {
@ -59,14 +62,47 @@ public class XMLTokener extends JSONTokener {
/**
* Construct an XMLTokener from a string.
*
* @param s A source string.
*/
public XMLTokener(String s) {
super(s);
}
/**
* Unescapes an XML entity encoding;
*
* @param e entity (only the actual entity value, not the preceding & or ending ;
* @return
*/
static String unescapeEntity(String e) {
// validate
if (e == null || e.isEmpty()) {
return "";
}
// if our entity is an encoded unicode point, parse it.
if (e.charAt(0) == '#') {
int cp;
if (e.charAt(1) == 'x') {
// hex encoded unicode
cp = Integer.parseInt(e.substring(2), 16);
} else {
// decimal encoded unicode
cp = Integer.parseInt(e.substring(1));
}
return new String(new int[]{cp}, 0, 1);
}
Character knownEntity = entity.get(e);
if (knownEntity == null) {
// we don't know the entity so keep it encoded
return '&' + e + ';';
}
return knownEntity.toString();
}
/**
* Get the text in the CDATA block.
*
* @return The string up to the <code>]]&gt;</code>.
* @throws JSONException If the <code>]]&gt;</code> is not found.
*/
@ -87,7 +123,6 @@ public class XMLTokener extends JSONTokener {
throw syntaxError("Unclosed CDATA");
}
/**
* Get the next XML outer token, trimming whitespace. There are two kinds
* of tokens: the '<' character which begins a markup tag, and the content
@ -127,10 +162,10 @@ public class XMLTokener extends JSONTokener {
}
}
/**
* Return the next entity. These entities are translated to Characters:
* <code>&amp; &apos; &gt; &lt; &quot;</code>.
*
* @param ampersand An ampersand character.
* @return A Character or an entity String if the entity is not recognized.
* @throws JSONException If missing ';' in XML entity.
@ -151,40 +186,10 @@ public class XMLTokener extends JSONTokener {
return unescapeEntity(string);
}
/**
* Unescapes an XML entity encoding;
* @param e entity (only the actual entity value, not the preceding & or ending ;
* @return
*/
static String unescapeEntity(String e) {
// validate
if (e == null || e.isEmpty()) {
return "";
}
// if our entity is an encoded unicode point, parse it.
if (e.charAt(0) == '#') {
int cp;
if (e.charAt(1) == 'x') {
// hex encoded unicode
cp = Integer.parseInt(e.substring(2), 16);
} else {
// decimal encoded unicode
cp = Integer.parseInt(e.substring(1));
}
return new String(new int[] {cp},0,1);
}
Character knownEntity = entity.get(e);
if(knownEntity==null) {
// we don't know the entity so keep it encoded
return '&' + e + ';';
}
return knownEntity.toString();
}
/**
* Returns the next XML meta token. This is used for skipping over <!...>
* and <?...?> structures.
*
* @return Syntax characters (<code>< > / = ! ?</code>) are returned as
* Character, and strings and names are returned as Boolean. We don't care
* what the values actually are.
@ -253,6 +258,7 @@ public class XMLTokener extends JSONTokener {
* brackets. It may be one of these characters: <code>/ > = ! ?</code> or it
* may be a string wrapped in single quotes or double quotes, or it may be a
* name.
*
* @return a String or a Character.
* @throws JSONException If the XML is not well formed.
*/
@ -335,6 +341,7 @@ public class XMLTokener extends JSONTokener {
/**
* Skip characters until past the requested string.
* If it is not found, we are left at the end of the source with a result of false.
*
* @param to A string to skip past.
*/
// The Android implementation of JSONTokener has a public method of public void skipPast(String to)

View File

@ -1,10 +1,10 @@
package ch.m4th1eu.richpresence;
import ch.m4th1eu.json.JSONArray;
import ch.m4th1eu.json.JSONObject;
import ch.m4th1eu.richpresence.events.AdvancedStatusEvent;
import ch.m4th1eu.richpresence.events.EventPresence;
import ch.m4th1eu.richpresence.proxy.CommonProxy;
import net.minecraft.client.Minecraft;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
@ -29,8 +29,7 @@ public class Main {
/**
* Variables pour la config
*/
public static String applicationId, largeimage, largeimagetext, serveurIP;
public static boolean advancedstatus;
public static String applicationId, largeimage, largeimagetext;
public static Logger logger;
@ -38,18 +37,17 @@ public class Main {
public Main() {
if (advancedstatus) {
MinecraftForge.EVENT_BUS.register(new AdvancedStatusEvent());
}
}
@EventHandler
public void preInit(FMLPreInitializationEvent event) {
logger = event.getModLog();
proxy.preInit(event.getSuggestedConfigurationFile());
//Configuration
//Configuration
event.getModConfigurationDirectory().mkdir();
File config_file = new File(event.getModConfigurationDirectory(), "\\" + Main.MODID + ".json");
if (!config_file.exists()) {
@ -66,29 +64,40 @@ public class Main {
try {
PrintWriter writer = new PrintWriter(config_file, "UTF-8");
writer.println("{\n" +
" \"application-settings\": [\n" +
" {\n" +
" \"_comment\": \"Variables disponibles :\",\n" +
" \"_comment2\": \"%player-name% - Nom du joueur.\",\n" +
" \"_comment3\": \"%server-connected-player% - Nombre de joueur connecté au serveur.\",\n" +
" \"_comment4\": \"%server-max-slot% - Nombre de slots du serveur\",\n" +
" \"server-ip\": \"mc.hypixel.net\",\n" +
" \"server-port\": \"25565\",\n" +
" \"application-settings\": {\n" +
" \"applicationID\": \"601875975533232158\",\n" +
" \"large-image-name\": \"discord_logo\",\n" +
" \"large-image-text\": \"En train de tester ce mod !\"\n" +
" }\n" +
" ],\n" +
" \"advanced-status\": true,\n" +
" \"advanced-status-custom\": [\n" +
" {\n" +
" },\n" +
" \"advanced-status-custom\": {\n" +
" \"onJoinServer\": {\n" +
" \"enable\": true,\n" +
" \"message\": \"En jeu.\"\n" +
" },\n" +
" \"onQuitServer\": {\n" +
" \"enable\": true,\n" +
" \"message\": \"Dans le menu principal.\"\n" +
" },\n" +
" \"inPauseMenu\": {\n" +
" \"message\": \"Dans le menu pause\"\n" +
" \"enable\": true,\n" +
" \"message\": \"Dans le menu pause.\"\n" +
" },\n" +
" \"inMainMenu\": {\n" +
" \"enable\": true,\n" +
" \"message\": \"Dans le menu principal.\"\n" +
" },\n" +
" \"inInventory\": {\n" +
" \"enable\": false,\n" +
" \"message\": \"Dans l'inventaire.\"\n" +
" }\n" +
" }\n" +
" ]\n" +
"}\n" +
"\n");
"}");
writer.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
@ -102,23 +111,24 @@ public class Main {
applicationId = config.getJSONObject("application-settings").getString("applicationID");
largeimage = config.getJSONObject("application-settings").getString("large-image-name");
largeimagetext = config.getJSONObject("application-settings").getString("large-image-text");
largeimagetext = Utils.replaceArgsString(config.getJSONObject("application-settings").getString("large-image-text"));
advancedstatus = config.getBoolean("advanced-status");
}
@EventHandler
public void init(FMLInitializationEvent event) {
JSONObject config = new JSONObject(Utils.readFileToString(new File(Minecraft.getMinecraft().mcDataDir, "\\config\\" + Main.MODID + ".json")));
proxy.init();
rpcClient = new EventPresence();
proxy.rpcinit();
if (advancedstatus) {
proxy.rpcupdate("Dans le menu.", null);
if (config.getJSONObject("advanced-status-custom").getJSONObject("inMainMenu").getBoolean("enable")) {
proxy.rpcupdate(config.getJSONObject("advanced-status-custom").getJSONObject("inMainMenu").getString("message"), null, false);
} else {
proxy.rpcupdate("", null);
proxy.rpcupdate("", null, false);
}
}

View File

@ -1,8 +1,13 @@
package ch.m4th1eu.richpresence;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import ch.m4th1eu.json.JSONObject;
import net.minecraft.client.Minecraft;
import net.minecraft.network.INetHandler;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;
public class Utils {
@ -27,4 +32,91 @@ public class Utils {
return "ERROR";
}
}
/**
* @author Nathanael
*/
public static String readTextFromURL(String url) throws IOException {
URL urlObject;
URLConnection uc;
StringBuilder parsedContentFromUrl = new StringBuilder();
urlObject = new URL(url);
uc = urlObject.openConnection();
uc.connect();
uc = urlObject.openConnection();
uc.addRequestProperty("User-Agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
uc.getInputStream();
InputStream is = uc.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
int ch;
while ((ch = in.read()) != -1) {
parsedContentFromUrl.append((char) ch);
}
return parsedContentFromUrl.toString();
}
/**
* @author M4TH1EU_
*/
public static String replaceArgsString(String variable) {
File config_file = new File(Minecraft.getMinecraft().mcDataDir, "\\config\\" + Main.MODID + ".json");
JSONObject config = new JSONObject(Utils.readFileToString(config_file));
String serverip = config.getString("server-ip");
String serverport = config.getString("server-port");
try {
variable = variable.replaceAll("%player-name%", Minecraft.getMinecraft().getSession().getUsername());
variable = variable.replaceAll("%server-connected-player%", readTextFromURL("https://minecraft-api.com/api/ping/playeronline.php?ip=" + serverip + "&port=" + serverport));
variable = variable.replaceAll("%server-max-slot%", readTextFromURL("https://minecraft-api.com/api/ping/maxplayer.php?ip=" + serverip + "&port=" + serverport));
} catch (Exception e) {
}
return variable;
}
public static void updateStatus(int id) {
Thread t = new Thread(() -> {
JSONObject config = new JSONObject(Utils.readFileToString(new File(Minecraft.getMinecraft().mcDataDir, "\\config\\" + Main.MODID + ".json")));
JSONObject onQuitServer = config.getJSONObject("advanced-status-custom").getJSONObject("onQuitServer");
JSONObject onJoinServer = config.getJSONObject("advanced-status-custom").getJSONObject("onJoinServer");
JSONObject inPauseMenu = config.getJSONObject("advanced-status-custom").getJSONObject("inPauseMenu");
JSONObject inMainMenu = config.getJSONObject("advanced-status-custom").getJSONObject("inMainMenu");
JSONObject inInventory = config.getJSONObject("advanced-status-custom").getJSONObject("inInventory");
switch (id) {
case 0:
Main.proxy.rpcupdate(Utils.replaceArgsString(config.getJSONObject("advanced-status-custom").getJSONObject("inMainMenu").getString("message")), null, false);
break;
case 1:
Main.proxy.rpcupdate(Utils.replaceArgsString(onJoinServer.getString("message")), null, false);
break;
case 2:
Main.proxy.rpcupdate(Utils.replaceArgsString(onQuitServer.getString("message")), null, false);
break;
case 3:
Main.proxy.rpcupdate(Utils.replaceArgsString(inPauseMenu.getString("message")), null, false);
break;
case 4:
Main.proxy.rpcupdate(Utils.replaceArgsString(inMainMenu.getString("message")), null, false);
break;
case 5:
Main.proxy.rpcupdate(Utils.replaceArgsString(inInventory.getString("message")), null, false);
break;
case 6:
Main.proxy.rpcupdate(Utils.replaceArgsString(config.getJSONObject("advanced-status-custom").getJSONObject("onJoinServer").getString("message")), null, false);
break;
default:
break;
}
});
t.start();
}
}

View File

@ -5,7 +5,9 @@ import ch.m4th1eu.richpresence.Main;
import ch.m4th1eu.richpresence.Utils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiIngameMenu;
import net.minecraft.server.MinecraftServer;
import net.minecraft.client.gui.GuiMainMenu;
import net.minecraft.client.gui.inventory.GuiInventory;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraftforge.client.event.GuiOpenEvent;
import net.minecraftforge.fml.client.FMLClientHandler;
import net.minecraftforge.fml.common.Mod;
@ -24,28 +26,52 @@ public class AdvancedStatusEvent {
JSONObject config = new JSONObject(Utils.readFileToString(config_file));
@SubscribeEvent
public void onServerJoin(FMLNetworkEvent.ClientConnectedToServerEvent event) {
if (Main.advancedstatus) {
Main.proxy.rpcupdate(config.getJSONArray("advanced-status-custom").getJSONObject(0).getString("message"), null);
public void onJoinServer(FMLNetworkEvent.ClientConnectedToServerEvent event) {
JSONObject onJoinServer = config.getJSONObject("advanced-status-custom").getJSONObject("onJoinServer");
if (onJoinServer.getBoolean("enable")) {
Utils.updateStatus(1);
}
}
@SubscribeEvent
public void onQuitServer(FMLNetworkEvent.ClientDisconnectionFromServerEvent event) {
if (Main.advancedstatus) {
JSONObject onQuitServer = config.getJSONObject("advanced-status-custom").getJSONObject("onQuitServer");
Main.proxy.rpcupdate(config.getJSONArray("advanced-status-custom").getJSONObject(1).getString("message"), null);
if (onQuitServer.getBoolean("enable")) {
Utils.updateStatus(1);
}
}
@SubscribeEvent
public void onGuiOpen(GuiOpenEvent event) {
if (Main.advancedstatus) {
JSONObject inPauseMenu = config.getJSONObject("advanced-status-custom").getJSONObject("inPauseMenu");
JSONObject inMainMenu = config.getJSONObject("advanced-status-custom").getJSONObject("inMainMenu");
JSONObject inInventory = config.getJSONObject("advanced-status-custom").getJSONObject("inInventory");
if (inPauseMenu.getBoolean("enable")) {
if (event.getGui() instanceof GuiIngameMenu) {
Main.proxy.rpcupdate(config.getJSONArray("advanced-status-custom").getJSONObject(2).getString("message"), null);
}
Utils.updateStatus(3);
}
}
if (inMainMenu.getBoolean("enable")) {
if (event.getGui() instanceof GuiMainMenu) {
Utils.updateStatus(4);
}
}
if (inInventory.getBoolean("enable")) {
if (event.getGui() instanceof GuiInventory) {
Utils.updateStatus(5);
}
}
if (event.getGui() == null) {
if (config.getJSONObject("advanced-status-custom").getJSONObject("onJoinServer").getBoolean("enable")) {
Utils.updateStatus(6);
}
}
}
}

View File

@ -12,17 +12,13 @@ public class EventPresence {
private static Thread callbackRunner;
public synchronized static final void init() {
public synchronized static void init() {
DiscordEventHandlers handlers = new DiscordEventHandlers();
DiscordRPC.discordInitialize(Main.applicationId, handlers, true, null);
if (EventPresence.callbackRunner == null) {
(EventPresence.callbackRunner = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
DiscordRPC.discordRunCallbacks();
try {
Thread.sleep(100L);
} catch (InterruptedException ex) {
}
}
return;
}, "RPC-Callback-Handler")).start();
@ -30,14 +26,16 @@ public class EventPresence {
Main.logger.info("EventPresence has been started.");
}
public static final void updatePresence(String details, String action) {
public synchronized static void updatePresence(String details, String action, Boolean changeTime) {
DiscordRichPresence presence = new DiscordRichPresence();
presence.largeImageKey = Main.largeimage;
presence.largeImageText = Main.largeimagetext;
if (details != null) {
presence.details = details;
if (changeTime) {
presence.startTimestamp = System.currentTimeMillis() / 1000L;
}
} else if (action != null) {
presence.state = action;
}

View File

@ -28,7 +28,7 @@ public class ClientProxy extends CommonProxy {
}
@Override
public void rpcupdate(String details, String action) {
EventPresence.updatePresence(details, action);
public void rpcupdate(String details, String action, Boolean changeTime) {
EventPresence.updatePresence(details, action, changeTime);
}
}

View File

@ -19,7 +19,7 @@ public class CommonProxy {
public void rpcinit() {
}
public void rpcupdate(String details, String action) {
public void rpcupdate(String details, String action, Boolean changeTime) {
}
}