package com.tuit.ar.models; import java.util.ArrayList; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import com.tuit.ar.api.TwitterAccount; import com.tuit.ar.api.TwitterAccountRequestsObserver; import com.tuit.ar.api.TwitterRequest; import com.tuit.ar.api.request.Options; import com.tuit.ar.api.request.UniqueRequestException; import com.tuit.ar.models.timeline.TimelineObserver; abstract public class Timeline implements TwitterAccountRequestsObserver { protected long newestTweet = 0; protected ArrayList<TimelineObserver> observers = new ArrayList<TimelineObserver>(); protected static int MAX_SIZE = 100; protected final TwitterAccount account; protected Timeline(TwitterAccount account) { this.account = account; account.addRequestObserver(this); } abstract protected Options getTimeline(); public void refresh() { ArrayList <NameValuePair> nvps = new ArrayList <NameValuePair>(); if (newestTweet > 0) nvps.add(new BasicNameValuePair("since_id", String.valueOf(newestTweet))); nvps.add(new BasicNameValuePair("count", "25")); try { account.requestUrl(this.getTimeline(), nvps, TwitterRequest.METHOD_GET); } catch (UniqueRequestException e) { // I wanna ignore this exceptions } catch (Exception e) { failedToUpdate(e.getLocalizedMessage()); } } public void requestHasStarted(TwitterRequest request) { if (!request.getUrl().equals(this.getTimeline())) return; startedUpdate(); } abstract public void requestHasFinished(TwitterRequest request); protected void startedUpdate() { for (TimelineObserver observer : observers) { observer.timelineRequestStarted(this); } } protected void failedToUpdate(String message) { for (TimelineObserver observer : observers) { observer.timelineUpdateHasFailed(this, message); } } protected void finishedUpdate() { for (TimelineObserver observer : observers) { observer.timelineRequestFinished(this); } } protected void timelineChanged() { for (TimelineObserver observer : observers) { observer.timelineHasChanged(this); } } public void addObserver(TimelineObserver observer) { this.observers.add(observer); } public void removeObserver(TimelineObserver observer) { this.observers.remove(observer); } }