org.mapfish.print.wrapper.json.PJsonObject Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of print-lib Show documentation
Show all versions of print-lib Show documentation
Library for generating PDFs and images from online webmapping services
package org.mapfish.print.wrapper.json;
import org.json.JSONArray;
import org.json.JSONObject;
import org.mapfish.print.wrapper.ObjectMissingException;
import org.mapfish.print.wrapper.PAbstractObject;
import org.mapfish.print.wrapper.PArray;
import org.mapfish.print.wrapper.PElement;
import org.mapfish.print.wrapper.PObject;
import java.util.Iterator;
/**
* Wrapper around the {@link org.json.JSONObject} class to have a better error management.
*/
public class PJsonObject extends PAbstractObject {
private final JSONObject obj;
/**
* Constructor.
*
* @param obj the internal json element
* @param contextName the field name of this element in the parent.
*/
public PJsonObject(final JSONObject obj, final String contextName) {
this(null, obj, contextName);
}
/**
* Constructor.
*
* @param parent the parent element
* @param obj the internal json element
* @param contextName the field name of this element in the parent.
*/
public PJsonObject(final PElement parent, final JSONObject obj, final String contextName) {
super(parent, contextName);
this.obj = obj;
}
@Override
public final Object opt(final String key) {
return this.obj.opt(key);
}
/**
* Get a property as a string or null.
*
* @param key the property name
*/
@Override
public final String optString(final String key) {
return this.obj.optString(key, null);
}
/**
* Get a property as a int or null.
*
* @param key the property name
*/
@Override
public final Integer optInt(final String key) {
final int result = this.obj.optInt(key, Integer.MIN_VALUE);
return result == Integer.MIN_VALUE ? null : result;
}
@Override
public final Long optLong(final String key) {
final long result = this.obj.optLong(key, Long.MIN_VALUE);
return result == Long.MIN_VALUE ? null : result;
}
/**
* Get a property as a double or null.
*
* @param key the property name
*/
@Override
public final Double optDouble(final String key) {
double result = this.obj.optDouble(key, Double.NaN);
if (Double.isNaN(result)) {
return null;
}
return result;
}
/**
* Get a property as a float or null.
*
* @param key the property name
*/
@Override
public final Float optFloat(final String key) {
double result = this.obj.optDouble(key, Double.NaN);
if (Double.isNaN(result)) {
return null;
}
return (float) result;
}
/**
* Get a property as a boolean or null.
*
* @param key the property name
*/
@Override
public final Boolean optBool(final String key) {
if (this.obj.optString(key, null) == null) {
return null;
} else {
return this.obj.optBoolean(key);
}
}
/**
* Get a property as a object or null.
*
* @param key the property name
*/
@Override
public final PObject optObject(final String key) {
return optJSONObject(key);
}
/**
* Get a property as a array or null.
*
* @param key the property name
*/
@Override
public final PArray optArray(final String key) {
return optJSONArray(key);
}
@Override
public final boolean isArray(final String key) {
return getInternalObj().opt(key) instanceof JSONArray;
}
/**
* Get a property as a json object or null.
*
* @param key the property name
*/
public final PJsonObject optJSONObject(final String key) {
final JSONObject val = this.obj.optJSONObject(key);
return val != null ? new PJsonObject(this, val, key) : null;
}
/**
* Get a property as a json object or throw exception.
*
* @param key the property name
*/
public final PJsonObject getJSONObject(final String key) {
final JSONObject val = this.obj.optJSONObject(key);
if (val == null) {
throw new ObjectMissingException(this, key);
}
return new PJsonObject(this, val, key);
}
/**
* Get a property as a json array or throw exception.
*
* @param key the property name
*/
public final PJsonArray getJSONArray(final String key) {
final JSONArray val = this.obj.optJSONArray(key);
if (val == null) {
throw new ObjectMissingException(this, key);
}
return new PJsonArray(this, val, key);
}
/**
* Get a property as a json array or null.
*
* @param key the property name
*/
public final PJsonArray optJSONArray(final String key) {
final JSONArray val = this.obj.optJSONArray(key);
if (val == null) {
return null;
}
return new PJsonArray(this, val, key);
}
/**
* Get a property as a json array or default.
*
* @param key the property name
* @param defaultValue default
*/
public final PJsonArray optJSONArray(final String key, final PJsonArray defaultValue) {
PJsonArray result = optJSONArray(key);
return result != null ? result : defaultValue;
}
/**
* Get an iterator of all keys in this objects.
*
* @return The keys iterator
*/
@Override
@SuppressWarnings("unchecked")
public final Iterator keys() {
return this.obj.keys();
}
/**
* Get the number of properties in this object.
*/
@Override
public final int size() {
return this.obj.length();
}
// CHECKSTYLE:OFF
// Don't run checkstyle on generated methods
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((obj == null) ? 0 : obj.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
PJsonObject other = (PJsonObject) obj;
if (this.obj == null) {
if (other.obj != null) {
return false;
}
} else if (!this.obj.equals(other.obj)) {
return false;
}
return true;
}
// CHECKSTYLE:ON
/**
* Get the internal json object.
*
* @return The internal object
*/
public final JSONObject getInternalObj() {
return this.obj;
}
/**
* Check if the object has a property with the key.
*
* @param key key to check for.
*/
@Override
public final boolean has(final String key) {
String result = this.obj.optString(key, null);
return result != null;
}
@Override
public final String toString() {
return getCurrentPath() + ":\n\t" + this.obj;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy