001 package ps4;
002
003 /**
004 * A StreetClassification describes a street category. It is an
005 * <i>enumeration</i> type, which you can tell by the class declaration
006 * <tt>public enum StreetClassification</tt>. There are a handful of
007 * values the type may hold, and the set of options is fixed at compile
008 * time.
009 *
010 * <p>
011 * Example uses:
012 *
013 * <pre>
014 * StreetClassification myType = StreetClassification.LOCAL_ROAD;
015 * // ...
016 * if (myType == StreetClassification.UNKNOWN) {
017 * // ...
018 * }
019 * </pre>
020 *
021 * <p>
022 * Notice that you may reference the constant values as you would with any other
023 * static variable, e.g. ClassName.STATIC_FIELD_NAME. Also, you may use the
024 * <code>==</code> operator to check for equality, since there is only one copy
025 * of each object.
026 *
027 * <p>
028 * The ordering given by the <code>compareTo</code> method of this class is
029 * consistent with equals, and gives the following ordering: PRIM_HWY, SEC_HWY,
030 * LOCAL_ROAD, UNKNOWN.
031 */
032
033 public enum StreetClassification {
034
035 /**
036 * Classification indicating a primary highway. Primary highways include
037 * interstate highways and some toll highways; these highways are accesed by
038 * way of ramps and have multiple lanes of traffic.
039 */
040 PRIM_HWY("PRIM_HWY", "Primary Highway"),
041
042 /**
043 * Classification indicating a secondary highway. Secondary highways include
044 * state highways and some county highways.
045 */
046 SEC_HWY("SEC_HWY", "Secondary Highway"),
047
048 /**
049 * Classification indicating a local road. Local roads are for local
050 * traffic. Scenic park roads and unpaved roads are also included in this
051 * category.
052 */
053 LOCAL_ROAD("LOCAL_ROAD", "Local Road"),
054
055 /**
056 * Classification indicating an unknown type of street. This classificiation
057 * is given to streets that do not fall within one of the other three
058 * categories or to streets for which not enough information is known to
059 * classify them.
060 */
061 UNKNOWN("UNKNOWN", "Unknown");
062
063
064 //FIELDS
065
066 /** Name of enum constant */
067 private final String repr;
068 /** Human-friendly name */
069 private final String name;
070
071 //CONSTRUCTOR
072
073 StreetClassification(String repr, String name) {
074 this.repr = repr;
075 this.name = name;
076 }
077
078 //OBSERVERS
079
080 /**
081 * @returns a String representation of this
082 */
083 public String toString() {
084 return "StreetClassification[" + name + "]";
085 }
086
087 //FACTORY METHOD
088
089 /**
090 * @param in the enum constant name or human-friendly name
091 * @returns a StreetClassification that matches the string passed in
092 */
093 public static StreetClassification parse(String in) {
094 for (StreetClassification typ : StreetClassification.values()) {
095 if (typ.name.equals(in) || typ.repr.equals(in)) {
096 return typ;
097 }
098 }
099 return UNKNOWN;
100 }
101
102 /** Returns a concise, parseable string representation. */
103 public String unparse() {
104 return repr;
105 }
106
107 } //StreetClassification