package edu.sc.seis.sod.subsetter.network; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.w3c.dom.Element; import edu.iris.Fissures.network.NetworkAttrImpl; import edu.iris.Fissures.network.NetworkIdUtil; import edu.sc.seis.sod.ConfigurationException; import edu.sc.seis.sod.SodUtil; import edu.sc.seis.sod.status.Fail; import edu.sc.seis.sod.status.Pass; import edu.sc.seis.sod.status.StringTree; public class NetworkCode implements NetworkSubsetter { public NetworkCode(Element config) throws ConfigurationException { this.desiredCode = SodUtil.getText(config); if(!ANY_NET.matcher(desiredCode).matches()) { throw new ConfigurationException("Code '"+desiredCode+"' does not look like a network code, valid examples are G, IU and YJ07"); } Matcher m = TEMP_NET.matcher(desiredCode); if(m.matches()) { desiredCode = m.group(1); year = m.group(2); } } public StringTree accept(NetworkAttrImpl attr) throws Exception { if(attr.get_code().equals(desiredCode) && (year == null || (year.length() == 2 && year.equals(NetworkIdUtil.getTwoCharYear(attr.get_id()))) || (year.length() == 4 && year.equals(NetworkIdUtil.getYear(attr.get_id()))))) { return new Pass(this); } return new Fail(this); } public String getCode() { return desiredCode; } private String desiredCode; private String year; private static final Pattern TEMP_NET = Pattern.compile("([1-9XYZ][0-9A-Z])(\\d{2})"); private static final Pattern ANY_NET = Pattern.compile("([0-9A-Z][0-9A-Z]?)(\\d{2})?"); }