package esl.cuenet.source.accessors; import com.hp.hpl.jena.ontology.OntModel; import com.mongodb.BasicDBList; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; import esl.cuenet.query.IResultSet; import esl.cuenet.query.drivers.mongodb.MongoDB; import esl.cuenet.source.AccesorInitializationException; import esl.cuenet.source.Attribute; import esl.cuenet.source.IAccessor; import esl.cuenet.source.SourceQueryException; import esl.datastructures.Location; import esl.datastructures.TimeInterval; import org.apache.log4j.Logger; public class FacebookEventAccessor extends MongoDB implements IAccessor { private Logger logger = Logger.getLogger(FacebookEventAccessor.class); private Attribute[] attributes = null; private boolean[] setFlags = new boolean[1]; private String eventAuthorName = null; private long startTime = -1; private long endTime = -1; private int errorMargin = 7200; // 2 hours private OntModel model = null; private TimeInterval timeInterval = null; public FacebookEventAccessor(OntModel model) { super(AccessorConstants.DBNAME); this.model = model; } public IResultSet query() { DBReader cursor = startReader("fb_events"); if (timeInterval != null) { startTime = timeInterval.getStart()/1000; endTime = timeInterval.getEnd()/1000; } cursor.query(new BasicDBObject()); BasicDBList result = new BasicDBList(); while (cursor.hasNext()) { DBObject object = cursor.next(); if ( !object.containsField("start_time") ) continue; long rStartTime = Long.parseLong(((BasicDBObject)object).getString("start_time")); long rEndTime = Long.parseLong(((BasicDBObject)object).getString("end_time")); if (rStartTime < startTime && (rEndTime+errorMargin) > endTime ) { logger.info("Gott itttttttttt! " + object.get("name")); result.add(object); } //else logger.info("IGNORING: " + ((BasicDBObject) object).getString("name") + " " + (rStartTime - startTime) + " " + (rEndTime - endTime)); } logger.info("Found " + result.size() + " facebook entries."); return null; } @Override public void setAttributeNames(Attribute[] attributes) throws AccesorInitializationException { this.attributes = attributes; } @Override public void start() { for (int i=0; i<setFlags.length; i++) setFlags[i] = false; /* re-init for next query */ timeInterval = null; startTime = -1; endTime = -1; } @Override public void associateTimeInterval(Attribute attribute, TimeInterval timeInterval) throws AccesorInitializationException { if (attribute.compareTo(attributes[2])==0) { this.timeInterval = timeInterval; } else throw new AccesorInitializationException("TimeInterval value being initialized for wrong attribute " + FacebookUserAccessor.class.getName()); } @Override public void associateLocation(Attribute attribute, Location timeInterval) throws AccesorInitializationException { throw new AccesorInitializationException("Incorrect Assignment: No location attributes in " + YahooPlaceFinderAPI.class.getName()); } @Override public void associateLong(Attribute attribute, long value) throws AccesorInitializationException { throw new AccesorInitializationException("Long value being initialized for wrong attribute " + FacebookUserAccessor.class.getName()); } @Override public void associateString(Attribute attribute, String value) throws AccesorInitializationException { if (attribute.compareTo(attributes[1]) == 0) eventAuthorName = value; else throw new AccesorInitializationException("String value being initialized for wrong attribute " + FacebookUserAccessor.class.getName()); } @Override public void associateDouble(Attribute attribute, double value) throws AccesorInitializationException { throw new AccesorInitializationException("Double value being initialized for wrong attribute " + FacebookUserAccessor.class.getName()); } @Override public IResultSet executeQuery() throws SourceQueryException { return query(); } }