/* * This file is part of Bitsquare. * * Bitsquare is free software: you can redistribute it and/or modify it * under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or (at * your option) any later version. * * Bitsquare is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public * License for more details. * * You should have received a copy of the GNU Affero General Public License * along with Bitsquare. If not, see <http://www.gnu.org/licenses/>. */ package io.bitsquare.gui.main.portfolio.closedtrades; import com.google.inject.Inject; import io.bitsquare.gui.common.model.ActivatableWithDataModel; import io.bitsquare.gui.common.model.ViewModel; import io.bitsquare.gui.util.BSFormatter; import io.bitsquare.trade.Tradable; import io.bitsquare.trade.Trade; import io.bitsquare.trade.offer.OpenOffer; import javafx.collections.ObservableList; import java.util.stream.Collectors; class ClosedTradesViewModel extends ActivatableWithDataModel<ClosedTradesDataModel> implements ViewModel { private final BSFormatter formatter; @Inject public ClosedTradesViewModel(ClosedTradesDataModel dataModel, BSFormatter formatter) { super(dataModel); this.formatter = formatter; } public ObservableList<ClosedTradableListItem> getList() { return dataModel.getList(); } String getTradeId(ClosedTradableListItem item) { return item.getTradable().getShortId(); } String getAmount(ClosedTradableListItem item) { if (item != null && item.getTradable() instanceof Trade) return formatter.formatCoinWithCode(((Trade) item.getTradable()).getTradeAmount()); else if (item != null && item.getTradable() instanceof OpenOffer) return "-"; else return ""; } String getPrice(ClosedTradableListItem item) { if (item == null) return ""; Tradable tradable = item.getTradable(); if (tradable instanceof Trade) return formatter.formatPrice(((Trade) tradable).getTradePrice()); else return formatter.formatPrice(tradable.getOffer().getPrice()); } String getVolume(ClosedTradableListItem item) { if (item != null && item.getTradable() instanceof Trade) return formatter.formatVolumeWithCode(((Trade) item.getTradable()).getTradeVolume()); else if (item != null && item.getTradable() instanceof OpenOffer) return "-"; else return ""; } String getDirectionLabel(ClosedTradableListItem item) { return (item != null) ? formatter.getDirectionWithCode(dataModel.getDirection(item.getTradable().getOffer()), item.getTradable().getOffer().getCurrencyCode()) : ""; } String getDate(ClosedTradableListItem item) { return formatter.formatDateTime(item.getTradable().getDate()); } String getMarketLabel(ClosedTradableListItem item) { if ((item == null)) return ""; return formatter.getCurrencyPair(item.getTradable().getOffer().getCurrencyCode()); } String getState(ClosedTradableListItem item) { if (item != null) { if (item.getTradable() instanceof Trade) { Trade trade = (Trade) item.getTradable(); // TODO /* if (trade.isFailedState()) return "Failed"; else*/ if (trade.getState() == Trade.State.WITHDRAW_COMPLETED || trade.getState() == Trade.State.PAYOUT_BROAD_CASTED) { return "Completed"; } else if (trade.getDisputeState() == Trade.DisputeState.DISPUTE_CLOSED) { return "Ticket closed"; } else { log.error("That must not happen. We got a pending state but we are in the closed trades list."); return trade.getState().toString(); } } else if (item.getTradable() instanceof OpenOffer) { OpenOffer.State state = ((OpenOffer) item.getTradable()).getState(); log.trace("OpenOffer state {}", state); switch (state) { case AVAILABLE: case RESERVED: case CLOSED: log.error("Invalid state {}", state); return state.toString(); case CANCELED: return "Canceled"; default: log.error("Unhandled state {}", state); return state.toString(); } } } return ""; } int getNumPastTrades(Tradable tradable) { return dataModel.closedTradableManager.getClosedTrades().stream() .filter(e -> e instanceof Trade && tradable instanceof Trade && ((Trade) e).getTradingPeerNodeAddress() != null && ((Trade) tradable).getTradingPeerNodeAddress() != null && ((Trade) e).getTradingPeerNodeAddress().hostName.equals(((Trade) tradable).getTradingPeerNodeAddress().hostName)) .collect(Collectors.toSet()) .size(); } }