package edu.umd.rhsmith.diads.meater.modules.tweater.streaming;
import java.util.LinkedList;
import java.util.List;
import edu.umd.rhsmith.diads.meater.modules.tweater.queries.QueryItem;
import edu.umd.rhsmith.diads.meater.util.Util;
import twitter4j.FilterQuery;
import twitter4j.GeoLocation;
public class FilterQueryBuilder {
private List<String> tracks;
private LinkedList<Long> follows;
private LinkedList<double[]> locations;
public FilterQueryBuilder() {
this.tracks = new LinkedList<String>();
this.follows = new LinkedList<Long>();
this.locations = new LinkedList<double[]>();
}
public FilterQueryBuilder(Iterable<QueryItem> queryItems) {
this();
this.addAll(queryItems);
}
public void addAll(Iterable<QueryItem> queryItems) {
for (QueryItem q : queryItems) {
q.addToFilterQuery(this);
}
}
public void addTrack(String query) {
tracks.add(query);
}
public void addFollow(long query) {
follows.add(query);
}
public void addLocation(GeoLocation pointSW, GeoLocation pointNE) {
locations.add(new double[] { pointSW.getLongitude(),
pointSW.getLatitude() });
locations.add(new double[] { pointNE.getLongitude(),
pointNE.getLatitude() });
}
public FilterQuery getFilterQuery() {
String[] trackA = new String[tracks.size()];
long[] followA = new long[follows.size()];
double[][] locationsA = new double[locations.size()][];
FilterQuery fq = new FilterQuery();
fq.track(trackA);
fq.follow(followA);
fq.locations(locationsA);
return fq;
}
/*
* --------------------------------
* Messages
* --------------------------------
*/
/*
* (non-Javadoc)
*
* @see java.lang.Thread#toString()
*/
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("{Track&Phrase=");
sb.append("[");
sb.append(Util.joinStrings(tracks, ", "));
sb.append("]");
sb.append(", Follow=");
sb.append("[");
sb.append(Util.joinStrings(follows, ", "));
sb.append("]");
sb.append(", Location=");
sb.append("[");
boolean first = true;
for (double[] point : locations) {
if (!first) {
sb.append(", ");
}
sb.append('(');
sb.append(point[0]);
sb.append(',');
sb.append(point[1]);
sb.append(')');
first = false;
}
sb.append("]");
sb.append("}");
return sb.toString();
}
}