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.LocationType;
import de.schildbach.pte.dto.NearbyStationsResult; import de.schildbach.pte.dto.NearbyStationsResult;
import de.schildbach.pte.dto.Point; import de.schildbach.pte.dto.Point;
import de.schildbach.pte.dto.Position;
import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.Product;
import de.schildbach.pte.dto.QueryDeparturesResult; import de.schildbach.pte.dto.QueryDeparturesResult;
import de.schildbach.pte.dto.QueryTripsContext; import de.schildbach.pte.dto.QueryTripsContext;
@ -1556,7 +1557,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
new LinkedList<Departure>(), new LinkedList<LineDestination>()); 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"); XmlPullUtil.enter(pp, "itdDeparture");
@ -1667,7 +1668,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
XmlPullUtil.enter(pp, "r"); XmlPullUtil.enter(pp, "r");
final int assignedId = Integer.parseInt(requireValueTag(pp, "id")); final int assignedId = Integer.parseInt(requireValueTag(pp, "id"));
requireValueTag(pp, "a"); requireValueTag(pp, "a");
final String position = optValueTag(pp, "pl"); final Position position = new Position(optValueTag(pp, "pl"));
XmlPullUtil.exit(pp, "r"); XmlPullUtil.exit(pp, "r");
/* final Point positionCoordinate = */coordStrToPoint(optValueTag(pp, "c")); /* final Point positionCoordinate = */coordStrToPoint(optValueTag(pp, "c"));
@ -2403,7 +2404,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
final Location departureLocation = processItdPointAttributes(pp); final Location departureLocation = processItdPointAttributes(pp);
if (firstDepartureLocation == null) if (firstDepartureLocation == null)
firstDepartureLocation = departureLocation; firstDepartureLocation = departureLocation;
final String departurePosition = normalizePlatformName(XmlPullUtil.optAttr(pp, "platformName", null)); final Position departurePosition = normalizePlatformName(XmlPullUtil.optAttr(pp, "platformName", null));
XmlPullUtil.enter(pp, "itdPoint"); XmlPullUtil.enter(pp, "itdPoint");
if (XmlPullUtil.test(pp, "itdMapItemList")) if (XmlPullUtil.test(pp, "itdMapItemList"))
XmlPullUtil.next(pp); XmlPullUtil.next(pp);
@ -2427,7 +2428,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
throw new IllegalStateException(); throw new IllegalStateException();
final Location arrivalLocation = processItdPointAttributes(pp); final Location arrivalLocation = processItdPointAttributes(pp);
lastArrivalLocation = arrivalLocation; lastArrivalLocation = arrivalLocation;
final String arrivalPosition = normalizePlatformName(XmlPullUtil.optAttr(pp, "platformName", null)); final Position arrivalPosition = normalizePlatformName(XmlPullUtil.optAttr(pp, "platformName", null));
XmlPullUtil.enter(pp, "itdPoint"); XmlPullUtil.enter(pp, "itdPoint");
if (XmlPullUtil.test(pp, "itdMapItemList")) if (XmlPullUtil.test(pp, "itdMapItemList"))
XmlPullUtil.next(pp); XmlPullUtil.next(pp);
@ -2576,7 +2577,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
{ {
final Location stopLocation = processItdPointAttributes(pp); 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.enter(pp, "itdPoint");
XmlPullUtil.require(pp, "itdDateTime"); XmlPullUtil.require(pp, "itdDateTime");
@ -2837,7 +2838,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
XmlPullUtil.enter(pp, "r"); XmlPullUtil.enter(pp, "r");
final int id = Integer.parseInt(requireValueTag(pp, "id")); final int id = Integer.parseInt(requireValueTag(pp, "id"));
optValueTag(pp, "a"); 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 String place = normalizeLocationName(optValueTag(pp, "pc"));
final Point coord = coordStrToPoint(requireValueTag(pp, "c")); final Point coord = coordStrToPoint(requireValueTag(pp, "c"));
XmlPullUtil.exit(pp, "r"); XmlPullUtil.exit(pp, "r");
@ -3139,7 +3140,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
"(\\d+)\\s*" + // "(\\d+)\\s*" + //
"(?:([A-Z])\\s*(?:-\\s*([A-Z]))?)?", Pattern.CASE_INSENSITIVE); "(?:([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) if (platformName != null)
{ {
@ -3148,15 +3149,15 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
{ {
final String simple = Integer.toString(Integer.parseInt(m.group(1))); final String simple = Integer.toString(Integer.parseInt(m.group(1)));
if (m.group(2) != null && m.group(3) != null) 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) else if (m.group(2) != null)
return simple + m.group(2); return new Position(simple + m.group(2));
else else
return simple; return new Position(simple);
} }
else 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.LocationType;
import de.schildbach.pte.dto.NearbyStationsResult; import de.schildbach.pte.dto.NearbyStationsResult;
import de.schildbach.pte.dto.Point; import de.schildbach.pte.dto.Point;
import de.schildbach.pte.dto.Position;
import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.Product;
import de.schildbach.pte.dto.QueryDeparturesResult; import de.schildbach.pte.dto.QueryDeparturesResult;
import de.schildbach.pte.dto.QueryTripsContext; import de.schildbach.pte.dto.QueryTripsContext;
@ -295,17 +296,17 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
throw new IllegalStateException("cannot handle: " + type); 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.enter(pp, "Platform");
XmlPullUtil.require(pp, "Text"); XmlPullUtil.require(pp, "Text");
final String position = XmlPullUtil.text(pp).trim(); final String platformText = XmlPullUtil.text(pp).trim();
XmlPullUtil.exit(pp, "Platform"); XmlPullUtil.exit(pp, "Platform");
if (position.length() == 0) if (platformText.length() == 0)
return null; return null;
else else
return position; return new Position(platformText);
} }
public List<Location> xmlLocValReq(final CharSequence constraint) throws IOException public List<Location> xmlLocValReq(final CharSequence constraint) throws IOException
@ -761,7 +762,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
predictedTime = null; 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; final String[] destinationPlaceAndName;
if (dir != null) if (dir != null)
@ -1206,7 +1207,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
time.setTimeInMillis(currentDate.getTimeInMillis()); time.setTimeInMillis(currentDate.getTimeInMillis());
parseTime(time, XmlPullUtil.text(pp)); parseTime(time, XmlPullUtil.text(pp));
final Date departureTime = time.getTime(); final Date departureTime = time.getTime();
final String departurePos = parsePlatform(pp); final Position departurePos = parsePlatform(pp);
XmlPullUtil.exit(pp, "Dep"); XmlPullUtil.exit(pp, "Dep");
XmlPullUtil.exit(pp, "BasicStop"); XmlPullUtil.exit(pp, "BasicStop");
@ -1278,8 +1279,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
{ {
Date stopArrivalTime = null; Date stopArrivalTime = null;
Date stopDepartureTime = null; Date stopDepartureTime = null;
String stopArrivalPosition = null; Position stopArrivalPosition = null;
String stopDeparturePosition = null; Position stopDeparturePosition = null;
if (XmlPullUtil.test(pp, "Arr")) if (XmlPullUtil.test(pp, "Arr"))
{ {
@ -1364,7 +1365,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
time.setTimeInMillis(currentDate.getTimeInMillis()); time.setTimeInMillis(currentDate.getTimeInMillis());
parseTime(time, XmlPullUtil.text(pp)); parseTime(time, XmlPullUtil.text(pp));
final Date arrivalTime = time.getTime(); final Date arrivalTime = time.getTime();
final String arrivalPos = parsePlatform(pp); final Position arrivalPos = parsePlatform(pp);
XmlPullUtil.exit(pp, "Arr"); XmlPullUtil.exit(pp, "Arr");
XmlPullUtil.exit(pp, "BasicStop"); XmlPullUtil.exit(pp, "BasicStop");
@ -1851,8 +1852,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
final String lineName = strings.read(is); final String lineName = strings.read(is);
final String plannedDeparturePosition = normalizePosition(strings.read(is)); final Position plannedDeparturePosition = normalizePosition(strings.read(is));
final String plannedArrivalPosition = normalizePosition(strings.read(is)); final Position plannedArrivalPosition = normalizePosition(strings.read(is));
final int legAttrIndex = is.readShortReverse(); final int legAttrIndex = is.readShortReverse();
@ -1913,8 +1914,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
final long predictedDepartureTime = time(is, resDate, tripDayOffset); final long predictedDepartureTime = time(is, resDate, tripDayOffset);
final long predictedArrivalTime = time(is, resDate, tripDayOffset); final long predictedArrivalTime = time(is, resDate, tripDayOffset);
final String predictedDeparturePosition = normalizePosition(strings.read(is)); final Position predictedDeparturePosition = normalizePosition(strings.read(is));
final String predictedArrivalPosition = normalizePosition(strings.read(is)); final Position predictedArrivalPosition = normalizePosition(strings.read(is));
is.readInt(); is.readInt();
@ -1940,8 +1941,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
final Date plannedStopDepartureDate = plannedStopDepartureTime != 0 ? new Date(plannedStopDepartureTime) : null; final Date plannedStopDepartureDate = plannedStopDepartureTime != 0 ? new Date(plannedStopDepartureTime) : null;
final long plannedStopArrivalTime = time(is, resDate, tripDayOffset); final long plannedStopArrivalTime = time(is, resDate, tripDayOffset);
final Date plannedStopArrivalDate = plannedStopArrivalTime != 0 ? new Date(plannedStopArrivalTime) : null; final Date plannedStopArrivalDate = plannedStopArrivalTime != 0 ? new Date(plannedStopArrivalTime) : null;
final String plannedStopDeparturePosition = normalizePosition(strings.read(is)); final Position plannedStopDeparturePosition = normalizePosition(strings.read(is));
final String plannedStopArrivalPosition = normalizePosition(strings.read(is)); final Position plannedStopArrivalPosition = normalizePosition(strings.read(is));
is.readInt(); is.readInt();
@ -1949,8 +1950,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
final Date predictedStopDepartureDate = predictedStopDepartureTime != 0 ? new Date(predictedStopDepartureTime) : null; final Date predictedStopDepartureDate = predictedStopDepartureTime != 0 ? new Date(predictedStopDepartureTime) : null;
final long predictedStopArrivalTime = time(is, resDate, tripDayOffset); final long predictedStopArrivalTime = time(is, resDate, tripDayOffset);
final Date predictedStopArrivalDate = predictedStopArrivalTime != 0 ? new Date(predictedStopArrivalTime) : null; final Date predictedStopArrivalDate = predictedStopArrivalTime != 0 ? new Date(predictedStopArrivalTime) : null;
final String predictedStopDeparturePosition = normalizePosition(strings.read(is)); final Position predictedStopDeparturePosition = normalizePosition(strings.read(is));
final String predictedStopArrivalPosition = normalizePosition(strings.read(is)); final Position predictedStopArrivalPosition = normalizePosition(strings.read(is));
is.readInt(); 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 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) if (position == null)
return null; return null;
final Matcher m = P_POSITION_PLATFORM.matcher(position); final Matcher m = P_POSITION_PLATFORM.matcher(position);
if (!m.matches()) 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) 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.LocationType;
import de.schildbach.pte.dto.NearbyStationsResult; import de.schildbach.pte.dto.NearbyStationsResult;
import de.schildbach.pte.dto.Point; import de.schildbach.pte.dto.Point;
import de.schildbach.pte.dto.Position;
import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.Product;
import de.schildbach.pte.dto.QueryDeparturesResult; import de.schildbach.pte.dto.QueryDeparturesResult;
import de.schildbach.pte.dto.QueryTripsContext; import de.schildbach.pte.dto.QueryTripsContext;
@ -392,7 +393,7 @@ public final class BvgProvider extends AbstractHafasProvider
final char lineProduct = normalizeType(categoryFromName(lineName)); final char lineProduct = normalizeType(categoryFromName(lineName));
final Line line = newLine(lineProduct, normalizeLineName(lineName), null); 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 String[] destinationPlaceAndName = splitPlaceAndName(ParserUtils.resolveEntities(mDepFine.group(4)));
final Location destination = new Location(LocationType.ANY, 0, destinationPlaceAndName[0], destinationPlaceAndName[1]); 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 char lineProduct = normalizeType(categoryFromName(lineName));
final Line line = newLine(lineProduct, normalizeLineName(lineName), null); 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 int destinationId = Integer.parseInt(mDepFine.group(4));
final String[] destinationPlaceAndName = splitPlaceAndName(ParserUtils.resolveEntities(mDepFine.group(5))); 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.Location;
import de.schildbach.pte.dto.LocationType; import de.schildbach.pte.dto.LocationType;
import de.schildbach.pte.dto.NearbyStationsResult; import de.schildbach.pte.dto.NearbyStationsResult;
import de.schildbach.pte.dto.Position;
import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.Product;
import de.schildbach.pte.dto.QueryDeparturesResult; import de.schildbach.pte.dto.QueryDeparturesResult;
import de.schildbach.pte.dto.QueryDeparturesResult.Status; 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, final Location destination = new Location(destinationId > 0 ? LocationType.STATION : LocationType.ANY, destinationId, null,
destinationName); 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, final Departure dep = new Departure(plannedTime.getTime(), predictedTime != null ? predictedTime.getTime() : null, line,
position, destination, null, null); 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.Location;
import de.schildbach.pte.dto.LocationType; import de.schildbach.pte.dto.LocationType;
import de.schildbach.pte.dto.NearbyStationsResult; import de.schildbach.pte.dto.NearbyStationsResult;
import de.schildbach.pte.dto.Position;
import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.Product;
import de.schildbach.pte.dto.QueryDeparturesResult; import de.schildbach.pte.dto.QueryDeparturesResult;
import de.schildbach.pte.dto.QueryDeparturesResult.Status; 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, final Location destination = new Location(destinationId > 0 ? LocationType.STATION : LocationType.ANY, destinationId, null,
destinationName); 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, final Departure dep = new Departure(plannedTime.getTime(), predictedTime != null ? predictedTime.getTime() : null, line,
position, destination, null, null); 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.Location;
import de.schildbach.pte.dto.LocationType; import de.schildbach.pte.dto.LocationType;
import de.schildbach.pte.dto.NearbyStationsResult; import de.schildbach.pte.dto.NearbyStationsResult;
import de.schildbach.pte.dto.Position;
import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.Product;
import de.schildbach.pte.dto.QueryDeparturesResult; import de.schildbach.pte.dto.QueryDeparturesResult;
import de.schildbach.pte.dto.QueryDeparturesResult.Status; 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, final Location destination = new Location(destinationId > 0 ? LocationType.STATION : LocationType.ANY, destinationId, null,
destinationName); 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); 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 plannedTime;
final public Date predictedTime; final public Date predictedTime;
final public Line line; final public Line line;
final public String position; final public Position position;
final public Location destination; final public Location destination;
final public int[] capacity; final public int[] capacity;
final public String message; 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) final int[] capacity, final String message)
{ {
this.plannedTime = plannedTime; this.plannedTime = plannedTime;
@ -48,7 +48,7 @@ public final class Departure implements Serializable
@Override @Override
public String toString() public String toString()
{ {
StringBuilder builder = new StringBuilder("Departure("); final StringBuilder builder = new StringBuilder("Departure(");
builder.append(plannedTime != null ? plannedTime : "null"); builder.append(plannedTime != null ? plannedTime : "null");
builder.append(","); builder.append(",");
builder.append(predictedTime != null ? predictedTime : "null"); 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 Location location;
public final Date plannedArrivalTime; public final Date plannedArrivalTime;
public final Date predictedArrivalTime; public final Date predictedArrivalTime;
public final String plannedArrivalPosition; public final Position plannedArrivalPosition;
public final String predictedArrivalPosition; public final Position predictedArrivalPosition;
public final Date plannedDepartureTime; public final Date plannedDepartureTime;
public final Date predictedDepartureTime; public final Date predictedDepartureTime;
public final String plannedDeparturePosition; public final Position plannedDeparturePosition;
public final String predictedDeparturePosition; public final Position predictedDeparturePosition;
public Stop(final Location location, final Date plannedArrivalTime, final Date predictedArrivalTime, final String plannedArrivalPosition, public Stop(final Location location, final Date plannedArrivalTime, final Date predictedArrivalTime, final Position plannedArrivalPosition,
final String predictedArrivalPosition, final Date plannedDepartureTime, final Date predictedDepartureTime, final Position predictedArrivalPosition, final Date plannedDepartureTime, final Date predictedDepartureTime,
final String plannedDeparturePosition, final String predictedDeparturePosition) final Position plannedDeparturePosition, final Position predictedDeparturePosition)
{ {
this.location = location; this.location = location;
this.plannedArrivalTime = plannedArrivalTime; this.plannedArrivalTime = plannedArrivalTime;
@ -50,8 +50,8 @@ public final class Stop implements Serializable
this.predictedDeparturePosition = predictedDeparturePosition; this.predictedDeparturePosition = predictedDeparturePosition;
} }
public Stop(final Location location, final boolean departure, final Date plannedTime, final Date predictedTime, final String plannedPosition, public Stop(final Location location, final boolean departure, final Date plannedTime, final Date predictedTime, final Position plannedPosition,
final String predictedPosition) final Position predictedPosition)
{ {
this.location = location; this.location = location;
this.plannedArrivalTime = !departure ? plannedTime : null; this.plannedArrivalTime = !departure ? plannedTime : null;
@ -64,8 +64,8 @@ public final class Stop implements Serializable
this.predictedDeparturePosition = departure ? predictedPosition : null; this.predictedDeparturePosition = departure ? predictedPosition : null;
} }
public Stop(final Location location, final Date plannedArrivalTime, final String plannedArrivalPosition, final Date plannedDepartureTime, public Stop(final Location location, final Date plannedArrivalTime, final Position plannedArrivalPosition, final Date plannedDepartureTime,
final String plannedDeparturePosition) final Position plannedDeparturePosition)
{ {
this.location = location; this.location = location;
this.plannedArrivalTime = plannedArrivalTime; this.plannedArrivalTime = plannedArrivalTime;
@ -101,7 +101,7 @@ public final class Stop implements Serializable
return null; return null;
} }
public String getArrivalPosition() public Position getArrivalPosition()
{ {
if (predictedArrivalPosition != null) if (predictedArrivalPosition != null)
return predictedArrivalPosition; return predictedArrivalPosition;
@ -139,7 +139,7 @@ public final class Stop implements Serializable
return null; return null;
} }
public String getDeparturePosition() public Position getDeparturePosition()
{ {
if (predictedDeparturePosition != null) if (predictedDeparturePosition != null)
return predictedDeparturePosition; return predictedDeparturePosition;
@ -157,7 +157,7 @@ public final class Stop implements Serializable
@Override @Override
public String toString() public String toString()
{ {
StringBuilder builder = new StringBuilder("Stop('"); final StringBuilder builder = new StringBuilder("Stop('");
builder.append(location); builder.append(location);
builder.append("', arr: "); builder.append("', arr: ");
builder.append(plannedArrivalTime != null ? plannedArrivalTime : "-"); builder.append(plannedArrivalTime != null ? plannedArrivalTime : "-");

View file

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