package com.github.pgelinas.jackson.javax.json;
import java.util.*;
import javax.json.*;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.node.*;
/**
* JsonObject extends the Map interface, so let's have some fun...
*/
public class JacksonObject extends AbstractMap<String, JsonValue> implements JsonObject, JacksonValue<ObjectNode> {
private final NodeFactory _nodeFactory;
private final ObjectNode _delegate;
private Set<Entry<String, JsonValue>> _entries;
public JacksonObject(ObjectNode delegate, NodeFactory nodeFactory) {
_delegate = delegate;
_nodeFactory = nodeFactory;
}
@Override
public Set<Map.Entry<String, JsonValue>> entrySet() {
if (_entries == null) {
_entries = new HashSet<Map.Entry<String, JsonValue>>();
for (Iterator<Entry<String, JsonNode>> iterator = _delegate.fields(); iterator.hasNext();) {
_entries.add(new JacksonEntry(iterator.next(), _nodeFactory));
}
_entries = Collections.unmodifiableSet(_entries);
}
return _entries;
}
@Override
public JsonArray getJsonArray(String name) {
return (JsonArray) get(name);
}
@Override
public JsonObject getJsonObject(String name) {
return (JsonObject) get(name);
}
@Override
public JsonNumber getJsonNumber(String name) {
return (JsonNumber) get(name);
}
@Override
public JsonString getJsonString(String name) {
return (JsonString) get(name);
}
@Override
public String getString(String name) {
return _delegate.get(name).asText();
}
@Override
public String getString(String name, String defaultValue) {
JsonNode jsonNode = _delegate.get(name);
return (jsonNode == null) ? defaultValue : jsonNode.asText();
}
@Override
public int getInt(String name) {
return _delegate.get(name).asInt();
}
@Override
public int getInt(String name, int defaultValue) {
JsonNode jsonNode = _delegate.get(name);
return (jsonNode == null) ? defaultValue : jsonNode.asInt(defaultValue);
}
@Override
public boolean getBoolean(String name) {
return _delegate.get(name).asBoolean();
}
@Override
public boolean getBoolean(String name, boolean defaultValue) {
JsonNode jsonNode = _delegate.get(name);
return (jsonNode == null) ? defaultValue : jsonNode.asBoolean(defaultValue);
}
@Override
public boolean isNull(String name) {
return _delegate.get(name).isNull();
}
@Override
public ValueType getValueType() {
return JacksonValueUtils.getValueType(this);
}
@Override
public ObjectNode delegate() {
return _delegate;
}
@Override
public String toString() {
return _delegate.toString();
}
}