package com.schneeloch.bostonbusmap_library.data; import java.text.DateFormat; import java.util.Date; import java.util.Locale; import android.os.Parcel; import android.os.Parcelable; import com.schneeloch.bostonbusmap_library.transit.TransitSystem; public class CommuterRailPrediction extends TimePrediction implements Parcelable { public static enum Flag { /** * Record has scheduled time but not the vehicle lateness. May have vehicle ID and position. */ Sch("sch"), /** * Record has scheduled time and the vehicle’s current lateness and position */ Pre("pre"), /** * Approaching the station now. Record has vehicle location but not lateness. */ App("app"), /** * Arriving at the station now. Record has vehicle location but not lateness */ Arr("arr"), /** * Departing the station now or has departed the station. Record has vehicle location but not lateness. Used at the trip’s origin. */ Dep("dep"), /** * “Delayed.” Vehicle is late and is not moving. The lateness may or may not be included */ Del("del"); public final String name; Flag(String name) { this.name = name; } public static Flag toFlagEnum(String informationType) { if (informationType == null) { return Sch; } else { informationType = informationType.toLowerCase(Locale.US); for (Flag flag : Flag.values()) { if (flag.name.equals(informationType)) { return flag; } } return null; } } } private final Flag flag; public CommuterRailPrediction(long arrivalTimeMillis, String vehicleId, String direction, String routeName, String routeTitle, boolean affectedByLayover, boolean isDelayed, int lateness, String block, String stopId, Flag flag) { super(arrivalTimeMillis, vehicleId, direction, routeName, routeTitle, affectedByLayover, isDelayed, lateness, stopId, block); this.flag = flag; } @Override public void makeSnippet(StringBuilder builder, boolean showRunNumber) { int minutes = getMinutes(); if (minutes < 0) { return; } else { builder.append("Route <b>").append(routeTitle).append("</b>"); if (vehicleId != null) { builder.append("<br /><b>").append(vehicleId).append("</b>"); } if (direction != null) { builder.append("<br />").append(direction); } DateFormat dateFormat = TransitSystem.getDefaultTimeFormat(); Date scheduledArrival = new Date(arrivalTimeMillis); if (dateFormat != null) { String formatted = dateFormat.format(scheduledArrival); builder.append("<br />Scheduled arrival at ").append(formatted.trim()); } if (lateness > 5*60) { builder.append("<br /><b>Delayed ").append(lateness/60).append(" minutes</b>"); } } } @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeString(flag.name()); } public static final Creator<CommuterRailPrediction> CREATOR = new Creator<CommuterRailPrediction>() { @Override public CommuterRailPrediction[] newArray(int size) { return new CommuterRailPrediction[size]; } @Override public CommuterRailPrediction createFromParcel(Parcel source) { //NOTE: if this changes you must also change TimePrediction.CREATOR.createFromParcel long arrivalTimeMillis = source.readLong(); String vehicleId = source.readString(); if (vehicleId.length() == 0) { vehicleId = null; } String direction = source.readString(); String routeName = source.readString(); String routeTitle = source.readString(); boolean affectedByLayover = readBoolean(source); boolean isDelayed = readBoolean(source); int lateness = source.readInt(); String block = source.readString(); String stopId = source.readString(); Flag flag = Flag.toFlagEnum(source.readString()); CommuterRailPrediction prediction = new CommuterRailPrediction(arrivalTimeMillis, vehicleId, direction, routeName, routeTitle, affectedByLayover, isDelayed, lateness, block, stopId, flag); return prediction; } }; }