Columns added to export but hidden from view table.

- Transaction Fee
 - Maker Fee
 - Buyer Deposit
 - Seller Deposit
This commit is contained in:
Niyi Dada 2019-07-31 22:55:22 +01:00
parent 360dc0b4e8
commit 0fffbe670e
4 changed files with 542 additions and 382 deletions

View file

@ -62,6 +62,10 @@ shared.priceWithCur=Price in {0}
shared.priceInCurForCur=Price in {0} for 1 {1}
shared.fixedPriceInCurForCur=Fixed price in {0} for 1 {1}
shared.amount=Amount
shared.txFee=Transaction Fee
shared.makerFee=Maker Fee
shared.buyerSecurityDeposit=Buyer Deposit
shared.sellerSecurityDeposit=Seller Deposit
shared.amountWithCur=Amount in {0}
shared.volumeWithCur=Volume in {0}
shared.currency=Currency

View file

@ -40,6 +40,10 @@
<TableColumn fx:id="priceColumn" minWidth="100"/>
<TableColumn fx:id="amountColumn" minWidth="130"/>
<TableColumn fx:id="volumeColumn" minWidth="130"/>
<TableColumn fx:id="txFeeColumn" visible="false"/>
<TableColumn fx:id="makerFeeColumn" visible="false"/>
<TableColumn fx:id="buyerSecurityDepositColumn" visible="false"/>
<TableColumn fx:id="sellerSecurityDepositColumn" visible="false"/>
<TableColumn fx:id="directionColumn" minWidth="80"/>
<TableColumn fx:id="stateColumn" minWidth="80"/>
<TableColumn fx:id="avatarColumn" minWidth="40" maxWidth="40"/>

View file

