implement search seller of some items
This commit is contained in:
@@ -3,10 +3,7 @@ package ru.trader.controllers;
|
||||
import javafx.beans.property.*;
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.RadioButton;
|
||||
import javafx.scene.control.TableView;
|
||||
import javafx.scene.control.TextField;
|
||||
import javafx.scene.control.ToggleGroup;
|
||||
import javafx.scene.control.*;
|
||||
import org.controlsfx.control.CheckComboBox;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -24,6 +21,7 @@ import ru.trader.view.support.autocomplete.AutoCompletion;
|
||||
import ru.trader.view.support.autocomplete.CachedSuggestionProvider;
|
||||
import ru.trader.view.support.autocomplete.ItemsProvider;
|
||||
import ru.trader.view.support.autocomplete.SystemsProvider;
|
||||
import ru.trader.view.support.cells.ItemListCell;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
@@ -41,7 +39,9 @@ public class SearchController {
|
||||
private RadioButton rbBuyer;
|
||||
@FXML
|
||||
private TextField itemText;
|
||||
private AutoCompletion<ItemModel> items;
|
||||
private AutoCompletion<ItemModel> itemField;
|
||||
@FXML
|
||||
private ListView<ItemModel> itemsList;
|
||||
@FXML
|
||||
private NumberField distance;
|
||||
@FXML
|
||||
@@ -59,6 +59,8 @@ public class SearchController {
|
||||
@FXML
|
||||
private void initialize() {
|
||||
init();
|
||||
itemsList.setItems(FXCollections.observableArrayList());
|
||||
itemsList.setCellFactory(new ItemListCell());
|
||||
stationTypes.setConverter(new StationTypeStringConverter());
|
||||
stationTypes.getItems().setAll(STATION_TYPE.values());
|
||||
services.setConverter(new ServiceTypeStringConverter());
|
||||
@@ -83,11 +85,11 @@ public class SearchController {
|
||||
source.setConverter(provider.getConverter());
|
||||
}
|
||||
ItemsProvider itemsProvider = market.getItemsProvider();
|
||||
if (items == null){
|
||||
items = new AutoCompletion<>(itemText, new CachedSuggestionProvider<>(itemsProvider), ModelFabric.NONE_ITEM, itemsProvider.getConverter());
|
||||
if (itemField == null){
|
||||
itemField = new AutoCompletion<>(itemText, new CachedSuggestionProvider<>(itemsProvider), ModelFabric.NONE_ITEM, itemsProvider.getConverter());
|
||||
} else {
|
||||
items.setSuggestions(itemsProvider.getPossibleSuggestions());
|
||||
items.setConverter(itemsProvider.getConverter());
|
||||
itemField.setSuggestions(itemsProvider.getPossibleSuggestions());
|
||||
itemField.setConverter(itemsProvider.getConverter());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,13 +99,19 @@ public class SearchController {
|
||||
filter.setDistance(distance.getValue().doubleValue());
|
||||
stationTypes.getCheckModel().getCheckedItems().forEach(filter::add);
|
||||
services.getCheckModel().getCheckedItems().forEach(filter::add);
|
||||
ItemModel item = items.getValue();
|
||||
if (ModelFabric.isFake(item)){
|
||||
ItemModel item = itemField.getValue();
|
||||
Collection<ItemModel> items = itemsList.getItems();
|
||||
if (ModelFabric.isFake(item) && items.isEmpty()){
|
||||
Collection<StationModel> stations = market.getStations(filter);
|
||||
fill(stations);
|
||||
} else {
|
||||
OFFER_TYPE oType = (OFFER_TYPE) offerType.getSelectedToggle().getUserData();
|
||||
Collection<OfferModel> offers = market.getOffers(oType, item, filter);
|
||||
Collection<OfferModel> offers;
|
||||
if (items.isEmpty()) {
|
||||
offers = market.getOffers(oType, item, filter);
|
||||
} else {
|
||||
offers = market.getOffers(oType, items, filter);
|
||||
}
|
||||
fill(offers);
|
||||
}
|
||||
}
|
||||
@@ -128,6 +136,28 @@ public class SearchController {
|
||||
source.setValue(MainController.getProfile().getSystem());
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void addItem(){
|
||||
ItemModel item = itemField.getValue();
|
||||
if (!ModelFabric.isFake(item)){
|
||||
if (itemsList.getItems().contains(item)) return;
|
||||
itemsList.getItems().add(item);
|
||||
}
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void removeItem(){
|
||||
int index = itemsList.getSelectionModel().getSelectedIndex();
|
||||
if (index != -1){
|
||||
itemsList.getItems().remove(index);
|
||||
}
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void clearItems(){
|
||||
itemsList.getItems().clear();
|
||||
}
|
||||
|
||||
public class ResultEntry {
|
||||
private final StationModel station;
|
||||
private final OfferModel offer;
|
||||
|
||||
@@ -193,6 +193,10 @@ public class MarketModel {
|
||||
return BindingsHelper.observableList(analyzer.getOffers(offerType, ModelFabric.get(item), filter), modeler::get);
|
||||
}
|
||||
|
||||
public ObservableList<OfferModel> getOffers(OFFER_TYPE offerType, Collection<ItemModel> items, MarketFilter filter){
|
||||
return BindingsHelper.observableList(analyzer.getOffers(offerType, ModelFabric.get(items), filter), modeler::get);
|
||||
}
|
||||
|
||||
public ObservableList<StationModel> getStations(){
|
||||
return BindingsHelper.observableList(market.getVendors(), modeler::get);
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class ModelFabric {
|
||||
|
||||
@@ -108,6 +109,10 @@ public class ModelFabric {
|
||||
return item.getItem();
|
||||
}
|
||||
|
||||
public static Collection<Item> get(Collection<ItemModel> items){
|
||||
return items.stream().map(ModelFabric::get).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public OfferModel get(Offer offer){
|
||||
if (offer == null) return null;
|
||||
OfferModel res = null;
|
||||
|
||||
@@ -35,14 +35,22 @@
|
||||
</HBox>
|
||||
<Label text="%search.text.item" GridPane.rowIndex="2"/>
|
||||
<TextField fx:id="itemText" prefWidth="150" GridPane.columnIndex="1" GridPane.rowIndex="2"/>
|
||||
<Label text="%search.text.distance" GridPane.rowIndex="3" />
|
||||
<NumberField fx:id="distance" GridPane.columnIndex="1" GridPane.rowIndex="3" />
|
||||
<Label text="%label.station.type" GridPane.rowIndex="4"/>
|
||||
<CheckComboBox fx:id="stationTypes" prefWidth="150" GridPane.columnIndex="1" GridPane.rowIndex="4" />
|
||||
<Label text="%label.station.services" GridPane.rowIndex="5"/>
|
||||
<CheckComboBox fx:id="services" prefWidth="150" GridPane.columnIndex="1" GridPane.rowIndex="5"/>
|
||||
<Separator GridPane.columnSpan="2" GridPane.rowIndex="6" GridPane.margin="$separator_margin"/>
|
||||
<HBox GridPane.columnSpan="2" GridPane.rowIndex="7" spacing="10" alignment="CENTER">
|
||||
<HBox GridPane.columnIndex="1" GridPane.rowIndex="3" spacing="4" alignment="CENTER">
|
||||
<ListView fx:id="itemsList" HBox.hgrow="ALWAYS" maxHeight="100"/>
|
||||
<VBox spacing="4">
|
||||
<Button prefWidth="30" onAction="#addItem"><graphic><Glyph text="FontAwesome|PLUS"/></graphic></Button>
|
||||
<Button prefWidth="30" onAction="#removeItem"><graphic><Glyph text="FontAwesome|MINUS"/></graphic></Button>
|
||||
<Button prefWidth="30" onAction="#clearItems"><graphic><Glyph text="FontAwesome|TRASH"/></graphic></Button>
|
||||
</VBox>
|
||||
</HBox>
|
||||
<Label text="%search.text.distance" GridPane.rowIndex="4" />
|
||||
<NumberField fx:id="distance" GridPane.columnIndex="1" GridPane.rowIndex="4" />
|
||||
<Label text="%label.station.type" GridPane.rowIndex="5"/>
|
||||
<CheckComboBox fx:id="stationTypes" prefWidth="150" GridPane.columnIndex="1" GridPane.rowIndex="5" />
|
||||
<Label text="%label.station.services" GridPane.rowIndex="6"/>
|
||||
<CheckComboBox fx:id="services" prefWidth="150" GridPane.columnIndex="1" GridPane.rowIndex="6"/>
|
||||
<Separator GridPane.columnSpan="2" GridPane.rowIndex="7" GridPane.margin="$separator_margin"/>
|
||||
<HBox GridPane.columnSpan="2" GridPane.rowIndex="8" spacing="10" alignment="CENTER">
|
||||
<Button text="%search.button.find" onAction="#searchStations" />
|
||||
</HBox>
|
||||
</GridPane>
|
||||
|
||||
@@ -3,8 +3,11 @@ package ru.trader.analysis;
|
||||
import ru.trader.core.*;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.NavigableSet;
|
||||
import java.util.Set;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class FilteredMarket {
|
||||
@@ -90,6 +93,33 @@ public class FilteredMarket {
|
||||
return res.filter(o -> !MarketUtils.isIncorrect(o) && !filter.isFiltered(o));
|
||||
}
|
||||
|
||||
public Stream<Offer> getOffers(OFFER_TYPE offerType, Collection<Item> items){
|
||||
final Set<Vendor> vendors = new HashSet<>();
|
||||
Stream<Offer> res = null;
|
||||
for (Item item : items) {
|
||||
NavigableSet<Offer> offers = market.getStat(offerType, item).getOffers();
|
||||
Stream<Offer> s;
|
||||
if (offerType.getOrder() > 0)
|
||||
s = offers.stream().filter(o -> vendors.contains(o.getVendor()));
|
||||
else
|
||||
s = offers.descendingSet().stream().filter(o -> vendors.contains(o.getVendor()));
|
||||
|
||||
Collection<Vendor> v = offers.stream().map(Offer::getVendor).collect(Collectors.toList());
|
||||
if (res == null){
|
||||
res = s;
|
||||
vendors.addAll(v);
|
||||
} else {
|
||||
res = Stream.concat(res, s);
|
||||
vendors.retainAll(v);
|
||||
}
|
||||
}
|
||||
if (res == null) return Stream.empty();
|
||||
if (disableFilter){
|
||||
return res;
|
||||
}
|
||||
return res.filter(o -> !MarketUtils.isIncorrect(o) && !filter.isFiltered(o));
|
||||
}
|
||||
|
||||
public FilteredVendor getFiltered(Vendor vendor){
|
||||
return new FilteredVendor(vendor, filter.getFilter(vendor));
|
||||
}
|
||||
|
||||
@@ -39,6 +39,10 @@ public class MarketAnalyzer {
|
||||
return market.getOffers(offerType, item).filter(o -> !filter.isFiltered(o.getVendor())).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public List<Offer> getOffers(OFFER_TYPE offerType, Collection<Item> items, MarketFilter filter){
|
||||
return market.getOffers(offerType, items).filter(o -> !filter.isFiltered(o.getVendor())).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public List<Vendor> getVendors(MarketFilter filter){
|
||||
return market.getVendors().filter(v -> !filter.isFiltered(v)).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user