diff --git a/src/de/schildbach/pte/AbstractEfaProvider.java b/src/de/schildbach/pte/AbstractEfaProvider.java index a3e12f3a..7e17d2bd 100644 --- a/src/de/schildbach/pte/AbstractEfaProvider.java +++ b/src/de/schildbach/pte/AbstractEfaProvider.java @@ -27,10 +27,12 @@ import java.util.Currency; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; import java.util.TimeZone; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -1558,7 +1560,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider InputStream is = null; try { - is = ParserUtils.scrapeInputStream(uri, null, "HASESSIONID", 3); + is = ParserUtils.scrapeInputStream(uri, null, "NSC_", 3); return queryConnections(uri, is); } catch (final XmlPullParserException x) @@ -1577,7 +1579,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider InputStream is = null; try { - is = ParserUtils.scrapeInputStream(uri, null, "HASESSIONID", 3); + is = ParserUtils.scrapeInputStream(uri, null, "NSC_", 3); return queryConnections(uri, is); } catch (final XmlPullParserException x) @@ -1596,6 +1598,8 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider private QueryConnectionsResult queryConnections(final String uri, final InputStream is) throws XmlPullParserException, IOException { + // System.out.println(uri); + final XmlPullParser pp = parserFactory.newPullParser(); pp.setInput(is, null); final ResultHeader header = enterItdRequest(pp); @@ -1836,8 +1840,6 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider + XmlPullUtil.attr(pp, "project"); XmlPullUtil.exit(pp, "itdMeansOfTransport"); - final Line line = new Line(lineId, lineLabel, lineColors(lineLabel)); - if (XmlPullUtil.test(pp, "itdRBLControlled")) XmlPullUtil.next(pp); if (XmlPullUtil.test(pp, "itdInfoTextList")) @@ -1886,6 +1888,31 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider if (XmlPullUtil.test(pp, "itdPathCoordinates")) path = processItdPathCoordinates(pp); + final Set lineAttrs = new HashSet(); + if (XmlPullUtil.test(pp, "genAttrList")) + { + XmlPullUtil.enter(pp, "genAttrList"); + while (XmlPullUtil.test(pp, "genAttrElem")) + { + XmlPullUtil.enter(pp, "genAttrElem"); + XmlPullUtil.enter(pp, "name"); + final String name = pp.getText(); + XmlPullUtil.exit(pp, "name"); + XmlPullUtil.enter(pp, "value"); + final String value = pp.getText(); + XmlPullUtil.exit(pp, "value"); + XmlPullUtil.exit(pp, "genAttrElem"); + + // System.out.println("genAttrElem: name='" + name + "' value='" + value + "'"); + + if ("PlanWheelChairAccess".equals(name) && "1".equals(value)) + lineAttrs.add(Line.Attr.WHEEL_CHAIR_ACCESS); + } + XmlPullUtil.exit(pp, "genAttrList"); + } + + final Line line = new Line(lineId, lineLabel, lineColors(lineLabel), lineAttrs); + parts.add(new Connection.Trip(line, destination, departureTime, departurePosition, departure, arrivalTime, arrivalPosition, arrival, intermediateStops, path)); } diff --git a/src/de/schildbach/pte/dto/Line.java b/src/de/schildbach/pte/dto/Line.java index 95716cfd..aa4f370e 100644 --- a/src/de/schildbach/pte/dto/Line.java +++ b/src/de/schildbach/pte/dto/Line.java @@ -18,30 +18,48 @@ package de.schildbach.pte.dto; import java.io.Serializable; +import java.util.Set; /** * @author Andreas Schildbach */ public final class Line implements Serializable, Comparable { + public enum Attr + { + WHEEL_CHAIR_ACCESS + } + private static final long serialVersionUID = -5642533805998375070L; final public String id; final private transient char product; // TODO make true field final public String label; final public int[] colors; + final private Set attrs; private static final String PRODUCT_ORDER = "IRSUTBPFC?"; public Line(final String id, final String label, final int[] colors) + { + this(id, label, colors, null); + } + + public Line(final String id, final String label, final int[] colors, final Set attrs) { this.id = id; this.label = label; this.colors = colors; + this.attrs = attrs; product = label != null ? label.charAt(0) : '?'; } + public boolean hasAttr(final Attr attr) + { + return attrs != null && attrs.contains(attr); + } + @Override public String toString() {