package edu.sc.seis.sod.subsetter.origin;
import org.w3c.dom.Element;
import edu.iris.Fissures.event.EventAttrImpl;
import edu.iris.Fissures.event.OriginImpl;
import edu.iris.Fissures.model.MicroSecondDate;
import edu.sc.seis.fissuresUtil.cache.CacheEvent;
import edu.sc.seis.fissuresUtil.display.configuration.DOMHelper;
import edu.sc.seis.fissuresUtil.time.MicroSecondTimeRange;
import edu.sc.seis.sod.ConfigurationException;
import edu.sc.seis.sod.MicroSecondDateSupplier;
import edu.sc.seis.sod.SodUtil;
import edu.sc.seis.sod.source.event.MicroSecondTimeRangeSupplier;
import edu.sc.seis.sod.status.StringTree;
import edu.sc.seis.sod.status.StringTreeLeaf;
public class OriginTimeRange implements OriginSubsetter, MicroSecondTimeRangeSupplier {
public OriginTimeRange(Element config) throws ConfigurationException {
begin = makeLoader(config, "startTime");
end = makeLoader(config, "endTime");
}
private MicroSecondDateSupplier makeLoader(Element config, String time)
throws ConfigurationException {
Element timeEl = DOMHelper.getElement(config, time);
Element network = null;
for(int i = 0; i < timeEl.getChildNodes().getLength(); i++) {
if(timeEl.getChildNodes().item(i) instanceof Element) {
if(timeEl.getChildNodes().item(i).getLocalName().startsWith("network")) {
network = (Element)timeEl.getChildNodes().item(i);
break;
}
}
}
if(network != null) {
final String netElName = network.getLocalName();
final NetworkTimeRange ntr = new NetworkTimeRange();
return new MicroSecondDateSupplier() {
public MicroSecondDate load() {
if(netElName.indexOf("Start") != -1) {
return ntr.getMSTR().getBeginTime();
} else {
return ntr.getMSTR().getEndTime();
}
}
};
} else {
return SodUtil.loadTime(timeEl, time.indexOf("end") != -1);
}
}
// should this float????
public synchronized MicroSecondTimeRange getMSTR() {
return new MicroSecondTimeRange(begin.load(), end.load());
}
public StringTree accept(CacheEvent event, EventAttrImpl eventAttr, OriginImpl origin) {
return new StringTreeLeaf(this, getMSTR().contains(new MicroSecondDate(origin.getOriginTime())));
}
private MicroSecondDateSupplier begin, end;
}// EventTimeRange