@ -85,8 +85,9 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
@FXML
TableView<ClosedTradableListItem> tableView;
@FXML
TableColumn<ClosedTradableListItem, ClosedTradableListItem> priceColumn, amountColumn, volumeColumn,
marketColumn, directionColumn, dateColumn, tradeIdColumn, stateColumn, avatarColumn;
TableColumn<ClosedTradableListItem, ClosedTradableListItem> priceColumn, amountColumn, volumeColumn, txFeeColumn,
makerFeeColumn, buyerSecurityDepositColumn, sellerSecurityDepositColumn, marketColumn, directionColumn,
dateColumn, tradeIdColumn, stateColumn, avatarColumn;
@FXML
HBox footerBox;
@FXML
@ -108,13 +109,9 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
private ChangeListener<String> filterTextFieldListener;
@Inject
public ClosedTradesView(ClosedTradesViewModel model,
OfferDetailsWindow offerDetailsWindow,
Preferences preferences,
TradeDetailsWindow tradeDetailsWindow,
PrivateNotificationManager privateNotificationManager,
BSFormatter formatter,
@Named(AppOptionKeys.USE_DEV_PRIVILEGE_KEYS) boolean useDevPrivilegeKeys) {
public ClosedTradesView(ClosedTradesViewModel model, OfferDetailsWindow offerDetailsWindow, Preferences preferences,
TradeDetailsWindow tradeDetailsWindow, PrivateNotificationManager privateNotificationManager,
BSFormatter formatter, @Named(AppOptionKeys.USE_DEV_PRIVILEGE_KEYS) boolean useDevPrivilegeKeys) {
super(model);
this.offerDetailsWindow = offerDetailsWindow;
this.preferences = preferences;
@ -126,6 +123,10 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
@Override
public void initialize() {
txFeeColumn.setGraphic(new AutoTooltipLabel(Res.get("shared.txFee")));
makerFeeColumn.setGraphic(new AutoTooltipLabel(Res.get("shared.makerFee")));
buyerSecurityDepositColumn.setGraphic(new AutoTooltipLabel(Res.get("shared.buyerSecurityDeposit")));
sellerSecurityDepositColumn.setGraphic(new AutoTooltipLabel(Res.get("shared.sellerSecurityDeposit")));
priceColumn.setGraphic(new AutoTooltipLabel(Res.get("shared.price")));
amountColumn.setGraphic(new AutoTooltipLabel(Res.get("shared.amountWithCur", Res.getBaseCurrencyCode())));
volumeColumn.setGraphic(new AutoTooltipLabel(Res.get("shared.amount")));
@ -142,6 +143,10 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
setTradeIdColumnCellFactory();
setDirectionColumnCellFactory();
setAmountColumnCellFactory();
setTxFeeColumnCellFactory();
setMakerFeeColumnCellFactory();
setBuyerSecurityDepositColumnCellFactory();
setSellerSecurityDepositColumnCellFactory();
setPriceColumnCellFactory();
setVolumeColumnCellFactory();
setDateColumnCellFactory();
@ -154,15 +159,63 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
directionColumn.setComparator(Comparator.comparing(o -> o.getTradable().getOffer().getDirection()));
marketColumn.setComparator(Comparator.comparing(model::getMarketLabel));
txFeeColumn.setComparator((o1, o2) -> {
final Tradable tradable1 = o1.getTradable();
final Tradable tradable2 = o2.getTradable();
Coin txFee1 = null;
Coin txFee2 = null;
if (tradable1 != null)
txFee1 = tradable1 instanceof Trade ? ((Trade) tradable1).getTxFee() : tradable1.getOffer().getTxFee();
if (tradable2 != null)
txFee2 = tradable2 instanceof Trade ? ((Trade) tradable2).getTxFee() : tradable2.getOffer().getTxFee();
return txFee1 != null && txFee2 != null ? txFee1.compareTo(txFee2) : 0;
});
makerFeeColumn.setComparator((o1, o2) -> {
final Tradable tradable1 = o1.getTradable();
final Tradable tradable2 = o2.getTradable();
Coin txFee1 = null;
Coin txFee2 = null;
if (tradable1 != null)
txFee1 = tradable1 instanceof Trade ? ((Trade) tradable1).getTakerFee()
: tradable1.getOffer().getMakerFee();
if (tradable2 != null)
txFee2 = tradable2 instanceof Trade ? ((Trade) tradable2).getTakerFee()
: tradable2.getOffer().getMakerFee();
return txFee1 != null && txFee2 != null ? txFee1.compareTo(txFee2) : 0;
});
buyerSecurityDepositColumn.setComparator((o1, o2) -> {
final Tradable tradable1 = o1.getTradable();
final Tradable tradable2 = o2.getTradable();
Coin txFee1 = null;
Coin txFee2 = null;
if (tradable1 != null && tradable1.getOffer() != null)
txFee1 = tradable1.getOffer().getBuyerSecurityDeposit();
if (tradable2 != null && tradable2.getOffer() != null)
txFee2 = tradable2.getOffer().getBuyerSecurityDeposit();
return txFee1 != null && txFee2 != null ? txFee1.compareTo(txFee2) : 0;
});
sellerSecurityDepositColumn.setComparator((o1, o2) -> {
final Tradable tradable1 = o1.getTradable();
final Tradable tradable2 = o2.getTradable();
Coin txFee1 = null;
Coin txFee2 = null;
if (tradable1 != null && tradable1.getOffer() != null)
txFee1 = tradable1.getOffer().getSellerSecurityDeposit();
if (tradable2 != null && tradable2.getOffer() != null)
txFee2 = tradable2.getOffer().getSellerSecurityDeposit();
return txFee1 != null && txFee2 != null ? txFee1.compareTo(txFee2) : 0;
});
priceColumn.setComparator((o1, o2) -> {
final Tradable tradable1 = o1.getTradable();
final Tradable tradable2 = o2.getTradable();
Price price1 = null;
Price price2 = null;
if (tradable1 != null)
price1 = tradable1 instanceof Trade ? ((Trade) tradable1).getTradePrice() : tradable1.getOffer().getPrice();
price1 = tradable1 instanceof Trade ? ((Trade) tradable1).getTradePrice()
: tradable1.getOffer().getPrice();
if (tradable2 != null)
price2 = tradable2 instanceof Trade ? ((Trade) tradable2).getTradePrice() : tradable2.getOffer().getPrice();
price2 = tradable2 instanceof Trade ? ((Trade) tradable2).getTradePrice()
: tradable2.getOffer().getPrice();
return price1 != null && price2 != null ? price1.compareTo(price2) : 0;
});
volumeColumn.setComparator((o1, o2) -> {
@ -199,7 +252,8 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
filterLabel.setText(Res.getWithCol("support.filter"));
filterTextField.setPromptText(Res.get("support.filter.prompt"));
HBox.setMargin(filterLabel, new Insets(5, 0, 0, 10));
filterTextFieldListener = (observable, oldValue, newValue) -> applyFilteredListPredicate(filterTextField.getText());
filterTextFieldListener = (observable, oldValue,
newValue) -> applyFilteredListPredicate(filterTextField.getText());
footerBox.setSpacing(5);
HBox.setHgrow(spacer, Priority.ALWAYS);
exportButton.updateText(Res.get("shared.exportCSV"));
@ -218,7 +272,7 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
exportButton.setOnAction(event -> {
final ObservableList<TableColumn<ClosedTradableListItem, ?>> tableColumns = tableView.getColumns();
CSVEntryConverter<ClosedTradableListItem> headerConverter = transactionsListItem -> {
String[] columns = new String[7];
String[] columns = new String[11];
for (int i = 0; i < columns.length; i++)
columns[i] = tableColumns.get(i).getText();
@ -231,13 +285,17 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
columns[2] = model.getAmount(item);
columns[3] = model.getPrice(item);
columns[4] = model.getVolume(item);
columns[5] = model.getDirectionLabel(item);
columns[6] = model.getState(item);
columns[5] = model.getTxFee(item);
columns[6] = model.getMakerFee(item);
columns[7] = model.getBuyerSecurityDeposit(item);
columns[8] = model.getSellerSecurityDeposit(item);
columns[9] = model.getDirectionLabel(item);
columns[10] = model.getState(item);
return columns;
};
GUIUtil.exportCSV("tradeHistory.csv", headerConverter, contentConverter,
new ClosedTradableListItem(null), sortedList, (Stage) root.getScene().getWindow());
GUIUtil.exportCSV("tradeHistory.csv", headerConverter, contentConverter, new ClosedTradableListItem(null),
sortedList, (Stage) root.getScene().getWindow());
});
filterTextField.textProperty().addListener(filterTextFieldListener);
@ -274,12 +332,13 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
if (contract != null) {
isBuyerOnion = contract.getBuyerNodeAddress().getFullAddress().contains(filterString);
isSellerOnion = contract.getSellerNodeAddress().getFullAddress().contains(filterString);
matchesBuyersPaymentAccountData = contract.getBuyerPaymentAccountPayload().getPaymentDetails().contains(filterString);
matchesSellersPaymentAccountData = contract.getSellerPaymentAccountPayload().getPaymentDetails().contains(filterString);
matchesBuyersPaymentAccountData = contract.getBuyerPaymentAccountPayload().getPaymentDetails()
.contains(filterString);
matchesSellersPaymentAccountData = contract.getSellerPaymentAccountPayload().getPaymentDetails()
.contains(filterString);
}
return matchesId || matchesOfferDate || isMakerOnion ||
matchesTradeDate || isBuyerOnion || isSellerOnion ||
matchesBuyersPaymentAccountData || matchesSellersPaymentAccountData;
return matchesId || matchesOfferDate || isMakerOnion || matchesTradeDate || isBuyerOnion
|| isSellerOnion || matchesBuyersPaymentAccountData || matchesSellersPaymentAccountData;
} else {
return matchesId || matchesOfferDate || isMakerOnion;
}
@ -289,12 +348,11 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
private void setTradeIdColumnCellFactory() {
tradeIdColumn.getStyleClass().add("first-column");
tradeIdColumn.setCellValueFactory((offerListItem) -> new ReadOnlyObjectWrapper<>(offerListItem.getValue()));
tradeIdColumn.setCellFactory(
new Callback<>() {
tradeIdColumn.setCellFactory(new Callback<>() {
@Override
public TableCell<ClosedTradableListItem, ClosedTradableListItem> call(TableColumn<ClosedTradableListItem,
ClosedTradableListItem> column) {
public TableCell<ClosedTradableListItem, ClosedTradableListItem> call(
TableColumn<ClosedTradableListItem, ClosedTradableListItem> column) {
return new TableCell<>() {
private HyperlinkWithIcon field;
@ -325,8 +383,7 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
private void setDateColumnCellFactory() {
dateColumn.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue()));
dateColumn.setCellFactory(
new Callback<>() {
dateColumn.setCellFactory(new Callback<>() {
@Override
public TableCell<ClosedTradableListItem, ClosedTradableListItem> call(
TableColumn<ClosedTradableListItem, ClosedTradableListItem> column) {
@ -346,8 +403,7 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
private void setMarketColumnCellFactory() {
marketColumn.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue()));
marketColumn.setCellFactory(
new Callback<>() {
marketColumn.setCellFactory(new Callback<>() {
@Override
public TableCell<ClosedTradableListItem, ClosedTradableListItem> call(
TableColumn<ClosedTradableListItem, ClosedTradableListItem> column) {
@ -364,8 +420,7 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
private void setStateColumnCellFactory() {
stateColumn.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue()));
stateColumn.setCellFactory(
new Callback<>() {
stateColumn.setCellFactory(new Callback<>() {
@Override
public TableCell<ClosedTradableListItem, ClosedTradableListItem> call(
TableColumn<ClosedTradableListItem, ClosedTradableListItem> column) {
@ -387,10 +442,10 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
private TableColumn<ClosedTradableListItem, ClosedTradableListItem> setAvatarColumnCellFactory() {
avatarColumn.getStyleClass().addAll("last-column", "avatar-column");
avatarColumn.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue()));
avatarColumn.setCellFactory(
new Callback<>() {
avatarColumn.setCellFactory(new Callback<>() {
@Override
public TableCell<ClosedTradableListItem, ClosedTradableListItem> call(TableColumn<ClosedTradableListItem, ClosedTradableListItem> column) {
public TableCell<ClosedTradableListItem, ClosedTradableListItem> call(
TableColumn<ClosedTradableListItem, ClosedTradableListItem> column) {
return new TableCell<>() {
@Override
@ -402,15 +457,9 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
int numPastTrades = model.getNumPastTrades(trade);
final NodeAddress tradingPeerNodeAddress = trade.getTradingPeerNodeAddress();
String role = Res.get("peerInfoIcon.tooltip.tradePeer");
Node peerInfoIcon = new PeerInfoIcon(tradingPeerNodeAddress,
role,
numPastTrades,
privateNotificationManager,
trade,
preferences,
model.accountAgeWitnessService,
formatter,
useDevPrivilegeKeys);
Node peerInfoIcon = new PeerInfoIcon(tradingPeerNodeAddress, role, numPastTrades,
privateNotificationManager, trade, preferences, model.accountAgeWitnessService,
formatter, useDevPrivilegeKeys);
setPadding(new Insets(1, 15, 0, 0));
setGraphic(peerInfoIcon);
} else {
@ -425,8 +474,7 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
private void setAmountColumnCellFactory() {
amountColumn.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue()));
amountColumn.setCellFactory(
new Callback<>() {
amountColumn.setCellFactory(new Callback<>() {
@Override
public TableCell<ClosedTradableListItem, ClosedTradableListItem> call(
TableColumn<ClosedTradableListItem, ClosedTradableListItem> column) {
@ -443,8 +491,7 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
private void setPriceColumnCellFactory() {
priceColumn.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue()));
priceColumn.setCellFactory(
new Callback<>() {
priceColumn.setCellFactory(new Callback<>() {
@Override
public TableCell<ClosedTradableListItem, ClosedTradableListItem> call(
TableColumn<ClosedTradableListItem, ClosedTradableListItem> column) {
@ -459,10 +506,77 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
});
}
private void setTxFeeColumnCellFactory() {
txFeeColumn.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue()));
txFeeColumn.setCellFactory(new Callback<>() {
@Override
public TableCell<ClosedTradableListItem, ClosedTradableListItem> call(
TableColumn<ClosedTradableListItem, ClosedTradableListItem> column) {
return new TableCell<>() {
@Override
public void updateItem(final ClosedTradableListItem item, boolean empty) {
super.updateItem(item, empty);
setGraphic(new AutoTooltipLabel(model.getTxFee(item)));
}
};
}
});
}
private void setMakerFeeColumnCellFactory() {
makerFeeColumn.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue()));
makerFeeColumn.setCellFactory(new Callback<>() {
@Override
public TableCell<ClosedTradableListItem, ClosedTradableListItem> call(
TableColumn<ClosedTradableListItem, ClosedTradableListItem> column) {
return new TableCell<>() {
@Override
public void updateItem(final ClosedTradableListItem item, boolean empty) {
super.updateItem(item, empty);
setGraphic(new AutoTooltipLabel(model.getMakerFee(item)));
}
};
}
});
}
private void setBuyerSecurityDepositColumnCellFactory() {
buyerSecurityDepositColumn.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue()));
buyerSecurityDepositColumn.setCellFactory(new Callback<>() {
@Override
public TableCell<ClosedTradableListItem, ClosedTradableListItem> call(
TableColumn<ClosedTradableListItem, ClosedTradableListItem> column) {
return new TableCell<>() {
@Override
public void updateItem(final ClosedTradableListItem item, boolean empty) {
super.updateItem(item, empty);
setGraphic(new AutoTooltipLabel(model.getBuyerSecurityDeposit(item)));
}
};
}
});
}
private void setSellerSecurityDepositColumnCellFactory() {
sellerSecurityDepositColumn.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue()));
sellerSecurityDepositColumn.setCellFactory(new Callback<>() {
@Override
public TableCell<ClosedTradableListItem, ClosedTradableListItem> call(
TableColumn<ClosedTradableListItem, ClosedTradableListItem> column) {
return new TableCell<>() {
@Override
public void updateItem(final ClosedTradableListItem item, boolean empty) {
super.updateItem(item, empty);
setGraphic(new AutoTooltipLabel(model.getSellerSecurityDeposit(item)));
}
};
}
});
}
private void setVolumeColumnCellFactory() {
volumeColumn.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue()));
volumeColumn.setCellFactory(
new Callback<>() {
volumeColumn.setCellFactory(new Callback<>() {
@Override
public TableCell<ClosedTradableListItem, ClosedTradableListItem> call(
TableColumn<ClosedTradableListItem, ClosedTradableListItem> column) {
@ -482,8 +596,7 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
private void setDirectionColumnCellFactory() {
directionColumn.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue()));
directionColumn.setCellFactory(
new Callback<>() {
directionColumn.setCellFactory(new Callback<>() {
@Override
public TableCell<ClosedTradableListItem, ClosedTradableListItem> call(
TableColumn<ClosedTradableListItem, ClosedTradableListItem> column) {
@ -498,4 +611,3 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
});
}
}

View file

@ -82,6 +82,46 @@ class ClosedTradesViewModel extends ActivatableWithDataModel<ClosedTradesDataMod
return "";
}
String getTxFee(ClosedTradableListItem item) {
if (item == null)
return "";
Tradable tradable = item.getTradable();
if (tradable instanceof Trade)
return formatter.formatCoin(((Trade) tradable).getTxFee());
else
return formatter.formatCoin(tradable.getOffer().getTxFee());
}
String getMakerFee(ClosedTradableListItem item) {
if (item == null)
return "";
Tradable tradable = item.getTradable();
if (tradable instanceof Trade)
return formatter.formatCoin(((Trade) tradable).getTakerFee());
else
return formatter.formatCoin(tradable.getOffer().getMakerFee());
}
String getBuyerSecurityDeposit(ClosedTradableListItem item) {
if (item == null)
return "";
Tradable tradable = item.getTradable();
if (tradable.getOffer() != null)
return formatter.formatCoin(tradable.getOffer().getBuyerSecurityDeposit());
else
return "";
}
String getSellerSecurityDeposit(ClosedTradableListItem item) {
if (item == null)
return "";
Tradable tradable = item.getTradable();
if (tradable.getOffer() != null)
return formatter.formatCoin(tradable.getOffer().getSellerSecurityDeposit());
else
return "";
}
String getDirectionLabel(ClosedTradableListItem item) {
return (item != null) ? formatter.getDirectionWithCode(dataModel.getDirection(item.getTradable().getOffer()), item.getTradable().getOffer().getCurrencyCode()) : "";
}