Archived
0

implement search seller of some items

This commit is contained in:
Mo
2016-04-25 13:55:10 +03:00
parent a23ac408d9
commit 118786afba
6 changed files with 101 additions and 20 deletions

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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>