diff --git a/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java b/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java index 330a660234..2b6f0d762b 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java +++ b/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java @@ -37,6 +37,7 @@ import io.bitsquare.trade.TradeManager; import io.bitsquare.trade.TradeMessageService; import io.bitsquare.user.User; import io.bitsquare.util.DSAKeyUtil; +import io.bitsquare.viewfx.model.ViewModel; import org.bitcoinj.core.Coin; import org.bitcoinj.core.ECKey; @@ -50,8 +51,6 @@ import java.util.List; import java.util.Locale; import java.util.concurrent.TimeoutException; -import io.bitsquare.viewfx.model.ViewModel; - import javafx.application.Platform; import javafx.beans.property.BooleanProperty; import javafx.beans.property.DoubleProperty; @@ -367,10 +366,10 @@ class MainViewModel implements ViewModel { Arbitrator.ID_TYPE.REAL_LIFE_ID, languages, new Reputation(), - Coin.parseCoin("0.001"), + Coin.parseCoin("0.1"), arbitrationMethods, idVerifications, - "https://bitsquare.io/", + "https://bitsquare.io", "Bla bla..."); accountSettings.addAcceptedArbitrator(arbitrator); diff --git a/gui/src/main/java/io/bitsquare/gui/main/debug/DebugView.fxml b/gui/src/main/java/io/bitsquare/gui/main/debug/DebugView.fxml index cd58f2c2cf..8f63e8ee8d 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/debug/DebugView.fxml +++ b/gui/src/main/java/io/bitsquare/gui/main/debug/DebugView.fxml @@ -60,7 +60,7 @@ - + diff --git a/gui/src/main/java/io/bitsquare/gui/main/debug/DebugView.java b/gui/src/main/java/io/bitsquare/gui/main/debug/DebugView.java index 18ef7c9b4e..e5080528f1 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/debug/DebugView.java +++ b/gui/src/main/java/io/bitsquare/gui/main/debug/DebugView.java @@ -18,6 +18,7 @@ package io.bitsquare.gui.main.debug; import io.bitsquare.trade.protocol.availability.CheckOfferAvailabilityProtocol; +import io.bitsquare.trade.protocol.availability.tasks.ProcessReportOfferAvailabilityMessage; import io.bitsquare.trade.protocol.availability.tasks.RequestIsOfferAvailable; import io.bitsquare.trade.protocol.placeoffer.PlaceOfferProtocol; import io.bitsquare.trade.protocol.placeoffer.tasks.AddOfferToRemoteOfferBook; @@ -56,15 +57,14 @@ import io.bitsquare.trade.protocol.trade.taker.tasks.SignAndPublishPayoutTx; import io.bitsquare.trade.protocol.trade.taker.tasks.TakerCommitDepositTx; import io.bitsquare.trade.protocol.trade.taker.tasks.VerifyOfferFeePayment; import io.bitsquare.trade.protocol.trade.taker.tasks.VerifyOffererAccount; -import io.bitsquare.util.tasks.TaskInterception; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.viewfx.view.FxmlView; +import io.bitsquare.viewfx.view.InitializableView; import java.util.Arrays; import javax.inject.Inject; -import io.bitsquare.viewfx.view.FxmlView; -import io.bitsquare.viewfx.view.InitializableView; - import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; @@ -91,6 +91,7 @@ public class DebugView extends InitializableView { CheckOfferAvailabilityProtocol.class, io.bitsquare.trade.protocol.availability.tasks.GetPeerAddress.class, RequestIsOfferAvailable.class, + ProcessReportOfferAvailabilityMessage.class, Boolean.class, /* used as seperator*/ @@ -178,11 +179,20 @@ public class DebugView extends InitializableView { void onSelectTask() { Class item = taskComboBox.getSelectionModel().getSelectedItem(); if (!item.getSimpleName().contains("Protocol")) { - if (interceptBeforeCheckBox.isSelected()) - TaskInterception.taskToInterceptBeforeRun = item; - else - TaskInterception.taskToInterceptAfterRun = item; + if (interceptBeforeCheckBox.isSelected()) { + Task.taskToInterceptBeforeRun = item; + Task.taskToInterceptAfterRun = null; + } + else { + Task.taskToInterceptAfterRun = item; + Task.taskToInterceptBeforeRun = null; + } } } + + @FXML + void onCheckBoxChanged() { + onSelectTask(); + } } diff --git a/gui/src/main/java/io/bitsquare/gui/main/trade/TradeView.java b/gui/src/main/java/io/bitsquare/gui/main/trade/TradeView.java index 00a3ad865b..882df47a7d 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/trade/TradeView.java +++ b/gui/src/main/java/io/bitsquare/gui/main/trade/TradeView.java @@ -26,16 +26,15 @@ import io.bitsquare.gui.main.trade.offerbook.OfferBookView; import io.bitsquare.gui.main.trade.takeoffer.TakeOfferView; import io.bitsquare.offer.Direction; import io.bitsquare.offer.Offer; +import io.bitsquare.viewfx.view.ActivatableView; +import io.bitsquare.viewfx.view.View; +import io.bitsquare.viewfx.view.ViewLoader; import org.bitcoinj.core.Coin; import org.bitcoinj.utils.Fiat; import java.util.List; -import io.bitsquare.viewfx.view.View; -import io.bitsquare.viewfx.view.ViewLoader; -import io.bitsquare.viewfx.view.ActivatableView; - import javafx.application.Platform; import javafx.collections.ListChangeListener; import javafx.scene.control.*; @@ -78,8 +77,7 @@ public abstract class TradeView extends ActivatableView { // TODO Find a way to do that in the InputTextField directly, but a tab change does not trigger any event... TabPane tabPane = root; tabPane.getSelectionModel().selectedIndexProperty() - .addListener((observableValue, oldValue, newValue) -> - Platform.runLater(InputTextField::hideErrorMessageDisplay)); + .addListener((observableValue, oldValue, newValue) -> Platform.runLater(InputTextField::hideErrorMessageDisplay)); // We want to get informed when a tab get closed tabPane.getTabs().addListener((ListChangeListener) change -> { @@ -165,7 +163,10 @@ public abstract class TradeView extends ActivatableView { createOfferView.initWithData(direction, amount, price); createOfferPane = ((CreateOfferView) view).getRoot(); final Tab tab = new Tab("Create offer"); - createOfferView.configCloseHandlers(tab.closableProperty()); + createOfferView.setCloseHandler(() -> { + if (tabPane.getTabs().size() == 2) + tabPane.getTabs().remove(1); + }); tab.setContent(createOfferPane); tabPane.getTabs().add(tab); tabPane.getSelectionModel().select(tab); @@ -178,13 +179,17 @@ public abstract class TradeView extends ActivatableView { takeOfferView.initWithData(direction, amount, offer); takeOfferPane = ((TakeOfferView) view).getRoot(); final Tab tab = new Tab("Take offer"); - takeOfferView.configCloseHandlers(tab.closableProperty()); + takeOfferView.setCloseHandler(() -> { + if (tabPane.getTabs().size() == 2) + tabPane.getTabs().remove(1); + }); tab.setContent(takeOfferPane); tabPane.getTabs().add(tab); tabPane.getSelectionModel().select(tab); } } + private void onCreateOfferViewRemoved() { createOfferView = null; offerBookView.enableCreateOfferButton(); @@ -205,5 +210,9 @@ public abstract class TradeView extends ActivatableView { void takeOffer(Coin amount, Fiat price, Offer offer); } + + public interface CloseHandler { + void close(); + } } diff --git a/gui/src/main/java/io/bitsquare/gui/main/trade/createoffer/CreateOfferView.java b/gui/src/main/java/io/bitsquare/gui/main/trade/createoffer/CreateOfferView.java index f79772a6ba..95d008c656 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/trade/createoffer/CreateOfferView.java +++ b/gui/src/main/java/io/bitsquare/gui/main/trade/createoffer/CreateOfferView.java @@ -31,11 +31,12 @@ import io.bitsquare.gui.main.account.content.restrictions.RestrictionsView; import io.bitsquare.gui.main.account.settings.AccountSettingsView; import io.bitsquare.gui.main.help.Help; import io.bitsquare.gui.main.help.HelpId; -import io.bitsquare.gui.main.portfolio.PortfolioView; -import io.bitsquare.gui.main.portfolio.offer.OffersView; +import io.bitsquare.gui.main.trade.TradeView; import io.bitsquare.gui.util.ImageUtil; import io.bitsquare.locale.BSResources; import io.bitsquare.offer.Direction; +import io.bitsquare.viewfx.view.ActivatableViewAndModel; +import io.bitsquare.viewfx.view.FxmlView; import org.bitcoinj.core.Coin; import org.bitcoinj.utils.Fiat; @@ -45,10 +46,6 @@ import java.util.List; import javax.inject.Inject; -import io.bitsquare.viewfx.view.FxmlView; -import io.bitsquare.viewfx.view.ActivatableViewAndModel; - -import javafx.beans.property.BooleanProperty; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.geometry.HPos; @@ -98,12 +95,12 @@ public class CreateOfferView extends ActivatableViewAndModel { if (newValue) { - Popups.openWarningPopup(BSResources.get("shared.warning"), - BSResources.get("createOffer.amountPriceBox.warning.invalidBtcDecimalPlaces")); + Popups.openWarningPopup(BSResources.get("shared.warning"), BSResources.get("createOffer.amountPriceBox.warning.invalidBtcDecimalPlaces")); model.showWarningInvalidBtcDecimalPlaces.set(false); } }); model.showWarningInvalidFiatDecimalPlaces.addListener((o, oldValue, newValue) -> { if (newValue) { - Popups.openWarningPopup(BSResources.get("shared.warning"), - BSResources.get("createOffer.amountPriceBox.warning.invalidFiatDecimalPlaces")); + Popups.openWarningPopup(BSResources.get("shared.warning"), BSResources.get("createOffer.amountPriceBox.warning.invalidFiatDecimalPlaces")); model.showWarningInvalidFiatDecimalPlaces.set(false); } }); model.showWarningAdjustedVolume.addListener((o, oldValue, newValue) -> { if (newValue) { - Popups.openWarningPopup(BSResources.get("shared.warning"), - BSResources.get("createOffer.amountPriceBox.warning.adjustedVolume")); + Popups.openWarningPopup(BSResources.get("shared.warning"), BSResources.get("createOffer.amountPriceBox.warning.adjustedVolume")); model.showWarningAdjustedVolume.set(false); volumeTextField.setText(model.volume.get()); } @@ -293,9 +282,8 @@ public class CreateOfferView extends ActivatableViewAndModel { if (newValue != null) { - Popups.openErrorPopup(BSResources.get("shared.error"), - BSResources.get("createOffer.amountPriceBox.error.message", - model.requestPlaceOfferErrorMessage.get())); + Popups.openErrorPopup(BSResources.get("shared.error"), BSResources.get("createOffer.amountPriceBox.error.message", + model.requestPlaceOfferErrorMessage.get())); Popups.removeBlurContent(); } }); diff --git a/gui/src/main/java/io/bitsquare/gui/main/trade/createoffer/CreateOfferViewModel.java b/gui/src/main/java/io/bitsquare/gui/main/trade/createoffer/CreateOfferViewModel.java index 01d996d424..503253748c 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/trade/createoffer/CreateOfferViewModel.java +++ b/gui/src/main/java/io/bitsquare/gui/main/trade/createoffer/CreateOfferViewModel.java @@ -24,6 +24,8 @@ import io.bitsquare.gui.util.validation.FiatValidator; import io.bitsquare.gui.util.validation.InputValidator; import io.bitsquare.locale.BSResources; import io.bitsquare.offer.Direction; +import io.bitsquare.viewfx.model.ActivatableWithDataModel; +import io.bitsquare.viewfx.model.ViewModel; import org.bitcoinj.core.Address; import org.bitcoinj.core.Coin; @@ -31,9 +33,6 @@ import org.bitcoinj.utils.Fiat; import javax.inject.Inject; -import io.bitsquare.viewfx.model.ViewModel; -import io.bitsquare.viewfx.model.ActivatableWithDataModel; - import javafx.beans.Observable; import javafx.beans.binding.Bindings; import javafx.beans.property.BooleanProperty; @@ -80,7 +79,6 @@ class CreateOfferViewModel extends ActivatableWithDataModel amountValidationResult = new SimpleObjectProperty<>(); final ObjectProperty minAmountValidationResult = new @@ -295,7 +293,6 @@ class CreateOfferViewModel extends ActivatableWithDataModel { if (newValue) { updateButtonDisableState(); - tabIsClosable.set(false); } }); diff --git a/gui/src/main/java/io/bitsquare/gui/main/trade/offerbook/OfferBookView.java b/gui/src/main/java/io/bitsquare/gui/main/trade/offerbook/OfferBookView.java index c0a130d2cb..9d48bd8e9e 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/trade/offerbook/OfferBookView.java +++ b/gui/src/main/java/io/bitsquare/gui/main/trade/offerbook/OfferBookView.java @@ -33,15 +33,14 @@ import io.bitsquare.gui.util.validation.OptionalFiatValidator; import io.bitsquare.locale.BSResources; import io.bitsquare.offer.Direction; import io.bitsquare.offer.Offer; +import io.bitsquare.viewfx.view.ActivatableViewAndModel; +import io.bitsquare.viewfx.view.FxmlView; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; -import io.bitsquare.viewfx.view.FxmlView; -import io.bitsquare.viewfx.view.ActivatableViewAndModel; - import javafx.beans.property.ObjectProperty; import javafx.beans.property.ReadOnlyObjectWrapper; import javafx.beans.value.ChangeListener; @@ -222,7 +221,7 @@ public class OfferBookView extends ActivatableViewAndModel offerIsAvailableChangeListener; + private TradeView.CloseHandler closeHandler; @Inject private TakeOfferView(TakeOfferViewModel model, Navigation navigation, @@ -152,27 +153,39 @@ public class TakeOfferView extends ActivatableViewAndModel 1) - tabPane.getTabs().remove(1); + if (closeHandler != null) + closeHandler.close(); } private void setupListeners() { diff --git a/gui/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferViewModel.java b/gui/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferViewModel.java index aa7c2685e4..f5f8f48750 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferViewModel.java +++ b/gui/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferViewModel.java @@ -24,15 +24,14 @@ import io.bitsquare.gui.util.validation.InputValidator; import io.bitsquare.locale.BSResources; import io.bitsquare.offer.Direction; import io.bitsquare.offer.Offer; +import io.bitsquare.viewfx.model.ActivatableWithDataModel; +import io.bitsquare.viewfx.model.ViewModel; import org.bitcoinj.core.Address; import org.bitcoinj.core.Coin; import javax.inject.Inject; -import io.bitsquare.viewfx.model.ViewModel; -import io.bitsquare.viewfx.model.ActivatableWithDataModel; - import javafx.beans.property.BooleanProperty; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleBooleanProperty; @@ -81,7 +80,6 @@ class TakeOfferViewModel extends ActivatableWithDataModel im final BooleanProperty isTakeOfferSpinnerVisible = new SimpleBooleanProperty(false); final BooleanProperty showWarningInvalidBtcDecimalPlaces = new SimpleBooleanProperty(); final BooleanProperty showTransactionPublishedScreen = new SimpleBooleanProperty(); - final BooleanProperty tabIsClosable = new SimpleBooleanProperty(true); final ObjectProperty offerIsAvailable = new SimpleObjectProperty<>(Offer.State.UNKNOWN); final ObjectProperty amountValidationResult = new SimpleObjectProperty<>(); @@ -272,7 +270,6 @@ class TakeOfferViewModel extends ActivatableWithDataModel im dataModel.isWalletFunded.addListener((ov, oldValue, newValue) -> { if (newValue) { updateButtonDisableState(); - tabIsClosable.set(false); } }); diff --git a/gui/src/main/java/io/bitsquare/offer/Offer.java b/gui/src/main/java/io/bitsquare/offer/Offer.java index b9c831c0c4..3fda0a3f83 100644 --- a/gui/src/main/java/io/bitsquare/offer/Offer.java +++ b/gui/src/main/java/io/bitsquare/offer/Offer.java @@ -48,9 +48,11 @@ public class Offer implements Serializable { public enum State { UNKNOWN, - OFFER_AVAILABLE, - OFFER_NOT_AVAILABLE, - OFFER_REMOVED + AVAILABLE, + OFFERER_OFFLINE, + NOT_AVAILABLE, + AVAILABILITY_CHECK_FAILED, + REMOVED } // key attributes for lookup diff --git a/gui/src/main/java/io/bitsquare/offer/OfferBook.java b/gui/src/main/java/io/bitsquare/offer/OfferBook.java index b18ada823e..3a14d78902 100644 --- a/gui/src/main/java/io/bitsquare/offer/OfferBook.java +++ b/gui/src/main/java/io/bitsquare/offer/OfferBook.java @@ -91,7 +91,7 @@ public class OfferBook { @Override public void onOfferRemoved(Offer offer) { // Update state in case that that offer is used in the take offer screen, so it gets updated correctly - offer.setState(Offer.State.OFFER_REMOVED); + offer.setState(Offer.State.REMOVED); // clean up possible references in tradeManager tradeManager.onOfferRemovedFromRemoteOfferBook(offer); diff --git a/gui/src/main/java/io/bitsquare/trade/TradeManager.java b/gui/src/main/java/io/bitsquare/trade/TradeManager.java index 0f09d445bb..a8317a8656 100644 --- a/gui/src/main/java/io/bitsquare/trade/TradeManager.java +++ b/gui/src/main/java/io/bitsquare/trade/TradeManager.java @@ -29,8 +29,8 @@ import io.bitsquare.offer.Offer; import io.bitsquare.offer.OfferBookService; import io.bitsquare.offer.OpenOffer; import io.bitsquare.persistence.Persistence; +import io.bitsquare.trade.handlers.MessageHandler; import io.bitsquare.trade.handlers.TransactionResultHandler; -import io.bitsquare.trade.listeners.MessageHandler; import io.bitsquare.trade.listeners.SendMessageListener; import io.bitsquare.trade.protocol.availability.CheckOfferAvailabilityModel; import io.bitsquare.trade.protocol.availability.CheckOfferAvailabilityProtocol; @@ -119,7 +119,7 @@ public class TradeManager { closedTrades.putAll((Map) closedTradesObject); } messageHandler = this::handleMessage; - + tradeMessageService.addMessageHandler(messageHandler); } @@ -183,7 +183,9 @@ public class TradeManager { createOffererAsBuyerProtocol(openOffer); resultHandler.handleResult(transaction); }, - (message, throwable) -> errorMessageHandler.handleErrorMessage(message) + (message) -> { + errorMessageHandler.handleErrorMessage(message); + } ); placeOfferProtocol.placeOffer(); @@ -278,6 +280,7 @@ public class TradeManager { tradeMessageService.sendMessage(sender, reportOfferAvailabilityMessage, new SendMessageListener() { @Override public void handleResult() { + // Offerer does not do anything at that moment. Peer might only watch the offer and does nto start a trade. log.trace("ReportOfferAvailabilityMessage successfully arrived at peer"); } diff --git a/gui/src/main/java/io/bitsquare/trade/TradeMessageService.java b/gui/src/main/java/io/bitsquare/trade/TradeMessageService.java index b632dd6896..2a1328361c 100644 --- a/gui/src/main/java/io/bitsquare/trade/TradeMessageService.java +++ b/gui/src/main/java/io/bitsquare/trade/TradeMessageService.java @@ -21,7 +21,7 @@ import io.bitsquare.network.Message; import io.bitsquare.network.MessageBroker; import io.bitsquare.network.Peer; import io.bitsquare.trade.listeners.GetPeerAddressListener; -import io.bitsquare.trade.listeners.MessageHandler; +import io.bitsquare.trade.handlers.MessageHandler; import io.bitsquare.trade.listeners.SendMessageListener; import java.security.PublicKey; diff --git a/gui/src/main/java/io/bitsquare/trade/listeners/MessageHandler.java b/gui/src/main/java/io/bitsquare/trade/handlers/MessageHandler.java similarity index 95% rename from gui/src/main/java/io/bitsquare/trade/listeners/MessageHandler.java rename to gui/src/main/java/io/bitsquare/trade/handlers/MessageHandler.java index d365c2ed9d..f42f7f98e2 100644 --- a/gui/src/main/java/io/bitsquare/trade/listeners/MessageHandler.java +++ b/gui/src/main/java/io/bitsquare/trade/handlers/MessageHandler.java @@ -15,7 +15,7 @@ * along with Bitsquare. If not, see . */ -package io.bitsquare.trade.listeners; +package io.bitsquare.trade.handlers; import io.bitsquare.network.Message; import io.bitsquare.network.Peer; diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/availability/CheckOfferAvailabilityModel.java b/gui/src/main/java/io/bitsquare/trade/protocol/availability/CheckOfferAvailabilityModel.java index 38001317f1..aeee43a6ab 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/availability/CheckOfferAvailabilityModel.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/availability/CheckOfferAvailabilityModel.java @@ -22,7 +22,7 @@ import io.bitsquare.offer.Offer; import io.bitsquare.trade.TradeMessageService; import io.bitsquare.trade.protocol.trade.OfferMessage; import io.bitsquare.util.handlers.ResultHandler; -import io.bitsquare.util.tasks.SharedModel; +import io.bitsquare.util.taskrunner.SharedModel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/availability/CheckOfferAvailabilityProtocol.java b/gui/src/main/java/io/bitsquare/trade/protocol/availability/CheckOfferAvailabilityProtocol.java index 6f55e17cbd..3fa2baeef6 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/availability/CheckOfferAvailabilityProtocol.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/availability/CheckOfferAvailabilityProtocol.java @@ -20,19 +20,18 @@ package io.bitsquare.trade.protocol.availability; import io.bitsquare.network.Message; import io.bitsquare.network.Peer; import io.bitsquare.offer.Offer; -import io.bitsquare.trade.listeners.MessageHandler; +import io.bitsquare.trade.handlers.MessageHandler; import io.bitsquare.trade.protocol.availability.messages.ReportOfferAvailabilityMessage; import io.bitsquare.trade.protocol.availability.tasks.GetPeerAddress; +import io.bitsquare.trade.protocol.availability.tasks.ProcessReportOfferAvailabilityMessage; import io.bitsquare.trade.protocol.availability.tasks.RequestIsOfferAvailable; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.TaskRunner; import javafx.application.Platform; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static io.bitsquare.util.Validator.nonEmptyStringOf; - public class CheckOfferAvailabilityProtocol { private static final Logger log = LoggerFactory.getLogger(CheckOfferAvailabilityProtocol.class); @@ -53,7 +52,7 @@ public class CheckOfferAvailabilityProtocol { } public void cleanup() { - // cannot remove listener in same execution cycle, so we delay it + // Cannot remove listener in same execution cycle, so we delay it Platform.runLater(() -> model.getTradeMessageService().removeMessageHandler(messageHandler)); } @@ -69,8 +68,8 @@ public class CheckOfferAvailabilityProtocol { () -> { log.debug("sequence at onCheckOfferAvailability completed"); }, - (message, throwable) -> { - log.error(message); + (errorMessage) -> { + log.error(errorMessage); } ); sequence.addTasks( @@ -83,26 +82,34 @@ public class CheckOfferAvailabilityProtocol { public void cancel() { isCanceled = true; sequence.cancel(); + model.getOffer().setState(Offer.State.UNKNOWN); } + /////////////////////////////////////////////////////////////////////////////////////////// // Incoming message handling /////////////////////////////////////////////////////////////////////////////////////////// private void handleMessage(Message message, Peer sender) { if (!isCanceled) { - if (message instanceof ReportOfferAvailabilityMessage) { - ReportOfferAvailabilityMessage reportOfferAvailabilityMessage = (ReportOfferAvailabilityMessage) message; - nonEmptyStringOf(reportOfferAvailabilityMessage.getOfferId()); - - if (model.getOffer().getState() != Offer.State.OFFER_REMOVED) { - if (reportOfferAvailabilityMessage.isOfferOpen()) - model.getOffer().setState(Offer.State.OFFER_AVAILABLE); - else - model.getOffer().setState(Offer.State.OFFER_NOT_AVAILABLE); - } - } - model.getResultHandler().handleResult(); + if (message instanceof ReportOfferAvailabilityMessage) + handleReportOfferAvailabilityMessage((ReportOfferAvailabilityMessage) message); } } + + private void handleReportOfferAvailabilityMessage(ReportOfferAvailabilityMessage message) { + model.setMessage(message); + + sequence = new TaskRunner<>(model, + () -> { + log.debug("sequence at handleReportOfferAvailabilityMessage completed"); + model.getResultHandler().handleResult(); + }, + (errorMessage) -> { + log.error(errorMessage); + } + ); + sequence.addTasks(ProcessReportOfferAvailabilityMessage.class); + sequence.run(); + } } diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/availability/tasks/GetPeerAddress.java b/gui/src/main/java/io/bitsquare/trade/protocol/availability/tasks/GetPeerAddress.java index d72f3aee36..283f59d79f 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/availability/tasks/GetPeerAddress.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/availability/tasks/GetPeerAddress.java @@ -18,10 +18,11 @@ package io.bitsquare.trade.protocol.availability.tasks; import io.bitsquare.network.Peer; +import io.bitsquare.offer.Offer; import io.bitsquare.trade.listeners.GetPeerAddressListener; import io.bitsquare.trade.protocol.availability.CheckOfferAvailabilityModel; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -31,25 +32,31 @@ public class GetPeerAddress extends Task { public GetPeerAddress(TaskRunner taskHandler, CheckOfferAvailabilityModel model) { super(taskHandler, model); + + errorMessage = "DHT lookup for peer address failed. Maybe the offerer was offline for too long time."; } @Override - protected void run() { + protected void doRun() { model.getTradeMessageService().getPeerAddress(model.getOffer().getMessagePublicKey(), new GetPeerAddressListener() { @Override public void onResult(Peer peer) { log.trace("Found peer: " + peer.toString()); - + model.setPeer(peer); - complete(); } @Override public void onFailed() { - failed("DHT lookup for peer address failed."); + failed(); } }); } + + @Override + protected void applyErrorState() { + model.getOffer().setState(Offer.State.OFFERER_OFFLINE); + } } diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/availability/tasks/ProcessReportOfferAvailabilityMessage.java b/gui/src/main/java/io/bitsquare/trade/protocol/availability/tasks/ProcessReportOfferAvailabilityMessage.java new file mode 100644 index 0000000000..5fb857b52a --- /dev/null +++ b/gui/src/main/java/io/bitsquare/trade/protocol/availability/tasks/ProcessReportOfferAvailabilityMessage.java @@ -0,0 +1,58 @@ +/* + * This file is part of Bitsquare. + * + * Bitsquare is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bitsquare is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bitsquare. If not, see . + */ + +package io.bitsquare.trade.protocol.availability.tasks; + +import io.bitsquare.offer.Offer; +import io.bitsquare.trade.protocol.availability.CheckOfferAvailabilityModel; +import io.bitsquare.trade.protocol.availability.messages.ReportOfferAvailabilityMessage; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import static io.bitsquare.util.Validator.nonEmptyStringOf; + +public class ProcessReportOfferAvailabilityMessage extends Task { + private static final Logger log = LoggerFactory.getLogger(ProcessReportOfferAvailabilityMessage.class); + + public ProcessReportOfferAvailabilityMessage(TaskRunner taskHandler, CheckOfferAvailabilityModel model) { + super(taskHandler, model); + } + + @Override + protected void doRun() { + ReportOfferAvailabilityMessage reportOfferAvailabilityMessage = (ReportOfferAvailabilityMessage) model.getMessage(); + nonEmptyStringOf(reportOfferAvailabilityMessage.getOfferId()); + + if (model.getOffer().getState() != Offer.State.REMOVED) { + if (reportOfferAvailabilityMessage.isOfferOpen()) + model.getOffer().setState(Offer.State.AVAILABLE); + else + model.getOffer().setState(Offer.State.NOT_AVAILABLE); + } + + complete(); + } + + @Override + protected void applyErrorState() { + model.getOffer().setState(Offer.State.AVAILABILITY_CHECK_FAILED); + } +} + diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/availability/tasks/RequestIsOfferAvailable.java b/gui/src/main/java/io/bitsquare/trade/protocol/availability/tasks/RequestIsOfferAvailable.java index c34aa22bab..f9499d67e3 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/availability/tasks/RequestIsOfferAvailable.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/availability/tasks/RequestIsOfferAvailable.java @@ -17,11 +17,12 @@ package io.bitsquare.trade.protocol.availability.tasks; +import io.bitsquare.offer.Offer; import io.bitsquare.trade.listeners.SendMessageListener; import io.bitsquare.trade.protocol.availability.CheckOfferAvailabilityModel; import io.bitsquare.trade.protocol.availability.messages.RequestIsOfferAvailableMessage; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,20 +35,25 @@ public class RequestIsOfferAvailable extends Task { } @Override - protected void run() { + protected void doRun() { model.getTradeMessageService().sendMessage(model.getPeer(), new RequestIsOfferAvailableMessage(model.getOffer().getId()), new SendMessageListener() { @Override public void handleResult() { - log.trace("RequestIsOfferAvailableMessage successfully arrived at peer"); complete(); } @Override public void handleFault() { - failed("Sending RequestIsOfferAvailableMessage failed."); + model.getOffer().setState(Offer.State.OFFERER_OFFLINE); + failed(); } }); } + + @Override + protected void applyErrorState() { + model.getOffer().setState(Offer.State.AVAILABILITY_CHECK_FAILED); + } } diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/PlaceOfferModel.java b/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/PlaceOfferModel.java index d530618dc1..1b9491947f 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/PlaceOfferModel.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/PlaceOfferModel.java @@ -20,7 +20,7 @@ package io.bitsquare.trade.protocol.placeoffer; import io.bitsquare.btc.WalletService; import io.bitsquare.offer.Offer; import io.bitsquare.offer.OfferBookService; -import io.bitsquare.util.tasks.SharedModel; +import io.bitsquare.util.taskrunner.SharedModel; import org.bitcoinj.core.Transaction; diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/PlaceOfferProtocol.java b/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/PlaceOfferProtocol.java index 4e20139767..b125e82192 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/PlaceOfferProtocol.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/PlaceOfferProtocol.java @@ -22,8 +22,8 @@ import io.bitsquare.trade.protocol.placeoffer.tasks.AddOfferToRemoteOfferBook; import io.bitsquare.trade.protocol.placeoffer.tasks.BroadcastCreateOfferFeeTx; import io.bitsquare.trade.protocol.placeoffer.tasks.CreateOfferFeeTx; import io.bitsquare.trade.protocol.placeoffer.tasks.ValidateOffer; -import io.bitsquare.util.handlers.FaultHandler; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.handlers.ErrorMessageHandler; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,7 +33,7 @@ public class PlaceOfferProtocol { private final PlaceOfferModel model; private TransactionResultHandler resultHandler; - private FaultHandler faultHandle; + private ErrorMessageHandler errorMessageHandler; /////////////////////////////////////////////////////////////////////////////////////////// // Constructor @@ -41,10 +41,10 @@ public class PlaceOfferProtocol { public PlaceOfferProtocol(PlaceOfferModel model, TransactionResultHandler resultHandler, - FaultHandler faultHandle) { + ErrorMessageHandler errorMessageHandler) { this.model = model; this.resultHandler = resultHandler; - this.faultHandle = faultHandle; + this.errorMessageHandler = errorMessageHandler; } @@ -58,16 +58,16 @@ public class PlaceOfferProtocol { log.debug("sequence at handleRequestTakeOfferMessage completed"); resultHandler.handleResult(model.getTransaction()); }, - (message, throwable) -> { - log.error(message); - faultHandle.handleFault(message, throwable); + (errorMessage) -> { + log.error(errorMessage); + errorMessageHandler.handleErrorMessage(errorMessage); } ); sequence.addTasks( ValidateOffer.class, CreateOfferFeeTx.class, - BroadcastCreateOfferFeeTx.class, - AddOfferToRemoteOfferBook.class + AddOfferToRemoteOfferBook.class, + BroadcastCreateOfferFeeTx.class ); sequence.run(); diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/AddOfferToRemoteOfferBook.java b/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/AddOfferToRemoteOfferBook.java index 29c91c1599..00692b350e 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/AddOfferToRemoteOfferBook.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/AddOfferToRemoteOfferBook.java @@ -18,8 +18,8 @@ package io.bitsquare.trade.protocol.placeoffer.tasks; import io.bitsquare.trade.protocol.placeoffer.PlaceOfferModel; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,16 +29,17 @@ public class AddOfferToRemoteOfferBook extends Task { public AddOfferToRemoteOfferBook(TaskRunner taskHandler, PlaceOfferModel model) { super(taskHandler, model); + appendToErrorMessage("Could not add offer to offerbook. Maybe you have connection problems. Please try later again."); } @Override - protected void run() { + protected void doRun() { model.getOfferBookService().addOffer(model.getOffer(), () -> { complete(); }, (message, throwable) -> { - failed(message, throwable); + failed(throwable); }); } } diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/BroadcastCreateOfferFeeTx.java b/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/BroadcastCreateOfferFeeTx.java index 6186ced9d3..9719797a7f 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/BroadcastCreateOfferFeeTx.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/BroadcastCreateOfferFeeTx.java @@ -18,8 +18,8 @@ package io.bitsquare.trade.protocol.placeoffer.tasks; import io.bitsquare.trade.protocol.placeoffer.PlaceOfferModel; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.bitcoinj.core.Transaction; @@ -33,33 +33,55 @@ public class BroadcastCreateOfferFeeTx extends Task { public BroadcastCreateOfferFeeTx(TaskRunner taskHandler, PlaceOfferModel model) { super(taskHandler, model); + + appendToErrorMessage("Broadcast of offer fee payment failed because transaction = null."); + appendToErrorMessage("Maybe you have connection problems. Please try later again."); } @Override - protected void run() { - try { - model.getWalletService().broadcastCreateOfferFeeTx(model.getTransaction(), new FutureCallback() { - @Override - public void onSuccess(Transaction transaction) { - log.info("Broadcast of offer fee payment succeeded: transaction = " + transaction.toString()); - if (transaction != null) { - // need to write data before storage, otherwise hash is different when removing offer from DHT! - model.getOffer().setOfferFeePaymentTxID(model.getTransaction().getHashAsString()); - + protected void doRun() { + model.getWalletService().broadcastCreateOfferFeeTx(model.getTransaction(), new FutureCallback() { + @Override + public void onSuccess(Transaction transaction) { + log.info("Broadcast of offer fee payment succeeded: transaction = " + transaction.toString()); + if (transaction != null) { + + if (model.getTransaction().getHashAsString() == transaction.getHashAsString()) { + // No tx malleability happened after broadcast (still not in blockchain) complete(); } else { - failed("Broadcast of offer fee payment failed because transaction = null."); + log.warn("Tx malleability happened after broadcast. We publish the changed offer to the DHT again."); + // Tx malleability happened after broadcast. We publish the changed offer to the DHT again. + model.getOfferBookService().removeOffer(model.getOffer(), + () -> { + log.info("We store now the changed txID to the offer and add that again."); + // We store now the changed txID to the offer and add that again. + model.getOffer().setOfferFeePaymentTxID(transaction.getHashAsString()); + model.getOfferBookService().addOffer(model.getOffer(), + () -> { + complete(); + }, + (message, throwable) -> { + log.error("addOffer failed"); + failed(throwable); + }); + }, + (message, throwable) -> { + log.error("removeOffer failed"); + failed(throwable); + }); } } - - @Override - public void onFailure(Throwable t) { - failed(t); + else { + failed("Fault reason: Transaction = null."); } - }); - } catch (Throwable t) { - failed(t); - } + } + + @Override + public void onFailure(Throwable t) { + failed(t); + } + }); } } diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/CreateOfferFeeTx.java b/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/CreateOfferFeeTx.java index fc31ceaabd..bb6f9754f6 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/CreateOfferFeeTx.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/CreateOfferFeeTx.java @@ -18,8 +18,8 @@ package io.bitsquare.trade.protocol.placeoffer.tasks; import io.bitsquare.trade.protocol.placeoffer.PlaceOfferModel; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.bitcoinj.core.Transaction; @@ -34,10 +34,12 @@ public class CreateOfferFeeTx extends Task { } @Override - protected void run() { + protected void doRun() { try { Transaction transaction = model.getWalletService().createOfferFeeTx(model.getOffer().getId()); - + + // We assume there will be no tx malleability. We add a check later in case the published offer has a different hash. + model.getOffer().setOfferFeePaymentTxID(transaction.getHashAsString()); model.setTransaction(transaction); complete(); diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/ValidateOffer.java b/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/ValidateOffer.java index 5e4fd44918..2adc48753e 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/ValidateOffer.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/ValidateOffer.java @@ -18,8 +18,8 @@ package io.bitsquare.trade.protocol.placeoffer.tasks; import io.bitsquare.trade.protocol.placeoffer.PlaceOfferModel; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -32,7 +32,7 @@ public class ValidateOffer extends Task { } @Override - protected void run() { + protected void doRun() { try { model.getOffer().validate(); diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/TradeSharedModel.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/TradeSharedModel.java index df570efb07..2f868c60bc 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/TradeSharedModel.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/TradeSharedModel.java @@ -24,7 +24,7 @@ import io.bitsquare.crypto.SignatureService; import io.bitsquare.offer.Offer; import io.bitsquare.trade.TradeMessageService; import io.bitsquare.user.User; -import io.bitsquare.util.tasks.SharedModel; +import io.bitsquare.util.taskrunner.SharedModel; import org.bitcoinj.core.ECKey; diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/BuyerAsOffererProtocol.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/BuyerAsOffererProtocol.java index e494c78fdf..1eb30e9638 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/BuyerAsOffererProtocol.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/BuyerAsOffererProtocol.java @@ -19,7 +19,7 @@ package io.bitsquare.trade.protocol.trade.offerer; import io.bitsquare.network.Message; import io.bitsquare.network.Peer; -import io.bitsquare.trade.listeners.MessageHandler; +import io.bitsquare.trade.handlers.MessageHandler; import io.bitsquare.trade.protocol.trade.TradeMessage; import io.bitsquare.trade.protocol.trade.offerer.tasks.CreateDepositTx; import io.bitsquare.trade.protocol.trade.offerer.tasks.ProcessPayoutTxPublishedMessage; @@ -71,8 +71,6 @@ public class BuyerAsOffererProtocol { public void cleanup() { model.getTradeMessageService().removeMessageHandler(messageHandler); - // cannot remove listener in same execution cycle, so we delay it - //Platform.runLater(() -> model.getTradeMessageService().removeMessageHandler(messageHandler)); } @@ -113,8 +111,8 @@ public class BuyerAsOffererProtocol { () -> { log.debug("sequence at handleRequestTakeOfferMessage completed"); }, - (message, throwable) -> { - log.error(message); + (errorMessage) -> { + log.error(errorMessage); } ); sequence.addTasks( @@ -131,8 +129,8 @@ public class BuyerAsOffererProtocol { () -> { log.debug("sequence at handleTakeOfferFeePayedMessage completed"); }, - (message, throwable) -> { - log.error(message); + (errorMessage) -> { + log.error(errorMessage); } ); sequence.addTasks( @@ -150,8 +148,8 @@ public class BuyerAsOffererProtocol { () -> { log.debug("sequence at handleRequestOffererPublishDepositTxMessage completed"); }, - (message, throwable) -> { - log.error(message); + (errorMessage) -> { + log.error(errorMessage); } ); sequence.addTasks( @@ -176,8 +174,8 @@ public class BuyerAsOffererProtocol { () -> { log.debug("sequence at handleBankTransferStartedUIEvent completed"); }, - (message, throwable) -> { - log.error(message); + (errorMessage) -> { + log.error(errorMessage); } ); sequence.addTasks( @@ -200,8 +198,8 @@ public class BuyerAsOffererProtocol { () -> { log.debug("sequence at handlePayoutTxPublishedMessage completed"); }, - (message, throwable) -> { - log.error(message); + (errorMessage) -> { + log.error(errorMessage); } ); sequence.addTasks(ProcessPayoutTxPublishedMessage.class); diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/BuyerAsOffererTaskRunner.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/BuyerAsOffererTaskRunner.java index ed67947958..694c322cde 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/BuyerAsOffererTaskRunner.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/BuyerAsOffererTaskRunner.java @@ -17,12 +17,9 @@ package io.bitsquare.trade.protocol.trade.offerer; -import io.bitsquare.trade.Trade; -import io.bitsquare.util.handlers.FaultHandler; +import io.bitsquare.util.handlers.ErrorMessageHandler; import io.bitsquare.util.handlers.ResultHandler; -import io.bitsquare.util.tasks.TaskRunner; - -import org.jetbrains.annotations.NotNull; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,13 +27,13 @@ import org.slf4j.LoggerFactory; public class BuyerAsOffererTaskRunner extends TaskRunner { private static final Logger log = LoggerFactory.getLogger(BuyerAsOffererTaskRunner.class); - public BuyerAsOffererTaskRunner(T sharedModel, ResultHandler resultHandler, FaultHandler faultHandler) { - super(sharedModel, resultHandler, faultHandler); + public BuyerAsOffererTaskRunner(T sharedModel, ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) { + super(sharedModel, resultHandler, errorMessageHandler); } - @Override + /* @Override public void handleFault(String message, @NotNull Throwable throwable) { sharedModel.getTrade().setState(Trade.State.FAILED); super.handleFault(message, throwable); - } + }*/ } diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateDepositTx.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateDepositTx.java index 292aa6219a..6cedc9352f 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateDepositTx.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateDepositTx.java @@ -19,8 +19,8 @@ package io.bitsquare.trade.protocol.trade.offerer.tasks; import io.bitsquare.btc.FeePolicy; import io.bitsquare.trade.protocol.trade.offerer.BuyerAsOffererModel; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.bitcoinj.core.Coin; import org.bitcoinj.core.InsufficientMoneyException; @@ -38,7 +38,7 @@ public class CreateDepositTx extends Task { } @Override - protected void run() { + protected void doRun() { try { String offererPubKey = model.getWalletService().getAddressInfoByTradeID(model.getTrade().getId()).getPubKeyAsHexString(); Coin offererInputAmount = model.getTrade().getSecurityDeposit().add(FeePolicy.TX_FEE); diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessPayoutTxPublishedMessage.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessPayoutTxPublishedMessage.java index d615758b70..dca1736fed 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessPayoutTxPublishedMessage.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessPayoutTxPublishedMessage.java @@ -20,8 +20,8 @@ package io.bitsquare.trade.protocol.trade.offerer.tasks; import io.bitsquare.trade.Trade; import io.bitsquare.trade.protocol.trade.offerer.BuyerAsOffererModel; import io.bitsquare.trade.protocol.trade.taker.messages.PayoutTxPublishedMessage; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.bitcoinj.core.Transaction; import org.bitcoinj.core.Utils; @@ -39,7 +39,7 @@ public class ProcessPayoutTxPublishedMessage extends Task { } @Override - protected void run() { + protected void doRun() { try { checkTradeId(model.getTrade().getId(), model.getTradeMessage()); String payoutTxAsHex = nonEmptyStringOf(((PayoutTxPublishedMessage) model.getTradeMessage()).getPayoutTxAsHex()); diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessRequestOffererPublishDepositTxMessage.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessRequestOffererPublishDepositTxMessage.java index 8873afe891..5c6783f329 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessRequestOffererPublishDepositTxMessage.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessRequestOffererPublishDepositTxMessage.java @@ -19,8 +19,8 @@ package io.bitsquare.trade.protocol.trade.offerer.tasks; import io.bitsquare.trade.protocol.trade.offerer.BuyerAsOffererModel; import io.bitsquare.trade.protocol.trade.taker.messages.RequestOffererPublishDepositTxMessage; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,7 +36,7 @@ public class ProcessRequestOffererPublishDepositTxMessage extends Task { } @Override - protected void run() { + protected void doRun() { try { checkTradeId(model.getOffer().getId(), model.getTradeMessage()); diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessTakeOfferFeePayedMessage.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessTakeOfferFeePayedMessage.java index d423fb846d..5ca464c255 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessTakeOfferFeePayedMessage.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessTakeOfferFeePayedMessage.java @@ -20,8 +20,8 @@ package io.bitsquare.trade.protocol.trade.offerer.tasks; import io.bitsquare.trade.Trade; import io.bitsquare.trade.protocol.trade.offerer.BuyerAsOffererModel; import io.bitsquare.trade.protocol.trade.taker.messages.TakeOfferFeePayedMessage; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,7 +36,7 @@ public class ProcessTakeOfferFeePayedMessage extends Task { } @Override - protected void run() { + protected void doRun() { try { checkTradeId(model.getTrade().getId(), model.getTradeMessage()); diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RespondToTakeOfferRequest.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RespondToTakeOfferRequest.java index f637225740..f124f4167e 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RespondToTakeOfferRequest.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RespondToTakeOfferRequest.java @@ -22,8 +22,8 @@ import io.bitsquare.trade.Trade; import io.bitsquare.trade.listeners.SendMessageListener; import io.bitsquare.trade.protocol.trade.offerer.BuyerAsOffererModel; import io.bitsquare.trade.protocol.trade.offerer.messages.RespondToTakeOfferRequestMessage; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,7 +36,7 @@ public class RespondToTakeOfferRequest extends Task { } @Override - protected void run() { + protected void doRun() { boolean takeOfferRequestAccepted = model.getOpenOffer().getState() == OpenOffer.State.OPEN; if (!takeOfferRequestAccepted) log.info("Received take offer request but the offer not marked as open anymore."); diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendBankTransferInitedMessage.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendBankTransferInitedMessage.java index e0ad201e06..3821c0c794 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendBankTransferInitedMessage.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendBankTransferInitedMessage.java @@ -20,8 +20,8 @@ package io.bitsquare.trade.protocol.trade.offerer.tasks; import io.bitsquare.trade.listeners.SendMessageListener; import io.bitsquare.trade.protocol.trade.offerer.BuyerAsOffererModel; import io.bitsquare.trade.protocol.trade.offerer.messages.BankTransferStartedMessage; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,7 +34,7 @@ public class SendBankTransferInitedMessage extends Task { } @Override - protected void run() { + protected void doRun() { BankTransferStartedMessage tradeMessage = new BankTransferStartedMessage( model.getTrade().getId(), model.getDepositTxAsHex(), diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java index 8c496f59a6..ca0ea826c6 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java @@ -20,8 +20,8 @@ package io.bitsquare.trade.protocol.trade.offerer.tasks; import io.bitsquare.trade.listeners.SendMessageListener; import io.bitsquare.trade.protocol.trade.offerer.BuyerAsOffererModel; import io.bitsquare.trade.protocol.trade.offerer.messages.DepositTxPublishedMessage; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.bitcoinj.core.Utils; @@ -36,7 +36,7 @@ public class SendDepositTxIdToTaker extends Task { } @Override - protected void run() { + protected void doRun() { DepositTxPublishedMessage tradeMessage = new DepositTxPublishedMessage(model.getTrade().getId(), Utils.HEX.encode(model.getTrade().getDepositTx().bitcoinSerialize())); diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendTakerDepositPaymentRequest.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendTakerDepositPaymentRequest.java index 57cedb3a11..2edae65d85 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendTakerDepositPaymentRequest.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendTakerDepositPaymentRequest.java @@ -20,8 +20,8 @@ package io.bitsquare.trade.protocol.trade.offerer.tasks; import io.bitsquare.trade.listeners.SendMessageListener; import io.bitsquare.trade.protocol.trade.offerer.BuyerAsOffererModel; import io.bitsquare.trade.protocol.trade.offerer.messages.TakerDepositPaymentRequestMessage; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,7 +34,7 @@ public class SendTakerDepositPaymentRequest extends Task { } @Override - protected void run() { + protected void doRun() { TakerDepositPaymentRequestMessage tradeMessage = new TakerDepositPaymentRequestMessage( model.getTrade().getId(), model.getBankAccount(), diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SetupListenerForBlockChainConfirmation.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SetupListenerForBlockChainConfirmation.java index ac27df467f..84c7acab5b 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SetupListenerForBlockChainConfirmation.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SetupListenerForBlockChainConfirmation.java @@ -19,8 +19,8 @@ package io.bitsquare.trade.protocol.trade.offerer.tasks; import io.bitsquare.trade.Trade; import io.bitsquare.trade.protocol.trade.offerer.BuyerAsOffererModel; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.bitcoinj.core.Transaction; import org.bitcoinj.core.TransactionConfidence; @@ -37,7 +37,7 @@ public class SetupListenerForBlockChainConfirmation extends Task { } @Override - protected void run() { + protected void doRun() { try { model.getWalletService().offererSignAndPublishTx(model.getPreparedOffererDepositTxAsHex(), model.getSignedTakerDepositTxAsHex(), diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignPayoutTx.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignPayoutTx.java index 9227db5b36..65333e81f8 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignPayoutTx.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignPayoutTx.java @@ -19,8 +19,8 @@ package io.bitsquare.trade.protocol.trade.offerer.tasks; import io.bitsquare.trade.Trade; import io.bitsquare.trade.protocol.trade.offerer.BuyerAsOffererModel; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.bitcoinj.core.Coin; import org.bitcoinj.core.ECKey; @@ -38,7 +38,7 @@ public class SignPayoutTx extends Task { } @Override - protected void run() { + protected void doRun() { try { Trade trade = model.getTrade(); Coin securityDeposit = trade.getSecurityDeposit(); diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyAndSignContract.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyAndSignContract.java index 8a7f947547..8d8a9bf6ec 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyAndSignContract.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyAndSignContract.java @@ -21,8 +21,8 @@ import io.bitsquare.trade.Contract; import io.bitsquare.trade.Trade; import io.bitsquare.trade.protocol.trade.offerer.BuyerAsOffererModel; import io.bitsquare.util.Utilities; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,7 +35,7 @@ public class VerifyAndSignContract extends Task { } @Override - protected void run() { + protected void doRun() { Trade trade = model.getTrade(); Contract contract = new Contract( diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java index 8ca76a57d5..a45bf33944 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java @@ -18,8 +18,8 @@ package io.bitsquare.trade.protocol.trade.offerer.tasks; import io.bitsquare.trade.protocol.trade.offerer.BuyerAsOffererModel; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -32,7 +32,7 @@ public class VerifyTakeOfferFeePayment extends Task { } @Override - protected void run() { + protected void doRun() { //TODO mocked yet, need a confidence listeners int numOfPeersSeenTx = model.getWalletService().getNumOfPeersSeenTx(model.getTakeOfferFeeTxId()); /* if (numOfPeersSeenTx > 2) { diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakerAccount.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakerAccount.java index 2eb9c00a90..d22eed65a0 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakerAccount.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakerAccount.java @@ -18,8 +18,8 @@ package io.bitsquare.trade.protocol.trade.offerer.tasks; import io.bitsquare.trade.protocol.trade.offerer.BuyerAsOffererModel; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -32,7 +32,7 @@ public class VerifyTakerAccount extends Task { } @Override - protected void run() { + protected void doRun() { //TODO mocked yet if (model.getBlockChainService().verifyAccountRegistration()) { if (model.getBlockChainService().isAccountBlackListed(model.getPeersAccountId(), model.getPeersBankAccount())) { diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/SellerAsTakerProtocol.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/SellerAsTakerProtocol.java index ab479959a3..46edf23c95 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/SellerAsTakerProtocol.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/SellerAsTakerProtocol.java @@ -20,7 +20,7 @@ package io.bitsquare.trade.protocol.trade.taker; import io.bitsquare.network.Message; import io.bitsquare.network.Peer; import io.bitsquare.trade.Trade; -import io.bitsquare.trade.listeners.MessageHandler; +import io.bitsquare.trade.handlers.MessageHandler; import io.bitsquare.trade.protocol.trade.TradeMessage; import io.bitsquare.trade.protocol.trade.offerer.messages.BankTransferStartedMessage; import io.bitsquare.trade.protocol.trade.offerer.messages.DepositTxPublishedMessage; @@ -75,8 +75,8 @@ public class SellerAsTakerProtocol { () -> { log.debug("sequence at handleRequestTakeOfferUIEvent completed"); }, - (message, throwable) -> { - log.error(message); + (errorMessage) -> { + log.error(errorMessage); } ); sequence.addTasks( @@ -88,8 +88,6 @@ public class SellerAsTakerProtocol { public void cleanup() { model.getTradeMessageService().removeMessageHandler(messageHandler); - // cannot remove listener in same execution cycle, so we delay it - // Platform.runLater(() -> model.getTradeMessageService().removeMessageHandler(messageHandler)); } @@ -128,8 +126,8 @@ public class SellerAsTakerProtocol { () -> { log.debug("sequence at handleRespondToTakeOfferRequestMessage completed"); }, - (message, throwable) -> { - log.error(message); + (errorMessage) -> { + log.error(errorMessage); } ); sequence.addTasks( @@ -147,8 +145,8 @@ public class SellerAsTakerProtocol { () -> { log.debug("sequence at handleTakerDepositPaymentRequestMessage completed"); }, - (message, throwable) -> { - log.error(message); + (errorMessage) -> { + log.error(errorMessage); } ); sequence.addTasks( @@ -168,8 +166,8 @@ public class SellerAsTakerProtocol { () -> { log.debug("sequence at handleDepositTxPublishedMessage completed"); }, - (message, throwable) -> { - log.error(message); + (errorMessage) -> { + log.error(errorMessage); } ); sequence.addTasks( @@ -187,8 +185,8 @@ public class SellerAsTakerProtocol { log.debug("sequence at handleBankTransferInitedMessage completed"); model.getTrade().setState(Trade.State.FIAT_PAYMENT_STARTED); }, - (message, throwable) -> { - log.error(message); + (errorMessage) -> { + log.error(errorMessage); } ); sequence.addTasks(ProcessBankTransferInitedMessage.class); @@ -205,8 +203,8 @@ public class SellerAsTakerProtocol { () -> { log.debug("sequence at handleFiatReceivedUIEvent completed"); }, - (message, throwable) -> { - log.error(message); + (errorMessage) -> { + log.error(errorMessage); } ); sequence.addTasks( diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/SellerAsTakerTaskRunner.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/SellerAsTakerTaskRunner.java index 8757e119ef..dc0cf3b6f4 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/SellerAsTakerTaskRunner.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/SellerAsTakerTaskRunner.java @@ -17,12 +17,9 @@ package io.bitsquare.trade.protocol.trade.taker; -import io.bitsquare.trade.Trade; -import io.bitsquare.util.handlers.FaultHandler; +import io.bitsquare.util.handlers.ErrorMessageHandler; import io.bitsquare.util.handlers.ResultHandler; -import io.bitsquare.util.tasks.TaskRunner; - -import org.jetbrains.annotations.NotNull; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,13 +27,13 @@ import org.slf4j.LoggerFactory; public class SellerAsTakerTaskRunner extends TaskRunner { private static final Logger log = LoggerFactory.getLogger(SellerAsTakerTaskRunner.class); - public SellerAsTakerTaskRunner(T sharedModel, ResultHandler resultHandler, FaultHandler faultHandler) { - super(sharedModel, resultHandler, faultHandler); + public SellerAsTakerTaskRunner(T sharedModel, ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) { + super(sharedModel, resultHandler, errorMessageHandler); } - @Override - public void handleFault(String message, @NotNull Throwable throwable) { + /* @Override + public void handleErrorMessage(String errorMessage) { sharedModel.getTrade().setState(Trade.State.FAILED); - super.handleFault(message, throwable); - } + super.handleErrorMessage(errorMessage); + }*/ } diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java index 59521f56de..c94d1f35ce 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java @@ -21,8 +21,8 @@ import io.bitsquare.trade.Contract; import io.bitsquare.trade.Trade; import io.bitsquare.trade.protocol.trade.taker.SellerAsTakerModel; import io.bitsquare.util.Utilities; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,7 +35,7 @@ public class CreateAndSignContract extends Task { } @Override - protected void run() { + protected void doRun() { Trade trade = model.getTrade(); Contract contract = new Contract( model.getOffer(), diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java index f1ae72c553..34e1adc453 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java @@ -20,8 +20,8 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.network.Peer; import io.bitsquare.trade.listeners.GetPeerAddressListener; import io.bitsquare.trade.protocol.trade.taker.SellerAsTakerModel; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,7 +34,7 @@ public class GetPeerAddress extends Task { } @Override - protected void run() { + protected void doRun() { model.getTradeMessageService().getPeerAddress(model.getOffererMessagePublicKey(), new GetPeerAddressListener() { @Override public void onResult(Peer peer) { diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java index 3f2ec5d2f7..c849d3ad49 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java @@ -18,8 +18,8 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.trade.protocol.trade.taker.SellerAsTakerModel; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.bitcoinj.core.Coin; import org.bitcoinj.core.InsufficientMoneyException; @@ -36,7 +36,7 @@ public class PayDeposit extends Task { } @Override - protected void run() { + protected void doRun() { try { Coin amountToPay = model.getTradeAmount().add(model.getSecurityDeposit()); Coin msOutputAmount = amountToPay.add(model.getSecurityDeposit()); diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayTakeOfferFee.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayTakeOfferFee.java index bc4e00a3c9..2ba476278a 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayTakeOfferFee.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayTakeOfferFee.java @@ -18,8 +18,8 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.trade.protocol.trade.taker.SellerAsTakerModel; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.bitcoinj.core.InsufficientMoneyException; import org.bitcoinj.core.Transaction; @@ -39,7 +39,7 @@ public class PayTakeOfferFee extends Task { } @Override - protected void run() { + protected void doRun() { try { model.getWalletService().payTakeOfferFee(model.getTrade().getId(), new FutureCallback() { @Override @@ -51,11 +51,11 @@ public class PayTakeOfferFee extends Task { @Override public void onFailure(@NotNull Throwable t) { - failed("Pay take offer fee caused an exception: ", t); + failed(t); } }); } catch (InsufficientMoneyException e) { - failed("Pay take offer fee caused an exception: ", e); + failed(e); } } } diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessBankTransferInitedMessage.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessBankTransferInitedMessage.java index de9a40fe29..89b2f2d974 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessBankTransferInitedMessage.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessBankTransferInitedMessage.java @@ -19,8 +19,8 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.trade.protocol.trade.offerer.messages.BankTransferStartedMessage; import io.bitsquare.trade.protocol.trade.taker.SellerAsTakerModel; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,7 +35,7 @@ public class ProcessBankTransferInitedMessage extends Task { } @Override - protected void run() { + protected void doRun() { try { checkTradeId(model.getTrade().getId(), model.getTradeMessage()); BankTransferStartedMessage message = (BankTransferStartedMessage) model.getTradeMessage(); diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessDepositTxPublishedMessage.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessDepositTxPublishedMessage.java index 76aa1097df..2a029dd75f 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessDepositTxPublishedMessage.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessDepositTxPublishedMessage.java @@ -19,8 +19,8 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.trade.protocol.trade.offerer.messages.DepositTxPublishedMessage; import io.bitsquare.trade.protocol.trade.taker.SellerAsTakerModel; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,7 +35,7 @@ public class ProcessDepositTxPublishedMessage extends Task { } @Override - protected void run() { + protected void doRun() { try { checkTradeId(model.getTrade().getId(), model.getTradeMessage()); @@ -44,7 +44,7 @@ public class ProcessDepositTxPublishedMessage extends Task { complete(); } catch (Throwable t) { - failed("Validation for DepositTxPublishedMessage failed.", t); + failed(t); } } } \ No newline at end of file diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessRespondToTakeOfferRequestMessage.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessRespondToTakeOfferRequestMessage.java index 56c50eee72..df3e9fcfc6 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessRespondToTakeOfferRequestMessage.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessRespondToTakeOfferRequestMessage.java @@ -20,8 +20,8 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.trade.Trade; import io.bitsquare.trade.protocol.trade.offerer.messages.RespondToTakeOfferRequestMessage; import io.bitsquare.trade.protocol.trade.taker.SellerAsTakerModel; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,7 +36,7 @@ public class ProcessRespondToTakeOfferRequestMessage extends Task { } @Override - protected void run() { + protected void doRun() { model.getTradeMessageService().sendMessage(model.getPeer(), new RequestTakeOfferMessage(model.getTrade().getId()), new SendMessageListener() { @Override diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java index 395919d0eb..a8e39bcf3b 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java @@ -20,8 +20,8 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.trade.listeners.SendMessageListener; import io.bitsquare.trade.protocol.trade.taker.SellerAsTakerModel; import io.bitsquare.trade.protocol.trade.taker.messages.PayoutTxPublishedMessage; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,7 +34,7 @@ public class SendPayoutTxToOfferer extends Task { } @Override - protected void run() { + protected void doRun() { PayoutTxPublishedMessage tradeMessage = new PayoutTxPublishedMessage(model.getTrade().getId(), model.getPayoutTxAsHex()); model.getTradeMessageService().sendMessage(model.getPeer(), tradeMessage, new SendMessageListener() { @Override diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java index 2d7354db2e..6c13407fd3 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java @@ -20,8 +20,8 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.trade.listeners.SendMessageListener; import io.bitsquare.trade.protocol.trade.taker.SellerAsTakerModel; import io.bitsquare.trade.protocol.trade.taker.messages.RequestOffererPublishDepositTxMessage; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.bitcoinj.core.Transaction; import org.bitcoinj.core.Utils; @@ -37,7 +37,7 @@ public class SendSignedTakerDepositTxAsHex extends Task { } @Override - protected void run() { + protected void doRun() { Transaction signedTakerDepositTx = model.getSignedTakerDepositTx(); long takerTxOutIndex = model.getSignedTakerDepositTx().getInput(1).getOutpoint().getIndex(); diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedMessage.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedMessage.java index c5445937f2..2a7ea42060 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedMessage.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedMessage.java @@ -20,8 +20,8 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.trade.listeners.SendMessageListener; import io.bitsquare.trade.protocol.trade.taker.SellerAsTakerModel; import io.bitsquare.trade.protocol.trade.taker.messages.TakeOfferFeePayedMessage; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,7 +34,7 @@ public class SendTakeOfferFeePayedMessage extends Task { } @Override - protected void run() { + protected void doRun() { TakeOfferFeePayedMessage msg = new TakeOfferFeePayedMessage( model.getTrade().getId(), model.getTrade().getTakeOfferFeeTxId(), diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java index b3119a1e59..0b21119cf5 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java @@ -19,8 +19,8 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.trade.Trade; import io.bitsquare.trade.protocol.trade.taker.SellerAsTakerModel; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.bitcoinj.core.AddressFormatException; import org.bitcoinj.core.Transaction; @@ -41,7 +41,7 @@ public class SignAndPublishPayoutTx extends Task { } @Override - protected void run() { + protected void doRun() { try { model.getWalletService().takerSignsAndSendsTx(model.getDepositTxAsHex(), model.getOffererSignatureR(), diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/TakerCommitDepositTx.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/TakerCommitDepositTx.java index e16d88829a..b630dd170a 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/TakerCommitDepositTx.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/TakerCommitDepositTx.java @@ -19,8 +19,8 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.trade.Trade; import io.bitsquare.trade.protocol.trade.taker.SellerAsTakerModel; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.bitcoinj.core.Transaction; @@ -35,7 +35,7 @@ public class TakerCommitDepositTx extends Task { } @Override - protected void run() { + protected void doRun() { Transaction transaction = model.getWalletService().takerCommitDepositTx(model.getDepositTxAsHex()); model.getTrade().setDepositTx(transaction); diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOfferFeePayment.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOfferFeePayment.java index 0bed9ed214..5b559480b1 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOfferFeePayment.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOfferFeePayment.java @@ -18,8 +18,8 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.trade.protocol.trade.taker.SellerAsTakerModel; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -32,7 +32,7 @@ public class VerifyOfferFeePayment extends Task { } @Override - protected void run() { + protected void doRun() { //TODO impl. missing int numOfPeersSeenTx = model.getWalletService().getNumOfPeersSeenTx(model.getTrade().getTakeOfferFeeTxId()); /* if (numOfPeersSeenTx > 2) { diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOffererAccount.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOffererAccount.java index 531e34a29d..74485c3786 100644 --- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOffererAccount.java +++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOffererAccount.java @@ -18,8 +18,8 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.trade.protocol.trade.taker.SellerAsTakerModel; -import io.bitsquare.util.tasks.Task; -import io.bitsquare.util.tasks.TaskRunner; +import io.bitsquare.util.taskrunner.Task; +import io.bitsquare.util.taskrunner.TaskRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -32,7 +32,7 @@ public class VerifyOffererAccount extends Task { } @Override - protected void run() { + protected void doRun() { if (model.getBlockChainService().verifyAccountRegistration()) { if (model.getBlockChainService().isAccountBlackListed(model.getPeersAccountId(), model.getPeersBankAccount())) { failed("Taker is blacklisted."); diff --git a/gui/src/main/java/io/bitsquare/trade/tomp2p/TomP2PTradeMessageService.java b/gui/src/main/java/io/bitsquare/trade/tomp2p/TomP2PTradeMessageService.java index 0f03ff1f9e..96d4d9069f 100644 --- a/gui/src/main/java/io/bitsquare/trade/tomp2p/TomP2PTradeMessageService.java +++ b/gui/src/main/java/io/bitsquare/trade/tomp2p/TomP2PTradeMessageService.java @@ -23,7 +23,7 @@ import io.bitsquare.network.tomp2p.TomP2PNode; import io.bitsquare.network.tomp2p.TomP2PPeer; import io.bitsquare.trade.TradeMessageService; import io.bitsquare.trade.listeners.GetPeerAddressListener; -import io.bitsquare.trade.listeners.MessageHandler; +import io.bitsquare.trade.handlers.MessageHandler; import io.bitsquare.trade.listeners.SendMessageListener; import io.bitsquare.user.User; diff --git a/gui/src/main/java/io/bitsquare/trade/listeners/TakeOfferRequestListener.java b/gui/src/main/java/io/bitsquare/util/taskrunner/InterceptTaskException.java similarity index 67% rename from gui/src/main/java/io/bitsquare/trade/listeners/TakeOfferRequestListener.java rename to gui/src/main/java/io/bitsquare/util/taskrunner/InterceptTaskException.java index 1b8b59bea7..d27a067ec2 100644 --- a/gui/src/main/java/io/bitsquare/trade/listeners/TakeOfferRequestListener.java +++ b/gui/src/main/java/io/bitsquare/util/taskrunner/InterceptTaskException.java @@ -15,10 +15,15 @@ * along with Bitsquare. If not, see . */ -package io.bitsquare.trade.listeners; +package io.bitsquare.util.taskrunner; -import net.tomp2p.peers.PeerAddress; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -public interface TakeOfferRequestListener { - void onTakeOfferRequested(String offerId, PeerAddress sender); +public class InterceptTaskException extends RuntimeException{ + private static final Logger log = LoggerFactory.getLogger(InterceptTaskException.class); + + public InterceptTaskException(String message) { + super(message); + } } diff --git a/gui/src/main/java/io/bitsquare/util/tasks/SharedModel.java b/gui/src/main/java/io/bitsquare/util/taskrunner/SharedModel.java similarity index 95% rename from gui/src/main/java/io/bitsquare/util/tasks/SharedModel.java rename to gui/src/main/java/io/bitsquare/util/taskrunner/SharedModel.java index 10ecc1fbdd..fa946cbbdd 100644 --- a/gui/src/main/java/io/bitsquare/util/tasks/SharedModel.java +++ b/gui/src/main/java/io/bitsquare/util/taskrunner/SharedModel.java @@ -15,7 +15,7 @@ * along with Bitsquare. If not, see . */ -package io.bitsquare.util.tasks; +package io.bitsquare.util.taskrunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/gui/src/main/java/io/bitsquare/util/taskrunner/Task.java b/gui/src/main/java/io/bitsquare/util/taskrunner/Task.java new file mode 100644 index 0000000000..ffa13d3cd2 --- /dev/null +++ b/gui/src/main/java/io/bitsquare/util/taskrunner/Task.java @@ -0,0 +1,91 @@ +/* + * This file is part of Bitsquare. + * + * Bitsquare is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bitsquare is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bitsquare. If not, see . + */ + +package io.bitsquare.util.taskrunner; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public abstract class Task { + private static final Logger log = LoggerFactory.getLogger(Task.class); + public static Class taskToInterceptBeforeRun; + public static Class taskToInterceptAfterRun; + + private final TaskRunner taskHandler; + protected final T model; + protected String errorMessage = "An error occurred at: " + getClass().getSimpleName(); + + public Task(TaskRunner taskHandler, T model) { + this.taskHandler = taskHandler; + this.model = model; + } + + protected void run() { + interceptBeforeRun(); + try { + doRun(); + } catch (Throwable t) { + appendExceptionToErrorMessage(t); + failed(); + } + } + + + abstract protected void doRun(); + + protected void applyErrorState() { + } + + private void interceptBeforeRun() { + if (getClass() == taskToInterceptBeforeRun) + throw new InterceptTaskException("Task intercepted before run executed: task = " + getClass().getSimpleName()); + } + + private void interceptBeforeComplete() { + if (getClass() == taskToInterceptAfterRun) + throw new InterceptTaskException("Task intercepted before complete called: task = " + getClass().getSimpleName()); + } + + protected void appendToErrorMessage(String message) { + errorMessage += "\n" + message; + } + + protected void appendExceptionToErrorMessage(Throwable t) { + errorMessage += "\n Exception message: " + t.getMessage(); + } + + protected void complete() { + interceptBeforeComplete(); + taskHandler.handleComplete(); + } + + protected void failed(String message) { + appendToErrorMessage(message); + failed(); + } + + protected void failed(Throwable t) { + appendExceptionToErrorMessage(t); + failed(); + } + + protected void failed() { + applyErrorState(); + taskHandler.handleErrorMessage(errorMessage); + } + +} diff --git a/gui/src/main/java/io/bitsquare/util/tasks/TaskRunner.java b/gui/src/main/java/io/bitsquare/util/taskrunner/TaskRunner.java similarity index 63% rename from gui/src/main/java/io/bitsquare/util/tasks/TaskRunner.java rename to gui/src/main/java/io/bitsquare/util/taskrunner/TaskRunner.java index b7b691dd93..1118acf58b 100644 --- a/gui/src/main/java/io/bitsquare/util/tasks/TaskRunner.java +++ b/gui/src/main/java/io/bitsquare/util/taskrunner/TaskRunner.java @@ -15,17 +15,15 @@ * along with Bitsquare. If not, see . */ -package io.bitsquare.util.tasks; +package io.bitsquare.util.taskrunner; -import io.bitsquare.util.handlers.FaultHandler; +import io.bitsquare.util.handlers.ErrorMessageHandler; import io.bitsquare.util.handlers.ResultHandler; import java.util.Arrays; import java.util.Queue; import java.util.concurrent.LinkedBlockingQueue; -import org.jetbrains.annotations.NotNull; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,37 +33,36 @@ public class TaskRunner { private final Queue tasks = new LinkedBlockingQueue<>(); protected final T sharedModel; private final ResultHandler resultHandler; - private final FaultHandler faultHandler; - + private final ErrorMessageHandler errorMessageHandler; private boolean failed = false; - - private boolean isCanceled; + private Class currentTask; - public TaskRunner(T sharedModel, ResultHandler resultHandler, FaultHandler faultHandler) { + public TaskRunner(T sharedModel, ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) { this.sharedModel = sharedModel; this.resultHandler = resultHandler; - this.faultHandler = faultHandler; + this.errorMessageHandler = errorMessageHandler; + } + + public void addTasks(Class... items) { + tasks.addAll(Arrays.asList(items)); } public void run() { next(); } - protected void next() { if (!failed && !isCanceled) { if (tasks.size() > 0) { try { currentTask = tasks.poll(); - interceptBeforeRun(currentTask); log.trace("Run task: " + currentTask.getSimpleName()); currentTask.getDeclaredConstructor(TaskRunner.class, sharedModel.getClass()).newInstance(this, sharedModel).run(); - interceptAfterRun(currentTask); - } catch (Throwable t) { - t.printStackTrace(); - faultHandler.handleFault(t.getMessage(), t); + } catch (Throwable throwable) { + throwable.printStackTrace(); + handleErrorMessage("Error at taskRunner: " + throwable.getMessage()); } } else { @@ -74,44 +71,19 @@ public class TaskRunner { } } - protected void interceptBeforeRun(Class task) { - if (task == TaskInterception.taskToInterceptBeforeRun) - throw new RuntimeException("Task intercepted before run executed: task = " + task.getSimpleName()); - } - - protected void interceptAfterRun(Class task) { - if (task == TaskInterception.taskToInterceptAfterRun) - throw new RuntimeException("Task intercepted after run executed: task = " + task.getSimpleName()); - } - - public void cancel() { isCanceled = true; } - public void addTask(Class task) { - tasks.add(task); - } - - public void addTasks(Class... items) { - tasks.addAll(Arrays.asList(items)); - } - - public void complete() { + void handleComplete() { log.trace("Task completed: " + currentTask.getSimpleName()); next(); } - public void handleFault(String message) { - handleFault(message, new Exception(message)); - } - - public void handleFault(String message, @NotNull Throwable throwable) { + void handleErrorMessage(String errorMessage) { log.error("Task failed: " + currentTask.getSimpleName()); - log.debug(throwable.getMessage()); + log.error("errorMessage: " + errorMessage); failed = true; - faultHandler.handleFault(message, throwable); + errorMessageHandler.handleErrorMessage(errorMessage); } - - } diff --git a/gui/src/main/java/io/bitsquare/util/tasks/Task.java b/gui/src/main/java/io/bitsquare/util/tasks/Task.java deleted file mode 100644 index 950d5bf099..0000000000 --- a/gui/src/main/java/io/bitsquare/util/tasks/Task.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * This file is part of Bitsquare. - * - * Bitsquare is free software: you can redistribute it and/or modify it - * under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at - * your option) any later version. - * - * Bitsquare is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public - * License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Bitsquare. If not, see . - */ - -package io.bitsquare.util.tasks; - -import org.jetbrains.annotations.NotNull; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class Task { - private static final Logger log = LoggerFactory.getLogger(Task.class); - - private final TaskRunner taskHandler; - protected final T model; - - public Task(TaskRunner taskHandler, T model) { - this.taskHandler = taskHandler; - this.model = model; - } - - protected void run() { - } - - protected void complete() { - taskHandler.complete(); - } - - protected void failed(String message) { - taskHandler.handleFault(message); - } - - protected void failed(String message, @NotNull Throwable throwable) { - log.error(message); - log.error(throwable.getMessage()); - taskHandler.handleFault(message, throwable); - } - - protected void failed(@NotNull Throwable throwable) { - taskHandler.handleFault(throwable.getMessage(), throwable); - } -}