diff --git a/src/de/schildbach/pte/BahnProvider.java b/src/de/schildbach/pte/BahnProvider.java
index 6a7073c7..fb78db2f 100644
--- a/src/de/schildbach/pte/BahnProvider.java
+++ b/src/de/schildbach/pte/BahnProvider.java
@@ -456,7 +456,7 @@ public final class BahnProvider implements NetworkProvider
, Pattern.DOTALL);
private static final Pattern P_DEPARTURES_COARSE = Pattern.compile("
\n(.+?)
", Pattern.DOTALL);
static final Pattern P_DEPARTURES_FINE = Pattern.compile(".*?" //
- + "\n" //
+ + "\n" // lineLink
+ "(.*?)\n" // line
+ "\n" //
+ ">>\n" //
@@ -504,14 +504,16 @@ public final class BahnProvider implements NetworkProvider
final Matcher mDepFine = P_DEPARTURES_FINE.matcher(mDepCoarse.group(1));
if (mDepFine.matches())
{
- final String line = normalizeLine(ParserUtils.resolveEntities(mDepFine.group(1)));
+ final String lineLink = ParserUtils.resolveEntities(mDepFine.group(1));
- final String destination = ParserUtils.resolveEntities(mDepFine.group(2));
+ final String line = normalizeLine(ParserUtils.resolveEntities(mDepFine.group(2)));
+
+ final String destination = ParserUtils.resolveEntities(mDepFine.group(3));
final Calendar current = new GregorianCalendar();
current.setTime(currentTime);
final Calendar parsed = new GregorianCalendar();
- parsed.setTime(ParserUtils.parseTime(mDepFine.group(3)));
+ parsed.setTime(ParserUtils.parseTime(mDepFine.group(4)));
parsed.set(Calendar.YEAR, current.get(Calendar.YEAR));
parsed.set(Calendar.MONTH, current.get(Calendar.MONTH));
parsed.set(Calendar.DAY_OF_MONTH, current.get(Calendar.DAY_OF_MONTH));
@@ -520,23 +522,23 @@ public final class BahnProvider implements NetworkProvider
final Date plannedTime = parsed.getTime();
Date predictedTime = null;
- if (mDepFine.group(4) != null)
+ if (mDepFine.group(5) != null)
{
predictedTime = plannedTime;
}
- else if (mDepFine.group(5) != null)
+ else if (mDepFine.group(6) != null)
{
- final int delay = Integer.parseInt(mDepFine.group(5));
+ final int delay = Integer.parseInt(mDepFine.group(6));
parsed.add(Calendar.MINUTE, delay);
predictedTime = parsed.getTime();
}
- final String message = ParserUtils.resolveEntities(mDepFine.group(6));
+ final String message = ParserUtils.resolveEntities(mDepFine.group(7));
- final String position = ParserUtils.resolveEntities(mDepFine.group(7));
+ final String position = ParserUtils.resolveEntities(mDepFine.group(8));
final Departure dep = new Departure(plannedTime, predictedTime, line, line != null ? LINES.get(line.charAt(0)) : null,
- position, 0, destination, message);
+ lineLink, position, 0, destination, message);
if (!departures.contains(dep))
departures.add(dep);
}
diff --git a/src/de/schildbach/pte/Departure.java b/src/de/schildbach/pte/Departure.java
index 5281c0d6..bbe575b8 100644
--- a/src/de/schildbach/pte/Departure.java
+++ b/src/de/schildbach/pte/Departure.java
@@ -28,18 +28,20 @@ public final class Departure
final public Date predictedTime;
final public String line;
final public int[] lineColors;
+ final public String lineLink;
final public String position;
final public int destinationId;
final public String destination;
final public String message;
- public Departure(final Date plannedTime, final Date predictedTime, final String line, final int[] lineColors, final String position,
- final int destinationId, final String destination, final String message)
+ public Departure(final Date plannedTime, final Date predictedTime, final String line, final int[] lineColors, final String lineLink,
+ final String position, final int destinationId, final String destination, final String message)
{
this.plannedTime = plannedTime;
this.predictedTime = predictedTime;
this.line = line;
this.lineColors = lineColors;
+ this.lineLink = lineLink;
this.position = position;
this.destinationId = destinationId;
this.destination = destination;
@@ -53,6 +55,7 @@ public final class Departure
this.predictedTime = null;
this.line = line;
this.lineColors = lineColors;
+ this.lineLink = null;
this.position = position;
this.destinationId = destinationId;
this.destination = destination;
diff --git a/src/de/schildbach/pte/OebbProvider.java b/src/de/schildbach/pte/OebbProvider.java
index aa1432cb..d297e016 100644
--- a/src/de/schildbach/pte/OebbProvider.java
+++ b/src/de/schildbach/pte/OebbProvider.java
@@ -572,7 +572,7 @@ public class OebbProvider implements NetworkProvider
final String position = mDepFine.group(7) != null ? "Gl. " + ParserUtils.resolveEntities(mDepFine.group(7)) : null;
- final Departure dep = new Departure(plannedTime, predictedTime, line, line != null ? LINES.get(line.charAt(0)) : null,
+ final Departure dep = new Departure(plannedTime, predictedTime, line, line != null ? LINES.get(line.charAt(0)) : null, null,
position, destinationId, destination, null);
if (!departures.contains(dep))
diff --git a/src/de/schildbach/pte/RmvProvider.java b/src/de/schildbach/pte/RmvProvider.java
index c8783fd1..864c99ba 100644
--- a/src/de/schildbach/pte/RmvProvider.java
+++ b/src/de/schildbach/pte/RmvProvider.java
@@ -568,7 +568,7 @@ public class RmvProvider implements NetworkProvider
final String position = ParserUtils.resolveEntities(ParserUtils.selectNotNull(mDepFine.group(5), mDepFine.group(6)));
- final Departure dep = new Departure(plannedTime, predictedTime, line, line != null ? LINES.get(line.charAt(0)) : null,
+ final Departure dep = new Departure(plannedTime, predictedTime, line, line != null ? LINES.get(line.charAt(0)) : null, null,
position, 0, destination, null);
if (!departures.contains(dep))
diff --git a/src/de/schildbach/pte/VbbProvider.java b/src/de/schildbach/pte/VbbProvider.java
index b2c58f27..a54c01ba 100644
--- a/src/de/schildbach/pte/VbbProvider.java
+++ b/src/de/schildbach/pte/VbbProvider.java
@@ -589,7 +589,7 @@ public final class VbbProvider implements NetworkProvider
final String destination = ParserUtils.resolveEntities(mDepFine.group(live ? 4 : 5));
- final Departure dep = new Departure(plannedTime, predictedTime, line, line != null ? LINES.get(line) : null, position,
+ final Departure dep = new Departure(plannedTime, predictedTime, line, line != null ? LINES.get(line) : null, null, position,
destinationId, destination, null);
if (!departures.contains(dep))
departures.add(dep);
diff --git a/test/de/schildbach/pte/BahnProviderTest.java b/test/de/schildbach/pte/BahnProviderTest.java
index 7acd122b..3678371a 100644
--- a/test/de/schildbach/pte/BahnProviderTest.java
+++ b/test/de/schildbach/pte/BahnProviderTest.java
@@ -51,7 +51,8 @@ public class BahnProviderTest
+ "
\n" //
+ "10:42Gl. 1");
- assertNotNull(m.group(7)); // position
+ assertNotNull(m.group(1)); // lineLink
+ assertNotNull(m.group(8)); // position
}
@Test
@@ -66,8 +67,9 @@ public class BahnProviderTest
+ "
\n" //
+ "21:58 pünktl., Gl. 13");
- assertNotNull(m.group(4)); // onTime
- assertNotNull(m.group(7)); // position
+ assertNotNull(m.group(1)); // lineLink
+ assertNotNull(m.group(5)); // onTime
+ assertNotNull(m.group(8)); // position
}
@Test
@@ -82,9 +84,10 @@ public class BahnProviderTest
+ "
\n" //
+ "07:02 ca. +5, Fährt heute nur bis Düsseldorf Hbf, Gl. 10");
- assertNotNull(m.group(5)); // delay
- assertNotNull(m.group(6)); // message
- assertNotNull(m.group(7)); // position
+ assertNotNull(m.group(1)); // lineLink
+ assertNotNull(m.group(6)); // delay
+ assertNotNull(m.group(7)); // message
+ assertNotNull(m.group(8)); // position
}
@Test
@@ -99,8 +102,9 @@ public class BahnProviderTest
+ "
\n" //
+ "17:10 pünktl., heute Gl. 7 ");
- assertNotNull(m.group(4)); // onTime
- assertNotNull(m.group(7)); // position
+ assertNotNull(m.group(1)); // lineLink
+ assertNotNull(m.group(5)); // onTime
+ assertNotNull(m.group(8)); // position
}
@Test
@@ -115,9 +119,10 @@ public class BahnProviderTest
+ "
\n" //
+ "19:57 pünktl., Änderung im Zuglauf!, heute Gl. 7 ");
- assertNotNull(m.group(4)); // onTime
- assertNotNull(m.group(6)); // message
- assertNotNull(m.group(7)); // position
+ assertNotNull(m.group(1)); // lineLink
+ assertNotNull(m.group(5)); // onTime
+ assertNotNull(m.group(7)); // message
+ assertNotNull(m.group(8)); // position
}
@Test
@@ -132,7 +137,8 @@ public class BahnProviderTest
+ "
\n" //
+ "04:52 k.A., Gl. 3");
- assertNotNull(m.group(7)); // position
+ assertNotNull(m.group(1)); // lineLink
+ assertNotNull(m.group(8)); // position
}
@Test
@@ -147,8 +153,9 @@ public class BahnProviderTest
+ "
\n" //
+ "14:49 pünktl., Gl. 1,
Ersatzzug fürRB 5416");
- assertNotNull(m.group(4)); // onTime
- assertNotNull(m.group(7)); // position
+ assertNotNull(m.group(1)); // lineLink
+ assertNotNull(m.group(5)); // onTime
+ assertNotNull(m.group(8)); // position
}
@Test
@@ -163,7 +170,8 @@ public class BahnProviderTest
+ "
\n" //
+ "10:27, Zug fällt aus,
Ersatzzug S ");
- assertNotNull(m.group(6)); // message
+ assertNotNull(m.group(1)); // lineLink
+ assertNotNull(m.group(7)); // message
}
@Test
@@ -178,8 +186,9 @@ public class BahnProviderTest
+ "
\n" //
+ "00:18, Zug fällt aus, Gl. 4,
Ersatzzug RB 30535");
- assertNotNull(m.group(6)); // message
- assertNotNull(m.group(7)); // position
+ assertNotNull(m.group(1)); // lineLink
+ assertNotNull(m.group(7)); // message
+ assertNotNull(m.group(8)); // position
}
@Test
@@ -194,8 +203,9 @@ public class BahnProviderTest
+ "
\n" //
+ "10:59 pünktl., Änderung im Zuglauf!, Fährt heute nur bis Köln-Dellbrück, Gl. 1");
- assertNotNull(m.group(4)); // onTime
- assertNotNull(m.group(6)); // message
+ assertNotNull(m.group(1)); // lineLink
+ assertNotNull(m.group(5)); // onTime
+ assertNotNull(m.group(7)); // message
assertNotNull(m.group(7)); // position
}
@@ -211,8 +221,9 @@ public class BahnProviderTest
+ "
\n" //
+ "22:58 pünktl., Gl. 2,
Sonderzug");
- assertNotNull(m.group(4)); // onTime
- assertNotNull(m.group(7)); // position
+ assertNotNull(m.group(1)); // lineLink
+ assertNotNull(m.group(5)); // onTime
+ assertNotNull(m.group(8)); // position
}
private void assertFineConnectionDetails(String s)
@@ -230,9 +241,9 @@ public class BahnProviderTest
// ParserUtils.printGroups(m);
- assertNotNull(m.group(1)); // line
- assertNotNull(m.group(2)); // destination
- assertNotNull(m.group(3)); // time
+ assertNotNull(m.group(2)); // line
+ assertNotNull(m.group(3)); // destination
+ assertNotNull(m.group(4)); // time
return m;
}