diff --git a/core/src/main/java/bisq/core/trade/model/Tradable.java b/core/src/main/java/bisq/core/trade/model/Tradable.java index fbb21d085e..c3b45d2910 100644 --- a/core/src/main/java/bisq/core/trade/model/Tradable.java +++ b/core/src/main/java/bisq/core/trade/model/Tradable.java @@ -17,11 +17,16 @@ package bisq.core.trade.model; +import bisq.core.monetary.Price; +import bisq.core.monetary.Volume; import bisq.core.offer.Offer; import bisq.common.proto.persistable.PersistablePayload; +import org.bitcoinj.core.Coin; + import java.util.Date; +import java.util.Optional; public interface Tradable extends PersistablePayload { Offer getOffer(); @@ -31,4 +36,28 @@ public interface Tradable extends PersistablePayload { String getId(); String getShortId(); + + default Optional asTradeModel() { + if (this instanceof TradeModel) { + return Optional.of(((TradeModel) this)); + } else { + return Optional.empty(); + } + } + + default Optional getOptionalVolume() { + return asTradeModel().map(TradeModel::getVolume).or(() -> Optional.ofNullable(getOffer().getVolume())); + } + + default Optional getOptionalPrice() { + return asTradeModel().map(TradeModel::getPrice).or(() -> Optional.ofNullable(getOffer().getPrice())); + } + + default Optional getOptionalAmount() { + return asTradeModel().map(TradeModel::getAmount); + } + + default Optional getOptionalAmountAsLong() { + return asTradeModel().map(TradeModel::getAmountAsLong); + } }