From 3bee31638ed627ca8e21e332ae9555caadd667cc Mon Sep 17 00:00:00 2001 From: iMoHax Date: Mon, 4 Aug 2014 17:39:15 +0400 Subject: [PATCH] add top orders --- client/src/main/java/ru/trader/Main.java | 1 + .../trader/controllers/RoutersController.java | 15 +++- .../java/ru/trader/controllers/Screeners.java | 16 ++++ .../controllers/TopOrdersController.java | 71 +++++++++++++++++ .../java/ru/trader/model/MarketModel.java | 9 +++ client/src/main/resources/view/routers.fxml | 15 ++-- client/src/main/resources/view/topOrders.fxml | 41 ++++++++++ .../main/java/ru/trader/core/ItemStat.java | 9 +-- core/src/main/java/ru/trader/core/Market.java | 2 + .../java/ru/trader/core/MarketSupport.java | 35 +++++++++ core/src/main/java/ru/trader/core/Order.java | 76 +++++++++++++++++++ core/src/main/java/ru/trader/core/Vendor.java | 1 + 12 files changed, 277 insertions(+), 14 deletions(-) create mode 100644 client/src/main/java/ru/trader/controllers/TopOrdersController.java create mode 100644 client/src/main/resources/view/topOrders.fxml create mode 100644 core/src/main/java/ru/trader/core/Order.java diff --git a/client/src/main/java/ru/trader/Main.java b/client/src/main/java/ru/trader/Main.java index 9ecb824..6713938 100644 --- a/client/src/main/java/ru/trader/Main.java +++ b/client/src/main/java/ru/trader/Main.java @@ -65,6 +65,7 @@ public class Main extends Application { Screeners.loadVEditorStage(getUrl(("vEditor.fxml"))); Screeners.loadAddOfferStage(getUrl(("oEditor.fxml"))); Screeners.loadOrdersStage(getUrl(("orders.fxml"))); + Screeners.loadTopOrdersStage(getUrl(("topOrders.fxml"))); } private static URL getUrl(String filename) throws MalformedURLException { diff --git a/client/src/main/java/ru/trader/controllers/RoutersController.java b/client/src/main/java/ru/trader/controllers/RoutersController.java index c46ba89..e2da375 100644 --- a/client/src/main/java/ru/trader/controllers/RoutersController.java +++ b/client/src/main/java/ru/trader/controllers/RoutersController.java @@ -94,14 +94,14 @@ public class RoutersController { vendors.getSelectionModel().select(order.getVendor()); } - public void addOrders(ActionEvent e){ + public void addOrders(){ Collection orders = Screeners.showOrders(getOffers(), totalBalance.getValue().doubleValue(), cargo.getValue().longValue()); if (orders!=null){ tblOrders.getItems().addAll(orders); } } - public void removeSelected(ActionEvent e){ + public void removeSelected(){ TableView.TableViewSelectionModel select = tblOrders.getSelectionModel(); if (!select.isEmpty()){ int index = select.getSelectedIndex(); @@ -109,8 +109,17 @@ public class RoutersController { } } - public void removeAll(ActionEvent e){ + public void removeAll(){ tblOrders.getItems().clear(); } + + public void showTopOrders(){ + MarketModel market = MainController.getMarket(); + OrderModel order = Screeners.showTopOrders(market.getTop(100, totalBalance.getValue().doubleValue(), cargo.getValue().longValue())); + if (order!=null){ + tblOrders.getItems().add(order); + } + } + } diff --git a/client/src/main/java/ru/trader/controllers/Screeners.java b/client/src/main/java/ru/trader/controllers/Screeners.java index 228128c..2738575 100644 --- a/client/src/main/java/ru/trader/controllers/Screeners.java +++ b/client/src/main/java/ru/trader/controllers/Screeners.java @@ -1,5 +1,6 @@ package ru.trader.controllers; +import javafx.collections.ObservableList; import javafx.fxml.FXMLLoader; import javafx.scene.Node; import javafx.scene.Parent; @@ -22,12 +23,14 @@ public class Screeners { private static Parent vEditorScreen; private static Parent editOffersScreen; private static Parent ordersScreen; + private static Parent topOrdersScreen; private static MainController mainController; private static ItemDescController itemDescController; private static VendorEditorController vEditorController; private static OffersEditorController oEditorController; private static OrdersController ordersController; + private static TopOrdersController topOrdersController; private static FXMLLoader initLoader(URL url){ FXMLLoader loader = new FXMLLoader(url); @@ -82,6 +85,15 @@ public class Screeners { stage.setScene(new Scene(ordersScreen)); } + public static void loadTopOrdersStage(URL fxml) throws IOException { + FXMLLoader loader = initLoader(fxml); + topOrdersScreen = loader.load(); + addStylesheet(topOrdersScreen); + topOrdersController = loader.getController(); + Stage stage = new Stage(); + stage.setScene(new Scene(topOrdersScreen)); + } + public static void show(Node node){ mainController.getMainPane().setCenter(node); } @@ -132,4 +144,8 @@ public class Screeners { public static void closeAll() { itemDescController.close(); } + + public static OrderModel showTopOrders(ObservableList top) { + return topOrdersController.showDialog(mainScreen, topOrdersScreen, top); + } } diff --git a/client/src/main/java/ru/trader/controllers/TopOrdersController.java b/client/src/main/java/ru/trader/controllers/TopOrdersController.java new file mode 100644 index 0000000..a2e06e9 --- /dev/null +++ b/client/src/main/java/ru/trader/controllers/TopOrdersController.java @@ -0,0 +1,71 @@ +package ru.trader.controllers; + +import javafx.collections.FXCollections; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.scene.Parent; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.TextFieldTableCell; +import javafx.util.converter.LongStringConverter; +import org.controlsfx.control.ButtonBar; +import org.controlsfx.control.action.AbstractAction; +import org.controlsfx.control.action.Action; +import org.controlsfx.dialog.Dialog; +import ru.trader.model.OrderModel; + +import java.util.Collection; + +public class TopOrdersController { + private final Action OK = new AbstractAction("OK") { + { + ButtonBar.setType(this, ButtonBar.ButtonType.OK_DONE); + } + + + @Override + public void handle(ActionEvent event) { + Dialog dlg = (Dialog) event.getSource(); + dlg.hide(); + } + }; + + @FXML + private TableView tblOrders; + + @FXML + private TableColumn count; + + private OrderModel order; + + @FXML + private void initialize() { + count.setCellFactory(TextFieldTableCell.forTableColumn(new LongStringConverter())); + tblOrders.getSelectionModel().selectedItemProperty().addListener((v, o, n) -> changeOrder(n)); + } + + + public OrderModel showDialog(Parent parent, Parent content, Collection orders) { + + init(orders); + + Dialog dlg = new Dialog(parent, "TOP заказов"); + dlg.setContent(content); + dlg.getActions().addAll(OK, Dialog.Actions.CANCEL); + dlg.setResizable(false); + return dlg.show() == OK ? order : null; + } + + + private void init(Collection orders) { + tblOrders.getSelectionModel().clearSelection(); + tblOrders.setItems(FXCollections.observableArrayList(orders)); + if (tblOrders.getSortOrder().size()>0) + tblOrders.sort(); + } + + private void changeOrder(OrderModel order) { + this.order = order; + } + +} diff --git a/client/src/main/java/ru/trader/model/MarketModel.java b/client/src/main/java/ru/trader/model/MarketModel.java index 158f36d..9465669 100644 --- a/client/src/main/java/ru/trader/model/MarketModel.java +++ b/client/src/main/java/ru/trader/model/MarketModel.java @@ -4,6 +4,7 @@ import javafx.beans.property.ListProperty; import javafx.beans.property.ReadOnlyListProperty; import javafx.beans.property.SimpleListProperty; import javafx.collections.FXCollections; +import javafx.collections.ObservableList; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.trader.core.*; @@ -157,5 +158,13 @@ public class MarketModel { return ModelFabrica.getModel(vendor, this); } + public ObservableList getTop(int limit, double balance, long max){ + return BindingsHelper.observableList(market.getTop(limit, balance, max), (o) -> { + OrderModel model = new OrderModel(asOfferDescModel(o.getSell()), balance, max); + model.setBuyer(asModel(o.getBuy())); + model.setCount(model.getMax()); + return model; + }); + } } diff --git a/client/src/main/resources/view/routers.fxml b/client/src/main/resources/view/routers.fxml index 26c7612..20be276 100644 --- a/client/src/main/resources/view/routers.fxml +++ b/client/src/main/resources/view/routers.fxml @@ -28,11 +28,16 @@