Make processModel in Trade final and pass in constructor instead of in init method

This commit is contained in:
chimp1984 2020-09-26 19:36:07 -05:00
parent f0a30221ab
commit cabc5af2c6
No known key found for this signature in database
GPG key ID: 9801B4EC591F90E3
8 changed files with 86 additions and 58 deletions

View file

@ -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<? extends TradableList> 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());

View file

@ -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<? extends TradableList> 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);
}

View file

@ -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<? extends TradableList> 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<? extends TradableList> 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

View file

@ -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<? extends TradableList> 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());

View file

@ -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<? extends TradableList> 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);
}

View file

@ -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<? extends TradableList> 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<? extends TradableList> 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

View file

@ -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<? extends TradableList> 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<? extends TradableList> 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;

View file

@ -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,