package edu.sc.seis.sod.subsetter.origin;
import java.util.Iterator;
import org.w3c.dom.Element;
import edu.iris.Fissures.IfEvent.Origin;
import edu.iris.Fissures.event.EventAttrImpl;
import edu.iris.Fissures.event.OriginImpl;
import edu.sc.seis.fissuresUtil.cache.CacheEvent;
import edu.sc.seis.sod.ConfigurationException;
import edu.sc.seis.sod.status.ShortCircuit;
import edu.sc.seis.sod.status.StringTree;
import edu.sc.seis.sod.status.StringTreeBranch;
/**
* Contains a single OriginSubsetter. OriginArrayOR returns true when the contained originSubsetter is
* true for any one of the origins.
*<pre>
* <originArrayOR>
* <originNOT>
* <magnitudeRange>
* <magType>mb</magType>
* <min>7</min>
* <max>10</max>
* </magnitudeRange>
* </originNOT>
* </originArrayOR>
*</pre>
*/
public class OriginArrayOR extends EventLogicalSubsetter
implements OriginSubsetter {
public OriginArrayOR (Element config) throws ConfigurationException {
super(config);
}
public StringTree accept(CacheEvent event, EventAttrImpl eventAttr, OriginImpl e) throws Exception{
Iterator it = filterList.iterator();
if (it.hasNext()) {
OriginSubsetter filter = (OriginSubsetter)it.next();
Origin[] origins = event.get_origins();
StringTree[] result = new StringTree[origins.length];
for(int counter = 0; counter < origins.length; counter++) {
result[counter] = filter.accept(event, eventAttr, (OriginImpl)origins[counter]);
if (result[counter].isSuccess()) {
for(int j = counter + 1; j < result.length; j++) {
result[j] = new ShortCircuit(origins[j]);
}
return new StringTreeBranch(this, true, result);
}
}
return new StringTreeBranch(this, false, result);
}
throw new ConfigurationException("more than one subsetter in OriginArrayOR");
}
}// OriginArrayOR