package com.owlike.genson.ext.jsr353;
import javax.json.*;
import java.util.AbstractMap;
import java.util.Map;
import java.util.Set;
class GensonJsonObject extends AbstractMap<String, JsonValue> implements JsonObject {
private final Map<String, JsonValue> values;
GensonJsonObject(Map<String, JsonValue> values) {
this.values = values;
}
@Override
public Set<Entry<String, JsonValue>> entrySet() {
return values.entrySet();
}
@Override
public JsonArray getJsonArray(String name) {
return JsonArray.class.cast(values.get(name));
}
@Override
public JsonObject getJsonObject(String name) {
return JsonObject.class.cast(values.get(name));
}
@Override
public JsonNumber getJsonNumber(String name) {
return JsonNumber.class.cast(values.get(name));
}
@Override
public JsonString getJsonString(String name) {
return JsonString.class.cast(values.get(name));
}
@Override
public String getString(String name) {
return getJsonString(name).getString();
}
@Override
public String getString(String name, String defaultValue) {
if (isNull(name)) return defaultValue;
return getString(name);
}
@Override
public int getInt(String name) {
return getJsonNumber(name).intValue();
}
@Override
public int getInt(String name, int defaultValue) {
if (isNull(name)) return defaultValue;
return getInt(name);
}
@Override
public boolean getBoolean(String name) {
JsonValue value = values.get(name);
if (JsonValue.TRUE.equals(value)) return true;
if (JsonValue.FALSE.equals(value)) return false;
throw new ClassCastException();
}
@Override
public boolean getBoolean(String name, boolean defaultValue) {
if (isNull(name)) return defaultValue;
return getBoolean(name);
}
@Override
public boolean isNull(String name) {
JsonValue value = values.get(name);
return (JsonValue.NULL.equals(value) || value == null);
}
@Override
public ValueType getValueType() {
return ValueType.OBJECT;
}
@Override
public int hashCode() {
return values.hashCode();
}
@Override
public boolean equals(Object o) {
return values.equals(o);
}
@Override
public String toString() {
return JSR353Bundle.toString(this);
}
}