Make things a little more resilient to weird station abbreviations from the BART API
This commit is contained in:
parent
b1618f734e
commit
9fbd5f90c4
@ -130,6 +130,23 @@ public enum Station {
|
||||
}
|
||||
}
|
||||
|
||||
public static Station getByApproximateName(String name) {
|
||||
if (name == null) return null;
|
||||
|
||||
final String lowercaseName = name.toLowerCase();
|
||||
for (Station station : Station.values()) {
|
||||
if (lowercaseName.startsWith(station.name.toLowerCase())) {
|
||||
return station;
|
||||
}
|
||||
}
|
||||
for (Station station : Station.values()) {
|
||||
if (lowercaseName.endsWith(station.name.toLowerCase())) {
|
||||
return station;
|
||||
}
|
||||
}
|
||||
return Station.SPCL;
|
||||
}
|
||||
|
||||
public Station getInboundTransferStation() {
|
||||
return getByAbbreviation(inboundTransferStation);
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ public class EtdContentHandler extends DefaultHandler {
|
||||
|
||||
private final static List<String> TAGS = Arrays.asList("date", "time",
|
||||
"abbreviation", "minutes", "platform", "direction", "length",
|
||||
"color", "hexcolor", "bikeflag");
|
||||
"color", "hexcolor", "bikeflag", "destination");
|
||||
|
||||
private RealTimeDepartures realTimeDepartures;
|
||||
|
||||
@ -36,7 +36,8 @@ public class EtdContentHandler extends DefaultHandler {
|
||||
}
|
||||
|
||||
private String date;
|
||||
private String currentDestination;
|
||||
private String currentDestinationAbbreviation;
|
||||
private String currentDestinationName;
|
||||
private String currentValue;
|
||||
private Departure currentDeparture;
|
||||
private boolean isParsingTag;
|
||||
@ -57,8 +58,11 @@ public class EtdContentHandler extends DefaultHandler {
|
||||
}
|
||||
if (localName.equals("estimate")) {
|
||||
currentDeparture = new Departure();
|
||||
currentDeparture.setTrainDestination(Station
|
||||
.getByAbbreviation(currentDestination));
|
||||
Station destination = Station.getByAbbreviation(currentDestinationAbbreviation);
|
||||
if (destination == null) {
|
||||
destination = Station.getByApproximateName(currentDestinationName);
|
||||
}
|
||||
currentDeparture.setTrainDestination(destination);
|
||||
currentDeparture.setOrigin(realTimeDepartures.getOrigin());
|
||||
}
|
||||
}
|
||||
@ -71,7 +75,9 @@ public class EtdContentHandler extends DefaultHandler {
|
||||
} else if (localName.equals("time")) {
|
||||
realTimeDepartures.setTime(Date.parse(date + " " + currentValue));
|
||||
} else if (localName.equals("abbreviation")) {
|
||||
currentDestination = currentValue;
|
||||
currentDestinationAbbreviation = currentValue;
|
||||
} else if (localName.equals("destination")) {
|
||||
currentDestinationName = currentValue;
|
||||
} else if (localName.equals("minutes")) {
|
||||
if (StringUtils.isNumeric(currentValue)) {
|
||||
currentDeparture.setMinutes(Integer.parseInt(currentValue));
|
||||
@ -109,10 +115,14 @@ public class EtdContentHandler extends DefaultHandler {
|
||||
} else if (localName.equals("bikeflag")) {
|
||||
currentDeparture.setBikeAllowed(currentValue.equalsIgnoreCase("1"));
|
||||
} else if (localName.equals("estimate")) {
|
||||
realTimeDepartures.addDeparture(currentDeparture);
|
||||
// If we can't infer a real destination because of weird API data,
|
||||
// just skip it ¯\_(ツ)_/¯
|
||||
if (realTimeDepartures.getDestination() != null) {
|
||||
realTimeDepartures.addDeparture(currentDeparture);
|
||||
}
|
||||
currentDeparture = null;
|
||||
} else if (localName.equals("etd")) {
|
||||
currentDestination = null;
|
||||
currentDestinationAbbreviation = null;
|
||||
} else if (localName.equals("station")) {
|
||||
realTimeDepartures.finalizeDeparturesList();
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ buildscript {
|
||||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:1.3.0'
|
||||
classpath 'com.android.tools.build:gradle:2.0.0'
|
||||
// Used for annotation processing needed by the AndroidAnnotations library
|
||||
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.6'
|
||||
}
|
||||
|
4
gradle/wrapper/gradle-wrapper.properties
vendored
4
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,6 +1,6 @@
|
||||
#Mon Jul 20 14:31:30 PDT 2015
|
||||
#Sat Apr 16 08:57:22 PDT 2016
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.5-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
|
||||
|
Loading…
Reference in New Issue
Block a user