package edu.sc.seis.sod.subsetter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Element;
import edu.iris.Fissures.model.MicroSecondDate;
import edu.iris.Fissures.model.TimeUtils;
import edu.sc.seis.fissuresUtil.time.MicroSecondTimeRange;
import edu.sc.seis.sod.ConfigurationException;
import edu.sc.seis.sod.SodUtil;
import edu.sc.seis.sod.source.event.MicroSecondTimeRangeSupplier;
public abstract class EffectiveTimeOverlap implements Subsetter{
public EffectiveTimeOverlap(MicroSecondTimeRangeSupplier timeRange) {
this.timeRange = timeRange;
}
public EffectiveTimeOverlap(edu.iris.Fissures.TimeRange range) {
this(new MicroSecondDate(range.start_time), new MicroSecondDate(range.end_time));
}
public EffectiveTimeOverlap(final MicroSecondDate start, final MicroSecondDate end) {
timeRange = new MicroSecondTimeRangeSupplier() {
MicroSecondTimeRange range = new MicroSecondTimeRange(start, end);
public MicroSecondTimeRange getMSTR() { return range; }
};
}
public EffectiveTimeOverlap(Element config) throws ConfigurationException{
timeRange = SodUtil.loadTimeRange(config);
}
public boolean overlaps(edu.iris.Fissures.TimeRange otherRange) {
MicroSecondDate otherStart = new MicroSecondDate(otherRange.start_time);
MicroSecondDate otherEnd;
if (otherRange.end_time.date_time.equals(edu.iris.Fissures.TIME_UNKNOWN.value)) {
otherEnd = new MicroSecondDate(TimeUtils.future);
} else {
otherEnd = new MicroSecondDate(otherRange.end_time);
} // end of else
return overlaps(otherStart, otherEnd);
}
public boolean overlaps(MicroSecondDate otherStart, MicroSecondDate otherEnd) {
MicroSecondTimeRange mstr = timeRange.getMSTR();
MicroSecondDate start = mstr.getBeginTime();
MicroSecondDate end = mstr.getEndTime();
if (end == null && start == null) {
return true;
} else if (end == null && start.before(otherEnd)) {
return true;
} else if (start == null && end.after(otherStart)) {
return true;
} else if(otherStart.after(end) || otherEnd.before(start) ) {
return false;
} else {
return true;
}
}
private MicroSecondTimeRangeSupplier timeRange;
private static Logger logger = LoggerFactory.getLogger(EffectiveTimeOverlap.class);
}// EffectiveTimeOverlap