From c96f8d320b8196753f8a0fd33b803a344ca79a2c Mon Sep 17 00:00:00 2001 From: iMoHax Date: Mon, 5 Dec 2016 17:45:34 +0300 Subject: [PATCH] add minimum supply and minimum demand to vendor filter --- .../controllers/VendorFilterController.java | 15 ++++++++++- .../resources/lang/locale_en_US.properties | 2 ++ .../resources/lang/locale_ru_RU.properties | 2 ++ client/src/main/resources/view/vFilter.fxml | 17 +++++++----- .../java/ru/trader/core/VendorFilter.java | 26 +++++++++++++++++-- .../ru/trader/store/simple/SimpleGroup.java | 20 ++++++++++++++ 6 files changed, 73 insertions(+), 9 deletions(-) diff --git a/client/src/main/java/ru/trader/controllers/VendorFilterController.java b/client/src/main/java/ru/trader/controllers/VendorFilterController.java index 22e2927..648d1ca 100644 --- a/client/src/main/java/ru/trader/controllers/VendorFilterController.java +++ b/client/src/main/java/ru/trader/controllers/VendorFilterController.java @@ -15,7 +15,9 @@ import ru.trader.model.ItemModel; import ru.trader.model.MarketModel; import ru.trader.model.ModelFabric; import ru.trader.view.support.Localization; +import ru.trader.view.support.NumberField; +import java.util.ArrayList; import java.util.Collection; import java.util.Objects; import java.util.Optional; @@ -35,6 +37,11 @@ public class VendorFilterController { private CheckBox cbSkipIllegal; @FXML private CheckBox cbIllegalOnly; + @FXML + private NumberField minSupply; + @FXML + private NumberField minDemand; + private VendorFilter filter; private Dialog dlg; @@ -56,7 +63,9 @@ public class VendorFilterController { int column = -1; int row = -1; GroupModel currentGroup = null; - for (ItemModel item : items) { + ArrayList sortedItems = new ArrayList<>(items); + sortedItems.sort((i1, i2) -> i1.getGroup().getName().compareTo(i2.getGroup().getName())); + for (ItemModel item : sortedItems) { row++; if (column == -1 || !Objects.equals(currentGroup, item.getGroup())){ column++; @@ -97,6 +106,8 @@ public class VendorFilterController { cbDontBuy.setSelected(filter.isDontBuy()); fillCheckboxes(sellCbs, filter.getSellExcludes()); fillCheckboxes(buyCbs, filter.getBuyExcludes()); + minSupply.setValue(filter.getMinSupply()); + minDemand.setValue(filter.getMinDemand()); } private void fillCheckboxes(Pane checkboxes, Collection excludes) { @@ -115,6 +126,8 @@ public class VendorFilterController { private void save() { LOG.trace("Old filter", filter); + filter.setMinSupply(minSupply.getValue().longValue()); + filter.setMinDemand(minDemand.getValue().longValue()); filter.setIllegalOnly(cbIllegalOnly.isSelected()); filter.setSkipIllegal(cbSkipIllegal.isSelected()); filter.dontSell(cbDontSell.isSelected()); diff --git a/client/src/main/resources/lang/locale_en_US.properties b/client/src/main/resources/lang/locale_en_US.properties index 1ad27d2..47a22fa 100644 --- a/client/src/main/resources/lang/locale_en_US.properties +++ b/client/src/main/resources/lang/locale_en_US.properties @@ -234,6 +234,8 @@ filter.stations.notBuy=Don't buy filter.stations.notSell=Don't sell filter.stations.label.notBuy=Don't buy: filter.stations.label.notSell=Don't sell: +filter.stations.label.minSupply=Minimum supply: +filter.stations.label.minDemand=Minimum demand: # analyzer progress analyzer.orders.title=Search orders diff --git a/client/src/main/resources/lang/locale_ru_RU.properties b/client/src/main/resources/lang/locale_ru_RU.properties index 9734d3e..990d0f2 100644 --- a/client/src/main/resources/lang/locale_ru_RU.properties +++ b/client/src/main/resources/lang/locale_ru_RU.properties @@ -233,6 +233,8 @@ filter.stations.notBuy=\u041D\u0435 \u043F\u043E\u043A\u0443\u043F\u0430\u0442\u filter.stations.notSell=\u041D\u0435 \u043F\u0440\u043E\u0434\u0430\u0432\u0430\u0442\u044C filter.stations.label.notBuy=\u041D\u0435 \u043F\u043E\u043A\u0443\u043F\u0430\u0442\u044C: filter.stations.label.notSell=\u041D\u0435 \u043F\u0440\u043E\u0434\u0430\u0432\u0430\u0442\u044C: +filter.stations.label.minSupply=\u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0437\u0430\u043F\u0430\u0441: +filter.stations.label.minDemand=\u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0441\u043F\u0440\u043E\u0441: # analyzer progress analyzer.orders.title=\u041F\u043E\u0438\u0441\u043A \u0437\u0430\u043A\u0430\u0437\u043E\u0432 diff --git a/client/src/main/resources/view/vFilter.fxml b/client/src/main/resources/view/vFilter.fxml index a1a51d4..b611842 100644 --- a/client/src/main/resources/view/vFilter.fxml +++ b/client/src/main/resources/view/vFilter.fxml @@ -1,24 +1,29 @@ + - - + + + - - + + + diff --git a/core/src/main/java/ru/trader/core/VendorFilter.java b/core/src/main/java/ru/trader/core/VendorFilter.java index 6898055..3d8ed42 100644 --- a/core/src/main/java/ru/trader/core/VendorFilter.java +++ b/core/src/main/java/ru/trader/core/VendorFilter.java @@ -14,12 +14,18 @@ public class VendorFilter { private boolean illegalOnly; private boolean dontBuy; private boolean dontSell; + private long minSupply; + private long minDemand; private final Collection buyExcludes; private final Collection sellExcludes; public VendorFilter() { buyExcludes = new ArrayList<>(); sellExcludes = new ArrayList<>(); + minSupply = 0; + minDemand = 0; + dontSell = false; + dontBuy = false; skipIllegal = false; illegalOnly = false; } @@ -32,6 +38,22 @@ public class VendorFilter { this.disable = disable; } + public long getMinSupply() { + return minSupply; + } + + public void setMinSupply(long minSupply) { + this.minSupply = minSupply; + } + + public long getMinDemand() { + return minDemand; + } + + public void setMinDemand(long minDemand) { + this.minDemand = minDemand; + } + public boolean isSkipIllegal() { return skipIllegal; } @@ -100,8 +122,8 @@ public class VendorFilter { if (disable) return false; if (skipIllegal && offer.isIllegal()) return true; switch (offer.getType()) { - case SELL: return dontSell || sellExcludes.contains(offer.getItem()); - case BUY: return dontBuy || (illegalOnly && !offer.isIllegal()) || buyExcludes.contains(offer.getItem()); + case SELL: return dontSell || sellExcludes.contains(offer.getItem()) || (offer.getCount() > 0 && offer.getCount() < minSupply); + case BUY: return dontBuy || (illegalOnly && !offer.isIllegal()) || buyExcludes.contains(offer.getItem()) || (offer.getCount() > 0 && offer.getCount() < minDemand); } return false; } diff --git a/core/src/main/java/ru/trader/store/simple/SimpleGroup.java b/core/src/main/java/ru/trader/store/simple/SimpleGroup.java index 10d685c..8fc0c3b 100644 --- a/core/src/main/java/ru/trader/store/simple/SimpleGroup.java +++ b/core/src/main/java/ru/trader/store/simple/SimpleGroup.java @@ -21,4 +21,24 @@ public class SimpleGroup implements Group { public GROUP_TYPE getType() { return type; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof SimpleGroup)) return false; + + SimpleGroup that = (SimpleGroup) o; + + if (!name.equals(that.name)) return false; + if (type != that.type) return false; + + return true; + } + + @Override + public int hashCode() { + int result = name.hashCode(); + result = 31 * result + type.hashCode(); + return result; + } }