package foundation.json; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set; import org.json.JSONArray; import org.json.JSONObject; import foundation.util.CaseInsensitiveSet; public class JArrayReader extends JSONReader { private List items; public JArrayReader() { items = new ArrayList(); type = JType.Array; } public JArrayReader(String content) { this(); parse(content); } public JArrayReader(String name, JSONArray array) { this(); this.name = name; parse(array); } @Override public boolean isEmpty() { return items.isEmpty(); } @Override public boolean hasChildren() { return !items.isEmpty(); } @Override public boolean has(String name) { return false; } @Override public JType getType(String name) { return JType.Empty; } @Override public Object getValue() { return null; } @Override public Object getValue(String name) { return null; } @Override public Object getValue(String name, Object defaultValue) { return null; } public String getRawString(String name) { return null; } @Override public String getString(String name) { return null; } @Override public String getString(String name, String defaultValue) { return null; } @Override public String getDecodeString(String name) { return null; } @Override public String getDecodeString(String name, String defaultValue) { return null; } @Override public Set getStringSet() { Set set = new CaseInsensitiveSet(); for (JSONReader reader: items) { String value = reader.getDecodeString(null); if (value == null) { continue; } set.add(value); } return set; } @Override public List getStringList() { List list = new ArrayList(); for (JSONReader reader: items) { String value = reader.getString(null); if (value == null) { continue; } list.add(value); } return list; } @Override public Set getStringSet(String name) { return null; } @Override public List getStringList(String name) { return null; } @Override public Integer getInteger(Integer defaultValue) { return null; } @Override public Integer getInteger(String name, Integer defaultValue) { return null; } @Override public boolean getBoolean(boolean defaultValue) { return false; } @Override public boolean getBoolean(String name, boolean defaultValue) { return false; } @Override public T getReader(String name, JType type) { return null; } protected void putReader(String name, JSONReader reader) { items.add(reader); } @Override protected void putValue(String name, Object value) { return; } @Override protected void putValue(Object value) { return; } @Override public Iterator iterator() { return items.iterator(); } private void parse(String content) { if (content == null) { return; } JSONArray jsonArray = new JSONArray(content); parse(jsonArray); } private void parse(JSONArray content) { items.clear(); if (content == null) { return; } int max = content.length(); for (int i = 0; i < max; i++) { String name = this.name + "[" + i + "]"; Object value = content.get(i); if (value instanceof JSONObject) { JObjectReader item = new JObjectReader(name, (JSONObject)value); items.add(item); } else if (value instanceof JSONArray) { JArrayReader item = new JArrayReader(name, (JSONArray)value); items.add(item); } else { JValueReader item = new JValueReader(name, value); items.add(item); } } } @Override public void writeJSON(IJSONWriter writer) { writer.beginArray(name); for(JSONReader jsonReader: items) { jsonReader.writeJSON(writer); } writer.endArray(); } }