package tmcsim.highwaymodel; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; /** * Traffic Event represents some occurrence in the traffic on * a highway network. A traffic event occurs at a particular time * and belongs to a unique simulation incident. The event occurs on * a specified section of a given highway route. Each event specifies * the level of traffic congestion by a color. Events are comparable * by the time of their occurrence. * @author jdalbey */ public final class TrafficEvent implements Comparable { public final String incident; public final String eventTime; public final Date eventDate; // for convenience public final int routeNumber; public final LoopDetector.DOTCOLOR color; public final Station.DIRECTION dir; public final double postmile; public final double range; public final String rawString; private final static SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); /** Create an event from a string as in this example: * 181 00:12:30 405 S 0.6 11.0 G * @param eventString * @return traffic event * @throws Scanner exception if string improperly formatted */ public TrafficEvent(String eventString) throws ParseException { this.rawString = eventString; Scanner lineScan = new Scanner(eventString); this.incident = lineScan.next(); this.eventTime = lineScan.next(); // time field // may throw parseexception this.eventDate = formatter.parse(eventTime); this.routeNumber = lineScan.nextInt(); this.dir = Station.DIRECTION.toDirection(lineScan.next()); this.postmile = lineScan.nextDouble(); this.range = lineScan.nextDouble(); this.color = LoopDetector.DOTCOLOR.toDotColor(lineScan.next()); } @Override public int compareTo(TrafficEvent o) { return eventDate.compareTo(o.eventDate); } @Override public String toString() { return rawString; } @Override public boolean equals(Object other) { Boolean result = false; if (other == null) return false; if ( other instanceof TrafficEvent ) { TrafficEvent that = (TrafficEvent) other; result = that.incident.equals(this.incident) && that.eventTime.equals(this.eventTime) && ((int) that.postmile) == ((int) this.postmile) && that.dir == this.dir && that.color == this.color; } return result; } }