package edu.sc.seis.sod.source.event; import org.w3c.dom.Element; import edu.iris.Fissures.model.MicroSecondDate; import edu.sc.seis.fissuresUtil.cache.CacheEvent; import edu.sc.seis.fissuresUtil.time.MicroSecondTimeRange; public class BackwardsEventFinder extends EventFinder { public BackwardsEventFinder(Element config) throws Exception { super(config); } public String getDescription() { return "Backwards "+super.getDescription(); } public boolean hasNext() { MicroSecondTimeRange currentQuery = getQueryTime(); MicroSecondDate queryBegin = getEventTimeRange().getBeginTime(); logger.debug("Checking if more queries to the event server are in order. " + "The last query was " + currentQuery + " and we're querying from " + currentQuery.getBeginTime().subtract(increment)); return ! currentQuery.getEndTime().equals(queryBegin); } public CacheEvent[] next() { CacheEvent[] results = super.next(); CacheEvent[] out = new CacheEvent[results.length]; for(int i = 0; i < out.length; i++) { out[i] = results[results.length-i-1]; } return out; } protected boolean caughtUpWithRealtime() { // going backwards so never catch up return false; } protected void updateQueryEdge(MicroSecondTimeRange queryTime) { setQueryEdge(queryTime.getBeginTime()); } /** * @return - the next time to start asking for events */ protected MicroSecondDate getQueryStart() { try { return getQueryEdge(); } catch(edu.sc.seis.fissuresUtil.database.NotFound e) { logger.debug("the query times database didn't have an entry for our server/dns combo, just use the time in the config file"); return getEventTimeRange().getEndTime(); } } /** * @return - the next time range to be queried for events */ protected MicroSecondTimeRange getQueryTime() { MicroSecondDate queryEnd = getQueryStart(); MicroSecondDate queryStart = queryEnd.subtract(increment); if(getEventTimeRange().getBeginTime().after(queryStart)) { queryStart = getEventTimeRange().getBeginTime(); } return new MicroSecondTimeRange(queryStart, queryEnd); } private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(BackwardsEventFinder.class); }