diff --git a/enabler/pom.xml b/enabler/pom.xml index ef9f22d1..8b9db106 100644 --- a/enabler/pom.xml +++ b/enabler/pom.xml @@ -23,6 +23,13 @@ 18.0 + + + com.google.code.findbugs + jsr305 + 3.0.0 + + org.json json diff --git a/enabler/src/de/schildbach/pte/AbstractEfaProvider.java b/enabler/src/de/schildbach/pte/AbstractEfaProvider.java index 453a7193..75d040db 100644 --- a/enabler/src/de/schildbach/pte/AbstractEfaProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractEfaProvider.java @@ -17,6 +17,7 @@ package de.schildbach.pte; +import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; import java.io.IOException; @@ -40,6 +41,8 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.regex.Matcher; import java.util.regex.Pattern; +import javax.annotation.Nullable; + import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -93,14 +96,14 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider private final String coordEndpoint; private String language = "de"; - private String additionalQueryParameter = null; + private @Nullable String additionalQueryParameter = null; private boolean useRealtime = true; private boolean needsSpEncId = false; private boolean includeRegionId = true; private boolean useProxFootSearch = true; private Charset requestUrlEncoding = Charsets.ISO_8859_1; - private String httpReferer = null; - private String httpRefererTrip = null; + private @Nullable String httpReferer = null; + private @Nullable String httpRefererTrip = null; private boolean httpPost = false; private boolean useRouteIndexAsTripId = true; private boolean useLineRestriction = true; @@ -999,8 +1002,8 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider private static final Pattern P_LINE_S_DB = Pattern.compile("(S\\d+) \\((?:DB Regio AG)\\)"); private static final Pattern P_LINE_NUMBER = Pattern.compile("\\d+"); - protected Line parseLine(final String id, final String mot, String symbol, final String name, final String longName, final String trainType, - final String trainNum, final String trainName) + protected Line parseLine(final @Nullable String id, final @Nullable String mot, @Nullable String symbol, final @Nullable String name, + final @Nullable String longName, final @Nullable String trainType, final @Nullable String trainNum, final @Nullable String trainName) { if (mot == null) { @@ -1370,7 +1373,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider return new Line(id, Product.BUS, "SEV" + trainNumStr); if ("Bus replacement".equals(trainName)) // GB return new Line(id, Product.BUS, "BR"); - if ("BR".equals(trainType) && trainName.startsWith("Bus")) // GB + if ("BR".equals(trainType) && trainName != null && trainName.startsWith("Bus")) // GB return new Line(id, Product.BUS, "BR" + trainNum); if ("GB".equals(trainType)) // Gondelbahn @@ -1440,13 +1443,13 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider + "' trainType='" + trainType + "' trainNum='" + trainNum + "' trainName='" + trainName + "'"); } - public QueryDeparturesResult queryDepartures(final String stationId, final Date time, final int maxDepartures, final boolean equivs) + public QueryDeparturesResult queryDepartures(final String stationId, final @Nullable Date time, final int maxDepartures, final boolean equivs) throws IOException { return xsltDepartureMonitorRequest(stationId, time, maxDepartures, equivs); } - protected StringBuilder xsltDepartureMonitorRequestParameters(final String stationId, final Date time, final int maxDepartures, + protected StringBuilder xsltDepartureMonitorRequestParameters(final String stationId, final @Nullable Date time, final int maxDepartures, final boolean equivs) { final StringBuilder parameters = new StringBuilder(); @@ -1482,8 +1485,8 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider uri.append("&itdTime=").append(ParserUtils.urlEncode(String.format(Locale.ENGLISH, "%02d%02d", hour, minute))); } - private QueryDeparturesResult xsltDepartureMonitorRequest(final String stationId, final Date time, final int maxDepartures, final boolean equivs) - throws IOException + private QueryDeparturesResult xsltDepartureMonitorRequest(final String stationId, final @Nullable Date time, final int maxDepartures, + final boolean equivs) throws IOException { final StringBuilder parameters = xsltDepartureMonitorRequestParameters(stationId, time, maxDepartures, equivs); @@ -1562,8 +1565,9 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider assignedStationDepartures = new StationDepartures(new Location(LocationType.STATION, assignedStopId), new LinkedList(), new LinkedList()); - if (!assignedStationDepartures.lines.contains(line)) - assignedStationDepartures.lines.add(line); + final List assignedStationDeparturesLines = checkNotNull(assignedStationDepartures.lines); + if (!assignedStationDeparturesLines.contains(line)) + assignedStationDeparturesLines.add(line); } XmlPullUtil.skipExit(pp, "itdServingLines"); } @@ -1646,8 +1650,8 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider } } - protected QueryDeparturesResult queryDeparturesMobile(final String stationId, final Date time, final int maxDepartures, final boolean equivs) - throws IOException + protected QueryDeparturesResult queryDeparturesMobile(final String stationId, final @Nullable Date time, final int maxDepartures, + final boolean equivs) throws IOException { final StringBuilder parameters = xsltDepartureMonitorRequestParameters(stationId, time, maxDepartures, equivs); @@ -1850,7 +1854,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider private StationDepartures findStationDepartures(final List stationDepartures, final String id) { for (final StationDepartures stationDeparture : stationDepartures) - if (stationDeparture.location.id.equals(id)) + if (id.equals(stationDeparture.location.id)) return stationDeparture; return null; @@ -1994,8 +1998,9 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider return (double) value / 1000000; } - protected String xsltTripRequestParameters(final Location from, final Location via, final Location to, final Date time, final boolean dep, - final Collection products, final WalkSpeed walkSpeed, final Accessibility accessibility, final Set