package edu.sc.seis.sod.subsetter.channel;
import java.util.Iterator;
import java.util.List;
import org.w3c.dom.Element;
import edu.iris.Fissures.network.ChannelImpl;
import edu.iris.Fissures.network.StationImpl;
import edu.sc.seis.fissuresUtil.hibernate.NetworkDB;
import edu.sc.seis.sod.ConfigurationException;
import edu.sc.seis.sod.source.network.NetworkSource;
import edu.sc.seis.sod.status.Fail;
import edu.sc.seis.sod.status.Pass;
import edu.sc.seis.sod.status.StringTree;
import edu.sc.seis.sod.subsetter.Subsetter;
/**
* @author crotwell Created on Jun 3, 2005
*/
public class StationHas extends CompositeChannelSubsetter {
public StationHas(Element config) throws ConfigurationException {
super(config);
}
public StringTree accept(ChannelImpl channel, NetworkSource network)
throws Exception {
Iterator<Subsetter> it = subsetters.iterator();
List<? extends ChannelImpl> allChans = network.getChannels((StationImpl)channel.getStation());
NetworkDB.flush();
while(it.hasNext()) {
if(!atLeastOneChannelPasses((ChannelSubsetter)it.next(),
allChans,
network)) {
NetworkDB.flush();
return new Fail(this);
}
}
NetworkDB.flush();
return new Pass(this);
}
private static boolean atLeastOneChannelPasses(ChannelSubsetter filter,
List<? extends ChannelImpl> chans,
NetworkSource net)
throws Exception {
for (ChannelImpl channelImpl : chans) {
if(filter.accept(channelImpl, net).isSuccess()) {
return true;
}
}
return false;
}
}