From b98d53048ce8cdb98306dfbaffc66b46e6d55720 Mon Sep 17 00:00:00 2001 From: iMoHax Date: Thu, 17 Jul 2014 21:18:55 +0400 Subject: [PATCH] Implements orders list --- .../trader/controllers/OrdersController.java | 10 ++-- .../trader/controllers/RoutersController.java | 53 ++++++++++++++++--- .../java/ru/trader/controllers/Screeners.java | 2 +- .../main/java/ru/trader/model/OrderModel.java | 9 ++++ client/src/main/resources/view/items.fxml | 2 +- client/src/main/resources/view/offers.fxml | 4 +- client/src/main/resources/view/orders.fxml | 4 +- client/src/main/resources/view/routers.fxml | 36 ++++++++++++- 8 files changed, 103 insertions(+), 17 deletions(-) diff --git a/client/src/main/java/ru/trader/controllers/OrdersController.java b/client/src/main/java/ru/trader/controllers/OrdersController.java index fceee8e..72789ae 100644 --- a/client/src/main/java/ru/trader/controllers/OrdersController.java +++ b/client/src/main/java/ru/trader/controllers/OrdersController.java @@ -65,7 +65,7 @@ public class OrdersController { } - public Optional showDialog(Parent parent, Parent content, Collection offers, double balance, long max) { + public Collection showDialog(Parent parent, Parent content, Collection offers, double balance, long max) { init(offers, balance, max); @@ -73,7 +73,11 @@ public class OrdersController { dlg.setContent(content); dlg.getActions().addAll(OK, Dialog.Actions.CANCEL); dlg.setResizable(false); - return Optional.ofNullable(dlg.show() == OK ? tblOrders.getSelectionModel().getSelectedItem() : null); + return dlg.show() == OK ? getOrders() : null; + } + + private Collection getOrders() { + return tblOrders.getItems().filtered((o) -> o.getCount()>0 && o.getBuyer()!=null); } private void init(Collection offers, double balance, long max) { @@ -93,7 +97,7 @@ public class OrdersController { } private void setBuyer(OfferModel offer) { - if (order != null) { + if (order != null && offer!=null) { order.setBuyer(offer); order.setCount(order.getMax()); } diff --git a/client/src/main/java/ru/trader/controllers/RoutersController.java b/client/src/main/java/ru/trader/controllers/RoutersController.java index 2c65cf8..e9a4801 100644 --- a/client/src/main/java/ru/trader/controllers/RoutersController.java +++ b/client/src/main/java/ru/trader/controllers/RoutersController.java @@ -1,14 +1,21 @@ package ru.trader.controllers; +import javafx.collections.FXCollections; +import javafx.collections.ListChangeListener; +import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.ComboBox; +import javafx.scene.control.TableView; import ru.trader.core.Vendor; import ru.trader.model.MarketModel; import ru.trader.model.OfferDescModel; +import ru.trader.model.OrderModel; import ru.trader.view.support.NumberField; + +import java.awt.*; import java.util.Collection; import java.util.stream.Collectors; @@ -22,25 +29,44 @@ public class RoutersController { private NumberField cargo; @FXML - private Button buy; - - @FXML - private Button sell; + private Button add; @FXML private ComboBox vendors; + @FXML + private TableView tblOrders; + + @FXML + private NumberField totalProfit; + @FXML private void initialize(){ init(); - buy.disableProperty().bind(this.balance.wrongProperty().or(this.cargo.wrongProperty())); - buy.setOnAction((e) -> Screeners.showOrders(getOffers(), balance.getValue().doubleValue(), cargo.getValue().longValue())); + add.disableProperty().bind(this.balance.wrongProperty().or(this.cargo.wrongProperty())); + tblOrders.setItems(FXCollections.observableArrayList()); + tblOrders.getItems().addListener((ListChangeListener) c -> { + while (c.next()) { + if (c.wasRemoved()){ + for (OrderModel o : c.getRemoved()) { + totalProfit.setValue(totalProfit.getValue().doubleValue()-o.getProfit()); + } + } + if (c.wasAdded()){ + for (OrderModel o : c.getAddedSubList()) { + totalProfit.setValue(totalProfit.getValue().doubleValue()+o.getProfit()); + } + } + } + }); } void init(){ MarketModel market = MainController.getMarket(); vendors.setItems(market.vendorsProperty()); vendors.getSelectionModel().selectFirst(); + tblOrders.getItems().clear(); + totalProfit.setValue(0); } private Collection getOffers(){ @@ -48,4 +74,19 @@ public class RoutersController { Vendor vendor = vendors.getSelectionModel().getSelectedItem(); return vendor.getAllSellOffers().stream().map(market::asOfferDescModel).collect(Collectors.toList()); } + + public void addOrders(ActionEvent e){ + Collection orders = Screeners.showOrders(getOffers(), balance.getValue().doubleValue(), cargo.getValue().longValue()); + if (orders!=null){ + tblOrders.getItems().addAll(orders); + } + } + + public void removeSelected(ActionEvent e){ + TableView.TableViewSelectionModel select = tblOrders.getSelectionModel(); + if (!select.isEmpty()){ + int index = select.getSelectedIndex(); + tblOrders.getItems().remove(index); + } + } } diff --git a/client/src/main/java/ru/trader/controllers/Screeners.java b/client/src/main/java/ru/trader/controllers/Screeners.java index 07dde23..891a6d9 100644 --- a/client/src/main/java/ru/trader/controllers/Screeners.java +++ b/client/src/main/java/ru/trader/controllers/Screeners.java @@ -98,7 +98,7 @@ public class Screeners { } - public static Optional showOrders(Collection offers, double balance, long cargo) { + public static Collection showOrders(Collection offers, double balance, long cargo) { return ordersController.showDialog(mainScreen, ordersScreen, offers, balance, cargo); } diff --git a/client/src/main/java/ru/trader/model/OrderModel.java b/client/src/main/java/ru/trader/model/OrderModel.java index e2d54fa..7b67144 100644 --- a/client/src/main/java/ru/trader/model/OrderModel.java +++ b/client/src/main/java/ru/trader/model/OrderModel.java @@ -83,6 +83,10 @@ public class OrderModel { return buyer.priceProperty().subtract(offer.getOffer().priceProperty()).multiply(max).asObject(); } + public double getProfit() { + return profitProperty().get(); + } + public ObjectProperty buyerProperty() { return buyer; } @@ -95,6 +99,10 @@ public class OrderModel { return buyer.get(); } + public VendorModel getVendor() { + return offer.getOffer().getVendor(); + } + public long getMax() { return max; } @@ -106,4 +114,5 @@ public class OrderModel { public List getBuyers(){ return offer.getBuyer(); } + } diff --git a/client/src/main/resources/view/items.fxml b/client/src/main/resources/view/items.fxml index cb0a730..dacad3e 100644 --- a/client/src/main/resources/view/items.fxml +++ b/client/src/main/resources/view/items.fxml @@ -58,7 +58,7 @@ - + diff --git a/client/src/main/resources/view/offers.fxml b/client/src/main/resources/view/offers.fxml index 32e24d1..618aff9 100644 --- a/client/src/main/resources/view/offers.fxml +++ b/client/src/main/resources/view/offers.fxml @@ -57,7 +57,7 @@ - + @@ -95,7 +95,7 @@ - + diff --git a/client/src/main/resources/view/orders.fxml b/client/src/main/resources/view/orders.fxml index b84b4aa..754911f 100644 --- a/client/src/main/resources/view/orders.fxml +++ b/client/src/main/resources/view/orders.fxml @@ -44,7 +44,7 @@ - + @@ -62,7 +62,7 @@ - + diff --git a/client/src/main/resources/view/routers.fxml b/client/src/main/resources/view/routers.fxml index f96a604..99625ac 100644 --- a/client/src/main/resources/view/routers.fxml +++ b/client/src/main/resources/view/routers.fxml @@ -4,6 +4,10 @@ + + + + @@ -17,7 +21,35 @@