package com.droidworks.parsers.twitter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Locale;
import java.util.TimeZone;
import org.xml.sax.ContentHandler;
import android.sax.Element;
import android.sax.EndElementListener;
import android.sax.EndTextElementListener;
import android.sax.RootElement;
import com.droidworks.xml.Parser;
public class TwitterFeedParser extends Parser<Tweet> {
private static final String DEFAULT_NAMESPACE = "";
private String mTweetContent;
private long mTweetTime;
private final TwitterFeed mFeed = new TwitterFeed();
private RootElement mRootElement;
public TwitterFeedParser() {
super(DEFAULT_NAMESPACE);
}
@Override
protected ContentHandler getContentHandler() {
return mRootElement.getContentHandler();
}
@Override
protected void setupNodes() {
final SimpleDateFormat sdf = new SimpleDateFormat(
"EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
mRootElement = new RootElement(DEFAULT_NAMESPACE, "statuses");
Element tweetNode = mRootElement.getChild(DEFAULT_NAMESPACE, "status");
Element textNode = tweetNode.getChild(DEFAULT_NAMESPACE, "text");
Element timeNode = tweetNode.getChild(DEFAULT_NAMESPACE, "created_at");
textNode.setEndTextElementListener(new EndTextElementListener() {
public void end(String body) {
mTweetContent = body;
}
});
timeNode.setEndTextElementListener(new EndTextElementListener() {
public void end(String body) {
try {
mTweetTime = sdf.parse(body).getTime();
}
catch (ParseException e) {
mTweetTime = 0;
}
}
});
tweetNode.setEndElementListener(new EndElementListener() {
public void end() {
mFeed.addTweet(new Tweet(mTweetTime, mTweetContent));
}
});
}
public TwitterFeed getFeed() {
return mFeed;
}
}