package edu.sc.seis.sod.subsetter.availableData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Element;
import edu.iris.Fissures.IfSeismogramDC.RequestFilter;
import edu.iris.Fissures.model.MicroSecondDate;
import edu.iris.Fissures.network.ChannelImpl;
import edu.sc.seis.fissuresUtil.cache.CacheEvent;
import edu.sc.seis.sod.CookieJar;
import edu.sc.seis.sod.SodElement;
import edu.sc.seis.sod.status.StringTree;
import edu.sc.seis.sod.status.StringTreeLeaf;
public class NoGaps implements AvailableDataSubsetter, SodElement {
public NoGaps(Element config) {}
public StringTree accept(CacheEvent event,
ChannelImpl channel,
RequestFilter[] request,
RequestFilter[] available,
CookieJar cookieJar) {
boolean ok = true;
logger.debug("original length=" + request.length
+ " available legnth=" + available.length);
for(int counter = 0; counter < request.length; counter++) {
ok = false;
MicroSecondDate originalStartDate = new MicroSecondDate(request[counter].start_time);
MicroSecondDate originalEndDate = new MicroSecondDate(request[counter].end_time);
for(int subcounter = 0; subcounter < available.length; subcounter++) {
MicroSecondDate availableStartDate = new MicroSecondDate(available[subcounter].start_time);
MicroSecondDate availableEndDate = new MicroSecondDate(available[subcounter].end_time);
logger.debug(originalStartDate + " " + originalEndDate + " - "
+ availableStartDate + " " + availableEndDate);
if((originalStartDate.after(availableStartDate) || originalStartDate.equals(availableStartDate))
&& (originalEndDate.before(availableEndDate) || originalEndDate.equals(availableEndDate))) {
ok = true;
break;
}
}
if(ok == false) {
logger.debug("NoGaps fail");
return new StringTreeLeaf(this, false);
} // end of if (ok == false)
}
return new StringTreeLeaf(this, true);
}
private static Logger logger = LoggerFactory.getLogger(NoGaps.class);
}// NoGaps