Regions.java
package gov.usgs.earthquake.qdm;
import java.util.ArrayList;
/**
* Set of regions.
*
* @author - Alan Jones, 1999.09.10 <br>
* 2002.01.16: Convert from "regions" directory with above files to
* regions.xml file. <br>
* 2003.01.06: Make class public, add support for non-file input so that
* we can read from a JAR, add isDefaultNetID method to check for the
* default network (US), add isAuthor method to check if the event is
* authoritative
*
* 2018-08-21: JMF, reimplement parsing logic outside class. Update code
* to Java 1.8+.
*/
public class Regions {
/** Default network */
public String defaultNetid;
/** Array of network ids, e.g. nc, us, etc. */
public ArrayList<String> netids;
/** Array of regions */
public ArrayList<Region> regions;
/**
* Create a new set of regions.
*/
public Regions() {
this.defaultNetid = "";
this.netids = new ArrayList<String>();
this.regions = new ArrayList<Region>();
}
/**
* Is this netid in the set of regions? The default net covers the whole world
* so it is always valid since it has no finite boundaries.
*
* @param netid A netid (nc, us, etc.)
* @return boolean if netid is valid
*/
public boolean isValidnetID(final String netid) {
for (String i : this.netids) {
if (netid.equalsIgnoreCase(i)) {
return true;
}
}
return false;
}
//
// [KF] - add methods to check for the default network (US)
//
/**
* Checks if network ID is the default network.
*
* @param netid network ID
* @return true if default network.
*/
public boolean isDefaultNetID(final String netid) {
return this.defaultNetid.equalsIgnoreCase(netid);
}
/**
* Checks if an event's network ID is the default network.
*
* @param eq EQ event
* @return true if default network.
*/
public boolean isDefaultNetID(final EQEvent eq) {
return this.isDefaultNetID(eq.getNetID());
}
//
// [KF] - add methods to determine if the event is from the authoritative
// network.
//
/**
* Determines if the event is from the authoritative network.
*
* @param netid network ID
* @param p event point
* @return true if event is authoritative
*/
public boolean isAuthor(final String netid, final Point p) {
if (this.isDefaultNetID(netid)) {
// if any non-default regions match, default is not authoritative
for (Region region : this.regions) {
if (region.netid.equalsIgnoreCase(netid)) {
continue;
}
if (region.inpoly(p)) {
// another region is authoritative
return false;
}
}
// no other regions authoritative
return true;
} else {
// if any network regions match, network is authoritative
for (Region region : regions) {
if (region.netid.equalsIgnoreCase(netid) && region.inpoly(p)) {
// network is authoritative
return true;
}
}
// network is not authoritative
return false;
}
}
/**
* Determines if the event is from the authoritative network.
*
* @param eq EQ event
* @return true if event is authoritative
*/
public boolean isAuthor(final EQEvent eq) {
return this.isAuthor(eq.getNetID(), eq.getPoint());
}
}