Introduce class for positions

This commit is contained in:
Andreas Schildbach 2013-10-04 16:27:38 +02:00
parent a6d01a7623
commit c375502229
10 changed files with 143 additions and 55 deletions

View file

@ -60,6 +60,7 @@ import de.schildbach.pte.dto.Location;
import de.schildbach.pte.dto.LocationType;
import de.schildbach.pte.dto.NearbyStationsResult;
import de.schildbach.pte.dto.Point;
import de.schildbach.pte.dto.Position;
import de.schildbach.pte.dto.Product;
import de.schildbach.pte.dto.QueryDeparturesResult;
import de.schildbach.pte.dto.QueryTripsContext;
@ -1556,7 +1557,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
new LinkedList<Departure>(), new LinkedList<LineDestination>());
}
final String position = normalizePlatformName(XmlPullUtil.optAttr(pp, "platformName", null));
final Position position = normalizePlatformName(XmlPullUtil.optAttr(pp, "platformName", null));
XmlPullUtil.enter(pp, "itdDeparture");
@ -1667,7 +1668,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
XmlPullUtil.enter(pp, "r");
final int assignedId = Integer.parseInt(requireValueTag(pp, "id"));
requireValueTag(pp, "a");
final String position = optValueTag(pp, "pl");
final Position position = new Position(optValueTag(pp, "pl"));
XmlPullUtil.exit(pp, "r");
/* final Point positionCoordinate = */coordStrToPoint(optValueTag(pp, "c"));
@ -2403,7 +2404,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
final Location departureLocation = processItdPointAttributes(pp);
if (firstDepartureLocation == null)
firstDepartureLocation = departureLocation;
final String departurePosition = normalizePlatformName(XmlPullUtil.optAttr(pp, "platformName", null));
final Position departurePosition = normalizePlatformName(XmlPullUtil.optAttr(pp, "platformName", null));
XmlPullUtil.enter(pp, "itdPoint");
if (XmlPullUtil.test(pp, "itdMapItemList"))
XmlPullUtil.next(pp);
@ -2427,7 +2428,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
throw new IllegalStateException();
final Location arrivalLocation = processItdPointAttributes(pp);
lastArrivalLocation = arrivalLocation;
final String arrivalPosition = normalizePlatformName(XmlPullUtil.optAttr(pp, "platformName", null));
final Position arrivalPosition = normalizePlatformName(XmlPullUtil.optAttr(pp, "platformName", null));
XmlPullUtil.enter(pp, "itdPoint");
if (XmlPullUtil.test(pp, "itdMapItemList"))
XmlPullUtil.next(pp);
@ -2576,7 +2577,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
{
final Location stopLocation = processItdPointAttributes(pp);
final String stopPosition = normalizePlatformName(XmlPullUtil.optAttr(pp, "platformName", null));
final Position stopPosition = normalizePlatformName(XmlPullUtil.optAttr(pp, "platformName", null));
XmlPullUtil.enter(pp, "itdPoint");
XmlPullUtil.require(pp, "itdDateTime");
@ -2837,7 +2838,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
XmlPullUtil.enter(pp, "r");
final int id = Integer.parseInt(requireValueTag(pp, "id"));
optValueTag(pp, "a");
final String position = optValueTag(pp, "pl");
final Position position = new Position(optValueTag(pp, "pl"));
final String place = normalizeLocationName(optValueTag(pp, "pc"));
final Point coord = coordStrToPoint(requireValueTag(pp, "c"));
XmlPullUtil.exit(pp, "r");
@ -3139,7 +3140,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
"(\\d+)\\s*" + //
"(?:([A-Z])\\s*(?:-\\s*([A-Z]))?)?", Pattern.CASE_INSENSITIVE);
private static final String normalizePlatformName(final String platformName)
private static final Position normalizePlatformName(final String platformName)
{
if (platformName != null)
{
@ -3148,15 +3149,15 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
{
final String simple = Integer.toString(Integer.parseInt(m.group(1)));
if (m.group(2) != null && m.group(3) != null)
return simple + m.group(2) + "-" + m.group(3);
return new Position(simple + m.group(2) + "-" + m.group(3));
else if (m.group(2) != null)
return simple + m.group(2);
return new Position(simple + m.group(2));
else
return simple;
return new Position(simple);
}
else
{
return platformName;
return new Position(platformName);
}
}

View file

@ -56,6 +56,7 @@ import de.schildbach.pte.dto.Location;
import de.schildbach.pte.dto.LocationType;
import de.schildbach.pte.dto.NearbyStationsResult;
import de.schildbach.pte.dto.Point;
import de.schildbach.pte.dto.Position;
import de.schildbach.pte.dto.Product;
import de.schildbach.pte.dto.QueryDeparturesResult;
import de.schildbach.pte.dto.QueryTripsContext;
@ -295,17 +296,17 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
throw new IllegalStateException("cannot handle: " + type);
}
private static final String parsePlatform(final XmlPullParser pp) throws XmlPullParserException, IOException
private static final Position parsePlatform(final XmlPullParser pp) throws XmlPullParserException, IOException
{
XmlPullUtil.enter(pp, "Platform");
XmlPullUtil.require(pp, "Text");
final String position = XmlPullUtil.text(pp).trim();
final String platformText = XmlPullUtil.text(pp).trim();
XmlPullUtil.exit(pp, "Platform");
if (position.length() == 0)
if (platformText.length() == 0)
return null;
else
return position;
return new Position(platformText);
}
public List<Location> xmlLocValReq(final CharSequence constraint) throws IOException
@ -761,7 +762,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
predictedTime = null;
}
final String position = platform != null ? "Gl. " + ParserUtils.resolveEntities(platform) : null;
final Position position = platform != null ? new Position("Gl. " + ParserUtils.resolveEntities(platform)) : null;
final String[] destinationPlaceAndName;
if (dir != null)
@ -1206,7 +1207,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
time.setTimeInMillis(currentDate.getTimeInMillis());
parseTime(time, XmlPullUtil.text(pp));
final Date departureTime = time.getTime();
final String departurePos = parsePlatform(pp);
final Position departurePos = parsePlatform(pp);
XmlPullUtil.exit(pp, "Dep");
XmlPullUtil.exit(pp, "BasicStop");
@ -1278,8 +1279,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
{
Date stopArrivalTime = null;
Date stopDepartureTime = null;
String stopArrivalPosition = null;
String stopDeparturePosition = null;
Position stopArrivalPosition = null;
Position stopDeparturePosition = null;
if (XmlPullUtil.test(pp, "Arr"))
{
@ -1364,7 +1365,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
time.setTimeInMillis(currentDate.getTimeInMillis());
parseTime(time, XmlPullUtil.text(pp));
final Date arrivalTime = time.getTime();
final String arrivalPos = parsePlatform(pp);
final Position arrivalPos = parsePlatform(pp);
XmlPullUtil.exit(pp, "Arr");
XmlPullUtil.exit(pp, "BasicStop");
@ -1851,8 +1852,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
final String lineName = strings.read(is);
final String plannedDeparturePosition = normalizePosition(strings.read(is));
final String plannedArrivalPosition = normalizePosition(strings.read(is));
final Position plannedDeparturePosition = normalizePosition(strings.read(is));
final Position plannedArrivalPosition = normalizePosition(strings.read(is));
final int legAttrIndex = is.readShortReverse();
@ -1913,8 +1914,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
final long predictedDepartureTime = time(is, resDate, tripDayOffset);
final long predictedArrivalTime = time(is, resDate, tripDayOffset);
final String predictedDeparturePosition = normalizePosition(strings.read(is));
final String predictedArrivalPosition = normalizePosition(strings.read(is));
final Position predictedDeparturePosition = normalizePosition(strings.read(is));
final Position predictedArrivalPosition = normalizePosition(strings.read(is));
is.readInt();
@ -1940,8 +1941,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
final Date plannedStopDepartureDate = plannedStopDepartureTime != 0 ? new Date(plannedStopDepartureTime) : null;
final long plannedStopArrivalTime = time(is, resDate, tripDayOffset);
final Date plannedStopArrivalDate = plannedStopArrivalTime != 0 ? new Date(plannedStopArrivalTime) : null;
final String plannedStopDeparturePosition = normalizePosition(strings.read(is));
final String plannedStopArrivalPosition = normalizePosition(strings.read(is));
final Position plannedStopDeparturePosition = normalizePosition(strings.read(is));
final Position plannedStopArrivalPosition = normalizePosition(strings.read(is));
is.readInt();
@ -1949,8 +1950,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
final Date predictedStopDepartureDate = predictedStopDepartureTime != 0 ? new Date(predictedStopDepartureTime) : null;
final long predictedStopArrivalTime = time(is, resDate, tripDayOffset);
final Date predictedStopArrivalDate = predictedStopArrivalTime != 0 ? new Date(predictedStopArrivalTime) : null;
final String predictedStopDeparturePosition = normalizePosition(strings.read(is));
final String predictedStopArrivalPosition = normalizePosition(strings.read(is));
final Position predictedStopDeparturePosition = normalizePosition(strings.read(is));
final Position predictedStopArrivalPosition = normalizePosition(strings.read(is));
is.readInt();
@ -2270,16 +2271,16 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
private static final Pattern P_POSITION_PLATFORM = Pattern.compile("Gleis\\s*([^\\s]*)\\s*", Pattern.CASE_INSENSITIVE);
private String normalizePosition(final String position)
private Position normalizePosition(final String position)
{
if (position == null)
return null;
final Matcher m = P_POSITION_PLATFORM.matcher(position);
if (!m.matches())
return position;
return new Position(position);
return m.group(1);
return new Position(m.group(1));
}
protected final StringBuilder xmlNearbyStationsParameters(final int stationId)

View file

@ -37,6 +37,7 @@ import de.schildbach.pte.dto.Location;
import de.schildbach.pte.dto.LocationType;
import de.schildbach.pte.dto.NearbyStationsResult;
import de.schildbach.pte.dto.Point;
import de.schildbach.pte.dto.Position;
import de.schildbach.pte.dto.Product;
import de.schildbach.pte.dto.QueryDeparturesResult;
import de.schildbach.pte.dto.QueryTripsContext;
@ -392,7 +393,7 @@ public final class BvgProvider extends AbstractHafasProvider
final char lineProduct = normalizeType(categoryFromName(lineName));
final Line line = newLine(lineProduct, normalizeLineName(lineName), null);
final String position = null;
final Position position = null;
final String[] destinationPlaceAndName = splitPlaceAndName(ParserUtils.resolveEntities(mDepFine.group(4)));
final Location destination = new Location(LocationType.ANY, 0, destinationPlaceAndName[0], destinationPlaceAndName[1]);
@ -464,7 +465,7 @@ public final class BvgProvider extends AbstractHafasProvider
final char lineProduct = normalizeType(categoryFromName(lineName));
final Line line = newLine(lineProduct, normalizeLineName(lineName), null);
final String position = ParserUtils.resolveEntities(mDepFine.group(3));
final Position position = new Position(ParserUtils.resolveEntities(mDepFine.group(3)));
final int destinationId = Integer.parseInt(mDepFine.group(4));
final String[] destinationPlaceAndName = splitPlaceAndName(ParserUtils.resolveEntities(mDepFine.group(5)));

View file

@ -33,6 +33,7 @@ import de.schildbach.pte.dto.Line;
import de.schildbach.pte.dto.Location;
import de.schildbach.pte.dto.LocationType;
import de.schildbach.pte.dto.NearbyStationsResult;
import de.schildbach.pte.dto.Position;
import de.schildbach.pte.dto.Product;
import de.schildbach.pte.dto.QueryDeparturesResult;
import de.schildbach.pte.dto.QueryDeparturesResult.Status;
@ -241,7 +242,8 @@ public class InvgProvider extends AbstractHafasProvider
final Location destination = new Location(destinationId > 0 ? LocationType.STATION : LocationType.ANY, destinationId, null,
destinationName);
final String position = mDepFine.group(7) != null ? "Gl. " + ParserUtils.resolveEntities(mDepFine.group(7)) : null;
final Position position = mDepFine.group(7) != null ? new Position("Gl. " + ParserUtils.resolveEntities(mDepFine.group(7)))
: null;
final Departure dep = new Departure(plannedTime.getTime(), predictedTime != null ? predictedTime.getTime() : null, line,
position, destination, null, null);

View file

@ -33,6 +33,7 @@ import de.schildbach.pte.dto.Line;
import de.schildbach.pte.dto.Location;
import de.schildbach.pte.dto.LocationType;
import de.schildbach.pte.dto.NearbyStationsResult;
import de.schildbach.pte.dto.Position;
import de.schildbach.pte.dto.Product;
import de.schildbach.pte.dto.QueryDeparturesResult;
import de.schildbach.pte.dto.QueryDeparturesResult.Status;
@ -264,7 +265,8 @@ public class SeptaProvider extends AbstractHafasProvider
final Location destination = new Location(destinationId > 0 ? LocationType.STATION : LocationType.ANY, destinationId, null,
destinationName);
final String position = mDepFine.group(7) != null ? "Gl. " + ParserUtils.resolveEntities(mDepFine.group(7)) : null;
final Position position = mDepFine.group(7) != null ? new Position("Gl. " + ParserUtils.resolveEntities(mDepFine.group(7)))
: null;
final Departure dep = new Departure(plannedTime.getTime(), predictedTime != null ? predictedTime.getTime() : null, line,
position, destination, null, null);

View file

@ -31,6 +31,7 @@ import de.schildbach.pte.dto.Line;
import de.schildbach.pte.dto.Location;
import de.schildbach.pte.dto.LocationType;
import de.schildbach.pte.dto.NearbyStationsResult;
import de.schildbach.pte.dto.Position;
import de.schildbach.pte.dto.Product;
import de.schildbach.pte.dto.QueryDeparturesResult;
import de.schildbach.pte.dto.QueryDeparturesResult.Status;
@ -227,7 +228,8 @@ public class ShProvider extends AbstractHafasProvider
final Location destination = new Location(destinationId > 0 ? LocationType.STATION : LocationType.ANY, destinationId, null,
destinationName);
final String position = mDepFine.group(6) != null ? "Gl. " + ParserUtils.resolveEntities(mDepFine.group(6)) : null;
final Position position = mDepFine.group(6) != null ? new Position("Gl. " + ParserUtils.resolveEntities(mDepFine.group(6)))
: null;
final Departure dep = new Departure(plannedTime.getTime(), null, line, position, destination, null, null);

View file

@ -28,12 +28,12 @@ public final class Departure implements Serializable
final public Date plannedTime;
final public Date predictedTime;
final public Line line;
final public String position;
final public Position position;
final public Location destination;
final public int[] capacity;
final public String message;
public Departure(final Date plannedTime, final Date predictedTime, final Line line, final String position, final Location destination,
public Departure(final Date plannedTime, final Date predictedTime, final Line line, final Position position, final Location destination,
final int[] capacity, final String message)
{
this.plannedTime = plannedTime;
@ -48,7 +48,7 @@ public final class Departure implements Serializable
@Override
public String toString()
{
StringBuilder builder = new StringBuilder("Departure(");
final StringBuilder builder = new StringBuilder("Departure(");
builder.append(plannedTime != null ? plannedTime : "null");
builder.append(",");
builder.append(predictedTime != null ? predictedTime : "null");

View file

@ -0,0 +1,79 @@
/*
* Copyright 2013 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 <http://www.gnu.org/licenses/>.
*/
package de.schildbach.pte.dto;
import java.io.Serializable;
/**
* @author Andreas Schildbach
*/
public final class Position implements Serializable
{
public final String name;
public Position(final String name)
{
this.name = name;
}
@Override
public String toString()
{
final StringBuilder builder = new StringBuilder("Position(");
builder.append(name != null ? name : "null");
builder.append(")");
return builder.toString();
}
@Override
public boolean equals(final Object o)
{
if (o == this)
return true;
if (!(o instanceof Position))
return false;
final Position other = (Position) o;
if (!nullSafeEquals(this.name, other.name))
return false;
return true;
}
@Override
public int hashCode()
{
int hashCode = 0;
hashCode += nullSafeHashCode(name);
return hashCode;
}
private boolean nullSafeEquals(final Object o1, final Object o2)
{
if (o1 == null && o2 == null)
return true;
if (o1 != null && o1.equals(o2))
return true;
return false;
}
private int nullSafeHashCode(final Object o)
{
if (o == null)
return 0;
return o.hashCode();
}
}

View file

@ -28,16 +28,16 @@ public final class Stop implements Serializable
public final Location location;
public final Date plannedArrivalTime;
public final Date predictedArrivalTime;
public final String plannedArrivalPosition;
public final String predictedArrivalPosition;
public final Position plannedArrivalPosition;
public final Position predictedArrivalPosition;
public final Date plannedDepartureTime;
public final Date predictedDepartureTime;
public final String plannedDeparturePosition;
public final String predictedDeparturePosition;
public final Position plannedDeparturePosition;
public final Position predictedDeparturePosition;
public Stop(final Location location, final Date plannedArrivalTime, final Date predictedArrivalTime, final String plannedArrivalPosition,
final String predictedArrivalPosition, final Date plannedDepartureTime, final Date predictedDepartureTime,
final String plannedDeparturePosition, final String predictedDeparturePosition)
public Stop(final Location location, final Date plannedArrivalTime, final Date predictedArrivalTime, final Position plannedArrivalPosition,
final Position predictedArrivalPosition, final Date plannedDepartureTime, final Date predictedDepartureTime,
final Position plannedDeparturePosition, final Position predictedDeparturePosition)
{
this.location = location;
this.plannedArrivalTime = plannedArrivalTime;
@ -50,8 +50,8 @@ public final class Stop implements Serializable
this.predictedDeparturePosition = predictedDeparturePosition;
}
public Stop(final Location location, final boolean departure, final Date plannedTime, final Date predictedTime, final String plannedPosition,
final String predictedPosition)
public Stop(final Location location, final boolean departure, final Date plannedTime, final Date predictedTime, final Position plannedPosition,
final Position predictedPosition)
{
this.location = location;
this.plannedArrivalTime = !departure ? plannedTime : null;
@ -64,8 +64,8 @@ public final class Stop implements Serializable
this.predictedDeparturePosition = departure ? predictedPosition : null;
}
public Stop(final Location location, final Date plannedArrivalTime, final String plannedArrivalPosition, final Date plannedDepartureTime,
final String plannedDeparturePosition)
public Stop(final Location location, final Date plannedArrivalTime, final Position plannedArrivalPosition, final Date plannedDepartureTime,
final Position plannedDeparturePosition)
{
this.location = location;
this.plannedArrivalTime = plannedArrivalTime;
@ -101,7 +101,7 @@ public final class Stop implements Serializable
return null;
}
public String getArrivalPosition()
public Position getArrivalPosition()
{
if (predictedArrivalPosition != null)
return predictedArrivalPosition;
@ -139,7 +139,7 @@ public final class Stop implements Serializable
return null;
}
public String getDeparturePosition()
public Position getDeparturePosition()
{
if (predictedDeparturePosition != null)
return predictedDeparturePosition;
@ -157,7 +157,7 @@ public final class Stop implements Serializable
@Override
public String toString()
{
StringBuilder builder = new StringBuilder("Stop('");
final StringBuilder builder = new StringBuilder("Stop('");
builder.append(location);
builder.append("', arr: ");
builder.append(plannedArrivalTime != null ? plannedArrivalTime : "-");

View file

@ -253,7 +253,7 @@ public final class Trip implements Serializable
return departureStop.getDepartureDelay();
}
public String getDeparturePosition()
public Position getDeparturePosition()
{
return departureStop.getDeparturePosition();
}
@ -283,7 +283,7 @@ public final class Trip implements Serializable
return arrivalStop.getArrivalDelay();
}
public String getArrivalPosition()
public Position getArrivalPosition()
{
return arrivalStop.getArrivalPosition();
}