package edu.sc.seis.sod.source.seismogram;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import edu.iris.Fissures.IfSeismogramDC.RequestFilter;
import edu.iris.Fissures.network.ChannelImpl;
import edu.sc.seis.fissuresUtil.cache.CacheEvent;
import edu.sc.seis.fissuresUtil.display.configuration.DOMHelper;
import edu.sc.seis.sod.ConfigurationException;
import edu.sc.seis.sod.CookieJar;
import edu.sc.seis.sod.SodUtil;
/**
* @author groves Created on May 4, 2005
*/
public class ChoiceSource implements SeismogramSourceLocator {
public ChoiceSource(List<ChoiceSourceItem> choices, SeismogramSourceLocator otherwise) {
this.choices = choices;
this.otherwise = otherwise;
}
public ChoiceSource(Element config) throws ConfigurationException {
NodeList choiceNodes = DOMHelper.extractNodes(config, "choice");
for(int i = 0; i < choiceNodes.getLength(); i++) {
choices.add(new ChoiceSourceItem((Element)choiceNodes.item(i)));
}
Element otherwiseEl = DOMHelper.extractElement(config, "otherwise/*");
otherwise = (SeismogramSourceLocator)SodUtil.load(otherwiseEl, "seismogram");
}
public SeismogramSource getSeismogramSource(CacheEvent event,
ChannelImpl channel,
RequestFilter[] infilters,
CookieJar cookieJar)
throws Exception {
Iterator<ChoiceSourceItem> it = choices.iterator();
while(it.hasNext()) {
ChoiceSourceItem cur = it.next();
if(cur.accept(event, channel, cookieJar).isSuccess()) {
return cur.getSeismogramSource(event, channel, infilters, cookieJar);
}
}
return otherwise.getSeismogramSource(event, channel, infilters, cookieJar);
}
private List<ChoiceSourceItem> choices = new ArrayList<ChoiceSourceItem>();
private SeismogramSourceLocator otherwise;
}