diff --git a/enabler/src/de/schildbach/pte/BvgProvider.java b/enabler/src/de/schildbach/pte/BvgProvider.java index 6f04eb27..93dadbbd 100644 --- a/enabler/src/de/schildbach/pte/BvgProvider.java +++ b/enabler/src/de/schildbach/pte/BvgProvider.java @@ -742,4 +742,20 @@ public final class BvgProvider extends AbstractHafasProvider { return Berlin.BOUNDARY; } + + public static int migrateStationIdReverse(final int stationId) + { + if (stationId < 100000000 || stationId >= 1000000000) + return stationId; + + final int low = stationId % 100000; + final int middle = (stationId % 100000000) - low; + + if (middle != 1000000) + return stationId; + + final int high = stationId - (stationId % 100000000); + + return high / 1000 + low; + } } diff --git a/enabler/test/de/schildbach/pte/live/BvgProviderLiveTest.java b/enabler/test/de/schildbach/pte/live/BvgProviderLiveTest.java index a5568016..e28f704b 100644 --- a/enabler/test/de/schildbach/pte/live/BvgProviderLiveTest.java +++ b/enabler/test/de/schildbach/pte/live/BvgProviderLiveTest.java @@ -192,4 +192,16 @@ public class BvgProviderLiveTest extends AbstractProviderLiveTest final QueryConnectionsResult laterResult = queryMoreConnections(result.context, true); System.out.println(laterResult); } + + @Test + public void testStationIdReverse() throws Exception + { + Assert.assertEquals(BvgProvider.migrateStationIdReverse(101000316), 100316); + Assert.assertEquals(BvgProvider.migrateStationIdReverse(301000316), 300316); + + // no conversions + Assert.assertEquals(BvgProvider.migrateStationIdReverse(102000316), 102000316); + Assert.assertEquals(BvgProvider.migrateStationIdReverse(1101000316), 1101000316); + Assert.assertEquals(BvgProvider.migrateStationIdReverse(11000316), 11000316); + } }