From 57ecdcb47bb0e14c4ae1bf312a286fa52342a7d9 Mon Sep 17 00:00:00 2001 From: iMoHax Date: Sat, 29 Nov 2014 14:14:24 +0300 Subject: [PATCH] add station select on route select --- .../trader/controllers/RouterController.java | 63 ++++++---- .../java/ru/trader/model/MarketModel.java | 66 +++++++++- .../java/ru/trader/model/ModelFabric.java | 98 +++++++++++++++ .../java/ru/trader/model/StationModel.java | 5 + client/src/main/resources/view/offers.fxml | 2 +- client/src/main/resources/view/router.fxml | 14 ++- .../java/ru/trader/core/MarketAnalyzer.java | 118 +++++++++++++----- 7 files changed, 300 insertions(+), 66 deletions(-) diff --git a/client/src/main/java/ru/trader/controllers/RouterController.java b/client/src/main/java/ru/trader/controllers/RouterController.java index 3795225..a928b93 100644 --- a/client/src/main/java/ru/trader/controllers/RouterController.java +++ b/client/src/main/java/ru/trader/controllers/RouterController.java @@ -5,7 +5,6 @@ import javafx.beans.binding.Bindings; import javafx.collections.FXCollections; import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; -import javafx.collections.transformation.SortedList; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.ComboBox; @@ -13,11 +12,9 @@ import javafx.scene.control.ScrollPane; import javafx.scene.control.TableView; import ru.trader.Main; import ru.trader.model.*; -import ru.trader.model.support.BindingsHelper; import ru.trader.view.support.NumberField; import ru.trader.view.support.RouteNode; -import java.util.List; public class RouterController { @@ -44,9 +41,16 @@ public class RouterController { @FXML private ComboBox source; + + @FXML + private ComboBox sStation; + @FXML private ComboBox target; + @FXML + private ComboBox tStation; + @FXML private TableView tblOrders; @@ -83,6 +87,25 @@ public class RouterController { market.getAnalyzer().setJumps(n.intValue()); Main.SETTINGS.setJumps(n.intValue()); }); + source.valueProperty().addListener((ov, o, n) -> { + if (n != ModelFabric.NONE_SYSTEM){ + ObservableList stations = FXCollections.observableArrayList(ModelFabric.NONE_STATION); + stations.addAll(n.getStations()); + sStation.setItems(stations); + } else { + sStation.setItems(FXCollections.observableArrayList(ModelFabric.NONE_STATION)); + } + }); + target.valueProperty().addListener((ov, o, n) -> { + if (n != ModelFabric.NONE_SYSTEM){ + ObservableList stations = FXCollections.observableArrayList(ModelFabric.NONE_STATION); + stations.addAll(n.getStations()); + tStation.setItems(stations); + } else { + tStation.setItems(FXCollections.observableArrayList(ModelFabric.NONE_STATION)); + } + }); + balance.setOnAction((v)->cargo.requestFocus()); cargo.setOnAction((v) -> tank.requestFocus()); @@ -132,14 +155,16 @@ public class RouterController { private void onAdd(OrderModel order){ totalProfit.add(order.getProfit()); totalBalance.add(order.getProfit()); - source.getSelectionModel().select(order.getBuyOffer().getSystem()); + source.setValue(order.getBuyer().getSystem()); + sStation.setValue(order.getBuyer()); balance.setDisable(true); } private void onRemove(OrderModel order) { totalProfit.sub(order.getProfit()); totalBalance.sub(order.getProfit()); - source.getSelectionModel().select(order.getStation().getSystem()); + source.setValue(order.getSystem()); + sStation.setValue(order.getStation()); if (orders.isEmpty()) { balance.setDisable(false); source.setDisable(false); @@ -189,30 +214,24 @@ public class RouterController { } public void showOrders(){ - //TODO: fix set balanace - SystemModel s = source.getSelectionModel().getSelectedItem(); - SystemModel t = target.getSelectionModel().getSelectedItem(); - OrderModel order; - if (t == ModelFabric.NONE_SYSTEM){ - order = Screeners.showOrders(market.getOrders(s, totalBalance.getValue().doubleValue())); - } else { - order = Screeners.showOrders(market.getOrders(s, t, totalBalance.getValue().doubleValue())); - } + SystemModel s = source.getValue(); + SystemModel t = target.getValue(); + StationModel sS = sStation.getValue(); + StationModel tS = tStation.getValue(); + OrderModel order = Screeners.showOrders(market.getOrders(s, sS, t, tS, totalBalance.getValue().doubleValue())); if (order!=null){ + //TODO: fix set balanace orders.add(order); addOrderToPath(order); } } public void showRoutes(){ - SystemModel s = source.getSelectionModel().getSelectedItem(); - SystemModel t = target.getSelectionModel().getSelectedItem(); - PathRouteModel path; - if (t == ModelFabric.NONE_SYSTEM){ - path = Screeners.showRouters(market.getRoutes(s, totalBalance.getValue().doubleValue())); - } else { - path = Screeners.showRouters(market.getRoutes(s, t, totalBalance.getValue().doubleValue())); - } + SystemModel s = source.getValue(); + SystemModel t = target.getValue(); + StationModel sS = sStation.getValue(); + StationModel tS = tStation.getValue(); + PathRouteModel path = Screeners.showRouters(market.getRoutes(s, sS, t, tS, totalBalance.getValue().doubleValue())); if (path!=null){ orders.addAll(path.getOrders()); addRouteToPath(path); diff --git a/client/src/main/java/ru/trader/model/MarketModel.java b/client/src/main/java/ru/trader/model/MarketModel.java index 124d03e..d72eae3 100644 --- a/client/src/main/java/ru/trader/model/MarketModel.java +++ b/client/src/main/java/ru/trader/model/MarketModel.java @@ -12,6 +12,8 @@ import ru.trader.graph.PathRoute; import ru.trader.model.support.BindingsHelper; import ru.trader.model.support.Notificator; +import java.util.Collection; + public class MarketModel { private final static Logger LOG = LoggerFactory.getLogger(MarketModel.class); @@ -74,15 +76,41 @@ public class MarketModel { } public ObservableList getOrders(SystemModel from, double balance) { - return BindingsHelper.observableList(analyzer.getOrders(from.getSystem(), balance), modeler::get); + return getOrders(from, ModelFabric.NONE_STATION, ModelFabric.NONE_SYSTEM, ModelFabric.NONE_STATION, balance); } public ObservableList getOrders(SystemModel from, SystemModel to, double balance) { - return BindingsHelper.observableList(analyzer.getOrders(from.getSystem(), to.getSystem(), balance), modeler::get); + return getOrders(from, ModelFabric.NONE_STATION, to, ModelFabric.NONE_STATION, balance); } public ObservableList getOrders(StationModel from, StationModel to, double balance) { - return BindingsHelper.observableList(analyzer.getOrders(from.getStation(), to.getStation(), balance), modeler::get); + return getOrders(from.getSystem(), from, to.getSystem(), to, balance); + } + + public ObservableList getOrders(SystemModel from, StationModel stationFrom, SystemModel to, StationModel stationTo, double balance) { + Collection orders; + if (stationFrom != null && stationFrom != ModelFabric.NONE_STATION){ + if (stationTo != null && stationTo != ModelFabric.NONE_STATION){ + orders = analyzer.getOrders(stationFrom.getStation(), stationTo.getStation(), balance); + } else { + if (to != null && to != ModelFabric.NONE_SYSTEM){ + orders = analyzer.getOrders(stationFrom.getStation(), to.getSystem(), balance); + } else { + orders = analyzer.getOrders(stationFrom.getStation(), balance); + } + } + } else { + if (stationTo != null && stationTo != ModelFabric.NONE_STATION){ + orders = analyzer.getOrders(from.getSystem(), stationTo.getStation(), balance); + } else { + if (to != null && to != ModelFabric.NONE_SYSTEM){ + orders = analyzer.getOrders(from.getSystem(), to.getSystem(), balance); + } else { + orders = analyzer.getOrders(from.getSystem(), balance); + } + } + } + return BindingsHelper.observableList(orders, modeler::get); } public ObservableList getTop(double balance){ @@ -90,13 +118,41 @@ public class MarketModel { } public ObservableList getRoutes(SystemModel from, double balance){ - return BindingsHelper.observableList(analyzer.getPaths(from.getSystem(), balance), modeler::get); + return getRoutes(from, ModelFabric.NONE_STATION, ModelFabric.NONE_SYSTEM, ModelFabric.NONE_STATION, balance); } public ObservableList getRoutes(SystemModel from, SystemModel to, double balance){ - return BindingsHelper.observableList(analyzer.getPaths(from.getSystem(), to.getSystem(), balance), modeler::get); + return getRoutes(from, ModelFabric.NONE_STATION, to, ModelFabric.NONE_STATION, balance); } + public ObservableList getRoutes(SystemModel from, StationModel stationFrom, SystemModel to, StationModel stationTo, double balance) { + Collection routes; + if (stationFrom != null && stationFrom != ModelFabric.NONE_STATION){ + if (stationTo != null && stationTo != ModelFabric.NONE_STATION){ + routes = analyzer.getPaths(stationFrom.getStation(), stationTo.getStation(), balance); + } else { + if (to != null && to != ModelFabric.NONE_SYSTEM){ + routes = analyzer.getPaths(stationFrom.getStation(), to.getSystem(), balance); + } else { + routes = analyzer.getPaths(stationFrom.getStation(), balance); + } + } + } else { + if (stationTo != null && stationTo != ModelFabric.NONE_STATION){ + routes = analyzer.getPaths(from.getSystem(), stationTo.getStation(), balance); + } else { + if (to != null && to != ModelFabric.NONE_SYSTEM){ + routes = analyzer.getPaths(from.getSystem(), to.getSystem(), balance); + } else { + routes = analyzer.getPaths(from.getSystem(), balance); + } + } + } + return BindingsHelper.observableList(routes, modeler::get); + } + + + public ObservableList getTopRoutes(double balance){ return BindingsHelper.observableList(analyzer.getTopPaths(balance), modeler::get); } diff --git a/client/src/main/java/ru/trader/model/ModelFabric.java b/client/src/main/java/ru/trader/model/ModelFabric.java index 79e7030..a9c2a3a 100644 --- a/client/src/main/java/ru/trader/model/ModelFabric.java +++ b/client/src/main/java/ru/trader/model/ModelFabric.java @@ -5,6 +5,7 @@ import ru.trader.core.*; import ru.trader.graph.PathRoute; import java.lang.ref.WeakReference; +import java.util.Collection; import java.util.HashMap; import java.util.List; @@ -102,6 +103,7 @@ public class ModelFabric { } public static SystemModel NONE_SYSTEM = new FAKE_SYSTEM_MODEL(); + public static StationModel NONE_STATION = new FAKE_STATION_MODEL(); private static class FAKE_SYSTEM_MODEL extends SystemModel { FAKE_SYSTEM_MODEL() { @@ -174,4 +176,100 @@ public class ModelFabric { } } + private static class FAKE_STATION_MODEL extends StationModel { + + FAKE_STATION_MODEL() { + super(); + } + + @Override + Vendor getStation() { + throw new UnsupportedOperationException("Is fake system, unsupported"); + } + + @Override + public String getName() { + throw new UnsupportedOperationException("Is fake system, unsupported"); + } + + @Override + public void setName(String value) { + throw new UnsupportedOperationException("Is fake system, unsupported"); + } + + @Override + public double getDistance() { + throw new UnsupportedOperationException("Is fake system, unsupported"); + } + + @Override + public void setDistance(double value) { + throw new UnsupportedOperationException("Is fake system, unsupported"); + } + + @Override + public boolean hasService(SERVICE_TYPE service) { + throw new UnsupportedOperationException("Is fake system, unsupported"); + } + + @Override + public Collection getServices() { + throw new UnsupportedOperationException("Is fake system, unsupported"); + } + + @Override + public void addService(SERVICE_TYPE service) { + throw new UnsupportedOperationException("Is fake system, unsupported"); + } + + @Override + public void removeService(SERVICE_TYPE service) { + throw new UnsupportedOperationException("Is fake system, unsupported"); + } + + @Override + public SystemModel getSystem() { + throw new UnsupportedOperationException("Is fake system, unsupported"); + } + + @Override + public List getSells() { + throw new UnsupportedOperationException("Is fake system, unsupported"); + } + + @Override + public List getBuys() { + throw new UnsupportedOperationException("Is fake system, unsupported"); + } + + @Override + public OfferModel add(OFFER_TYPE type, ItemModel item, double price, long count) { + throw new UnsupportedOperationException("Is fake system, unsupported"); + } + + @Override + public void remove(OfferModel offer) { + throw new UnsupportedOperationException("Is fake system, unsupported"); + } + + @Override + public boolean hasSell(ItemModel item) { + throw new UnsupportedOperationException("Is fake system, unsupported"); + } + + @Override + public boolean hasBuy(ItemModel item) { + throw new UnsupportedOperationException("Is fake system, unsupported"); + } + + @Override + public double getDistance(StationModel other) { + throw new UnsupportedOperationException("Is fake system, unsupported"); + } + + @Override + public String toString() { + return ""; + } + } } diff --git a/client/src/main/java/ru/trader/model/StationModel.java b/client/src/main/java/ru/trader/model/StationModel.java index b8b719a..4de7a6b 100644 --- a/client/src/main/java/ru/trader/model/StationModel.java +++ b/client/src/main/java/ru/trader/model/StationModel.java @@ -20,6 +20,11 @@ public class StationModel { return market.getModeler().get(offer, item); } + StationModel() { + this.station = null; + this.market = null; + } + StationModel(Vendor station, MarketModel market) { this.station = station; this.market = market; diff --git a/client/src/main/resources/view/offers.fxml b/client/src/main/resources/view/offers.fxml index 3ff2b03..79e18a7 100644 --- a/client/src/main/resources/view/offers.fxml +++ b/client/src/main/resources/view/offers.fxml @@ -22,7 +22,7 @@ - + diff --git a/client/src/main/resources/view/router.fxml b/client/src/main/resources/view/router.fxml index 9fd157d..49c6aa6 100644 --- a/client/src/main/resources/view/router.fxml +++ b/client/src/main/resources/view/router.fxml @@ -40,13 +40,15 @@