From 724f8a23e37ea6a2892f8f0e050fc9bfc1ccff33 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Fri, 30 Nov 2018 13:36:39 +0100 Subject: [PATCH] AbstractHafasClientInterfaceProvider: Parse 'nameS' (short name) in 'prodL' entries. --- .../AbstractHafasClientInterfaceProvider.java | 29 +++++++++++++++++-- .../src/de/schildbach/pte/BahnProvider.java | 13 --------- .../src/de/schildbach/pte/BvgProvider.java | 7 +++-- .../src/de/schildbach/pte/VbnProvider.java | 7 +++-- .../src/de/schildbach/pte/ZvvProvider.java | 22 -------------- 5 files changed, 36 insertions(+), 42 deletions(-) diff --git a/enabler/src/de/schildbach/pte/AbstractHafasClientInterfaceProvider.java b/enabler/src/de/schildbach/pte/AbstractHafasClientInterfaceProvider.java index ec45f44d..194a981c 100644 --- a/enabler/src/de/schildbach/pte/AbstractHafasClientInterfaceProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractHafasClientInterfaceProvider.java @@ -861,19 +861,42 @@ public abstract class AbstractHafasClientInterfaceProvider extends AbstractHafas for (int iProd = 0; iProd < prodListLen; iProd++) { final JSONObject prod = prodList.getJSONObject(iProd); final String name = Strings.emptyToNull(prod.getString("name")); + final String nameS = prod.optString("nameS", null); final String number = prod.optString("number", null); final int oprIndex = prod.optInt("oprX", -1); final String operator = oprIndex != -1 ? operators.get(oprIndex) : null; final int cls = prod.optInt("cls", -1); final Product product = cls != -1 ? intToProduct(cls) : null; - lines.add(newLine(operator, product, name, number)); + lines.add(newLine(operator, product, name, nameS, number)); } return lines; } - protected Line newLine(final String operator, final Product product, final String name, final String number) { - return new Line(null, operator, product, number, name, lineStyle(operator, product, number)); + protected Line newLine(final String operator, final Product product, final @Nullable String name, + final @Nullable String shortName, final @Nullable String number) { + final String longName; + if (name != null) + longName = name + (number != null && !name.endsWith(number) ? " (" + number + ")" : ""); + else if (shortName != null) + longName = shortName + (number != null && !shortName.endsWith(number) ? " (" + number + ")" : ""); + else + longName = number; + + if (product == Product.BUS || product == Product.TRAM) { + // For bus and tram, prefer a slightly shorter label without the product prefix + final String label; + if (shortName != null) + label = shortName; + else if (number != null && name != null && name.endsWith(number)) + label = number; + else + label = name; + return new Line(null, operator, product, label, longName, lineStyle(operator, product, label)); + } else { + // Otherwise the longer label is fine + return new Line(null, operator, product, name, longName, lineStyle(operator, product, name)); + } } @SuppressWarnings("serial") diff --git a/enabler/src/de/schildbach/pte/BahnProvider.java b/enabler/src/de/schildbach/pte/BahnProvider.java index 3d1cc64a..f5dffe7b 100644 --- a/enabler/src/de/schildbach/pte/BahnProvider.java +++ b/enabler/src/de/schildbach/pte/BahnProvider.java @@ -22,9 +22,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import com.google.common.base.Charsets; -import com.google.common.base.Strings; -import de.schildbach.pte.dto.Line; import de.schildbach.pte.dto.Product; import okhttp3.HttpUrl; @@ -76,15 +74,4 @@ public final class BahnProvider extends AbstractHafasClientInterfaceProvider { return new String[] { m.group(1), m.group(2) }; return super.splitStationName(address); } - - @Override - protected Line newLine(final String operator, final Product product, final String name, final String number) { - if (product == Product.SUBURBAN_TRAIN && name != null && name.startsWith("S") - && !(number != null && number.startsWith("S"))) - return super.newLine(operator, product, name, "S" + Strings.nullToEmpty(number)); - if (product == Product.SUBWAY && name != null && name.startsWith("U") - && !(number != null && number.startsWith("U"))) - return super.newLine(operator, product, name, "U" + Strings.nullToEmpty(number)); - return super.newLine(operator, product, name, number); - } } diff --git a/enabler/src/de/schildbach/pte/BvgProvider.java b/enabler/src/de/schildbach/pte/BvgProvider.java index 4be44688..86b1f4a6 100644 --- a/enabler/src/de/schildbach/pte/BvgProvider.java +++ b/enabler/src/de/schildbach/pte/BvgProvider.java @@ -23,6 +23,8 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; +import javax.annotation.Nullable; + import com.google.common.collect.Sets; import de.schildbach.pte.dto.Fare; @@ -104,8 +106,9 @@ public final class BvgProvider extends AbstractHafasClientInterfaceProvider { } @Override - protected Line newLine(final String operator, final Product product, final String name, final String number) { - final Line line = super.newLine(operator, product, name, number); + protected Line newLine(final String operator, final Product product, final @Nullable String name, + final @Nullable String shortName, final @Nullable String number) { + final Line line = super.newLine(operator, product, name, shortName, number); if (line.product == Product.SUBURBAN_TRAIN) { if ("S41".equals(line.label)) diff --git a/enabler/src/de/schildbach/pte/VbnProvider.java b/enabler/src/de/schildbach/pte/VbnProvider.java index 7049635c..e5cf73c0 100644 --- a/enabler/src/de/schildbach/pte/VbnProvider.java +++ b/enabler/src/de/schildbach/pte/VbnProvider.java @@ -22,6 +22,8 @@ import java.util.Map; import java.util.Set; import java.util.regex.Matcher; +import javax.annotation.Nullable; + import com.google.common.collect.Sets; import de.schildbach.pte.dto.Line; @@ -81,8 +83,9 @@ public class VbnProvider extends AbstractHafasClientInterfaceProvider { } @Override - protected Line newLine(final String operator, final Product product, final String name, final String number) { - final Line line = super.newLine(operator, product, name, number); + protected Line newLine(final String operator, final Product product, final @Nullable String name, + final @Nullable String shortName, final @Nullable String number) { + final Line line = super.newLine(operator, product, name, shortName, number); if (line.product == Product.BUS) { if ("57".equals(line.label)) diff --git a/enabler/src/de/schildbach/pte/ZvvProvider.java b/enabler/src/de/schildbach/pte/ZvvProvider.java index 24db74a4..059e5f7e 100644 --- a/enabler/src/de/schildbach/pte/ZvvProvider.java +++ b/enabler/src/de/schildbach/pte/ZvvProvider.java @@ -22,7 +22,6 @@ import java.util.Map; import java.util.Set; import java.util.regex.Matcher; -import de.schildbach.pte.dto.Line; import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.Style; import de.schildbach.pte.dto.Style.Shape; @@ -97,27 +96,6 @@ public class ZvvProvider extends AbstractHafasClientInterfaceProvider { return Product.ALL; } - @Override - protected Line newLine(final String operator, final Product product, final String name, final String number) { - if (name == null) - return super.newLine(operator, product, name, number); - final String[] splitName = name.split("\\s+", 2); - if (splitName.length != 2) - return super.newLine(operator, product, name, number); - - final String newName = name + (number != null ? " (" + number + ")" : ""); - final String newNumber; - if (product == Product.BUS && "Bus".equals(splitName[0])) - newNumber = splitName[1]; - else if (product == Product.BUS && "Tro".equals(splitName[0])) - newNumber = splitName[1]; - else if (product == Product.TRAM && "Trm".equals(splitName[0])) - newNumber = splitName[1]; - else - newNumber = splitName[0] + splitName[1]; - return super.newLine(operator, product, newName, newNumber); - } - private static final Map STYLES = new HashMap<>(); static {