From b2f4a7637053aea44eeb510190a153fd6138e6ad Mon Sep 17 00:00:00 2001 From: "andreas.schildbach@gmail.com" Date: Mon, 28 Feb 2011 13:08:48 +0000 Subject: [PATCH] split place and name for connection parts git-svn-id: https://public-transport-enabler.googlecode.com/svn/trunk@516 0924bc21-9374-b0fa-ee44-9ff1593b38f0 --- src/de/schildbach/pte/BvgProvider.java | 71 ++++++++++++-------------- 1 file changed, 32 insertions(+), 39 deletions(-) diff --git a/src/de/schildbach/pte/BvgProvider.java b/src/de/schildbach/pte/BvgProvider.java index 45268569..96b358c7 100644 --- a/src/de/schildbach/pte/BvgProvider.java +++ b/src/de/schildbach/pte/BvgProvider.java @@ -146,8 +146,8 @@ public final class BvgProvider extends AbstractHafasProvider final int parsedId = Integer.parseInt(mOwn.group(1)); final int parsedLon = (int) (Float.parseFloat(mOwn.group(2)) * 1E6); final int parsedLat = (int) (Float.parseFloat(mOwn.group(3)) * 1E6); - final String parsedName = ParserUtils.urlDecode(mOwn.group(4), "ISO-8859-1"); - stations.add(newStation(parsedId, parsedName, parsedLat, parsedLon)); + final String[] parsedPlaceAndName = splitNameAndPlace(ParserUtils.urlDecode(mOwn.group(4), "ISO-8859-1")); + stations.add(new Location(LocationType.STATION, parsedId, parsedLat, parsedLon, parsedPlaceAndName[0], parsedPlaceAndName[1])); } final Matcher mPage = P_NEARBY_PAGE.matcher(page); @@ -162,8 +162,8 @@ public final class BvgProvider extends AbstractHafasProvider if (mFineLocation.find()) { final int parsedId = Integer.parseInt(mFineLocation.group(1)); - final String parsedName = ParserUtils.resolveEntities(mFineLocation.group(2)); - final Location station = newStation(parsedId, parsedName, 0, 0); + final String[] parsedPlaceAndName = splitNameAndPlace(ParserUtils.resolveEntities(mFineLocation.group(2))); + final Location station = new Location(LocationType.STATION, parsedId, parsedPlaceAndName[0], parsedPlaceAndName[1]); if (!stations.contains(station)) stations.add(station); } @@ -184,37 +184,21 @@ public final class BvgProvider extends AbstractHafasProvider } } - private Location newStation(final int id, final String parsedName, final int lat, final int lon) + @Override + protected String[] splitNameAndPlace(final String name) { - String place = null, name = null; + if (name.endsWith(" (Berlin)")) + return new String[] { "Berlin", name.substring(0, name.length() - 9) }; + else if (name.startsWith("Potsdam, ")) + return new String[] { "Potsdam", name.substring(9) }; + else if (name.startsWith("Cottbus, ")) + return new String[] { "Cottbus", name.substring(9) }; + else if (name.startsWith("Brandenburg, ")) + return new String[] { "Brandenburg", name.substring(13) }; + else if (name.startsWith("Frankfurt (Oder), ")) + return new String[] { "Frankfurt (Oder)", name.substring(18) }; - if (parsedName.endsWith(" (Berlin)")) - { - place = "Berlin"; - name = parsedName.substring(0, parsedName.length() - 9); - } - else if (parsedName.startsWith("Potsdam, ")) - { - place = "Potsdam"; - name = parsedName.substring(9); - } - else if (parsedName.startsWith("Cottbus, ")) - { - place = "Cottbus"; - name = parsedName.substring(9); - } - else if (parsedName.startsWith("Brandenburg, ")) - { - place = "Brandenburg"; - name = parsedName.substring(13); - } - else if (parsedName.startsWith("Frankfurt (Oder), ")) - { - place = "Frankfurt (Oder)"; - name = parsedName.substring(18); - } - - return new Location(LocationType.STATION, id, lat, lon, place, name); + return super.splitNameAndPlace(name); } public static final String STATION_URL_CONNECTION = "http://mobil.bvg.de/Fahrinfo/bin/query.bin/dox"; @@ -494,10 +478,15 @@ public final class BvgProvider extends AbstractHafasProvider final Location departure; if (departureName != null) + { + final String[] placeAndName = splitNameAndPlace(departureName); departure = new Location(departureId != 0 ? LocationType.STATION : LocationType.ANY, departureId, departureLat, departureLon, - null, departureName); + placeAndName[0], placeAndName[1]); + } else + { departure = lastArrival; + } if (departure != null && firstDeparture == null) firstDeparture = departure; @@ -513,7 +502,9 @@ public final class BvgProvider extends AbstractHafasProvider final String line = normalizeLine(ParserUtils.resolveEntities(mDetFine.group(8))); - final Location destination = new Location(LocationType.ANY, 0, null, ParserUtils.resolveEntities(mDetFine.group(9))); + final String[] destinationPlaceAndName = splitNameAndPlace(ParserUtils.resolveEntities(mDetFine.group(9))); + + final Location destination = new Location(LocationType.ANY, 0, destinationPlaceAndName[0], destinationPlaceAndName[1]); Date arrivalTime = ParserUtils.joinDateTime(currentDate, ParserUtils.parseTime(mDetFine.group(10))); if (departureTime.after(arrivalTime)) @@ -523,7 +514,9 @@ public final class BvgProvider extends AbstractHafasProvider final int arrivalId = Integer.parseInt(mDetFine.group(12)); - final Location arrival = new Location(LocationType.STATION, arrivalId, null, ParserUtils.resolveEntities(mDetFine.group(13))); + final String[] arrivalPlaceAndName = splitNameAndPlace(ParserUtils.resolveEntities(mDetFine.group(13))); + + final Location arrival = new Location(LocationType.STATION, arrivalId, arrivalPlaceAndName[0], arrivalPlaceAndName[1]); parts.add(new Connection.Trip(line, destination, departureTime, departurePosition, departure, arrivalTime, arrivalPosition, arrival, null, null)); @@ -541,11 +534,11 @@ public final class BvgProvider extends AbstractHafasProvider final int arrivalLon = mDetFine.group(17) != null ? Integer.parseInt(mDetFine.group(17)) : 0; final int arrivalLat = mDetFine.group(18) != null ? Integer.parseInt(mDetFine.group(18)) : 0; - final String arrivalName = ParserUtils.resolveEntities(ParserUtils.selectNotNull(mDetFine.group(16), mDetFine.group(19), - mDetFine.group(20))); + final String[] arrivalPlaceAndName = splitNameAndPlace(ParserUtils.resolveEntities(ParserUtils.selectNotNull( + mDetFine.group(16), mDetFine.group(19), mDetFine.group(20)))); final Location arrival = new Location(arrivalId != 0 ? LocationType.STATION : LocationType.ANY, arrivalId, arrivalLat, - arrivalLon, null, arrivalName); + arrivalLon, arrivalPlaceAndName[0], arrivalPlaceAndName[1]); if (parts.size() > 0 && parts.get(parts.size() - 1) instanceof Connection.Footway) {