package se.alexanderblom.delicious.model;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
import android.text.TextUtils;
import android.util.JsonReader;
public class TagsParser {
private JsonReader reader;
public TagsParser(Reader in) {
reader = new JsonReader(in);
}
public List<Tag> getTags() throws IOException {
try {
ArrayList<Tag> tags = new ArrayList<Tag>();
reader.beginObject();
waitFor("tags");
reader.beginArray();
while (reader.hasNext()) {
readTag(tags);
}
reader.endArray();
reader.endObject();
return tags;
} finally {
reader.close();
}
}
private void readTag(List<Tag> tags) throws IOException {
String tagName = null;
int tagCount = 0;
reader.beginObject();
waitFor("tag");
reader.beginObject();
while (reader.hasNext()) {
String name = reader.nextName();
if (name.equals("tag")) {
tagName = reader.nextString();
} else if (name.equals("count")) {
tagCount = reader.nextInt();
} else {
reader.skipValue();
}
}
reader.endObject();
reader.endObject();
// Delicious passes empty tags for some reason, ignore those
if (!TextUtils.isEmpty(tagName)) {
tags.add(new Tag(tagName, tagCount));
}
}
private void waitFor(String name) throws IOException {
while (reader.hasNext()) {
if (name.equals(reader.nextName())) {
return;
} else {
reader.skipValue();
}
}
throw new IOException("Could not find '" + name + "'");
}
}