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