use of com.sparrowwallet.sparrow.wallet.WalletTransactionsEntry in project sparrow by sparrowwallet.
the class BalanceChart method update.
public void update(WalletTransactionsEntry walletTransactionsEntry) {
setVisible(!walletTransactionsEntry.getChildren().isEmpty());
balanceSeries.getData().clear();
List<Data<Number, Number>> balanceDataList = getTransactionEntries(walletTransactionsEntry).map(entry -> (TransactionEntry) entry).filter(txEntry -> txEntry.getBlockTransaction().getHeight() > 0).map(txEntry -> new XYChart.Data<>((Number) txEntry.getBlockTransaction().getDate().getTime(), (Number) txEntry.getBalance(), txEntry)).collect(Collectors.toList());
int size = balanceDataList.size() * 2;
for (int i = 0; i < size; i += 2) {
Data<Number, Number> data = balanceDataList.get(i);
if (i + 1 < balanceDataList.size()) {
Data<Number, Number> nextData = balanceDataList.get(i + 1);
Data<Number, Number> interstitialData = new Data<>(nextData.getXValue(), data.getYValue(), null);
balanceDataList.add(i + 1, interstitialData);
} else {
Date now = new Date();
Data<Number, Number> interstitialData = new Data<>(now.getTime(), data.getYValue(), null);
balanceDataList.add(interstitialData);
}
}
if (!balanceDataList.isEmpty()) {
long min = balanceDataList.stream().map(data -> data.getXValue().longValue()).min(Long::compare).get();
long max = balanceDataList.stream().map(data -> data.getXValue().longValue()).max(Long::compare).get();
DateAxisFormatter dateAxisFormatter = new DateAxisFormatter(max - min);
NumberAxis xAxis = (NumberAxis) getXAxis();
xAxis.setTickLabelFormatter(dateAxisFormatter);
}
balanceSeries.getData().addAll(balanceDataList);
if (selectedEntry != null) {
select(selectedEntry);
}
}
use of com.sparrowwallet.sparrow.wallet.WalletTransactionsEntry in project sparrow by sparrowwallet.
the class BalanceChart method getTransactionEntries.
private Stream<Entry> getTransactionEntries(WalletTransactionsEntry walletTransactionsEntry) {
int total = walletTransactionsEntry.getChildren().size();
if (walletTransactionsEntry.getChildren().size() <= MAX_VALUES) {
return walletTransactionsEntry.getChildren().stream();
}
int bucketSize = total / MAX_VALUES;
List<List<Entry>> buckets = Lists.partition(walletTransactionsEntry.getChildren(), bucketSize);
List<Entry> reducedEntries = new ArrayList<>(MAX_VALUES);
for (List<Entry> bucket : buckets) {
long max = bucket.stream().mapToLong(entry -> Math.abs(entry.getValue())).max().orElse(0);
Entry bucketEntry = bucket.stream().filter(entry -> entry.getValue() == max || entry.getValue() == -max).findFirst().orElseThrow();
reducedEntries.add(bucketEntry);
}
return reducedEntries.stream();
}
Aggregations