/* * Copyright 2010-2017 the original author or authors. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ package de.schildbach.pte; import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.Currency; import java.util.Date; import java.util.EnumSet; import java.util.GregorianCalendar; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Locale; import java.util.Set; 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; import com.google.common.base.Joiner; import de.schildbach.pte.dto.Departure; import de.schildbach.pte.dto.Fare; import de.schildbach.pte.dto.Line; import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.LocationType; import de.schildbach.pte.dto.NearbyLocationsResult; import de.schildbach.pte.dto.Position; import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.QueryDeparturesResult; import de.schildbach.pte.dto.QueryTripsContext; import de.schildbach.pte.dto.QueryTripsResult; import de.schildbach.pte.dto.ResultHeader; import de.schildbach.pte.dto.StationDepartures; import de.schildbach.pte.dto.Stop; import de.schildbach.pte.dto.SuggestLocationsResult; import de.schildbach.pte.dto.SuggestedLocation; import de.schildbach.pte.dto.Trip; import de.schildbach.pte.exception.ParserException; import de.schildbach.pte.util.ParserUtils; import okhttp3.HttpUrl; /** * @author Andreas Schildbach */ public abstract class AbstractHafasMobileProvider extends AbstractHafasProvider { public HttpUrl mgateEndpoint; @Nullable public String apiVersion; @Nullable public String apiAuthorization; @Nullable public String apiClient; public AbstractHafasMobileProvider(final NetworkId network, final HttpUrl apiBase, final Product[] productsMap) { super(network, productsMap); this.mgateEndpoint = apiBase.newBuilder().addPathSegment("mgate.exe").build(); } protected AbstractHafasMobileProvider setApiVersion(final String apiVersion) { this.apiVersion = apiVersion; return this; } protected AbstractHafasMobileProvider setApiAuthorization(final String apiAuthorization) { this.apiAuthorization = apiAuthorization; return this; } protected AbstractHafasMobileProvider setApiClient(final String apiClient) { this.apiClient = apiClient; return this; } @Override public NearbyLocationsResult queryNearbyLocations(final EnumSet types, final Location location, final int maxDistance, final int maxLocations) throws IOException { if (location.hasLocation()) return jsonLocGeoPos(types, location.lat, location.lon); else throw new IllegalArgumentException("cannot handle: " + location); } @Override public QueryDeparturesResult queryDepartures(final String stationId, final @Nullable Date time, final int maxDepartures, final boolean equivs) throws IOException { return jsonStationBoard(stationId, time, maxDepartures, equivs); } @Override public SuggestLocationsResult suggestLocations(final CharSequence constraint) throws IOException { return jsonLocMatch(constraint); } @Override public QueryTripsResult queryTrips(final Location from, final @Nullable Location via, final Location to, final Date date, final boolean dep, final @Nullable Set products, final @Nullable Optimize optimize, final @Nullable WalkSpeed walkSpeed, final @Nullable Accessibility accessibility, final @Nullable Set