From cabc5af2c630b5d58a9fffb6661cc297ddec768d Mon Sep 17 00:00:00 2001 From: chimp1984 Date: Sat, 26 Sep 2020 19:36:07 -0500 Subject: [PATCH] Make processModel in Trade final and pass in constructor instead of in init method --- .../bisq/core/trade/BuyerAsMakerTrade.java | 11 ++-- .../bisq/core/trade/BuyerAsTakerTrade.java | 11 ++-- .../main/java/bisq/core/trade/BuyerTrade.java | 13 +++-- .../bisq/core/trade/SellerAsMakerTrade.java | 11 ++-- .../bisq/core/trade/SellerAsTakerTrade.java | 11 ++-- .../java/bisq/core/trade/SellerTrade.java | 13 +++-- core/src/main/java/bisq/core/trade/Trade.java | 53 +++++++------------ .../java/bisq/core/trade/TradeManager.java | 21 ++++++-- 8 files changed, 86 insertions(+), 58 deletions(-) diff --git a/core/src/main/java/bisq/core/trade/BuyerAsMakerTrade.java b/core/src/main/java/bisq/core/trade/BuyerAsMakerTrade.java index da543c660d..c4e0145ff2 100644 --- a/core/src/main/java/bisq/core/trade/BuyerAsMakerTrade.java +++ b/core/src/main/java/bisq/core/trade/BuyerAsMakerTrade.java @@ -21,6 +21,7 @@ import bisq.core.btc.wallet.BtcWalletService; import bisq.core.offer.Offer; import bisq.core.proto.CoreProtoResolver; import bisq.core.trade.protocol.BuyerAsMakerProtocol; +import bisq.core.trade.protocol.ProcessModel; import bisq.network.p2p.NodeAddress; @@ -47,7 +48,8 @@ public final class BuyerAsMakerTrade extends BuyerTrade implements MakerTrade { @Nullable NodeAddress mediatorNodeAddress, @Nullable NodeAddress refundAgentNodeAddress, Storage storage, - BtcWalletService btcWalletService) { + BtcWalletService btcWalletService, + ProcessModel processModel) { super(offer, txFee, takeOfferFee, @@ -56,7 +58,8 @@ public final class BuyerAsMakerTrade extends BuyerTrade implements MakerTrade { mediatorNodeAddress, refundAgentNodeAddress, storage, - btcWalletService); + btcWalletService, + processModel); } /////////////////////////////////////////////////////////////////////////////////////////// @@ -76,6 +79,7 @@ public final class BuyerAsMakerTrade extends BuyerTrade implements MakerTrade { BtcWalletService btcWalletService, CoreProtoResolver coreProtoResolver) { protobuf.Trade proto = buyerAsMakerTradeProto.getTrade(); + ProcessModel processModel = ProcessModel.fromProto(proto.getProcessModel(), coreProtoResolver); BuyerAsMakerTrade trade = new BuyerAsMakerTrade( Offer.fromProto(proto.getOffer()), Coin.valueOf(proto.getTxFeeAsLong()), @@ -85,7 +89,8 @@ public final class BuyerAsMakerTrade extends BuyerTrade implements MakerTrade { proto.hasMediatorNodeAddress() ? NodeAddress.fromProto(proto.getMediatorNodeAddress()) : null, proto.hasRefundAgentNodeAddress() ? NodeAddress.fromProto(proto.getRefundAgentNodeAddress()) : null, storage, - btcWalletService); + btcWalletService, + processModel); trade.setTradeAmountAsLong(proto.getTradeAmountAsLong()); trade.setTradePrice(proto.getTradePrice()); diff --git a/core/src/main/java/bisq/core/trade/BuyerAsTakerTrade.java b/core/src/main/java/bisq/core/trade/BuyerAsTakerTrade.java index 98ed389cca..32a258103c 100644 --- a/core/src/main/java/bisq/core/trade/BuyerAsTakerTrade.java +++ b/core/src/main/java/bisq/core/trade/BuyerAsTakerTrade.java @@ -21,6 +21,7 @@ import bisq.core.btc.wallet.BtcWalletService; import bisq.core.offer.Offer; import bisq.core.proto.CoreProtoResolver; import bisq.core.trade.protocol.BuyerAsTakerProtocol; +import bisq.core.trade.protocol.ProcessModel; import bisq.network.p2p.NodeAddress; @@ -50,7 +51,8 @@ public final class BuyerAsTakerTrade extends BuyerTrade implements TakerTrade { @Nullable NodeAddress mediatorNodeAddress, @Nullable NodeAddress refundAgentNodeAddress, Storage storage, - BtcWalletService btcWalletService) { + BtcWalletService btcWalletService, + ProcessModel processModel) { super(offer, tradeAmount, txFee, @@ -62,7 +64,8 @@ public final class BuyerAsTakerTrade extends BuyerTrade implements TakerTrade { mediatorNodeAddress, refundAgentNodeAddress, storage, - btcWalletService); + btcWalletService, + processModel); } @@ -83,6 +86,7 @@ public final class BuyerAsTakerTrade extends BuyerTrade implements TakerTrade { BtcWalletService btcWalletService, CoreProtoResolver coreProtoResolver) { protobuf.Trade proto = buyerAsTakerTradeProto.getTrade(); + ProcessModel processModel = ProcessModel.fromProto(proto.getProcessModel(), coreProtoResolver); return fromProto(new BuyerAsTakerTrade( Offer.fromProto(proto.getOffer()), Coin.valueOf(proto.getTradeAmountAsLong()), @@ -95,7 +99,8 @@ public final class BuyerAsTakerTrade extends BuyerTrade implements TakerTrade { proto.hasMediatorNodeAddress() ? NodeAddress.fromProto(proto.getMediatorNodeAddress()) : null, proto.hasRefundAgentNodeAddress() ? NodeAddress.fromProto(proto.getRefundAgentNodeAddress()) : null, storage, - btcWalletService), + btcWalletService, + processModel), proto, coreProtoResolver); } diff --git a/core/src/main/java/bisq/core/trade/BuyerTrade.java b/core/src/main/java/bisq/core/trade/BuyerTrade.java index 28673e34d2..7e4a867229 100644 --- a/core/src/main/java/bisq/core/trade/BuyerTrade.java +++ b/core/src/main/java/bisq/core/trade/BuyerTrade.java @@ -19,6 +19,7 @@ package bisq.core.trade; import bisq.core.btc.wallet.BtcWalletService; import bisq.core.offer.Offer; +import bisq.core.trade.protocol.ProcessModel; import bisq.network.p2p.NodeAddress; @@ -45,7 +46,8 @@ public abstract class BuyerTrade extends Trade { @Nullable NodeAddress mediatorNodeAddress, @Nullable NodeAddress refundAgentNodeAddress, Storage storage, - BtcWalletService btcWalletService) { + BtcWalletService btcWalletService, + ProcessModel processModel) { super(offer, tradeAmount, txFee, @@ -57,7 +59,8 @@ public abstract class BuyerTrade extends Trade { mediatorNodeAddress, refundAgentNodeAddress, storage, - btcWalletService); + btcWalletService, + processModel); } BuyerTrade(Offer offer, @@ -68,7 +71,8 @@ public abstract class BuyerTrade extends Trade { @Nullable NodeAddress mediatorNodeAddress, @Nullable NodeAddress refundAgentNodeAddress, Storage storage, - BtcWalletService btcWalletService) { + BtcWalletService btcWalletService, + ProcessModel processModel) { super(offer, txFee, takerFee, @@ -77,7 +81,8 @@ public abstract class BuyerTrade extends Trade { mediatorNodeAddress, refundAgentNodeAddress, storage, - btcWalletService); + btcWalletService, + processModel); } @Override diff --git a/core/src/main/java/bisq/core/trade/SellerAsMakerTrade.java b/core/src/main/java/bisq/core/trade/SellerAsMakerTrade.java index 8617c65744..a02d9a851f 100644 --- a/core/src/main/java/bisq/core/trade/SellerAsMakerTrade.java +++ b/core/src/main/java/bisq/core/trade/SellerAsMakerTrade.java @@ -20,6 +20,7 @@ package bisq.core.trade; import bisq.core.btc.wallet.BtcWalletService; import bisq.core.offer.Offer; import bisq.core.proto.CoreProtoResolver; +import bisq.core.trade.protocol.ProcessModel; import bisq.core.trade.protocol.SellerAsMakerProtocol; import bisq.network.p2p.NodeAddress; @@ -47,7 +48,8 @@ public final class SellerAsMakerTrade extends SellerTrade implements MakerTrade @Nullable NodeAddress mediatorNodeAddress, @Nullable NodeAddress refundAgentNodeAddress, Storage storage, - BtcWalletService btcWalletService) { + BtcWalletService btcWalletService, + ProcessModel processModel) { super(offer, txFee, takerFee, @@ -56,7 +58,8 @@ public final class SellerAsMakerTrade extends SellerTrade implements MakerTrade mediatorNodeAddress, refundAgentNodeAddress, storage, - btcWalletService); + btcWalletService, + processModel); } @@ -77,6 +80,7 @@ public final class SellerAsMakerTrade extends SellerTrade implements MakerTrade BtcWalletService btcWalletService, CoreProtoResolver coreProtoResolver) { protobuf.Trade proto = sellerAsMakerTradeProto.getTrade(); + ProcessModel processModel = ProcessModel.fromProto(proto.getProcessModel(), coreProtoResolver); SellerAsMakerTrade trade = new SellerAsMakerTrade( Offer.fromProto(proto.getOffer()), Coin.valueOf(proto.getTxFeeAsLong()), @@ -86,7 +90,8 @@ public final class SellerAsMakerTrade extends SellerTrade implements MakerTrade proto.hasMediatorNodeAddress() ? NodeAddress.fromProto(proto.getMediatorNodeAddress()) : null, proto.hasRefundAgentNodeAddress() ? NodeAddress.fromProto(proto.getRefundAgentNodeAddress()) : null, storage, - btcWalletService); + btcWalletService, + processModel); trade.setTradeAmountAsLong(proto.getTradeAmountAsLong()); trade.setTradePrice(proto.getTradePrice()); diff --git a/core/src/main/java/bisq/core/trade/SellerAsTakerTrade.java b/core/src/main/java/bisq/core/trade/SellerAsTakerTrade.java index 8455f50e7e..7330f591f8 100644 --- a/core/src/main/java/bisq/core/trade/SellerAsTakerTrade.java +++ b/core/src/main/java/bisq/core/trade/SellerAsTakerTrade.java @@ -20,6 +20,7 @@ package bisq.core.trade; import bisq.core.btc.wallet.BtcWalletService; import bisq.core.offer.Offer; import bisq.core.proto.CoreProtoResolver; +import bisq.core.trade.protocol.ProcessModel; import bisq.core.trade.protocol.SellerAsTakerProtocol; import bisq.network.p2p.NodeAddress; @@ -50,7 +51,8 @@ public final class SellerAsTakerTrade extends SellerTrade implements TakerTrade @Nullable NodeAddress mediatorNodeAddress, @Nullable NodeAddress refundAgentNodeAddress, Storage storage, - BtcWalletService btcWalletService) { + BtcWalletService btcWalletService, + ProcessModel processModel) { super(offer, tradeAmount, txFee, @@ -62,7 +64,8 @@ public final class SellerAsTakerTrade extends SellerTrade implements TakerTrade mediatorNodeAddress, refundAgentNodeAddress, storage, - btcWalletService); + btcWalletService, + processModel); } @@ -83,6 +86,7 @@ public final class SellerAsTakerTrade extends SellerTrade implements TakerTrade BtcWalletService btcWalletService, CoreProtoResolver coreProtoResolver) { protobuf.Trade proto = sellerAsTakerTradeProto.getTrade(); + ProcessModel processModel = ProcessModel.fromProto(proto.getProcessModel(), coreProtoResolver); return fromProto(new SellerAsTakerTrade( Offer.fromProto(proto.getOffer()), Coin.valueOf(proto.getTradeAmountAsLong()), @@ -95,7 +99,8 @@ public final class SellerAsTakerTrade extends SellerTrade implements TakerTrade proto.hasMediatorNodeAddress() ? NodeAddress.fromProto(proto.getMediatorNodeAddress()) : null, proto.hasRefundAgentNodeAddress() ? NodeAddress.fromProto(proto.getRefundAgentNodeAddress()) : null, storage, - btcWalletService), + btcWalletService, + processModel), proto, coreProtoResolver); } diff --git a/core/src/main/java/bisq/core/trade/SellerTrade.java b/core/src/main/java/bisq/core/trade/SellerTrade.java index 2ac507ecaf..6701c8b5a0 100644 --- a/core/src/main/java/bisq/core/trade/SellerTrade.java +++ b/core/src/main/java/bisq/core/trade/SellerTrade.java @@ -19,6 +19,7 @@ package bisq.core.trade; import bisq.core.btc.wallet.BtcWalletService; import bisq.core.offer.Offer; +import bisq.core.trade.protocol.ProcessModel; import bisq.network.p2p.NodeAddress; @@ -45,7 +46,8 @@ public abstract class SellerTrade extends Trade { @Nullable NodeAddress mediatorNodeAddress, @Nullable NodeAddress refundAgentNodeAddress, Storage storage, - BtcWalletService btcWalletService) { + BtcWalletService btcWalletService, + ProcessModel processModel) { super(offer, tradeAmount, txFee, @@ -57,7 +59,8 @@ public abstract class SellerTrade extends Trade { mediatorNodeAddress, refundAgentNodeAddress, storage, - btcWalletService); + btcWalletService, + processModel); } SellerTrade(Offer offer, @@ -68,7 +71,8 @@ public abstract class SellerTrade extends Trade { @Nullable NodeAddress mediatorNodeAddress, @Nullable NodeAddress refundAgentNodeAddress, Storage storage, - BtcWalletService btcWalletService) { + BtcWalletService btcWalletService, + ProcessModel processModel) { super(offer, txFee, takeOfferFee, @@ -77,7 +81,8 @@ public abstract class SellerTrade extends Trade { mediatorNodeAddress, refundAgentNodeAddress, storage, - btcWalletService); + btcWalletService, + processModel); } @Override diff --git a/core/src/main/java/bisq/core/trade/Trade.java b/core/src/main/java/bisq/core/trade/Trade.java index 85faf787ad..95df46e497 100644 --- a/core/src/main/java/bisq/core/trade/Trade.java +++ b/core/src/main/java/bisq/core/trade/Trade.java @@ -274,7 +274,8 @@ public abstract class Trade implements Tradable, Model { // Persistable // Immutable - @Nullable + @Getter + private final ProcessModel processModel; @Getter private final Offer offer; @Getter @@ -285,10 +286,7 @@ public abstract class Trade implements Tradable, Model { private final long takerFeeAsLong; @Setter private long takeOfferDate; - @Setter - @Getter - @Nullable - private ProcessModel processModel; + // Mutable @Nullable @Getter @@ -473,16 +471,18 @@ public abstract class Trade implements Tradable, Model { @Nullable NodeAddress mediatorNodeAddress, @Nullable NodeAddress refundAgentNodeAddress, Storage storage, - BtcWalletService btcWalletService) { + BtcWalletService btcWalletService, + ProcessModel processModel) { this.offer = offer; this.txFee = txFee; this.takerFee = takerFee; this.isCurrencyForTakerFeeBtc = isCurrencyForTakerFeeBtc; - this.storage = storage; - this.btcWalletService = btcWalletService; this.arbitratorNodeAddress = arbitratorNodeAddress; this.mediatorNodeAddress = mediatorNodeAddress; this.refundAgentNodeAddress = refundAgentNodeAddress; + this.storage = storage; + this.btcWalletService = btcWalletService; + this.processModel = processModel; txFeeAsLong = txFee.value; takerFeeAsLong = takerFee.value; @@ -505,7 +505,8 @@ public abstract class Trade implements Tradable, Model { @Nullable NodeAddress mediatorNodeAddress, @Nullable NodeAddress refundAgentNodeAddress, Storage storage, - BtcWalletService btcWalletService) { + BtcWalletService btcWalletService, + ProcessModel processModel) { this(offer, txFee, @@ -515,7 +516,8 @@ public abstract class Trade implements Tradable, Model { mediatorNodeAddress, refundAgentNodeAddress, storage, - btcWalletService); + btcWalletService, + processModel); this.tradePrice = tradePrice; this.tradingPeerNodeAddress = tradingPeerNodeAddress; @@ -530,7 +532,7 @@ public abstract class Trade implements Tradable, Model { @Override public Message toProtoMessage() { protobuf.Trade.Builder builder = protobuf.Trade.newBuilder() - .setOffer(checkNotNull(offer).toProtoMessage()) + .setOffer(offer.toProtoMessage()) .setIsCurrencyForTakerFeeBtc(isCurrencyForTakerFeeBtc) .setTxFeeAsLong(txFeeAsLong) .setTakerFeeAsLong(takerFeeAsLong) @@ -577,7 +579,6 @@ public abstract class Trade implements Tradable, Model { public static Trade fromProto(Trade trade, protobuf.Trade proto, CoreProtoResolver coreProtoResolver) { trade.setTakeOfferDate(proto.getTakeOfferDate()); - trade.setProcessModel(ProcessModel.fromProto(proto.getProcessModel(), coreProtoResolver)); trade.setState(State.fromProto(proto.getState())); trade.setDisputeState(DisputeState.fromProto(proto.getDisputeState())); trade.setTradePeriodState(TradePeriodState.fromProto(proto.getTradePeriodState())); @@ -630,28 +631,23 @@ public abstract class Trade implements Tradable, Model { this.btcWalletService = btcWalletService; } - public void setupProcessModel(ProcessModelServiceProvider processModelServiceProvider, - TradeManager tradeManager) { - processModel = getOrCreateProcessModel(processModelServiceProvider); - processModel.applyTransient(processModelServiceProvider, - tradeManager, - checkNotNull(offer)); + public void setupProcessModel(ProcessModelServiceProvider serviceProvider, TradeManager tradeManager) { + processModel.applyTransient(serviceProvider, tradeManager, offer); } - public void init(ProcessModelServiceProvider processModelServiceProvider) { - - processModelServiceProvider.getArbitratorManager().getDisputeAgentByNodeAddress(arbitratorNodeAddress).ifPresent(arbitrator -> { + public void init(ProcessModelServiceProvider serviceProvider) { + serviceProvider.getArbitratorManager().getDisputeAgentByNodeAddress(arbitratorNodeAddress).ifPresent(arbitrator -> { arbitratorBtcPubKey = arbitrator.getBtcPubKey(); arbitratorPubKeyRing = arbitrator.getPubKeyRing(); persist(); }); - processModelServiceProvider.getMediatorManager().getDisputeAgentByNodeAddress(mediatorNodeAddress).ifPresent(mediator -> { + serviceProvider.getMediatorManager().getDisputeAgentByNodeAddress(mediatorNodeAddress).ifPresent(mediator -> { mediatorPubKeyRing = mediator.getPubKeyRing(); persist(); }); - processModelServiceProvider.getRefundAgentManager().getDisputeAgentByNodeAddress(refundAgentNodeAddress).ifPresent(refundAgent -> { + serviceProvider.getRefundAgentManager().getDisputeAgentByNodeAddress(refundAgentNodeAddress).ifPresent(refundAgent -> { refundAgentPubKeyRing = refundAgent.getPubKeyRing(); persist(); }); @@ -668,15 +664,6 @@ public abstract class Trade implements Tradable, Model { isInitialized = true; } - public ProcessModel getOrCreateProcessModel(ProcessModelServiceProvider processModelServiceProvider) { - if (processModel == null) { - processModel = new ProcessModel(checkNotNull(offer).getId(), - processModelServiceProvider.getUser().getAccountId(), - processModelServiceProvider.getKeyRing().getPubKeyRing()); - } - return processModel; - } - /////////////////////////////////////////////////////////////////////////////////////////// // API @@ -1132,7 +1119,7 @@ public abstract class Trade implements Tradable, Model { } public boolean isTxChainInvalid() { - return checkNotNull(offer).getOfferFeePaymentTxId() == null || + return offer.getOfferFeePaymentTxId() == null || getTakerFeeTxId() == null || getDepositTxId() == null || getDelayedPayoutTxBytes() == null; diff --git a/core/src/main/java/bisq/core/trade/TradeManager.java b/core/src/main/java/bisq/core/trade/TradeManager.java index 0140a89f37..7e8c42f23f 100644 --- a/core/src/main/java/bisq/core/trade/TradeManager.java +++ b/core/src/main/java/bisq/core/trade/TradeManager.java @@ -36,6 +36,7 @@ import bisq.core.trade.handlers.TradeResultHandler; import bisq.core.trade.messages.TakeOfferRequest; import bisq.core.trade.messages.TradeMessage; import bisq.core.trade.protocol.MakerProtocol; +import bisq.core.trade.protocol.ProcessModel; import bisq.core.trade.protocol.ProcessModelServiceProvider; import bisq.core.trade.protocol.TakerProtocol; import bisq.core.trade.statistics.TradeStatisticsManager; @@ -243,7 +244,8 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi openOffer.getMediatorNodeAddress(), openOffer.getRefundAgentNodeAddress(), tradableListStorage, - btcWalletService) : + btcWalletService, + getNewProcessModel(offer)) : new SellerAsMakerTrade(offer, Coin.valueOf(takeOfferRequest.getTxFee()), Coin.valueOf(takeOfferRequest.getTakerFee()), @@ -252,7 +254,8 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi openOffer.getMediatorNodeAddress(), openOffer.getRefundAgentNodeAddress(), tradableListStorage, - btcWalletService); + btcWalletService, + getNewProcessModel(offer)); initNewMakerTrade(trade); tradableList.add(trade); @@ -341,7 +344,7 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi private void initNewTakerTrade(Trade trade, boolean useSavingsWallet, Coin fundsNeededForTrade) { initTrade(trade); - checkNotNull(trade.getProcessModel()).setUseSavingsWallet(useSavingsWallet); + trade.getProcessModel().setUseSavingsWallet(useSavingsWallet); trade.getProcessModel().setFundsNeededForTradeAsLong(fundsNeededForTrade.value); } @@ -428,7 +431,8 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi model.getSelectedMediator(), model.getSelectedRefundAgent(), tradableListStorage, - btcWalletService) : + btcWalletService, + getNewProcessModel(offer)) : new BuyerAsTakerTrade(offer, amount, txFee, @@ -440,12 +444,19 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi model.getSelectedMediator(), model.getSelectedRefundAgent(), tradableListStorage, - btcWalletService); + btcWalletService, + getNewProcessModel(offer)); trade.setTakerPaymentAccountId(paymentAccountId); initNewTakerTrade(trade, useSavingsWallet, fundsNeededForTrade); return trade; } + private ProcessModel getNewProcessModel(Offer offer) { + return new ProcessModel(checkNotNull(offer).getId(), + processModelServiceProvider.getUser().getAccountId(), + processModelServiceProvider.getKeyRing().getPubKeyRing()); + } + private OfferAvailabilityModel getOfferAvailabilityModel(Offer offer) { return new OfferAvailabilityModel( offer,