package edu.sc.seis.sod.process.waveform;
import org.w3c.dom.Element;
import edu.iris.Fissures.IfSeismogramDC.RequestFilter;
import edu.iris.Fissures.network.ChannelImpl;
import edu.iris.Fissures.seismogramDC.LocalSeismogramImpl;
import edu.sc.seis.fissuresUtil.cache.CacheEvent;
import edu.sc.seis.fissuresUtil.time.MicroSecondTimeRange;
import edu.sc.seis.fissuresUtil.time.RangeTool;
import edu.sc.seis.sod.CookieJar;
import edu.sc.seis.sod.status.StringTreeLeaf;
/**
* @author groves Created on Sep 8, 2004
*/
public class SomeDataCoverage implements WaveformProcess {
public SomeDataCoverage() {}
public SomeDataCoverage(Element config) {}
public WaveformResult accept(CacheEvent event,
ChannelImpl channel,
RequestFilter[] original,
RequestFilter[] available,
LocalSeismogramImpl[] seismograms,
CookieJar cookieJar) {
MicroSecondTimeRange[] seisTimeRanges = new MicroSecondTimeRange[seismograms.length];
for(int i = 0; i < seisTimeRanges.length; i++) {
seisTimeRanges[i] = new MicroSecondTimeRange(seismograms[i].getBeginTime(),
seismograms[i].getEndTime());
}
MicroSecondTimeRange[] rfTimeRanges = new MicroSecondTimeRange[original.length];
for(int i = 0; i < rfTimeRanges.length; i++) {
rfTimeRanges[i] = new MicroSecondTimeRange(original[i]);
}
for(int i = 0; i < seisTimeRanges.length; i++) {
MicroSecondTimeRange curSeisTimeRange = seisTimeRanges[i];
for(int j = 0; j < rfTimeRanges.length; j++) {
MicroSecondTimeRange rfTimeRange = rfTimeRanges[j];
if(RangeTool.areOverlapping(curSeisTimeRange, rfTimeRange)) {
StringTreeLeaf leaf = new StringTreeLeaf(this,
true,
"Some of the data received overlapped the requested time");
return new WaveformResult(seismograms, leaf);
}
}
}
return new WaveformResult(seismograms,
new StringTreeLeaf(this,
false,
"No received seismograms matched the original data request"));
}
}