From 100e6794f928e07627774ca2c44dd5137b8bb715 Mon Sep 17 00:00:00 2001 From: iMoHax Date: Thu, 16 Jul 2015 13:20:29 +0300 Subject: [PATCH] add disable filter --- .../ru/trader/analysis/FilteredMarket.java | 50 +++++++++++++++---- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/ru/trader/analysis/FilteredMarket.java b/core/src/main/java/ru/trader/analysis/FilteredMarket.java index bf79861..ef12bd9 100644 --- a/core/src/main/java/ru/trader/analysis/FilteredMarket.java +++ b/core/src/main/java/ru/trader/analysis/FilteredMarket.java @@ -4,34 +4,61 @@ import ru.trader.core.*; import java.util.Collection; import java.util.NavigableSet; +import java.util.function.Predicate; import java.util.stream.Stream; public class FilteredMarket { private final Market market; private final MarketFilter filter; + private boolean disableFilter; public FilteredMarket(Market market, MarketFilter filter) { this.market = market; this.filter = filter; } + public void disableFilter(boolean disableFilter) { + this.disableFilter = disableFilter; + } + public Stream get(){ - return market.get().stream() - .filter(p -> !filter.isFiltered(p)); + Stream places = market.get().stream(); + if (disableFilter){ + return places; + } + return places.filter(p -> !filter.isFiltered(p)); } public Stream getVendors(){ - return get().flatMap(p -> p.get().stream()) - .filter(v -> !filter.isFiltered(v)); + if (disableFilter){ + return market.getVendors().stream(); + } + return get().flatMap(p -> p.get().stream()).filter(v -> !filter.isFiltered(v)); + } + + public Stream getVendors(Place place){ + Stream vendors = place.get().stream(); + if (disableFilter){ + return vendors; + } + return vendors.filter(v -> !filter.isFiltered(v)); + } + + private boolean isMarket(Vendor vendor){ + return vendor.has(SERVICE_TYPE.MARKET) || vendor.has(SERVICE_TYPE.BLACK_MARKET); + } + + private boolean isTransit(Vendor vendor){ + return vendor instanceof TransitVendor; } public Stream getMarkets(boolean withTransit){ - return get().flatMap(p -> p.get(true).stream()) - .filter(v -> { - if (withTransit && v instanceof TransitVendor) return true; - if (!v.has(SERVICE_TYPE.MARKET) && !v.has(SERVICE_TYPE.BLACK_MARKET)) return false; - return !filter.isFiltered(v); - }); + Predicate transitOrMarket = v -> withTransit && isTransit(v) || isMarket(v); + if (disableFilter){ + return market.getVendors().stream().filter(transitOrMarket); + } + return get().flatMap(p -> p.get(withTransit).stream()) + .filter(transitOrMarket).filter(v -> !filter.isFiltered(v)); } public Collection getItems(){ @@ -53,6 +80,9 @@ public class FilteredMarket { res = offers.stream(); else res = offers.descendingSet().stream(); + if (disableFilter){ + return res; + } return res.filter(o -> !filter.isFiltered(o.getVendor(), true)); }