package foundation.json; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.json.JSONArray; import org.json.JSONObject; import foundation.util.MapList; import foundation.util.Util; public class JObjectReader extends JSONReader implements IJSONProvider { protected MapList items; public JObjectReader() { items = new MapList(); type = JType.Object; } public JObjectReader(String content) { this(); parse(content); } public JObjectReader(String name, JSONObject content) { this(); this.name = name; parse(content); } @Override public boolean isEmpty() { return items.isEmpty(); } @Override public boolean hasChildren() { return !items.isEmpty(); } @Override public boolean has(String name) { return items.contains(name); } @Override public JType getType(String name) { JSONReader item = items.get(name); if (item == null) { return JType.Empty; } return item.getType(); } @Override public Object getValue() { return null; } @Override public Object getValue(String name) { return getValue(name, null); } @Override public Object getValue(String name, Object defaultValue) { JSONReader item = items.get(name); if (item == null) { return null; } return item.getValue(name, defaultValue); } public String getRawString(String name) { JSONReader item = items.get(name); if (item == null) { return null; } return item.getRawString(name); } @Override public String getString(String name) { return getDecodeString(name, null); } @Override public String getString(String name, String defaultValue) { JSONReader item = items.get(name); if (item == null) { return defaultValue; } return item.getDecodeString(name, defaultValue); } @Override public String getDecodeString(String name) { return getDecodeString(name, null); } @Override public String getDecodeString(String name, String defaultValue) { JSONReader item = items.get(name); if (item == null) { return defaultValue; } return item.getDecodeString(name, defaultValue); } @Override public Set getStringSet() { return null; } @Override public List getStringList() { return null; } @Override public Set getStringSet(String name) { JSONReader item = items.get(name); if (item == null) { return null; } return item.getStringSet(); } @Override public List getStringList(String name) { JSONReader item = items.get(name); if (item == null) { return null; } return item.getStringList(); } @Override public Integer getInteger(Integer defaultValue) { return defaultValue; } @Override public Integer getInteger(String name, Integer defaultValue) { JSONReader item = items.get(name); if (item == null) { return defaultValue; } return item.getInteger(defaultValue); } @Override public boolean getBoolean(boolean defaultValue) { return false; } @Override public boolean getBoolean(String name, boolean defaultValue) { JSONReader item = items.get(name); if (item == null) { return defaultValue; } return item.getBoolean(defaultValue); } @Override @SuppressWarnings("unchecked") public T getReader(String name, JType type) { JSONReader item = items.get(name); if (item == null) { return null; } if (type != item.getType()) { return null; } return (T)item; } protected void putReader(String name, JSONReader reader) { items.add(name, reader); } @Override protected void putValue(String name, Object value) { JSONReader reader = items.get(name); if (reader == null) { reader = new JValueReader(name); items.add(name, reader); } reader.putValue(value); } @Override protected void putValue(Object value) { return; } @Override public Iterator iterator() { return items.iterator(); } private void parse(String content) { if (Util.isEmpty(content)) { return; } JSONObject jsonObject = new JSONObject(content); parse(jsonObject); } private void parse(JSONObject content) { items.clear(); if (content == null) { return; } Iterator keys = content.keys(); while (keys.hasNext()) { String key = keys.next(); Object value = content.get(key); if (value instanceof JSONObject) { JObjectReader item = new JObjectReader(key, (JSONObject)value); items.add(key, item); } else if (value instanceof JSONArray) { JArrayReader item = new JArrayReader(key, (JSONArray)value); items.add(key, item); } else { JValueReader item = new JValueReader(key, value); items.add(key, item); } } } public MapList getItems() { return items; } @Override public void writeJSON(IJSONWriter writer) { writer.beginObject(); Map map = items.getItemMap(); if(map == null) { return ; } Collection values = map.values(); for (JSONReader value: values) { value.writeJSON(writer); } writer.endObject(); } }