Station: Take location products into account when determining relevant product.

This commit is contained in:
Andreas Schildbach 2018-11-17 14:27:05 +01:00
parent 9bdaae5e6f
commit 1c077d6009

View file

@ -20,6 +20,7 @@ package de.schildbach.oeffi.stations;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Date; import java.util.Date;
import java.util.EnumSet;
import java.util.List; import java.util.List;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -46,12 +47,12 @@ public class Station {
public Station(final NetworkId network, final Location location) { public Station(final NetworkId network, final Location location) {
this.network = network; this.network = network;
this.location = location; this.location = checkNotNull(location);
} }
public Station(final NetworkId network, final Location location, final List<LineDestination> lines) { public Station(final NetworkId network, final Location location, final List<LineDestination> lines) {
this.network = network; this.network = network;
this.location = location; this.location = checkNotNull(location);
setLines(lines); setLines(lines);
} }
@ -75,16 +76,20 @@ public class Station {
if (relevantProduct != null) if (relevantProduct != null)
return relevantProduct; return relevantProduct;
// collect all products
final EnumSet<Product> products = EnumSet.noneOf(Product.class);
if (location.products != null)
products.addAll(location.products);
final List<LineDestination> lines = this.lines;
if (lines != null) { if (lines != null) {
for (final LineDestination line : checkNotNull(lines)) { for (final LineDestination line : lines) {
final Product product = line.line.product; final Product product = line.line.product;
if (product != null) { if (product != null)
if (relevantProduct == null || product.ordinal() < checkNotNull(relevantProduct).ordinal()) products.add(product);
relevantProduct = product;
}
} }
} }
relevantProduct = !products.isEmpty() ? products.iterator().next() : null;
return relevantProduct; return relevantProduct;
} }