mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-04-06 21:13:59 -04:00
Fix Remove offer bug. Add handlers to remove offer. Rename delegate to dataModel.
This commit is contained in:
parent
d832cfe74b
commit
3b35774b4b
@ -30,7 +30,7 @@ import com.google.inject.Inject;
|
||||
import java.util.Currency;
|
||||
|
||||
import viewfx.model.ViewModel;
|
||||
import viewfx.model.support.ActivatableWithDelegate;
|
||||
import viewfx.model.support.ActivatableWithDataModel;
|
||||
|
||||
import javafx.beans.property.BooleanProperty;
|
||||
import javafx.beans.property.ObjectProperty;
|
||||
@ -42,7 +42,7 @@ import javafx.collections.ListChangeListener;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.util.StringConverter;
|
||||
|
||||
class FiatAccountViewModel extends ActivatableWithDelegate<FiatAccountDataModel> implements ViewModel {
|
||||
class FiatAccountViewModel extends ActivatableWithDataModel<FiatAccountDataModel> implements ViewModel {
|
||||
|
||||
private final BankAccountNumberValidator bankAccountNumberValidator;
|
||||
|
||||
@ -61,26 +61,26 @@ class FiatAccountViewModel extends ActivatableWithDelegate<FiatAccountDataModel>
|
||||
|
||||
|
||||
@Inject
|
||||
public FiatAccountViewModel(FiatAccountDataModel delegate, BankAccountNumberValidator bankAccountNumberValidator) {
|
||||
super(delegate);
|
||||
public FiatAccountViewModel(FiatAccountDataModel dataModel, BankAccountNumberValidator bankAccountNumberValidator) {
|
||||
super(dataModel);
|
||||
this.bankAccountNumberValidator = bankAccountNumberValidator;
|
||||
|
||||
// input
|
||||
title.bindBidirectional(delegate.title);
|
||||
holderName.bindBidirectional(delegate.holderName);
|
||||
primaryID.bindBidirectional(delegate.primaryID);
|
||||
secondaryID.bindBidirectional(delegate.secondaryID);
|
||||
type.bindBidirectional(delegate.type);
|
||||
country.bindBidirectional(delegate.country);
|
||||
currency.bindBidirectional(delegate.currency);
|
||||
title.bindBidirectional(dataModel.title);
|
||||
holderName.bindBidirectional(dataModel.holderName);
|
||||
primaryID.bindBidirectional(dataModel.primaryID);
|
||||
secondaryID.bindBidirectional(dataModel.secondaryID);
|
||||
type.bindBidirectional(dataModel.type);
|
||||
country.bindBidirectional(dataModel.country);
|
||||
currency.bindBidirectional(dataModel.currency);
|
||||
|
||||
primaryIDPrompt.bind(delegate.primaryIDPrompt);
|
||||
secondaryIDPrompt.bind(delegate.secondaryIDPrompt);
|
||||
primaryIDPrompt.bind(dataModel.primaryIDPrompt);
|
||||
secondaryIDPrompt.bind(dataModel.secondaryIDPrompt);
|
||||
|
||||
selectionPrompt.set("No bank account available");
|
||||
selectionDisable.set(true);
|
||||
|
||||
delegate.title.addListener((ov, oldValue, newValue) -> validateInput());
|
||||
dataModel.title.addListener((ov, oldValue, newValue) -> validateInput());
|
||||
holderName.addListener((ov, oldValue, newValue) -> validateInput());
|
||||
primaryID.addListener((ov, oldValue, newValue) -> validateInput());
|
||||
secondaryID.addListener((ov, oldValue, newValue) -> validateInput());
|
||||
@ -88,7 +88,7 @@ class FiatAccountViewModel extends ActivatableWithDelegate<FiatAccountDataModel>
|
||||
|
||||
@Override
|
||||
public void doActivate() {
|
||||
delegate.allBankAccounts.addListener((ListChangeListener<BankAccount>) change -> applyAllBankAccounts());
|
||||
dataModel.allBankAccounts.addListener((ListChangeListener<BankAccount>) change -> applyAllBankAccounts());
|
||||
applyAllBankAccounts();
|
||||
}
|
||||
|
||||
@ -96,21 +96,21 @@ class FiatAccountViewModel extends ActivatableWithDelegate<FiatAccountDataModel>
|
||||
InputValidator.ValidationResult requestSaveBankAccount() {
|
||||
InputValidator.ValidationResult result = validateInput();
|
||||
if (result.isValid) {
|
||||
delegate.saveBankAccount();
|
||||
dataModel.saveBankAccount();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void removeBankAccount() {
|
||||
delegate.removeBankAccount();
|
||||
dataModel.removeBankAccount();
|
||||
}
|
||||
|
||||
void addCountryToAcceptedCountriesList() {
|
||||
delegate.addCountryToAcceptedCountriesList();
|
||||
dataModel.addCountryToAcceptedCountriesList();
|
||||
}
|
||||
|
||||
void selectBankAccount(BankAccount bankAccount) {
|
||||
delegate.selectBankAccount(bankAccount);
|
||||
dataModel.selectBankAccount(bankAccount);
|
||||
}
|
||||
|
||||
|
||||
@ -188,27 +188,27 @@ class FiatAccountViewModel extends ActivatableWithDelegate<FiatAccountDataModel>
|
||||
|
||||
|
||||
ObservableList<BankAccountType> getAllTypes() {
|
||||
return delegate.allTypes;
|
||||
return dataModel.allTypes;
|
||||
}
|
||||
|
||||
ObservableList<BankAccount> getAllBankAccounts() {
|
||||
return delegate.allBankAccounts;
|
||||
return dataModel.allBankAccounts;
|
||||
}
|
||||
|
||||
ObservableList<Currency> getAllCurrencies() {
|
||||
return delegate.allCurrencies;
|
||||
return dataModel.allCurrencies;
|
||||
}
|
||||
|
||||
ObservableList<Region> getAllRegions() {
|
||||
return delegate.allRegions;
|
||||
return dataModel.allRegions;
|
||||
}
|
||||
|
||||
BooleanProperty getCountryNotInAcceptedCountriesList() {
|
||||
return delegate.countryNotInAcceptedCountriesList;
|
||||
return dataModel.countryNotInAcceptedCountriesList;
|
||||
}
|
||||
|
||||
ObservableList<Country> getAllCountriesFor(Region selectedRegion) {
|
||||
return delegate.getAllCountriesFor(selectedRegion);
|
||||
return dataModel.getAllCountriesFor(selectedRegion);
|
||||
}
|
||||
|
||||
BankAccountNumberValidator getBankAccountNumberValidator() {
|
||||
@ -217,23 +217,23 @@ class FiatAccountViewModel extends ActivatableWithDelegate<FiatAccountDataModel>
|
||||
|
||||
|
||||
void setType(BankAccountType type) {
|
||||
delegate.setType(type);
|
||||
dataModel.setType(type);
|
||||
validateInput();
|
||||
}
|
||||
|
||||
void setCountry(Country country) {
|
||||
delegate.setCountry(country);
|
||||
dataModel.setCountry(country);
|
||||
validateInput();
|
||||
}
|
||||
|
||||
void setCurrency(Currency currency) {
|
||||
delegate.setCurrency(currency);
|
||||
dataModel.setCurrency(currency);
|
||||
validateInput();
|
||||
}
|
||||
|
||||
|
||||
private void applyAllBankAccounts() {
|
||||
if (delegate.allBankAccounts.isEmpty()) {
|
||||
if (dataModel.allBankAccounts.isEmpty()) {
|
||||
selectionPrompt.set("No bank account available");
|
||||
selectionDisable.set(true);
|
||||
}
|
||||
@ -244,23 +244,23 @@ class FiatAccountViewModel extends ActivatableWithDelegate<FiatAccountDataModel>
|
||||
}
|
||||
|
||||
private InputValidator.ValidationResult validateInput() {
|
||||
InputValidator.ValidationResult result = bankAccountNumberValidator.validate(delegate.title.get());
|
||||
InputValidator.ValidationResult result = bankAccountNumberValidator.validate(dataModel.title.get());
|
||||
if (result.isValid) {
|
||||
result = bankAccountNumberValidator.validate(delegate.holderName.get());
|
||||
result = bankAccountNumberValidator.validate(dataModel.holderName.get());
|
||||
if (result.isValid) {
|
||||
result = bankAccountNumberValidator.validate(delegate.primaryID.get());
|
||||
result = bankAccountNumberValidator.validate(dataModel.primaryID.get());
|
||||
if (result.isValid) {
|
||||
result = bankAccountNumberValidator.validate(delegate.secondaryID.get());
|
||||
result = bankAccountNumberValidator.validate(dataModel.secondaryID.get());
|
||||
if (result.isValid) {
|
||||
if (delegate.currency.get() == null)
|
||||
if (dataModel.currency.get() == null)
|
||||
result = new InputValidator.ValidationResult(false,
|
||||
"You have not selected a currency");
|
||||
if (result.isValid) {
|
||||
if (delegate.country.get() == null)
|
||||
if (dataModel.country.get() == null)
|
||||
result = new InputValidator.ValidationResult(false,
|
||||
"You have not selected a country of the payments account");
|
||||
if (result.isValid) {
|
||||
if (delegate.type.get() == null)
|
||||
if (dataModel.type.get() == null)
|
||||
result = new InputValidator.ValidationResult(false,
|
||||
"You have not selected a payments method");
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ import com.google.inject.Inject;
|
||||
import java.util.Currency;
|
||||
|
||||
import viewfx.model.ViewModel;
|
||||
import viewfx.model.support.ActivatableWithDelegate;
|
||||
import viewfx.model.support.ActivatableWithDataModel;
|
||||
|
||||
import javafx.beans.property.BooleanProperty;
|
||||
import javafx.beans.property.ObjectProperty;
|
||||
@ -38,7 +38,7 @@ import javafx.beans.property.StringProperty;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.util.StringConverter;
|
||||
|
||||
class IrcAccountViewModel extends ActivatableWithDelegate<IrcAccountDataModel> implements ViewModel {
|
||||
class IrcAccountViewModel extends ActivatableWithDataModel<IrcAccountDataModel> implements ViewModel {
|
||||
|
||||
private final InputValidator nickNameValidator;
|
||||
|
||||
@ -49,23 +49,23 @@ class IrcAccountViewModel extends ActivatableWithDelegate<IrcAccountDataModel> i
|
||||
|
||||
|
||||
@Inject
|
||||
public IrcAccountViewModel(IrcAccountDataModel delegate, BankAccountNumberValidator nickNameValidator) {
|
||||
super(delegate);
|
||||
public IrcAccountViewModel(IrcAccountDataModel dataModel, BankAccountNumberValidator nickNameValidator) {
|
||||
super(dataModel);
|
||||
this.nickNameValidator = nickNameValidator;
|
||||
|
||||
// input
|
||||
ircNickName.bindBidirectional(delegate.nickName);
|
||||
type.bindBidirectional(delegate.type);
|
||||
currency.bindBidirectional(delegate.currency);
|
||||
ircNickName.bindBidirectional(dataModel.nickName);
|
||||
type.bindBidirectional(dataModel.type);
|
||||
currency.bindBidirectional(dataModel.currency);
|
||||
|
||||
delegate.nickName.addListener((ov, oldValue, newValue) -> validateInput());
|
||||
dataModel.nickName.addListener((ov, oldValue, newValue) -> validateInput());
|
||||
}
|
||||
|
||||
|
||||
InputValidator.ValidationResult requestSaveBankAccount() {
|
||||
InputValidator.ValidationResult result = validateInput();
|
||||
if (result.isValid) {
|
||||
delegate.saveBankAccount();
|
||||
dataModel.saveBankAccount();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -104,11 +104,11 @@ class IrcAccountViewModel extends ActivatableWithDelegate<IrcAccountDataModel> i
|
||||
|
||||
|
||||
ObservableList<BankAccountType> getAllTypes() {
|
||||
return delegate.allTypes;
|
||||
return dataModel.allTypes;
|
||||
}
|
||||
|
||||
ObservableList<Currency> getAllCurrencies() {
|
||||
return delegate.allCurrencies;
|
||||
return dataModel.allCurrencies;
|
||||
}
|
||||
|
||||
InputValidator getNickNameValidator() {
|
||||
@ -117,24 +117,24 @@ class IrcAccountViewModel extends ActivatableWithDelegate<IrcAccountDataModel> i
|
||||
|
||||
|
||||
void setType(BankAccountType type) {
|
||||
delegate.setType(type);
|
||||
dataModel.setType(type);
|
||||
validateInput();
|
||||
}
|
||||
|
||||
void setCurrency(Currency currency) {
|
||||
delegate.setCurrency(currency);
|
||||
dataModel.setCurrency(currency);
|
||||
validateInput();
|
||||
}
|
||||
|
||||
|
||||
|
||||
private InputValidator.ValidationResult validateInput() {
|
||||
InputValidator.ValidationResult result = nickNameValidator.validate(delegate.nickName.get());
|
||||
if (delegate.currency.get() == null)
|
||||
InputValidator.ValidationResult result = nickNameValidator.validate(dataModel.nickName.get());
|
||||
if (dataModel.currency.get() == null)
|
||||
result = new InputValidator.ValidationResult(false,
|
||||
"You have not selected a currency");
|
||||
if (result.isValid) {
|
||||
if (delegate.type.get() == null)
|
||||
if (dataModel.type.get() == null)
|
||||
result = new InputValidator.ValidationResult(false,
|
||||
"You have not selected a payments method");
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ import org.bitcoinj.core.Coin;
|
||||
import com.google.inject.Inject;
|
||||
|
||||
import viewfx.model.ViewModel;
|
||||
import viewfx.model.support.WithDelegate;
|
||||
import viewfx.model.support.WithDataModel;
|
||||
|
||||
import javafx.beans.property.BooleanProperty;
|
||||
import javafx.beans.property.ObjectProperty;
|
||||
@ -37,7 +37,7 @@ import javafx.beans.property.SimpleStringProperty;
|
||||
import javafx.beans.property.StringProperty;
|
||||
|
||||
|
||||
class RegistrationViewModel extends WithDelegate<RegistrationDataModel> implements ViewModel {
|
||||
class RegistrationViewModel extends WithDataModel<RegistrationDataModel> implements ViewModel {
|
||||
|
||||
final BooleanProperty isPayButtonDisabled = new SimpleBooleanProperty(true);
|
||||
final StringProperty requestPlaceOfferErrorMessage = new SimpleStringProperty();
|
||||
@ -50,27 +50,27 @@ class RegistrationViewModel extends WithDelegate<RegistrationDataModel> implemen
|
||||
|
||||
|
||||
@Inject
|
||||
public RegistrationViewModel(RegistrationDataModel delegate, BSFormatter formatter) {
|
||||
super(delegate);
|
||||
public RegistrationViewModel(RegistrationDataModel dataModel, BSFormatter formatter) {
|
||||
super(dataModel);
|
||||
this.formatter = formatter;
|
||||
|
||||
if (delegate.getAddressEntry() != null) {
|
||||
address.set(delegate.getAddressEntry().getAddress());
|
||||
if (dataModel.getAddressEntry() != null) {
|
||||
address.set(dataModel.getAddressEntry().getAddress());
|
||||
}
|
||||
|
||||
delegate.isWalletFunded.addListener((ov, oldValue, newValue) -> {
|
||||
dataModel.isWalletFunded.addListener((ov, oldValue, newValue) -> {
|
||||
if (newValue)
|
||||
validateInput();
|
||||
});
|
||||
validateInput();
|
||||
|
||||
delegate.payFeeSuccess.addListener((ov, oldValue, newValue) -> {
|
||||
dataModel.payFeeSuccess.addListener((ov, oldValue, newValue) -> {
|
||||
isPayButtonDisabled.set(newValue);
|
||||
showTransactionPublishedScreen.set(newValue);
|
||||
isPaymentSpinnerVisible.set(false);
|
||||
});
|
||||
|
||||
delegate.payFeeErrorMessage.addListener((ov, oldValue, newValue) -> {
|
||||
dataModel.payFeeErrorMessage.addListener((ov, oldValue, newValue) -> {
|
||||
if (newValue != null) {
|
||||
requestPlaceOfferErrorMessage.set(newValue);
|
||||
isPaymentSpinnerVisible.set(false);
|
||||
@ -79,18 +79,18 @@ class RegistrationViewModel extends WithDelegate<RegistrationDataModel> implemen
|
||||
}
|
||||
|
||||
void payFee() {
|
||||
delegate.payFeeErrorMessage.set(null);
|
||||
delegate.payFeeSuccess.set(false);
|
||||
dataModel.payFeeErrorMessage.set(null);
|
||||
dataModel.payFeeSuccess.set(false);
|
||||
|
||||
isPayButtonDisabled.set(true);
|
||||
isPaymentSpinnerVisible.set(true);
|
||||
|
||||
delegate.payFee();
|
||||
dataModel.payFee();
|
||||
}
|
||||
|
||||
|
||||
WalletService getWalletService() {
|
||||
return delegate.getWalletService();
|
||||
return dataModel.getWalletService();
|
||||
}
|
||||
|
||||
BSFormatter getFormatter() {
|
||||
@ -98,11 +98,11 @@ class RegistrationViewModel extends WithDelegate<RegistrationDataModel> implemen
|
||||
}
|
||||
|
||||
Coin getFeeAsCoin() {
|
||||
return delegate.getFeeAsCoin();
|
||||
return dataModel.getFeeAsCoin();
|
||||
}
|
||||
|
||||
String getAddressAsString() {
|
||||
return delegate.getAddressEntry() != null ? delegate.getAddressEntry().getAddress().toString() : "";
|
||||
return dataModel.getAddressEntry() != null ? dataModel.getAddressEntry().getAddress().toString() : "";
|
||||
}
|
||||
|
||||
String getPaymentLabel() {
|
||||
@ -110,16 +110,16 @@ class RegistrationViewModel extends WithDelegate<RegistrationDataModel> implemen
|
||||
}
|
||||
|
||||
String getFeeAsString() {
|
||||
return formatter.formatCoinWithCode(delegate.getFeeAsCoin());
|
||||
return formatter.formatCoinWithCode(dataModel.getFeeAsCoin());
|
||||
}
|
||||
|
||||
String getTransactionId() {
|
||||
return delegate.getTransactionId();
|
||||
return dataModel.getTransactionId();
|
||||
}
|
||||
|
||||
|
||||
private void validateInput() {
|
||||
isPayButtonDisabled.set(!(delegate.isWalletFunded.get()));
|
||||
isPayButtonDisabled.set(!(dataModel.isWalletFunded.get()));
|
||||
}
|
||||
|
||||
|
||||
|
@ -26,20 +26,20 @@ import com.google.inject.Inject;
|
||||
import java.util.Locale;
|
||||
|
||||
import viewfx.model.ViewModel;
|
||||
import viewfx.model.support.ActivatableWithDelegate;
|
||||
import viewfx.model.support.ActivatableWithDataModel;
|
||||
|
||||
import javafx.beans.property.BooleanProperty;
|
||||
import javafx.beans.property.SimpleBooleanProperty;
|
||||
import javafx.collections.ObservableList;
|
||||
|
||||
class RestrictionsViewModel extends ActivatableWithDelegate<RestrictionsDataModel> implements ViewModel {
|
||||
class RestrictionsViewModel extends ActivatableWithDataModel<RestrictionsDataModel> implements ViewModel {
|
||||
|
||||
final BooleanProperty doneButtonDisable = new SimpleBooleanProperty(true);
|
||||
|
||||
|
||||
@Inject
|
||||
public RestrictionsViewModel(RestrictionsDataModel delegate) {
|
||||
super(delegate);
|
||||
public RestrictionsViewModel(RestrictionsDataModel dataModel) {
|
||||
super(dataModel);
|
||||
}
|
||||
|
||||
|
||||
@ -49,70 +49,70 @@ class RestrictionsViewModel extends ActivatableWithDelegate<RestrictionsDataMode
|
||||
}
|
||||
|
||||
void addLanguage(Locale locale) {
|
||||
delegate.addLanguage(locale);
|
||||
dataModel.addLanguage(locale);
|
||||
updateDoneButtonDisableState();
|
||||
}
|
||||
|
||||
void removeLanguage(Locale locale) {
|
||||
delegate.removeLanguage(locale);
|
||||
dataModel.removeLanguage(locale);
|
||||
updateDoneButtonDisableState();
|
||||
}
|
||||
|
||||
void addCountry(Country country) {
|
||||
delegate.addCountry(country);
|
||||
dataModel.addCountry(country);
|
||||
updateDoneButtonDisableState();
|
||||
}
|
||||
|
||||
void removeCountry(Country country) {
|
||||
delegate.removeCountry(country);
|
||||
dataModel.removeCountry(country);
|
||||
updateDoneButtonDisableState();
|
||||
}
|
||||
|
||||
void removeArbitrator(Arbitrator arbitrator) {
|
||||
delegate.removeArbitrator(arbitrator);
|
||||
dataModel.removeArbitrator(arbitrator);
|
||||
updateDoneButtonDisableState();
|
||||
}
|
||||
|
||||
void updateArbitratorList() {
|
||||
delegate.updateArbitratorList();
|
||||
dataModel.updateArbitratorList();
|
||||
updateDoneButtonDisableState();
|
||||
}
|
||||
|
||||
|
||||
ObservableList<Country> getListWithAllEuroCountries() {
|
||||
return delegate.getListWithAllEuroCountries();
|
||||
return dataModel.getListWithAllEuroCountries();
|
||||
}
|
||||
|
||||
ObservableList<Country> getAllCountriesFor(Region selectedRegion) {
|
||||
return delegate.getAllCountriesFor(selectedRegion);
|
||||
return dataModel.getAllCountriesFor(selectedRegion);
|
||||
}
|
||||
|
||||
ObservableList<Locale> getLanguageList() {
|
||||
return delegate.languageList;
|
||||
return dataModel.languageList;
|
||||
}
|
||||
|
||||
ObservableList<Region> getAllRegions() {
|
||||
return delegate.allRegions;
|
||||
return dataModel.allRegions;
|
||||
}
|
||||
|
||||
ObservableList<Locale> getAllLanguages() {
|
||||
return delegate.allLanguages;
|
||||
return dataModel.allLanguages;
|
||||
}
|
||||
|
||||
ObservableList<Country> getCountryList() {
|
||||
return delegate.countryList;
|
||||
return dataModel.countryList;
|
||||
}
|
||||
|
||||
ObservableList<Arbitrator> getArbitratorList() {
|
||||
return delegate.arbitratorList;
|
||||
return dataModel.arbitratorList;
|
||||
}
|
||||
|
||||
|
||||
//TODO Revert size() > -1 to 0(2 later). For mock testing disabled arbitratorList test
|
||||
private void updateDoneButtonDisableState() {
|
||||
boolean isValid = delegate.languageList != null && delegate.languageList.size() > 0 &&
|
||||
delegate.countryList != null && delegate.countryList.size() > 0 &&
|
||||
delegate.arbitratorList != null && delegate.arbitratorList.size() > -1;
|
||||
boolean isValid = dataModel.languageList != null && dataModel.languageList.size() > 0 &&
|
||||
dataModel.countryList != null && dataModel.countryList.size() > 0 &&
|
||||
dataModel.arbitratorList != null && dataModel.arbitratorList.size() > -1;
|
||||
doneButtonDisable.set(!isValid);
|
||||
}
|
||||
|
||||
|
@ -22,24 +22,24 @@ import io.bitsquare.gui.util.BSFormatter;
|
||||
import com.google.inject.Inject;
|
||||
|
||||
import viewfx.model.ViewModel;
|
||||
import viewfx.model.support.ActivatableWithDelegate;
|
||||
import viewfx.model.support.ActivatableWithDataModel;
|
||||
|
||||
import javafx.collections.ObservableList;
|
||||
|
||||
class ClosedTradesViewModel extends ActivatableWithDelegate<ClosedTradesDataModel> implements ViewModel {
|
||||
class ClosedTradesViewModel extends ActivatableWithDataModel<ClosedTradesDataModel> implements ViewModel {
|
||||
|
||||
private final BSFormatter formatter;
|
||||
|
||||
|
||||
@Inject
|
||||
public ClosedTradesViewModel(ClosedTradesDataModel delegate, BSFormatter formatter) {
|
||||
super(delegate);
|
||||
public ClosedTradesViewModel(ClosedTradesDataModel dataModel, BSFormatter formatter) {
|
||||
super(dataModel);
|
||||
|
||||
this.formatter = formatter;
|
||||
}
|
||||
|
||||
public ObservableList<ClosedTradesListItem> getList() {
|
||||
return delegate.getList();
|
||||
return dataModel.getList();
|
||||
}
|
||||
|
||||
String getTradeId(ClosedTradesListItem item) {
|
||||
@ -59,7 +59,7 @@ class ClosedTradesViewModel extends ActivatableWithDelegate<ClosedTradesDataMode
|
||||
}
|
||||
|
||||
String getDirectionLabel(ClosedTradesListItem item) {
|
||||
return (item != null) ? formatter.formatDirection(delegate.getDirection(item.getTrade().getOffer())) : "";
|
||||
return (item != null) ? formatter.formatDirection(dataModel.getDirection(item.getTrade().getOffer())) : "";
|
||||
}
|
||||
|
||||
String getDate(ClosedTradesListItem item) {
|
||||
|
@ -72,7 +72,7 @@ class OffersDataModel implements Activatable, DataModel {
|
||||
}
|
||||
|
||||
void removeOffer(OfferListItem item) {
|
||||
tradeManager.removeOffer(item.getOffer());
|
||||
tradeManager.requestRemoveOffer(item.getOffer());
|
||||
}
|
||||
|
||||
|
||||
|
@ -22,30 +22,30 @@ import io.bitsquare.gui.util.BSFormatter;
|
||||
import com.google.inject.Inject;
|
||||
|
||||
import viewfx.model.ViewModel;
|
||||
import viewfx.model.support.ActivatableWithDelegate;
|
||||
import viewfx.model.support.ActivatableWithDataModel;
|
||||
|
||||
import javafx.collections.ObservableList;
|
||||
|
||||
class OffersViewModel extends ActivatableWithDelegate<OffersDataModel> implements ViewModel {
|
||||
class OffersViewModel extends ActivatableWithDataModel<OffersDataModel> implements ViewModel {
|
||||
|
||||
private final BSFormatter formatter;
|
||||
|
||||
|
||||
@Inject
|
||||
public OffersViewModel(OffersDataModel delegate, BSFormatter formatter) {
|
||||
super(delegate);
|
||||
public OffersViewModel(OffersDataModel dataModel, BSFormatter formatter) {
|
||||
super(dataModel);
|
||||
|
||||
this.formatter = formatter;
|
||||
}
|
||||
|
||||
|
||||
void removeOffer(OfferListItem item) {
|
||||
delegate.removeOffer(item);
|
||||
dataModel.removeOffer(item);
|
||||
}
|
||||
|
||||
|
||||
public ObservableList<OfferListItem> getList() {
|
||||
return delegate.getList();
|
||||
return dataModel.getList();
|
||||
}
|
||||
|
||||
String getTradeId(OfferListItem item) {
|
||||
@ -65,7 +65,7 @@ class OffersViewModel extends ActivatableWithDelegate<OffersDataModel> implement
|
||||
}
|
||||
|
||||
String getDirectionLabel(OfferListItem item) {
|
||||
return (item != null) ? formatter.formatDirection(delegate.getDirection(item.getOffer())) : "";
|
||||
return (item != null) ? formatter.formatDirection(dataModel.getDirection(item.getOffer())) : "";
|
||||
}
|
||||
|
||||
String getDate(OfferListItem item) {
|
||||
|
@ -31,7 +31,7 @@ import com.google.inject.Inject;
|
||||
import java.util.Date;
|
||||
|
||||
import viewfx.model.ViewModel;
|
||||
import viewfx.model.support.ActivatableWithDelegate;
|
||||
import viewfx.model.support.ActivatableWithDataModel;
|
||||
|
||||
import javafx.beans.InvalidationListener;
|
||||
import javafx.beans.property.BooleanProperty;
|
||||
@ -45,7 +45,7 @@ import javafx.collections.ObservableList;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
class PendingTradesViewModel extends ActivatableWithDelegate<PendingTradesDataModel> implements ViewModel {
|
||||
class PendingTradesViewModel extends ActivatableWithDataModel<PendingTradesDataModel> implements ViewModel {
|
||||
private static final Logger log = LoggerFactory.getLogger(PendingTradesViewModel.class);
|
||||
|
||||
enum State {
|
||||
@ -71,9 +71,9 @@ class PendingTradesViewModel extends ActivatableWithDelegate<PendingTradesDataMo
|
||||
|
||||
|
||||
@Inject
|
||||
public PendingTradesViewModel(PendingTradesDataModel delegate, BSFormatter formatter,
|
||||
public PendingTradesViewModel(PendingTradesDataModel dataModel, BSFormatter formatter,
|
||||
BtcAddressValidator btcAddressValidator) {
|
||||
super(delegate);
|
||||
super(dataModel);
|
||||
|
||||
this.formatter = formatter;
|
||||
this.btcAddressValidator = btcAddressValidator;
|
||||
@ -82,10 +82,10 @@ class PendingTradesViewModel extends ActivatableWithDelegate<PendingTradesDataMo
|
||||
|
||||
@Override
|
||||
public void doActivate() {
|
||||
txId.bind(delegate.txId);
|
||||
fault.bind(delegate.fault);
|
||||
txId.bind(dataModel.txId);
|
||||
fault.bind(dataModel.fault);
|
||||
|
||||
delegate.tradeState.addListener(stateChangeListener);
|
||||
dataModel.tradeState.addListener(stateChangeListener);
|
||||
updateState();
|
||||
}
|
||||
|
||||
@ -94,25 +94,25 @@ class PendingTradesViewModel extends ActivatableWithDelegate<PendingTradesDataMo
|
||||
txId.unbind();
|
||||
fault.unbind();
|
||||
|
||||
delegate.tradeState.removeListener(stateChangeListener);
|
||||
dataModel.tradeState.removeListener(stateChangeListener);
|
||||
}
|
||||
|
||||
|
||||
void selectTrade(PendingTradesListItem item) {
|
||||
delegate.selectTrade(item);
|
||||
dataModel.selectTrade(item);
|
||||
updateState();
|
||||
}
|
||||
|
||||
void fiatPaymentStarted() {
|
||||
delegate.fiatPaymentStarted();
|
||||
dataModel.fiatPaymentStarted();
|
||||
}
|
||||
|
||||
void fiatPaymentReceived() {
|
||||
delegate.fiatPaymentReceived();
|
||||
dataModel.fiatPaymentReceived();
|
||||
}
|
||||
|
||||
void withdraw(String withdrawToAddress) {
|
||||
delegate.withdraw(withdrawToAddress);
|
||||
dataModel.withdraw(withdrawToAddress);
|
||||
}
|
||||
|
||||
void withdrawAddressFocusOut(String text) {
|
||||
@ -120,27 +120,27 @@ class PendingTradesViewModel extends ActivatableWithDelegate<PendingTradesDataMo
|
||||
}
|
||||
|
||||
String getAmountToWithdraw() {
|
||||
return formatter.formatCoinWithCode(delegate.getAmountToWithdraw()); //.subtract(FeePolicy.TX_FEE));
|
||||
return formatter.formatCoinWithCode(dataModel.getAmountToWithdraw()); //.subtract(FeePolicy.TX_FEE));
|
||||
}
|
||||
|
||||
ObservableList<PendingTradesListItem> getList() {
|
||||
return delegate.getList();
|
||||
return dataModel.getList();
|
||||
}
|
||||
|
||||
boolean isOfferer() {
|
||||
return delegate.isOfferer();
|
||||
return dataModel.isOfferer();
|
||||
}
|
||||
|
||||
WalletService getWalletService() {
|
||||
return delegate.getWalletService();
|
||||
return dataModel.getWalletService();
|
||||
}
|
||||
|
||||
PendingTradesListItem getSelectedItem() {
|
||||
return delegate.getSelectedItem();
|
||||
return dataModel.getSelectedItem();
|
||||
}
|
||||
|
||||
String getCurrencyCode() {
|
||||
return delegate.getCurrencyCode();
|
||||
return dataModel.getCurrencyCode();
|
||||
}
|
||||
|
||||
// columns
|
||||
@ -161,7 +161,7 @@ class PendingTradesViewModel extends ActivatableWithDelegate<PendingTradesDataMo
|
||||
}
|
||||
|
||||
String evaluateDirection(PendingTradesListItem item) {
|
||||
return (item != null) ? formatter.formatDirection(delegate.getDirection(item.getTrade().getOffer())) : "";
|
||||
return (item != null) ? formatter.formatDirection(dataModel.getDirection(item.getTrade().getOffer())) : "";
|
||||
}
|
||||
|
||||
String formatDate(Date value) {
|
||||
@ -170,45 +170,45 @@ class PendingTradesViewModel extends ActivatableWithDelegate<PendingTradesDataMo
|
||||
|
||||
// payment
|
||||
String getPaymentMethod() {
|
||||
return BSResources.get(delegate.getTrade().getContract().getTakerBankAccount().getBankAccountType().toString());
|
||||
return BSResources.get(dataModel.getTrade().getContract().getTakerBankAccount().getBankAccountType().toString());
|
||||
}
|
||||
|
||||
String getFiatAmount() {
|
||||
return formatter.formatFiatWithCode(delegate.getTrade().getTradeVolume());
|
||||
return formatter.formatFiatWithCode(dataModel.getTrade().getTradeVolume());
|
||||
}
|
||||
|
||||
String getHolderName() {
|
||||
return delegate.getTrade().getContract().getTakerBankAccount().getAccountHolderName();
|
||||
return dataModel.getTrade().getContract().getTakerBankAccount().getAccountHolderName();
|
||||
}
|
||||
|
||||
String getPrimaryId() {
|
||||
return delegate.getTrade().getContract().getTakerBankAccount().getAccountPrimaryID();
|
||||
return dataModel.getTrade().getContract().getTakerBankAccount().getAccountPrimaryID();
|
||||
}
|
||||
|
||||
String getSecondaryId() {
|
||||
return delegate.getTrade().getContract().getTakerBankAccount().getAccountSecondaryID();
|
||||
return dataModel.getTrade().getContract().getTakerBankAccount().getAccountSecondaryID();
|
||||
}
|
||||
|
||||
// summary
|
||||
String getTradeVolume() {
|
||||
return formatter.formatCoinWithCode(delegate.getTrade().getTradeAmount());
|
||||
return formatter.formatCoinWithCode(dataModel.getTrade().getTradeAmount());
|
||||
}
|
||||
|
||||
String getFiatVolume() {
|
||||
return formatter.formatFiatWithCode(delegate.getTrade().getTradeVolume());
|
||||
return formatter.formatFiatWithCode(dataModel.getTrade().getTradeVolume());
|
||||
}
|
||||
|
||||
String getTotalFees() {
|
||||
return formatter.formatCoinWithCode(delegate.getTotalFees());
|
||||
return formatter.formatCoinWithCode(dataModel.getTotalFees());
|
||||
}
|
||||
|
||||
String getSecurityDeposit() {
|
||||
// securityDeposit is handled different for offerer and taker.
|
||||
// Offerer have paid in the max amount, but taker might have taken less so also paid in less securityDeposit
|
||||
if (delegate.isOfferer())
|
||||
return formatter.formatCoinWithCode(delegate.getTrade().getOffer().getSecurityDeposit());
|
||||
if (dataModel.isOfferer())
|
||||
return formatter.formatCoinWithCode(dataModel.getTrade().getOffer().getSecurityDeposit());
|
||||
else
|
||||
return formatter.formatCoinWithCode(delegate.getTrade().getSecurityDeposit());
|
||||
return formatter.formatCoinWithCode(dataModel.getTrade().getSecurityDeposit());
|
||||
}
|
||||
|
||||
BtcAddressValidator getBtcAddressValidator() {
|
||||
@ -217,25 +217,25 @@ class PendingTradesViewModel extends ActivatableWithDelegate<PendingTradesDataMo
|
||||
|
||||
|
||||
private void updateState() {
|
||||
Trade.State tradeState = delegate.tradeState.get();
|
||||
Trade.State tradeState = dataModel.tradeState.get();
|
||||
log.trace("tradeState " + tradeState);
|
||||
if (tradeState != null) {
|
||||
switch (tradeState) {
|
||||
// TODO Check why OFFERER_ACCEPTED can happen, refactor state handling
|
||||
case OFFERER_ACCEPTED:
|
||||
case DEPOSIT_PUBLISHED:
|
||||
state.set(delegate.isOfferer() ? State.OFFERER_BUYER_WAIT_TX_CONF : State.TAKER_SELLER_WAIT_TX_CONF);
|
||||
state.set(dataModel.isOfferer() ? State.OFFERER_BUYER_WAIT_TX_CONF : State.TAKER_SELLER_WAIT_TX_CONF);
|
||||
break;
|
||||
case DEPOSIT_CONFIRMED:
|
||||
state.set(delegate.isOfferer() ? State.OFFERER_BUYER_START_PAYMENT :
|
||||
state.set(dataModel.isOfferer() ? State.OFFERER_BUYER_START_PAYMENT :
|
||||
State.TAKER_SELLER_WAIT_PAYMENT_STARTED);
|
||||
break;
|
||||
case PAYMENT_STARTED:
|
||||
state.set(delegate.isOfferer() ? State.OFFERER_BUYER_WAIT_CONFIRM_PAYMENT_RECEIVED :
|
||||
state.set(dataModel.isOfferer() ? State.OFFERER_BUYER_WAIT_CONFIRM_PAYMENT_RECEIVED :
|
||||
State.TAKER_SELLER_CONFIRM_RECEIVE_PAYMENT);
|
||||
break;
|
||||
case COMPLETED:
|
||||
state.set(delegate.isOfferer() ? State.OFFERER_BUYER_COMPLETED : State.TAKER_SELLER_COMPLETED);
|
||||
state.set(dataModel.isOfferer() ? State.OFFERER_BUYER_COMPLETED : State.TAKER_SELLER_COMPLETED);
|
||||
break;
|
||||
case FAILED:
|
||||
// TODO error states not implemented yet
|
||||
|
@ -20,33 +20,33 @@ package io.bitsquare.gui.main.settings.application;
|
||||
import com.google.inject.Inject;
|
||||
|
||||
import viewfx.model.ViewModel;
|
||||
import viewfx.model.support.ActivatableWithDelegate;
|
||||
import viewfx.model.support.ActivatableWithDataModel;
|
||||
|
||||
import javafx.beans.property.BooleanProperty;
|
||||
import javafx.beans.property.StringProperty;
|
||||
import javafx.collections.ObservableList;
|
||||
|
||||
class PreferencesViewModel extends ActivatableWithDelegate<PreferencesDataModel> implements ViewModel {
|
||||
class PreferencesViewModel extends ActivatableWithDataModel<PreferencesDataModel> implements ViewModel {
|
||||
|
||||
@Inject
|
||||
public PreferencesViewModel(PreferencesDataModel delegate) {
|
||||
super(delegate);
|
||||
public PreferencesViewModel(PreferencesDataModel dataModel) {
|
||||
super(dataModel);
|
||||
}
|
||||
|
||||
public ObservableList<String> getBtcDenominationItems() {
|
||||
return delegate.btcDenominations;
|
||||
return dataModel.btcDenominations;
|
||||
}
|
||||
|
||||
BooleanProperty useAnimations() {
|
||||
return delegate.useAnimations;
|
||||
return dataModel.useAnimations;
|
||||
}
|
||||
|
||||
BooleanProperty useEffects() {
|
||||
return delegate.useEffects;
|
||||
return dataModel.useEffects;
|
||||
}
|
||||
|
||||
StringProperty btcDenomination() {
|
||||
return delegate.btcDenomination;
|
||||
return dataModel.btcDenomination;
|
||||
}
|
||||
|
||||
|
||||
|
@ -32,7 +32,7 @@ import org.bitcoinj.utils.Fiat;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import viewfx.model.ViewModel;
|
||||
import viewfx.model.support.ActivatableWithDelegate;
|
||||
import viewfx.model.support.ActivatableWithDataModel;
|
||||
|
||||
import javafx.beans.Observable;
|
||||
import javafx.beans.binding.Bindings;
|
||||
@ -45,7 +45,7 @@ import javafx.beans.property.StringProperty;
|
||||
|
||||
import static javafx.beans.binding.Bindings.createStringBinding;
|
||||
|
||||
class CreateOfferViewModel extends ActivatableWithDelegate<CreateOfferDataModel> implements ViewModel {
|
||||
class CreateOfferViewModel extends ActivatableWithDataModel<CreateOfferDataModel> implements ViewModel {
|
||||
|
||||
private final BtcValidator btcValidator;
|
||||
private final BSFormatter formatter;
|
||||
@ -94,19 +94,19 @@ class CreateOfferViewModel extends ActivatableWithDelegate<CreateOfferDataModel>
|
||||
|
||||
|
||||
@Inject
|
||||
public CreateOfferViewModel(CreateOfferDataModel delegate, FiatValidator fiatValidator, BtcValidator btcValidator,
|
||||
public CreateOfferViewModel(CreateOfferDataModel dataModel, FiatValidator fiatValidator, BtcValidator btcValidator,
|
||||
BSFormatter formatter) {
|
||||
super(delegate);
|
||||
super(dataModel);
|
||||
|
||||
this.fiatValidator = fiatValidator;
|
||||
this.btcValidator = btcValidator;
|
||||
this.formatter = formatter;
|
||||
|
||||
paymentLabel.set(BSResources.get("createOffer.fundsBox.paymentLabel", delegate.getOfferId()));
|
||||
paymentLabel.set(BSResources.get("createOffer.fundsBox.paymentLabel", dataModel.getOfferId()));
|
||||
|
||||
if (delegate.getAddressEntry() != null) {
|
||||
addressAsString.set(delegate.getAddressEntry().getAddress().toString());
|
||||
address.set(delegate.getAddressEntry().getAddress());
|
||||
if (dataModel.getAddressEntry() != null) {
|
||||
addressAsString.set(dataModel.getAddressEntry().getAddress().toString());
|
||||
address.set(dataModel.getAddressEntry().getAddress());
|
||||
}
|
||||
|
||||
setupBindings();
|
||||
@ -115,39 +115,39 @@ class CreateOfferViewModel extends ActivatableWithDelegate<CreateOfferDataModel>
|
||||
|
||||
// setOfferBookFilter is a one time call
|
||||
void initWithData(Direction direction, Coin amount, Fiat price) {
|
||||
delegate.setDirection(direction);
|
||||
directionLabel.set(delegate.getDirection() == Direction.BUY ? BSResources.get("shared.buy") : BSResources.get
|
||||
dataModel.setDirection(direction);
|
||||
directionLabel.set(dataModel.getDirection() == Direction.BUY ? BSResources.get("shared.buy") : BSResources.get
|
||||
("shared.sell"));
|
||||
|
||||
// apply only if valid
|
||||
boolean amountValid = false;
|
||||
if (amount != null && isBtcInputValid(amount.toPlainString())
|
||||
.isValid) {
|
||||
delegate.amountAsCoin.set(amount);
|
||||
delegate.minAmountAsCoin.set(amount);
|
||||
dataModel.amountAsCoin.set(amount);
|
||||
dataModel.minAmountAsCoin.set(amount);
|
||||
amountValid = true;
|
||||
}
|
||||
|
||||
// apply only if valid
|
||||
boolean priceValid = false;
|
||||
if (price != null && isBtcInputValid(price.toPlainString()).isValid) {
|
||||
delegate.priceAsFiat.set(formatter.parseToFiatWith2Decimals(price.toPlainString()));
|
||||
dataModel.priceAsFiat.set(formatter.parseToFiatWith2Decimals(price.toPlainString()));
|
||||
priceValid = true;
|
||||
}
|
||||
|
||||
if (amountValid && priceValid)
|
||||
delegate.calculateTotalToPay();
|
||||
dataModel.calculateTotalToPay();
|
||||
}
|
||||
|
||||
|
||||
void placeOffer() {
|
||||
delegate.requestPlaceOfferErrorMessage.set(null);
|
||||
delegate.requestPlaceOfferSuccess.set(false);
|
||||
dataModel.requestPlaceOfferErrorMessage.set(null);
|
||||
dataModel.requestPlaceOfferSuccess.set(false);
|
||||
|
||||
isPlaceOfferButtonDisabled.set(true);
|
||||
isPlaceOfferSpinnerVisible.set(true);
|
||||
|
||||
delegate.placeOffer();
|
||||
dataModel.placeOffer();
|
||||
}
|
||||
|
||||
|
||||
@ -165,12 +165,12 @@ class CreateOfferViewModel extends ActivatableWithDelegate<CreateOfferDataModel>
|
||||
// only allow max 4 decimal places for btc values
|
||||
setAmountToModel();
|
||||
// reformat input
|
||||
amount.set(formatter.formatCoin(delegate.amountAsCoin.get()));
|
||||
amount.set(formatter.formatCoin(dataModel.amountAsCoin.get()));
|
||||
|
||||
calculateVolume();
|
||||
|
||||
// handle minAmount/amount relationship
|
||||
if (!delegate.isMinAmountLessOrEqualAmount()) {
|
||||
if (!dataModel.isMinAmountLessOrEqualAmount()) {
|
||||
amountValidationResult.set(new InputValidator.ValidationResult(false,
|
||||
BSResources.get("createOffer.validation.amountSmallerThanMinAmount")));
|
||||
}
|
||||
@ -190,9 +190,9 @@ class CreateOfferViewModel extends ActivatableWithDelegate<CreateOfferDataModel>
|
||||
if (result.isValid) {
|
||||
showWarningInvalidBtcDecimalPlaces.set(!formatter.hasBtcValidDecimals(userInput));
|
||||
setMinAmountToModel();
|
||||
minAmount.set(formatter.formatCoin(delegate.minAmountAsCoin.get()));
|
||||
minAmount.set(formatter.formatCoin(dataModel.minAmountAsCoin.get()));
|
||||
|
||||
if (!delegate.isMinAmountLessOrEqualAmount()) {
|
||||
if (!dataModel.isMinAmountLessOrEqualAmount()) {
|
||||
minAmountValidationResult.set(new InputValidator.ValidationResult(false,
|
||||
BSResources.get("createOffer.validation.minAmountLargerThanAmount")));
|
||||
}
|
||||
@ -213,7 +213,7 @@ class CreateOfferViewModel extends ActivatableWithDelegate<CreateOfferDataModel>
|
||||
if (isValid) {
|
||||
showWarningInvalidFiatDecimalPlaces.set(!formatter.hasFiatValidDecimals(userInput));
|
||||
setPriceToModel();
|
||||
price.set(formatter.formatFiat(delegate.priceAsFiat.get()));
|
||||
price.set(formatter.formatFiat(dataModel.priceAsFiat.get()));
|
||||
|
||||
calculateVolume();
|
||||
}
|
||||
@ -227,7 +227,7 @@ class CreateOfferViewModel extends ActivatableWithDelegate<CreateOfferDataModel>
|
||||
if (result.isValid) {
|
||||
showWarningInvalidFiatDecimalPlaces.set(!formatter.hasFiatValidDecimals(userInput));
|
||||
setVolumeToModel();
|
||||
volume.set(formatter.formatFiat(delegate.volumeAsFiat.get()));
|
||||
volume.set(formatter.formatFiat(dataModel.volumeAsFiat.get()));
|
||||
|
||||
calculateAmount();
|
||||
|
||||
@ -241,12 +241,12 @@ class CreateOfferViewModel extends ActivatableWithDelegate<CreateOfferDataModel>
|
||||
}
|
||||
|
||||
void securityDepositInfoDisplayed() {
|
||||
delegate.securityDepositInfoDisplayed();
|
||||
dataModel.securityDepositInfoDisplayed();
|
||||
}
|
||||
|
||||
|
||||
WalletService getWalletService() {
|
||||
return delegate.getWalletService();
|
||||
return dataModel.getWalletService();
|
||||
}
|
||||
|
||||
BSFormatter getFormatter() {
|
||||
@ -254,7 +254,7 @@ class CreateOfferViewModel extends ActivatableWithDelegate<CreateOfferDataModel>
|
||||
}
|
||||
|
||||
Boolean displaySecurityDepositInfo() {
|
||||
return delegate.displaySecurityDepositInfo();
|
||||
return dataModel.displaySecurityDepositInfo();
|
||||
}
|
||||
|
||||
private void setupListeners() {
|
||||
@ -264,7 +264,7 @@ class CreateOfferViewModel extends ActivatableWithDelegate<CreateOfferDataModel>
|
||||
if (isBtcInputValid(newValue).isValid) {
|
||||
setAmountToModel();
|
||||
calculateVolume();
|
||||
delegate.calculateTotalToPay();
|
||||
dataModel.calculateTotalToPay();
|
||||
}
|
||||
updateButtonDisableState();
|
||||
});
|
||||
@ -278,7 +278,7 @@ class CreateOfferViewModel extends ActivatableWithDelegate<CreateOfferDataModel>
|
||||
if (isFiatInputValid(newValue).isValid) {
|
||||
setPriceToModel();
|
||||
calculateVolume();
|
||||
delegate.calculateTotalToPay();
|
||||
dataModel.calculateTotalToPay();
|
||||
}
|
||||
updateButtonDisableState();
|
||||
});
|
||||
@ -287,12 +287,12 @@ class CreateOfferViewModel extends ActivatableWithDelegate<CreateOfferDataModel>
|
||||
if (isFiatInputValid(newValue).isValid) {
|
||||
setVolumeToModel();
|
||||
setPriceToModel();
|
||||
delegate.calculateAmount();
|
||||
delegate.calculateTotalToPay();
|
||||
dataModel.calculateAmount();
|
||||
dataModel.calculateTotalToPay();
|
||||
}
|
||||
updateButtonDisableState();
|
||||
});
|
||||
delegate.isWalletFunded.addListener((ov, oldValue, newValue) -> {
|
||||
dataModel.isWalletFunded.addListener((ov, oldValue, newValue) -> {
|
||||
if (newValue) {
|
||||
updateButtonDisableState();
|
||||
tabIsClosable.set(false);
|
||||
@ -300,70 +300,70 @@ class CreateOfferViewModel extends ActivatableWithDelegate<CreateOfferDataModel>
|
||||
});
|
||||
|
||||
// Binding with Bindings.createObjectBinding does not work because of bi-directional binding
|
||||
delegate.amountAsCoin.addListener((ov, oldValue, newValue) -> amount.set(formatter.formatCoin(newValue)));
|
||||
delegate.minAmountAsCoin.addListener((ov, oldValue, newValue) -> minAmount.set(formatter.formatCoin(newValue)));
|
||||
delegate.priceAsFiat.addListener((ov, oldValue, newValue) -> price.set(formatter.formatFiat(newValue)));
|
||||
delegate.volumeAsFiat.addListener((ov, oldValue, newValue) -> volume.set(formatter.formatFiat(newValue)));
|
||||
dataModel.amountAsCoin.addListener((ov, oldValue, newValue) -> amount.set(formatter.formatCoin(newValue)));
|
||||
dataModel.minAmountAsCoin.addListener((ov, oldValue, newValue) -> minAmount.set(formatter.formatCoin(newValue)));
|
||||
dataModel.priceAsFiat.addListener((ov, oldValue, newValue) -> price.set(formatter.formatFiat(newValue)));
|
||||
dataModel.volumeAsFiat.addListener((ov, oldValue, newValue) -> volume.set(formatter.formatFiat(newValue)));
|
||||
|
||||
delegate.requestPlaceOfferErrorMessage.addListener((ov, oldValue, newValue) -> {
|
||||
dataModel.requestPlaceOfferErrorMessage.addListener((ov, oldValue, newValue) -> {
|
||||
if (newValue != null) {
|
||||
isPlaceOfferButtonDisabled.set(false);
|
||||
isPlaceOfferSpinnerVisible.set(false);
|
||||
}
|
||||
});
|
||||
delegate.requestPlaceOfferSuccess.addListener((ov, oldValue, newValue) -> {
|
||||
dataModel.requestPlaceOfferSuccess.addListener((ov, oldValue, newValue) -> {
|
||||
isPlaceOfferButtonVisible.set(!newValue);
|
||||
isPlaceOfferSpinnerVisible.set(false);
|
||||
});
|
||||
|
||||
// ObservableLists
|
||||
delegate.acceptedCountries.addListener((Observable o) -> acceptedCountries.set(formatter
|
||||
.countryLocalesToString(delegate.acceptedCountries)));
|
||||
delegate.acceptedLanguages.addListener((Observable o) -> acceptedLanguages.set(formatter
|
||||
.languageLocalesToString(delegate.acceptedLanguages)));
|
||||
delegate.acceptedArbitrators.addListener((Observable o) -> acceptedArbitrators.set(formatter
|
||||
.arbitratorsToString(delegate.acceptedArbitrators)));
|
||||
dataModel.acceptedCountries.addListener((Observable o) -> acceptedCountries.set(formatter
|
||||
.countryLocalesToString(dataModel.acceptedCountries)));
|
||||
dataModel.acceptedLanguages.addListener((Observable o) -> acceptedLanguages.set(formatter
|
||||
.languageLocalesToString(dataModel.acceptedLanguages)));
|
||||
dataModel.acceptedArbitrators.addListener((Observable o) -> acceptedArbitrators.set(formatter
|
||||
.arbitratorsToString(dataModel.acceptedArbitrators)));
|
||||
}
|
||||
|
||||
private void setupBindings() {
|
||||
totalToPay.bind(createStringBinding(() -> formatter.formatCoinWithCode(delegate.totalToPayAsCoin.get()),
|
||||
delegate.totalToPayAsCoin));
|
||||
securityDeposit.bind(createStringBinding(() -> formatter.formatCoinWithCode(delegate.securityDepositAsCoin.get()),
|
||||
delegate.securityDepositAsCoin));
|
||||
totalToPay.bind(createStringBinding(() -> formatter.formatCoinWithCode(dataModel.totalToPayAsCoin.get()),
|
||||
dataModel.totalToPayAsCoin));
|
||||
securityDeposit.bind(createStringBinding(() -> formatter.formatCoinWithCode(dataModel.securityDepositAsCoin.get()),
|
||||
dataModel.securityDepositAsCoin));
|
||||
|
||||
totalToPayAsCoin.bind(delegate.totalToPayAsCoin);
|
||||
totalToPayAsCoin.bind(dataModel.totalToPayAsCoin);
|
||||
|
||||
offerFee.bind(createStringBinding(() -> formatter.formatCoinWithCode(delegate.offerFeeAsCoin.get()),
|
||||
delegate.offerFeeAsCoin));
|
||||
networkFee.bind(createStringBinding(() -> formatter.formatCoinWithCode(delegate.networkFeeAsCoin.get()),
|
||||
delegate.offerFeeAsCoin));
|
||||
offerFee.bind(createStringBinding(() -> formatter.formatCoinWithCode(dataModel.offerFeeAsCoin.get()),
|
||||
dataModel.offerFeeAsCoin));
|
||||
networkFee.bind(createStringBinding(() -> formatter.formatCoinWithCode(dataModel.networkFeeAsCoin.get()),
|
||||
dataModel.offerFeeAsCoin));
|
||||
|
||||
bankAccountType.bind(Bindings.createStringBinding(() -> BSResources.get(delegate.bankAccountType.get()),
|
||||
delegate.bankAccountType));
|
||||
bankAccountCurrency.bind(delegate.bankAccountCurrency);
|
||||
bankAccountCounty.bind(delegate.bankAccountCounty);
|
||||
bankAccountType.bind(Bindings.createStringBinding(() -> BSResources.get(dataModel.bankAccountType.get()),
|
||||
dataModel.bankAccountType));
|
||||
bankAccountCurrency.bind(dataModel.bankAccountCurrency);
|
||||
bankAccountCounty.bind(dataModel.bankAccountCounty);
|
||||
|
||||
requestPlaceOfferErrorMessage.bind(delegate.requestPlaceOfferErrorMessage);
|
||||
showTransactionPublishedScreen.bind(delegate.requestPlaceOfferSuccess);
|
||||
transactionId.bind(delegate.transactionId);
|
||||
requestPlaceOfferErrorMessage.bind(dataModel.requestPlaceOfferErrorMessage);
|
||||
showTransactionPublishedScreen.bind(dataModel.requestPlaceOfferSuccess);
|
||||
transactionId.bind(dataModel.transactionId);
|
||||
|
||||
btcCode.bind(delegate.btcCode);
|
||||
fiatCode.bind(delegate.fiatCode);
|
||||
btcCode.bind(dataModel.btcCode);
|
||||
fiatCode.bind(dataModel.fiatCode);
|
||||
}
|
||||
|
||||
private void calculateVolume() {
|
||||
setAmountToModel();
|
||||
setPriceToModel();
|
||||
delegate.calculateVolume();
|
||||
dataModel.calculateVolume();
|
||||
}
|
||||
|
||||
private void calculateAmount() {
|
||||
setVolumeToModel();
|
||||
setPriceToModel();
|
||||
delegate.calculateAmount();
|
||||
dataModel.calculateAmount();
|
||||
|
||||
// Amount calculation could lead to amount/minAmount invalidation
|
||||
if (!delegate.isMinAmountLessOrEqualAmount()) {
|
||||
if (!dataModel.isMinAmountLessOrEqualAmount()) {
|
||||
amountValidationResult.set(new InputValidator.ValidationResult(false,
|
||||
BSResources.get("createOffer.validation.amountSmallerThanMinAmount")));
|
||||
}
|
||||
@ -376,19 +376,19 @@ class CreateOfferViewModel extends ActivatableWithDelegate<CreateOfferDataModel>
|
||||
}
|
||||
|
||||
private void setAmountToModel() {
|
||||
delegate.amountAsCoin.set(formatter.parseToCoinWith4Decimals(amount.get()));
|
||||
dataModel.amountAsCoin.set(formatter.parseToCoinWith4Decimals(amount.get()));
|
||||
}
|
||||
|
||||
private void setMinAmountToModel() {
|
||||
delegate.minAmountAsCoin.set(formatter.parseToCoinWith4Decimals(minAmount.get()));
|
||||
dataModel.minAmountAsCoin.set(formatter.parseToCoinWith4Decimals(minAmount.get()));
|
||||
}
|
||||
|
||||
private void setPriceToModel() {
|
||||
delegate.priceAsFiat.set(formatter.parseToFiatWith2Decimals(price.get()));
|
||||
dataModel.priceAsFiat.set(formatter.parseToFiatWith2Decimals(price.get()));
|
||||
}
|
||||
|
||||
private void setVolumeToModel() {
|
||||
delegate.volumeAsFiat.set(formatter.parseToFiatWith2Decimals(volume.get()));
|
||||
dataModel.volumeAsFiat.set(formatter.parseToFiatWith2Decimals(volume.get()));
|
||||
}
|
||||
|
||||
private void updateButtonDisableState() {
|
||||
@ -396,8 +396,8 @@ class CreateOfferViewModel extends ActivatableWithDelegate<CreateOfferDataModel>
|
||||
isBtcInputValid(minAmount.get()).isValid &&
|
||||
isBtcInputValid(price.get()).isValid &&
|
||||
isBtcInputValid(volume.get()).isValid &&
|
||||
delegate.isMinAmountLessOrEqualAmount() &&
|
||||
delegate.isWalletFunded.get())
|
||||
dataModel.isMinAmountLessOrEqualAmount() &&
|
||||
dataModel.isWalletFunded.get())
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -26,6 +26,8 @@ import io.bitsquare.offer.Offer;
|
||||
import io.bitsquare.settings.Preferences;
|
||||
import io.bitsquare.trade.TradeManager;
|
||||
import io.bitsquare.user.User;
|
||||
import io.bitsquare.util.task.FaultHandler;
|
||||
import io.bitsquare.util.task.ResultHandler;
|
||||
|
||||
import org.bitcoinj.core.Coin;
|
||||
import org.bitcoinj.utils.ExchangeRate;
|
||||
@ -114,8 +116,8 @@ class OfferBookDataModel implements Activatable, DataModel {
|
||||
btcCode.unbind();
|
||||
}
|
||||
|
||||
void removeOffer(Offer offer) {
|
||||
tradeManager.removeOffer(offer);
|
||||
void removeOffer(Offer offer, ResultHandler resultHandler, FaultHandler faultHandler) {
|
||||
tradeManager.requestRemoveOffer(offer, resultHandler, faultHandler);
|
||||
}
|
||||
|
||||
void calculateVolume() {
|
||||
|
@ -17,6 +17,7 @@
|
||||
|
||||
package io.bitsquare.gui.main.trade.offerbook;
|
||||
|
||||
import io.bitsquare.gui.components.Popups;
|
||||
import io.bitsquare.gui.util.BSFormatter;
|
||||
import io.bitsquare.gui.util.validation.InputValidator;
|
||||
import io.bitsquare.gui.util.validation.OptionalBtcValidator;
|
||||
@ -31,13 +32,17 @@ import org.bitcoinj.utils.Fiat;
|
||||
import com.google.inject.Inject;
|
||||
|
||||
import viewfx.model.ViewModel;
|
||||
import viewfx.model.support.ActivatableWithDelegate;
|
||||
import viewfx.model.support.ActivatableWithDataModel;
|
||||
|
||||
import javafx.beans.property.SimpleStringProperty;
|
||||
import javafx.beans.property.StringProperty;
|
||||
import javafx.collections.transformation.SortedList;
|
||||
|
||||
class OfferBookViewModel extends ActivatableWithDelegate<OfferBookDataModel> implements ViewModel {
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
class OfferBookViewModel extends ActivatableWithDataModel<OfferBookDataModel> implements ViewModel {
|
||||
private static final Logger log = LoggerFactory.getLogger(OfferBookViewModel.class);
|
||||
|
||||
private final OptionalBtcValidator optionalBtcValidator;
|
||||
private final BSFormatter formatter;
|
||||
@ -52,17 +57,17 @@ class OfferBookViewModel extends ActivatableWithDelegate<OfferBookDataModel> imp
|
||||
|
||||
|
||||
@Inject
|
||||
public OfferBookViewModel(OfferBookDataModel delegate, OptionalFiatValidator optionalFiatValidator,
|
||||
public OfferBookViewModel(OfferBookDataModel dataModel, OptionalFiatValidator optionalFiatValidator,
|
||||
OptionalBtcValidator optionalBtcValidator, BSFormatter formatter) {
|
||||
super(delegate);
|
||||
super(dataModel);
|
||||
|
||||
this.optionalFiatValidator = optionalFiatValidator;
|
||||
this.optionalBtcValidator = optionalBtcValidator;
|
||||
this.formatter = formatter;
|
||||
|
||||
btcCode.bind(delegate.btcCode);
|
||||
fiatCode.bind(delegate.fiatCode);
|
||||
restrictionsInfo.bind(delegate.restrictionsInfo);
|
||||
btcCode.bind(dataModel.btcCode);
|
||||
fiatCode.bind(dataModel.fiatCode);
|
||||
restrictionsInfo.bind(dataModel.restrictionsInfo);
|
||||
|
||||
// Bidirectional bindings are used for all input fields: amount, price and volume
|
||||
// We do volume/amount calculation during input, so user has immediate feedback
|
||||
@ -70,7 +75,7 @@ class OfferBookViewModel extends ActivatableWithDelegate<OfferBookDataModel> imp
|
||||
if (isBtcInputValid(newValue).isValid) {
|
||||
setAmountToModel();
|
||||
setPriceToModel();
|
||||
delegate.calculateVolume();
|
||||
dataModel.calculateVolume();
|
||||
}
|
||||
});
|
||||
|
||||
@ -78,7 +83,7 @@ class OfferBookViewModel extends ActivatableWithDelegate<OfferBookDataModel> imp
|
||||
if (isFiatInputValid(newValue).isValid) {
|
||||
setAmountToModel();
|
||||
setPriceToModel();
|
||||
delegate.calculateVolume();
|
||||
dataModel.calculateVolume();
|
||||
}
|
||||
});
|
||||
|
||||
@ -86,42 +91,51 @@ class OfferBookViewModel extends ActivatableWithDelegate<OfferBookDataModel> imp
|
||||
if (isFiatInputValid(newValue).isValid) {
|
||||
setPriceToModel();
|
||||
setVolumeToModel();
|
||||
delegate.calculateAmount();
|
||||
dataModel.calculateAmount();
|
||||
}
|
||||
});
|
||||
|
||||
// Binding with Bindings.createObjectBinding does not work because of bi-directional binding
|
||||
delegate.amountAsCoinProperty().addListener((ov, oldValue, newValue) -> amount.set(formatter.formatCoin
|
||||
dataModel.amountAsCoinProperty().addListener((ov, oldValue, newValue) -> amount.set(formatter.formatCoin
|
||||
(newValue)));
|
||||
delegate.priceAsFiatProperty().addListener((ov, oldValue, newValue) -> price.set(formatter.formatFiat(newValue)));
|
||||
delegate.volumeAsFiatProperty().addListener((ov, oldValue, newValue) -> volume.set(formatter.formatFiat
|
||||
dataModel.priceAsFiatProperty().addListener((ov, oldValue, newValue) -> price.set(formatter.formatFiat(newValue)));
|
||||
dataModel.volumeAsFiatProperty().addListener((ov, oldValue, newValue) -> volume.set(formatter.formatFiat
|
||||
(newValue)));
|
||||
}
|
||||
|
||||
void removeOffer(Offer offer) {
|
||||
delegate.removeOffer(offer);
|
||||
dataModel.removeOffer(offer,
|
||||
() -> {
|
||||
// visual feedback?
|
||||
log.debug("remove was successful");
|
||||
},
|
||||
(message, throwable) -> {
|
||||
log.error(message);
|
||||
Popups.openWarningPopup("Remove offer failed", message);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
boolean isTradable(Offer offer) {
|
||||
return delegate.isTradable(offer);
|
||||
return dataModel.isTradable(offer);
|
||||
}
|
||||
|
||||
|
||||
void setDirection(Direction direction) {
|
||||
delegate.setDirection(direction);
|
||||
dataModel.setDirection(direction);
|
||||
}
|
||||
|
||||
|
||||
SortedList<OfferBookListItem> getOfferList() {
|
||||
return delegate.getOfferList();
|
||||
return dataModel.getOfferList();
|
||||
}
|
||||
|
||||
boolean isRegistered() {
|
||||
return delegate.isRegistered();
|
||||
return dataModel.isRegistered();
|
||||
}
|
||||
|
||||
boolean isMyOffer(Offer offer) {
|
||||
return delegate.isMyOffer(offer);
|
||||
return dataModel.isMyOffer(offer);
|
||||
}
|
||||
|
||||
String getAmount(OfferBookListItem item) {
|
||||
@ -147,15 +161,15 @@ class OfferBookViewModel extends ActivatableWithDelegate<OfferBookDataModel> imp
|
||||
}
|
||||
|
||||
Direction getDirection() {
|
||||
return delegate.getDirection();
|
||||
return dataModel.getDirection();
|
||||
}
|
||||
|
||||
Coin getAmountAsCoin() {
|
||||
return delegate.getAmountAsCoin();
|
||||
return dataModel.getAmountAsCoin();
|
||||
}
|
||||
|
||||
Fiat getPriceAsCoin() {
|
||||
return delegate.getPriceAsFiat();
|
||||
return dataModel.getPriceAsFiat();
|
||||
}
|
||||
|
||||
private InputValidator.ValidationResult isBtcInputValid(String input) {
|
||||
@ -167,15 +181,15 @@ class OfferBookViewModel extends ActivatableWithDelegate<OfferBookDataModel> imp
|
||||
}
|
||||
|
||||
private void setAmountToModel() {
|
||||
delegate.setAmount(formatter.parseToCoinWith4Decimals(amount.get()));
|
||||
dataModel.setAmount(formatter.parseToCoinWith4Decimals(amount.get()));
|
||||
}
|
||||
|
||||
private void setPriceToModel() {
|
||||
delegate.setPrice(formatter.parseToFiatWith2Decimals(price.get()));
|
||||
dataModel.setPrice(formatter.parseToFiatWith2Decimals(price.get()));
|
||||
}
|
||||
|
||||
private void setVolumeToModel() {
|
||||
delegate.setVolume(formatter.parseToFiatWith2Decimals(volume.get()));
|
||||
dataModel.setVolume(formatter.parseToFiatWith2Decimals(volume.get()));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ import org.bitcoinj.core.Coin;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import viewfx.model.ViewModel;
|
||||
import viewfx.model.support.ActivatableWithDelegate;
|
||||
import viewfx.model.support.ActivatableWithDataModel;
|
||||
|
||||
import javafx.beans.property.BooleanProperty;
|
||||
import javafx.beans.property.ObjectProperty;
|
||||
@ -42,7 +42,7 @@ import javafx.beans.property.StringProperty;
|
||||
|
||||
import static javafx.beans.binding.Bindings.createStringBinding;
|
||||
|
||||
class TakeOfferViewModel extends ActivatableWithDelegate<TakeOfferDataModel> implements ViewModel {
|
||||
class TakeOfferViewModel extends ActivatableWithDataModel<TakeOfferDataModel> implements ViewModel {
|
||||
|
||||
private String fiatCode;
|
||||
private String amountRange;
|
||||
@ -92,14 +92,14 @@ class TakeOfferViewModel extends ActivatableWithDelegate<TakeOfferDataModel> imp
|
||||
|
||||
|
||||
@Inject
|
||||
public TakeOfferViewModel(TakeOfferDataModel delegate, BtcValidator btcValidator, BSFormatter formatter) {
|
||||
super(delegate);
|
||||
public TakeOfferViewModel(TakeOfferDataModel dataModel, BtcValidator btcValidator, BSFormatter formatter) {
|
||||
super(dataModel);
|
||||
|
||||
this.btcValidator = btcValidator;
|
||||
this.formatter = formatter;
|
||||
|
||||
this.offerFee = formatter.formatCoinWithCode(delegate.offerFeeAsCoin.get());
|
||||
this.networkFee = formatter.formatCoinWithCode(delegate.networkFeeAsCoin.get());
|
||||
this.offerFee = formatter.formatCoinWithCode(dataModel.offerFeeAsCoin.get());
|
||||
this.networkFee = formatter.formatCoinWithCode(dataModel.networkFeeAsCoin.get());
|
||||
|
||||
setupBindings();
|
||||
setupListeners();
|
||||
@ -107,13 +107,13 @@ class TakeOfferViewModel extends ActivatableWithDelegate<TakeOfferDataModel> imp
|
||||
|
||||
// setOfferBookFilter is a one time call
|
||||
void initWithData(Direction direction, Coin amount, Offer offer) {
|
||||
delegate.initWithData(amount, offer);
|
||||
dataModel.initWithData(amount, offer);
|
||||
|
||||
directionLabel = direction == Direction.BUY ?
|
||||
BSResources.get("shared.buy") : BSResources.get("shared.sell");
|
||||
|
||||
fiatCode = offer.getCurrency().getCurrencyCode();
|
||||
if (!delegate.isMinAmountLessOrEqualAmount()) {
|
||||
if (!dataModel.isMinAmountLessOrEqualAmount()) {
|
||||
amountValidationResult.set(new InputValidator.ValidationResult(false,
|
||||
BSResources.get("takeOffer.validation.amountSmallerThanMinAmount")));
|
||||
}
|
||||
@ -127,9 +127,9 @@ class TakeOfferViewModel extends ActivatableWithDelegate<TakeOfferDataModel> imp
|
||||
price = formatter.formatFiatWithCode(offer.getPrice());
|
||||
|
||||
paymentLabel = BSResources.get("takeOffer.fundsBox.paymentLabel", offer.getId());
|
||||
if (delegate.getAddressEntry() != null) {
|
||||
addressAsString = delegate.getAddressEntry().getAddress().toString();
|
||||
address.set(delegate.getAddressEntry().getAddress());
|
||||
if (dataModel.getAddressEntry() != null) {
|
||||
addressAsString = dataModel.getAddressEntry().getAddress().toString();
|
||||
address.set(dataModel.getAddressEntry().getAddress());
|
||||
}
|
||||
|
||||
acceptedCountries = formatter.countryLocalesToString(offer.getAcceptedCountries());
|
||||
@ -141,17 +141,17 @@ class TakeOfferViewModel extends ActivatableWithDelegate<TakeOfferDataModel> imp
|
||||
}
|
||||
|
||||
void takeOffer() {
|
||||
delegate.requestTakeOfferErrorMessage.set(null);
|
||||
delegate.requestTakeOfferSuccess.set(false);
|
||||
dataModel.requestTakeOfferErrorMessage.set(null);
|
||||
dataModel.requestTakeOfferSuccess.set(false);
|
||||
|
||||
isTakeOfferButtonDisabled.set(true);
|
||||
isTakeOfferSpinnerVisible.set(true);
|
||||
|
||||
delegate.takeOffer();
|
||||
dataModel.takeOffer();
|
||||
}
|
||||
|
||||
void securityDepositInfoDisplayed() {
|
||||
delegate.securityDepositInfoDisplayed();
|
||||
dataModel.securityDepositInfoDisplayed();
|
||||
}
|
||||
|
||||
|
||||
@ -169,15 +169,15 @@ class TakeOfferViewModel extends ActivatableWithDelegate<TakeOfferDataModel> imp
|
||||
// only allow max 4 decimal places for btc values
|
||||
setAmountToModel();
|
||||
// reformat input
|
||||
amount.set(formatter.formatCoin(delegate.amountAsCoin.get()));
|
||||
amount.set(formatter.formatCoin(dataModel.amountAsCoin.get()));
|
||||
|
||||
calculateVolume();
|
||||
|
||||
if (!delegate.isMinAmountLessOrEqualAmount())
|
||||
if (!dataModel.isMinAmountLessOrEqualAmount())
|
||||
amountValidationResult.set(new InputValidator.ValidationResult(false,
|
||||
BSResources.get("takeOffer.validation.amountSmallerThanMinAmount")));
|
||||
|
||||
if (delegate.isAmountLargerThanOfferAmount())
|
||||
if (dataModel.isAmountLargerThanOfferAmount())
|
||||
amountValidationResult.set(new InputValidator.ValidationResult(false,
|
||||
BSResources.get("takeOffer.validation.amountLargerThanOfferAmount")));
|
||||
}
|
||||
@ -186,7 +186,7 @@ class TakeOfferViewModel extends ActivatableWithDelegate<TakeOfferDataModel> imp
|
||||
|
||||
|
||||
WalletService getWalletService() {
|
||||
return delegate.getWalletService();
|
||||
return dataModel.getWalletService();
|
||||
}
|
||||
|
||||
BSFormatter getFormatter() {
|
||||
@ -206,7 +206,7 @@ class TakeOfferViewModel extends ActivatableWithDelegate<TakeOfferDataModel> imp
|
||||
}
|
||||
|
||||
String getAmount() {
|
||||
return formatter.formatCoinWithCode(delegate.amountAsCoin.get());
|
||||
return formatter.formatCoinWithCode(dataModel.amountAsCoin.get());
|
||||
}
|
||||
|
||||
String getAmountRange() {
|
||||
@ -254,7 +254,7 @@ class TakeOfferViewModel extends ActivatableWithDelegate<TakeOfferDataModel> imp
|
||||
}
|
||||
|
||||
Boolean displaySecurityDepositInfo() {
|
||||
return delegate.displaySecurityDepositInfo();
|
||||
return dataModel.displaySecurityDepositInfo();
|
||||
}
|
||||
|
||||
|
||||
@ -265,12 +265,12 @@ class TakeOfferViewModel extends ActivatableWithDelegate<TakeOfferDataModel> imp
|
||||
if (isBtcInputValid(newValue).isValid) {
|
||||
setAmountToModel();
|
||||
calculateVolume();
|
||||
delegate.calculateTotalToPay();
|
||||
dataModel.calculateTotalToPay();
|
||||
}
|
||||
updateButtonDisableState();
|
||||
});
|
||||
|
||||
delegate.isWalletFunded.addListener((ov, oldValue, newValue) -> {
|
||||
dataModel.isWalletFunded.addListener((ov, oldValue, newValue) -> {
|
||||
if (newValue) {
|
||||
updateButtonDisableState();
|
||||
tabIsClosable.set(false);
|
||||
@ -278,53 +278,53 @@ class TakeOfferViewModel extends ActivatableWithDelegate<TakeOfferDataModel> imp
|
||||
});
|
||||
|
||||
// Binding with Bindings.createObjectBinding does not work because of bi-directional binding
|
||||
delegate.amountAsCoin.addListener((ov, oldValue, newValue) -> amount.set(formatter.formatCoin(newValue)));
|
||||
dataModel.amountAsCoin.addListener((ov, oldValue, newValue) -> amount.set(formatter.formatCoin(newValue)));
|
||||
|
||||
delegate.requestTakeOfferErrorMessage.addListener((ov, oldValue, newValue) -> {
|
||||
dataModel.requestTakeOfferErrorMessage.addListener((ov, oldValue, newValue) -> {
|
||||
if (newValue != null) {
|
||||
isTakeOfferButtonDisabled.set(false);
|
||||
isTakeOfferSpinnerVisible.set(false);
|
||||
}
|
||||
});
|
||||
delegate.requestTakeOfferSuccess.addListener((ov, oldValue, newValue) -> {
|
||||
dataModel.requestTakeOfferSuccess.addListener((ov, oldValue, newValue) -> {
|
||||
isTakeOfferButtonVisible.set(!newValue);
|
||||
isTakeOfferSpinnerVisible.set(false);
|
||||
});
|
||||
}
|
||||
|
||||
private void setupBindings() {
|
||||
volume.bind(createStringBinding(() -> formatter.formatFiatWithCode(delegate.volumeAsFiat.get()),
|
||||
delegate.volumeAsFiat));
|
||||
totalToPay.bind(createStringBinding(() -> formatter.formatCoinWithCode(delegate.totalToPayAsCoin.get()),
|
||||
delegate.totalToPayAsCoin));
|
||||
securityDeposit.bind(createStringBinding(() -> formatter.formatCoinWithCode(delegate.securityDepositAsCoin
|
||||
volume.bind(createStringBinding(() -> formatter.formatFiatWithCode(dataModel.volumeAsFiat.get()),
|
||||
dataModel.volumeAsFiat));
|
||||
totalToPay.bind(createStringBinding(() -> formatter.formatCoinWithCode(dataModel.totalToPayAsCoin.get()),
|
||||
dataModel.totalToPayAsCoin));
|
||||
securityDeposit.bind(createStringBinding(() -> formatter.formatCoinWithCode(dataModel.securityDepositAsCoin
|
||||
.get()),
|
||||
delegate.securityDepositAsCoin));
|
||||
dataModel.securityDepositAsCoin));
|
||||
|
||||
totalToPayAsCoin.bind(delegate.totalToPayAsCoin);
|
||||
totalToPayAsCoin.bind(dataModel.totalToPayAsCoin);
|
||||
|
||||
requestTakeOfferErrorMessage.bind(delegate.requestTakeOfferErrorMessage);
|
||||
showTransactionPublishedScreen.bind(delegate.requestTakeOfferSuccess);
|
||||
transactionId.bind(delegate.transactionId);
|
||||
offerIsAvailable.bind(delegate.offerIsAvailable);
|
||||
requestTakeOfferErrorMessage.bind(dataModel.requestTakeOfferErrorMessage);
|
||||
showTransactionPublishedScreen.bind(dataModel.requestTakeOfferSuccess);
|
||||
transactionId.bind(dataModel.transactionId);
|
||||
offerIsAvailable.bind(dataModel.offerIsAvailable);
|
||||
|
||||
btcCode.bind(delegate.btcCode);
|
||||
btcCode.bind(dataModel.btcCode);
|
||||
}
|
||||
|
||||
private void calculateVolume() {
|
||||
setAmountToModel();
|
||||
delegate.calculateVolume();
|
||||
dataModel.calculateVolume();
|
||||
}
|
||||
|
||||
private void setAmountToModel() {
|
||||
delegate.amountAsCoin.set(formatter.parseToCoinWith4Decimals(amount.get()));
|
||||
dataModel.amountAsCoin.set(formatter.parseToCoinWith4Decimals(amount.get()));
|
||||
}
|
||||
|
||||
private void updateButtonDisableState() {
|
||||
isTakeOfferButtonDisabled.set(!(isBtcInputValid(amount.get()).isValid &&
|
||||
delegate.isMinAmountLessOrEqualAmount() &&
|
||||
!delegate.isAmountLargerThanOfferAmount() &&
|
||||
delegate.isWalletFunded.get())
|
||||
dataModel.isMinAmountLessOrEqualAmount() &&
|
||||
!dataModel.isAmountLargerThanOfferAmount() &&
|
||||
dataModel.isWalletFunded.get())
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -64,6 +64,7 @@ public class Offer implements Serializable {
|
||||
private final List<Locale> acceptedLanguageLocales;
|
||||
private final String bankAccountUID;
|
||||
private final List<Arbitrator> arbitrators;
|
||||
|
||||
private String offerFeePaymentTxID;
|
||||
|
||||
|
||||
|
@ -33,7 +33,7 @@ public interface RemoteOfferBook {
|
||||
|
||||
void addOffer(Offer offer, ResultHandler resultHandler, FaultHandler faultHandler);
|
||||
|
||||
void removeOffer(Offer offer);
|
||||
void removeOffer(Offer offer, ResultHandler resultHandler, FaultHandler faultHandler);
|
||||
|
||||
void addListener(Listener listener);
|
||||
|
||||
|
@ -115,9 +115,7 @@ public class TomP2POfferBook implements RemoteOfferBook {
|
||||
}
|
||||
}
|
||||
|
||||
//TODO remove is failing, probably due Coin or Fiat class (was working before)
|
||||
// objects are identical but returned object form network might have some problem with serialisation?
|
||||
public void removeOffer(Offer offer) {
|
||||
public void removeOffer(Offer offer, ResultHandler resultHandler, FaultHandler faultHandler) {
|
||||
Number160 locationKey = Number160.createHash(offer.getCurrency().getCurrencyCode());
|
||||
try {
|
||||
final Data offerData = new Data(offer);
|
||||
@ -130,20 +128,22 @@ public class TomP2POfferBook implements RemoteOfferBook {
|
||||
// We don't test futureRemove.isSuccess() as this API does not fit well to that operation,
|
||||
// it might change in future to something like foundAndRemoved and notFound
|
||||
// See discussion at: https://github.com/tomp2p/TomP2P/issues/57#issuecomment-62069840
|
||||
|
||||
log.trace("isRemoved? " + futureRemove.isRemoved());
|
||||
executor.execute(() -> {
|
||||
resultHandler.handleResult();
|
||||
offerRepositoryListeners.stream().forEach(listener -> {
|
||||
try {
|
||||
Object offerDataObject = offerData.object();
|
||||
if (offerDataObject instanceof Offer) {
|
||||
log.trace("Remove offer from DHT was successful. Removed data: [key: " +
|
||||
locationKey + ", " +
|
||||
"offer: " + (Offer) offerDataObject + "]");
|
||||
"offer: " + offerDataObject + "]");
|
||||
listener.onOfferRemoved((Offer) offerDataObject);
|
||||
}
|
||||
} catch (ClassNotFoundException | IOException e) {
|
||||
e.printStackTrace();
|
||||
log.error("Remove offer from DHT failed. Error: " + e.getMessage());
|
||||
faultHandler.handleFault("Remove offer from DHT failed. Error: " + e.getMessage(), e);
|
||||
}
|
||||
});
|
||||
writeInvalidationTimestampToDHT(offer.getCurrency().getCurrencyCode());
|
||||
@ -153,11 +153,13 @@ public class TomP2POfferBook implements RemoteOfferBook {
|
||||
@Override
|
||||
public void exceptionCaught(Throwable t) throws Exception {
|
||||
log.error("Remove offer from DHT failed. Error: " + t.getMessage());
|
||||
faultHandler.handleFault("Remove offer from DHT failed. Error: " + t.getMessage(), t);
|
||||
}
|
||||
});
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
log.error("Remove offer from DHT failed. Error: " + e.getMessage());
|
||||
faultHandler.handleFault("Remove offer from DHT failed. Error: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -31,7 +31,7 @@ import io.bitsquare.offer.Offer;
|
||||
import io.bitsquare.offer.RemoteOfferBook;
|
||||
import io.bitsquare.persistence.Persistence;
|
||||
import io.bitsquare.trade.handlers.TransactionResultHandler;
|
||||
import io.bitsquare.trade.protocol.createoffer.CreateOfferProtocol;
|
||||
import io.bitsquare.trade.protocol.placeoffer.PlaceOfferProtocol;
|
||||
import io.bitsquare.trade.protocol.trade.TradeMessage;
|
||||
import io.bitsquare.trade.protocol.trade.offerer.BuyerAcceptsOfferProtocol;
|
||||
import io.bitsquare.trade.protocol.trade.offerer.BuyerAcceptsOfferProtocolListener;
|
||||
@ -49,6 +49,8 @@ import io.bitsquare.trade.protocol.trade.taker.messages.RequestTakeOfferMessage;
|
||||
import io.bitsquare.trade.protocol.trade.taker.messages.TakeOfferFeePayedMessage;
|
||||
import io.bitsquare.user.User;
|
||||
import io.bitsquare.util.task.ErrorMessageHandler;
|
||||
import io.bitsquare.util.task.FaultHandler;
|
||||
import io.bitsquare.util.task.ResultHandler;
|
||||
|
||||
import org.bitcoinj.core.Coin;
|
||||
import org.bitcoinj.core.Transaction;
|
||||
@ -172,41 +174,34 @@ public class TradeManager {
|
||||
accountSettings.getAcceptedCountries(),
|
||||
accountSettings.getAcceptedLanguageLocales());
|
||||
|
||||
CreateOfferProtocol createOfferCoordinator = new CreateOfferProtocol(
|
||||
PlaceOfferProtocol placeOfferProtocol = new PlaceOfferProtocol(
|
||||
offer,
|
||||
walletService,
|
||||
(transactionId) -> {
|
||||
try {
|
||||
offer.setOfferFeePaymentTxID(transactionId.getHashAsString());
|
||||
addOffer(offer);
|
||||
resultHandler.onResult(transactionId);
|
||||
} catch (Exception e) {
|
||||
errorMessageHandler.handleErrorMessage("Could not save offer. Reason: " +
|
||||
(e.getCause() != null ? e.getCause().getMessage() : e.toString()));
|
||||
}
|
||||
remoteOfferBook,
|
||||
(transaction) -> {
|
||||
saveOffer(offer);
|
||||
resultHandler.onResult(transaction);
|
||||
},
|
||||
(message, throwable) -> errorMessageHandler.handleErrorMessage(message),
|
||||
remoteOfferBook);
|
||||
(message, throwable) -> errorMessageHandler.handleErrorMessage(message)
|
||||
);
|
||||
|
||||
createOfferCoordinator.createOffer();
|
||||
placeOfferProtocol.placeOffer();
|
||||
}
|
||||
|
||||
private void addOffer(Offer offer) {
|
||||
if (offers.containsKey(offer.getId()))
|
||||
log.error("An offer with the id " + offer.getId() + " already exists. ");
|
||||
|
||||
private void saveOffer(Offer offer) {
|
||||
offers.put(offer.getId(), offer);
|
||||
persistOffers();
|
||||
}
|
||||
|
||||
public void removeOffer(Offer offer) {
|
||||
if (!offers.containsKey(offer.getId()))
|
||||
public void requestRemoveOffer(Offer offer, ResultHandler resultHandler, FaultHandler faultHandler) {
|
||||
if (offers.containsKey(offer.getId()))
|
||||
offers.remove(offer.getId());
|
||||
else
|
||||
log.error("offers does not contain the offer with the ID " + offer.getId());
|
||||
|
||||
offers.remove(offer.getId());
|
||||
persistOffers();
|
||||
|
||||
remoteOfferBook.removeOffer(offer);
|
||||
remoteOfferBook.removeOffer(offer, resultHandler, faultHandler);
|
||||
}
|
||||
|
||||
|
||||
@ -261,7 +256,7 @@ public class TradeManager {
|
||||
public void onOfferAccepted(Offer offer) {
|
||||
trade.setState(Trade.State.OFFERER_ACCEPTED);
|
||||
persistPendingTrades();
|
||||
removeOffer(offer);
|
||||
requestRemoveOffer(offer);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -15,7 +15,7 @@
|
||||
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package io.bitsquare.trade.protocol.createoffer;
|
||||
package io.bitsquare.trade.protocol.placeoffer;
|
||||
|
||||
import io.bitsquare.btc.WalletService;
|
||||
import io.bitsquare.offer.Offer;
|
||||
@ -35,9 +35,9 @@ import org.slf4j.LoggerFactory;
|
||||
* Responsible for coordinating tasks involved in the create offer process.
|
||||
* Executed on UI thread (single threaded)
|
||||
*/
|
||||
public class CreateOfferProtocol {
|
||||
public class PlaceOfferProtocol {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(CreateOfferProtocol.class);
|
||||
private static final Logger log = LoggerFactory.getLogger(PlaceOfferProtocol.class);
|
||||
|
||||
private final Offer offer;
|
||||
private final WalletService walletService;
|
||||
@ -46,8 +46,8 @@ public class CreateOfferProtocol {
|
||||
private final RemoteOfferBook remoteOfferBook;
|
||||
private int repeatAddOfferCallCounter = 0;
|
||||
|
||||
public CreateOfferProtocol(Offer offer, WalletService walletService, TransactionResultHandler resultHandler,
|
||||
FaultHandler faultHandler, RemoteOfferBook remoteOfferBook) {
|
||||
public PlaceOfferProtocol(Offer offer, WalletService walletService, RemoteOfferBook remoteOfferBook, TransactionResultHandler resultHandler,
|
||||
FaultHandler faultHandler) {
|
||||
this.offer = offer;
|
||||
this.walletService = walletService;
|
||||
this.resultHandler = resultHandler;
|
||||
@ -55,18 +55,16 @@ public class CreateOfferProtocol {
|
||||
this.remoteOfferBook = remoteOfferBook;
|
||||
}
|
||||
|
||||
public void createOffer() {
|
||||
public void placeOffer() {
|
||||
try {
|
||||
validateOffer();
|
||||
Transaction transaction = createOfferFeeTx();
|
||||
|
||||
TransactionResultHandler resultHandler1 = transaction1 -> addOffer(transaction1);
|
||||
FaultHandler faultHandler1 = (message, throwable) -> faultHandler.handleFault(message, throwable);
|
||||
broadcastCreateOfferFeeTx(transaction, resultHandler1, faultHandler1);
|
||||
|
||||
} catch (Throwable t) {
|
||||
// handled in specific methods
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 1. Validate offer data
|
||||
@ -128,9 +126,11 @@ public class CreateOfferProtocol {
|
||||
// Async
|
||||
// In case of an error: Try again, afterwards give up.
|
||||
void addOffer(Transaction transaction) {
|
||||
// need to write data before storage, otherwise hash is different when removing offer!
|
||||
offer.setOfferFeePaymentTxID(transaction.getHashAsString());
|
||||
|
||||
remoteOfferBook.addOffer(offer,
|
||||
() -> {
|
||||
offer.setOfferFeePaymentTxID(transaction.getHashAsString());
|
||||
resultHandler.onResult(transaction);
|
||||
},
|
||||
(message, throwable) -> {
|
@ -19,15 +19,15 @@ package viewfx.model.support;
|
||||
|
||||
import viewfx.model.Activatable;
|
||||
|
||||
public abstract class ActivatableWithDelegate<D extends Activatable> extends WithDelegate<D> implements Activatable {
|
||||
public abstract class ActivatableWithDataModel<D extends Activatable> extends WithDataModel<D> implements Activatable {
|
||||
|
||||
public ActivatableWithDelegate(D delegate) {
|
||||
super(delegate);
|
||||
public ActivatableWithDataModel(D dataModel) {
|
||||
super(dataModel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void activate() {
|
||||
delegate.activate();
|
||||
dataModel.activate();
|
||||
this.doActivate();
|
||||
}
|
||||
|
||||
@ -36,7 +36,7 @@ public abstract class ActivatableWithDelegate<D extends Activatable> extends Wit
|
||||
|
||||
@Override
|
||||
public final void deactivate() {
|
||||
delegate.deactivate();
|
||||
dataModel.deactivate();
|
||||
this.doDeactivate();
|
||||
}
|
||||
|
@ -19,11 +19,11 @@ package viewfx.model.support;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
public abstract class WithDelegate<D> {
|
||||
public abstract class WithDataModel<D> {
|
||||
|
||||
protected final D delegate;
|
||||
protected final D dataModel;
|
||||
|
||||
protected WithDelegate(D delegate) {
|
||||
this.delegate = checkNotNull(delegate, "Delegate object must not be null");
|
||||
protected WithDataModel(D dataModel) {
|
||||
this.dataModel = checkNotNull(dataModel, "Delegate object must not be null");
|
||||
}
|
||||
}
|
@ -27,11 +27,11 @@ import viewfx.view.ViewLoader;
|
||||
public class CachingViewLoader implements ViewLoader {
|
||||
|
||||
private final HashMap<Object, View> cache = new HashMap<>();
|
||||
private final ViewLoader delegate;
|
||||
private final ViewLoader viewLoader;
|
||||
|
||||
@Inject
|
||||
public CachingViewLoader(ViewLoader delegate) {
|
||||
this.delegate = delegate;
|
||||
public CachingViewLoader(ViewLoader viewLoader) {
|
||||
this.viewLoader = viewLoader;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -39,7 +39,7 @@ public class CachingViewLoader implements ViewLoader {
|
||||
if (cache.containsKey(viewClass))
|
||||
return cache.get(viewClass);
|
||||
|
||||
View view = delegate.load(viewClass);
|
||||
View view = viewLoader.load(viewClass);
|
||||
cache.put(viewClass, view);
|
||||
return view;
|
||||
}
|
||||
|
@ -15,7 +15,7 @@
|
||||
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package io.bitsquare.trade.protocol.createoffer;
|
||||
package io.bitsquare.trade.protocol.placeoffer;
|
||||
|
||||
import io.bitsquare.arbitrator.Arbitrator;
|
||||
import io.bitsquare.bank.BankAccountType;
|
||||
@ -76,8 +76,8 @@ import static org.junit.Assert.*;
|
||||
* 4. Start BootstrapNodeMain at localhost with program args: --node.name localhost
|
||||
*/
|
||||
@Ignore
|
||||
public class CreateOfferProtocolTest {
|
||||
private static final Logger log = LoggerFactory.getLogger(CreateOfferProtocolTest.class);
|
||||
public class PlaceOfferProtocolTest {
|
||||
private static final Logger log = LoggerFactory.getLogger(PlaceOfferProtocolTest.class);
|
||||
|
||||
private WalletService walletService;
|
||||
private TomP2PMessageService messageService;
|
||||
@ -201,9 +201,9 @@ public class CreateOfferProtocolTest {
|
||||
throwable.printStackTrace();
|
||||
fail(throwable.getMessage());
|
||||
};
|
||||
CreateOfferProtocol createOfferCoordinator = getCreateOfferCoordinator(offer);
|
||||
Transaction transaction = createOfferCoordinator.createOfferFeeTx();
|
||||
createOfferCoordinator.broadcastCreateOfferFeeTx(transaction, resultHandler, faultHandler);
|
||||
PlaceOfferProtocol placeOfferProtocol = getCreateOfferCoordinator(offer);
|
||||
Transaction transaction = placeOfferProtocol.createOfferFeeTx();
|
||||
placeOfferProtocol.broadcastCreateOfferFeeTx(transaction, resultHandler, faultHandler);
|
||||
log.info("Balance post = " + walletService.getBalanceForAddress(address));
|
||||
|
||||
} catch (Exception e) {
|
||||
@ -246,9 +246,9 @@ public class CreateOfferProtocolTest {
|
||||
countDownLatch.countDown();
|
||||
countDownLatch.countDown();
|
||||
};
|
||||
CreateOfferProtocol createOfferCoordinator = getCreateOfferCoordinator(offer, resultHandler, faultHandler);
|
||||
Transaction transaction = createOfferCoordinator.createOfferFeeTx();
|
||||
createOfferCoordinator.addOffer(transaction);
|
||||
PlaceOfferProtocol placeOfferProtocol = getPlaceOfferProtocol(offer, resultHandler, faultHandler);
|
||||
Transaction transaction = placeOfferProtocol.createOfferFeeTx();
|
||||
placeOfferProtocol.addOffer(transaction);
|
||||
countDownLatch.await();
|
||||
log.info("Finished");
|
||||
} catch (Exception e) {
|
||||
@ -260,7 +260,7 @@ public class CreateOfferProtocolTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createOfferTest() throws InterruptedException {
|
||||
public void placeOfferTest() throws InterruptedException {
|
||||
CountDownLatch countDownLatch = new CountDownLatch(1);
|
||||
TransactionResultHandler resultHandler = transaction -> {
|
||||
assertNotNull(transaction);
|
||||
@ -273,29 +273,29 @@ public class CreateOfferProtocolTest {
|
||||
countDownLatch.countDown();
|
||||
countDownLatch.countDown();
|
||||
};
|
||||
CreateOfferProtocol createOfferCoordinator = getCreateOfferCoordinator(getOffer(), resultHandler, faultHandler);
|
||||
createOfferCoordinator.createOffer();
|
||||
PlaceOfferProtocol placeOfferProtocol = getPlaceOfferProtocol(getOffer(), resultHandler, faultHandler);
|
||||
placeOfferProtocol.placeOffer();
|
||||
countDownLatch.await();
|
||||
}
|
||||
|
||||
|
||||
private CreateOfferProtocol getCreateOfferCoordinator(Offer offer) throws InterruptedException {
|
||||
|
||||
private PlaceOfferProtocol getCreateOfferCoordinator(Offer offer) throws InterruptedException {
|
||||
TransactionResultHandler resultHandler = transaction -> log.debug("result transaction=" + transaction.toString());
|
||||
FaultHandler faultHandler = (message, throwable) -> {
|
||||
log.error(message);
|
||||
throwable.printStackTrace();
|
||||
log.info("Balance = " + walletService.getBalanceForAddress(walletService.getAddressInfoByTradeID(OFFER_ID).getAddress()));
|
||||
};
|
||||
return getCreateOfferCoordinator(offer, resultHandler, faultHandler);
|
||||
return getPlaceOfferProtocol(offer, resultHandler, faultHandler);
|
||||
}
|
||||
|
||||
private CreateOfferProtocol getCreateOfferCoordinator(Offer offer, TransactionResultHandler resultHandler, FaultHandler faultHandler) throws
|
||||
private PlaceOfferProtocol getPlaceOfferProtocol(Offer offer, TransactionResultHandler resultHandler, FaultHandler faultHandler) throws
|
||||
InterruptedException {
|
||||
return new CreateOfferProtocol(offer,
|
||||
return new PlaceOfferProtocol(offer,
|
||||
walletService,
|
||||
remoteOfferBook,
|
||||
resultHandler,
|
||||
faultHandler,
|
||||
remoteOfferBook);
|
||||
faultHandler);
|
||||
}
|
||||
|
||||
private Offer getOffer() {
|
Loading…
x
Reference in New Issue
Block a user