Archived
0

add disable filter

This commit is contained in:
iMoHax
2015-07-16 13:20:29 +03:00
parent a1f03699fd
commit 100e6794f9

View File

@@ -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<Place> get(){
return market.get().stream()
.filter(p -> !filter.isFiltered(p));
Stream<Place> places = market.get().stream();
if (disableFilter){
return places;
}
return places.filter(p -> !filter.isFiltered(p));
}
public Stream<Vendor> 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<Vendor> getVendors(Place place){
Stream<Vendor> 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<Vendor> 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<Vendor> 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<Item> 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));
}