package com.talk.demo.parser; import java.util.Iterator; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.talk.demo.types.Group; import com.talk.demo.types.TalkType; public class GroupParser extends AbstractResParser<Group> { private ResParser<? extends TalkType> mSubParser; public GroupParser(ResParser<? extends TalkType> subParser) { mSubParser = subParser; } public Group<TalkType> parse(JSONObject json) throws JSONException { Group<TalkType> group = new Group<TalkType>(); Iterator<String> it = (Iterator<String>)json.keys(); while(it.hasNext()) { String key = it.next(); if(key.equals("type")) { group.setType(json.getString(key)); } else { Object obj = json.get(key); if(obj instanceof JSONArray) { parse(group, (JSONArray)obj); } else { throw new JSONException("Could not parse data."); } } } return group; } @Override public Group parse(JSONArray array) throws JSONException { Group<TalkType> group = new Group<TalkType>(); parse(group, array); return group; } private void parse(Group group, JSONArray array) throws JSONException { for (int i=0, m = array.length(); i<m; i++) { Object element = array.get(i); TalkType item = null; if(element instanceof JSONArray) { item = mSubParser.parse((JSONArray)element); } else { item = mSubParser.parse((JSONObject)element); } group.add(item); } } }