From 40807b07f84f52e172069c33b3ff2bd2fcd0a730 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Wed, 5 Nov 2014 11:45:59 +0100 Subject: [PATCH 01/18] Introduce OfferRepository interface and TomP2P impl This change begins the process of breaking up the monolithic MessageFacade abstraction into smaller, cohesive Repositories (in the Domain-Driven Design sense of the word) that abstract callers away from networking details. It also begins the process of restructuring the msg.listeners package, such that individual *Listener interfaces are co-located with their respective Repositories --- .../io/bitsquare/app/BitsquareModule.java | 6 + .../gui/main/trade/offerbook/OfferBook.java | 31 +- .../java/io/bitsquare/msg/MessageFacade.java | 19 -- .../io/bitsquare/msg/TomP2PMessageFacade.java | 258 --------------- .../OfferModule.java} | 20 +- .../io/bitsquare/offer/OfferRepository.java | 49 +++ .../offer/TomP2POfferRepository.java | 294 ++++++++++++++++++ .../java/io/bitsquare/trade/TradeManager.java | 10 +- .../createoffer/CreateOfferCoordinator.java | 14 +- .../createoffer/tasks/PublishOfferToDHT.java | 6 +- 10 files changed, 395 insertions(+), 312 deletions(-) rename src/main/java/io/bitsquare/{msg/listeners/OfferBookListener.java => offer/OfferModule.java} (64%) create mode 100644 src/main/java/io/bitsquare/offer/OfferRepository.java create mode 100644 src/main/java/io/bitsquare/offer/TomP2POfferRepository.java diff --git a/src/main/java/io/bitsquare/app/BitsquareModule.java b/src/main/java/io/bitsquare/app/BitsquareModule.java index 9395174c84..da11e8aa60 100644 --- a/src/main/java/io/bitsquare/app/BitsquareModule.java +++ b/src/main/java/io/bitsquare/app/BitsquareModule.java @@ -23,6 +23,7 @@ import io.bitsquare.crypto.CryptoModule; import io.bitsquare.gui.GuiModule; import io.bitsquare.msg.DefaultMessageModule; import io.bitsquare.msg.MessageModule; +import io.bitsquare.offer.OfferModule; import io.bitsquare.persistence.Persistence; import io.bitsquare.settings.Settings; import io.bitsquare.trade.TradeModule; @@ -70,6 +71,7 @@ public class BitsquareModule extends AbstractBitsquareModule { install(bitcoinModule()); install(cryptoModule()); install(tradeModule()); + install(offerModule()); install(guiModule()); bindConstant().annotatedWith(Names.named("appName")).to(appName); @@ -95,6 +97,10 @@ public class BitsquareModule extends AbstractBitsquareModule { return new TradeModule(properties); } + protected OfferModule offerModule() { + return new OfferModule(properties); + } + protected GuiModule guiModule() { return new GuiModule(properties, primaryStage); } diff --git a/src/main/java/io/bitsquare/gui/main/trade/offerbook/OfferBook.java b/src/main/java/io/bitsquare/gui/main/trade/offerbook/OfferBook.java index e962e6b451..f9080354ff 100644 --- a/src/main/java/io/bitsquare/gui/main/trade/offerbook/OfferBook.java +++ b/src/main/java/io/bitsquare/gui/main/trade/offerbook/OfferBook.java @@ -20,9 +20,8 @@ package io.bitsquare.gui.main.trade.offerbook; import io.bitsquare.bank.BankAccount; import io.bitsquare.locale.Country; import io.bitsquare.locale.CurrencyUtil; -import io.bitsquare.msg.MessageFacade; -import io.bitsquare.msg.listeners.OfferBookListener; import io.bitsquare.offer.Offer; +import io.bitsquare.offer.OfferRepository; import io.bitsquare.user.User; import io.bitsquare.util.Utilities; @@ -44,18 +43,18 @@ import static com.google.common.base.Preconditions.checkArgument; * Holds and manages the unsorted and unfiltered offerbook list of both buy and sell offers. * It is handled as singleton by Guice and is used by 2 instances of OfferBookModel (one for Buy one for Sell). * As it is used only by the Buy and Sell UIs we treat it as local UI model. - * It also use OfferBookListener as the lists items class and we don't want to get any dependency out of the package - * for that. + * It also use OfferRepository.Listener as the lists items class and we don't want to get any dependency out of the + * package for that. */ public class OfferBook { private static final Logger log = LoggerFactory.getLogger(OfferBook.class); - private final MessageFacade messageFacade; + private final OfferRepository offerRepository; private final User user; private final ObservableList offerBookListItems = FXCollections.observableArrayList(); - private final OfferBookListener offerBookListener; + private final OfferRepository.Listener offerRepositoryListener; private final ChangeListener bankAccountChangeListener; private final ChangeListener invalidationListener; private String fiatCode; @@ -69,14 +68,14 @@ public class OfferBook { /////////////////////////////////////////////////////////////////////////////////////////// @Inject - OfferBook(MessageFacade messageFacade, User user) { - this.messageFacade = messageFacade; + OfferBook(OfferRepository offerRepository, User user) { + this.offerRepository = offerRepository; this.user = user; bankAccountChangeListener = (observableValue, oldValue, newValue) -> setBankAccount(newValue); invalidationListener = (ov, oldValue, newValue) -> requestOffers(); - offerBookListener = new OfferBookListener() { + offerRepositoryListener = new OfferRepository.Listener() { @Override public void onOfferAdded(Offer offer) { addOfferToOfferBookListItems(offer); @@ -143,15 +142,15 @@ public class OfferBook { private void addListeners() { log.debug("addListeners "); user.currentBankAccountProperty().addListener(bankAccountChangeListener); - messageFacade.addOfferBookListener(offerBookListener); - messageFacade.invalidationTimestampProperty().addListener(invalidationListener); + offerRepository.addListener(offerRepositoryListener); + offerRepository.invalidationTimestampProperty().addListener(invalidationListener); } private void removeListeners() { log.debug("removeListeners "); user.currentBankAccountProperty().removeListener(bankAccountChangeListener); - messageFacade.removeOfferBookListener(offerBookListener); - messageFacade.invalidationTimestampProperty().removeListener(invalidationListener); + offerRepository.removeListener(offerRepositoryListener); + offerRepository.invalidationTimestampProperty().removeListener(invalidationListener); } private void addOfferToOfferBookListItems(Offer offer) { @@ -161,7 +160,7 @@ public class OfferBook { } private void requestOffers() { - messageFacade.getOffers(fiatCode); + offerRepository.getOffers(fiatCode); } @@ -174,11 +173,11 @@ public class OfferBook { addListeners(); setBankAccount(user.getCurrentBankAccount()); pollingTimer = Utilities.setInterval(1000, (animationTimer) -> { - messageFacade.requestInvalidationTimeStampFromDHT(fiatCode); + offerRepository.requestInvalidationTimeStampFromDHT(fiatCode); return null; }); - messageFacade.getOffers(fiatCode); + offerRepository.getOffers(fiatCode); } private void stopPolling() { diff --git a/src/main/java/io/bitsquare/msg/MessageFacade.java b/src/main/java/io/bitsquare/msg/MessageFacade.java index f6d6de4c7a..1dd9f49868 100644 --- a/src/main/java/io/bitsquare/msg/MessageFacade.java +++ b/src/main/java/io/bitsquare/msg/MessageFacade.java @@ -18,22 +18,17 @@ package io.bitsquare.msg; import io.bitsquare.arbitrator.Arbitrator; -import io.bitsquare.msg.listeners.AddOfferListener; import io.bitsquare.msg.listeners.ArbitratorListener; import io.bitsquare.msg.listeners.BootstrapListener; import io.bitsquare.msg.listeners.GetPeerAddressListener; import io.bitsquare.msg.listeners.IncomingMessageListener; -import io.bitsquare.msg.listeners.OfferBookListener; import io.bitsquare.msg.listeners.OutgoingMessageListener; import io.bitsquare.network.Peer; -import io.bitsquare.offer.Offer; import java.security.PublicKey; import java.util.Locale; -import javafx.beans.property.LongProperty; - public interface MessageFacade extends MessageBroker { void sendMessage(Peer peer, Message message, OutgoingMessageListener listener); @@ -46,25 +41,11 @@ public interface MessageFacade extends MessageBroker { void removeIncomingMessageListener(IncomingMessageListener listener); - void addOffer(Offer offer, AddOfferListener addOfferListener); - void addArbitratorListener(ArbitratorListener listener); void getArbitrators(Locale defaultLanguageLocale); - LongProperty invalidationTimestampProperty(); - - void addOfferBookListener(OfferBookListener offerBookListener); - - void requestInvalidationTimeStampFromDHT(String fiatCode); - - void getOffers(String fiatCode); - - void removeOffer(Offer offer); - void init(int clientPort, BootstrapListener bootstrapListener); void getPeerAddress(PublicKey messagePublicKey, GetPeerAddressListener getPeerAddressListener); - - void removeOfferBookListener(OfferBookListener offerBookListener); } diff --git a/src/main/java/io/bitsquare/msg/TomP2PMessageFacade.java b/src/main/java/io/bitsquare/msg/TomP2PMessageFacade.java index b974144bf6..9e48c886c7 100644 --- a/src/main/java/io/bitsquare/msg/TomP2PMessageFacade.java +++ b/src/main/java/io/bitsquare/msg/TomP2PMessageFacade.java @@ -18,16 +18,13 @@ package io.bitsquare.msg; import io.bitsquare.arbitrator.Arbitrator; -import io.bitsquare.msg.listeners.AddOfferListener; import io.bitsquare.msg.listeners.ArbitratorListener; import io.bitsquare.msg.listeners.BootstrapListener; import io.bitsquare.msg.listeners.GetPeerAddressListener; import io.bitsquare.msg.listeners.IncomingMessageListener; -import io.bitsquare.msg.listeners.OfferBookListener; import io.bitsquare.msg.listeners.OutgoingMessageListener; import io.bitsquare.network.Peer; import io.bitsquare.network.tomp2p.TomP2PPeer; -import io.bitsquare.offer.Offer; import io.bitsquare.user.User; import com.google.common.util.concurrent.FutureCallback; @@ -39,15 +36,12 @@ import java.security.PublicKey; import java.util.ArrayList; import java.util.List; import java.util.Locale; -import java.util.Map; import javax.annotation.Nullable; import javax.inject.Inject; import javafx.application.Platform; -import javafx.beans.property.LongProperty; -import javafx.beans.property.SimpleLongProperty; import net.tomp2p.dht.FutureGet; import net.tomp2p.dht.FuturePut; @@ -58,7 +52,6 @@ import net.tomp2p.futures.BaseFutureAdapter; import net.tomp2p.futures.BaseFutureListener; import net.tomp2p.futures.FutureDirect; import net.tomp2p.peers.Number160; -import net.tomp2p.peers.Number640; import net.tomp2p.storage.Data; import net.tomp2p.utils.Utils; @@ -82,10 +75,8 @@ class TomP2PMessageFacade implements MessageFacade { private final P2PNode p2pNode; private final User user; - private final List offerBookListeners = new ArrayList<>(); private final List arbitratorListeners = new ArrayList<>(); private final List incomingMessageListeners = new ArrayList<>(); - private final LongProperty invalidationTimestamp = new SimpleLongProperty(0); /////////////////////////////////////////////////////////////////////////////////////////// @@ -152,166 +143,6 @@ class TomP2PMessageFacade implements MessageFacade { } - /////////////////////////////////////////////////////////////////////////////////////////// - // Offer - /////////////////////////////////////////////////////////////////////////////////////////// - - public void addOffer(Offer offer, AddOfferListener addOfferListener) { - Number160 locationKey = Number160.createHash(offer.getCurrency().getCurrencyCode()); - try { - final Data offerData = new Data(offer); - - // the offer is default 30 days valid - int defaultOfferTTL = 30 * 24 * 60 * 60; - offerData.ttlSeconds(defaultOfferTTL); - log.trace("Add offer to DHT requested. Added data: [locationKey: " + locationKey + - ", hash: " + offerData.hash().toString() + "]"); - FuturePut futurePut = p2pNode.addProtectedData(locationKey, offerData); - futurePut.addListener(new BaseFutureListener() { - @Override - public void operationComplete(BaseFuture future) throws Exception { - // deactivate it for the moment until the port forwarding bug is fixed - // if (future.isSuccess()) { - Platform.runLater(() -> { - addOfferListener.onComplete(); - offerBookListeners.stream().forEach(listener -> { - try { - Object offerDataObject = offerData.object(); - if (offerDataObject instanceof Offer) { - log.error("Added offer to DHT with ID: " + ((Offer) offerDataObject).getId()); - listener.onOfferAdded((Offer) offerDataObject); - } - } catch (ClassNotFoundException | IOException e) { - e.printStackTrace(); - log.error("Add offer to DHT failed: " + e.getMessage()); - } - }); - - // TODO will be removed when we don't use polling anymore - writeInvalidationTimestampToDHT(locationKey); - log.trace("Add offer to DHT was successful. Added data: [locationKey: " + locationKey + - ", value: " + offerData + "]"); - }); - /* } - else { - Platform.runLater(() -> { - addOfferListener.onFailed("Add offer to DHT failed.", - new Exception("Add offer to DHT failed. Reason: " + future.failedReason())); - log.error("Add offer to DHT failed. Reason: " + future.failedReason()); - }); - }*/ - } - - @Override - public void exceptionCaught(Throwable t) throws Exception { - Platform.runLater(() -> { - addOfferListener.onFailed("Add offer to DHT failed with an exception.", t); - log.error("Add offer to DHT failed with an exception: " + t.getMessage()); - }); - } - }); - } catch (IOException e) { - Platform.runLater(() -> { - addOfferListener.onFailed("Add offer to DHT failed with an exception.", e); - log.error("Add offer to DHT failed with an exception: " + e.getMessage()); - }); - } - } - - //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) { - Number160 locationKey = Number160.createHash(offer.getCurrency().getCurrencyCode()); - try { - final Data offerData = new Data(offer); - log.trace("Remove offer from DHT requested. Removed data: [locationKey: " + locationKey + - ", hash: " + offerData.hash().toString() + "]"); - FutureRemove futureRemove = p2pNode.removeFromDataMap(locationKey, offerData); - futureRemove.addListener(new BaseFutureListener() { - @Override - public void operationComplete(BaseFuture future) throws Exception { - // deactivate it for the moment until the port forwarding bug is fixed - // if (future.isSuccess()) { - Platform.runLater(() -> { - offerBookListeners.stream().forEach(offerBookListener -> { - try { - Object offerDataObject = offerData.object(); - if (offerDataObject instanceof Offer) { - log.trace("Remove offer from DHT was successful. Removed data: [key: " + - locationKey + ", " + - "offer: " + (Offer) offerDataObject + "]"); - offerBookListener.onOfferRemoved((Offer) offerDataObject); - } - } catch (ClassNotFoundException | IOException e) { - e.printStackTrace(); - log.error("Remove offer from DHT failed. Error: " + e.getMessage()); - } - }); - writeInvalidationTimestampToDHT(locationKey); - }); - /* } - else { - log.error("Remove offer from DHT failed. Cause: future.isSuccess() = false, locationKey: " + - locationKey + ", Reason: " + future.failedReason()); - }*/ - } - - @Override - public void exceptionCaught(Throwable t) throws Exception { - log.error("Remove offer from DHT failed. Error: " + t.getMessage()); - } - }); - } catch (IOException e) { - e.printStackTrace(); - log.error("Remove offer from DHT failed. Error: " + e.getMessage()); - } - } - - public void getOffers(String currencyCode) { - Number160 locationKey = Number160.createHash(currencyCode); - log.trace("Get offers from DHT requested for locationKey: " + locationKey); - FutureGet futureGet = p2pNode.getDataMap(locationKey); - futureGet.addListener(new BaseFutureAdapter() { - @Override - public void operationComplete(BaseFuture baseFuture) throws Exception { - if (baseFuture.isSuccess()) { - final Map dataMap = futureGet.dataMap(); - final List offers = new ArrayList<>(); - if (dataMap != null) { - for (Data offerData : dataMap.values()) { - try { - Object offerDataObject = offerData.object(); - if (offerDataObject instanceof Offer) { - offers.add((Offer) offerDataObject); - } - } catch (ClassNotFoundException | IOException e) { - e.printStackTrace(); - } - } - - Platform.runLater(() -> offerBookListeners.stream().forEach(listener -> - listener.onOffersReceived(offers))); - } - - log.trace("Get offers from DHT was successful. Stored data: [key: " + locationKey - + ", values: " + futureGet.dataMap() + "]"); - } - else { - final Map dataMap = futureGet.dataMap(); - if (dataMap == null || dataMap.size() == 0) { - log.trace("Get offers from DHT delivered empty dataMap."); - Platform.runLater(() -> offerBookListeners.stream().forEach(listener -> - listener.onOffersReceived(new ArrayList<>()))); - } - else { - log.error("Get offers from DHT was not successful with reason:" + baseFuture.failedReason()); - } - } - } - }); - } - - /////////////////////////////////////////////////////////////////////////////////////////// // Trade process /////////////////////////////////////////////////////////////////////////////////////////// @@ -452,14 +283,6 @@ class TomP2PMessageFacade implements MessageFacade { // Event Listeners /////////////////////////////////////////////////////////////////////////////////////////// - public void addOfferBookListener(OfferBookListener listener) { - offerBookListeners.add(listener); - } - - public void removeOfferBookListener(OfferBookListener listener) { - offerBookListeners.remove(listener); - } - public void addArbitratorListener(ArbitratorListener listener) { arbitratorListeners.add(listener); } @@ -477,87 +300,6 @@ class TomP2PMessageFacade implements MessageFacade { } - /* - * We store the timestamp of any change of the offer list (add, remove offer) and we poll in intervals for changes. - * If we detect a change we request the offer list from the DHT. - * Polling should be replaced by a push based solution later. - */ - - /////////////////////////////////////////////////////////////////////////////////////////// - // Polling - /////////////////////////////////////////////////////////////////////////////////////////// - - private void writeInvalidationTimestampToDHT(Number160 locationKey) { - invalidationTimestamp.set(System.currentTimeMillis()); - try { - FuturePut putFuture = p2pNode.putData(getInvalidatedLocationKey(locationKey), - new Data(invalidationTimestamp.get())); - putFuture.addListener(new BaseFutureListener() { - @Override - public void operationComplete(BaseFuture future) throws Exception { - if (putFuture.isSuccess()) - log.trace("Update invalidationTimestamp to DHT was successful. TimeStamp=" + - invalidationTimestamp.get()); - else - log.error("Update invalidationTimestamp to DHT failed with reason:" + putFuture.failedReason()); - } - - @Override - public void exceptionCaught(Throwable t) throws Exception { - log.error("Update invalidationTimestamp to DHT failed with exception:" + t.getMessage()); - } - }); - } catch (IOException e) { - log.error("Update invalidationTimestamp to DHT failed with exception:" + e.getMessage()); - } - } - - public LongProperty invalidationTimestampProperty() { - return invalidationTimestamp; - } - - public void requestInvalidationTimeStampFromDHT(String currencyCode) { - Number160 locationKey = Number160.createHash(currencyCode); - FutureGet getFuture = p2pNode.getData(getInvalidatedLocationKey(locationKey)); - getFuture.addListener(new BaseFutureListener() { - @Override - public void operationComplete(BaseFuture future) throws Exception { - if (getFuture.isSuccess()) { - Data data = getFuture.data(); - if (data != null && data.object() instanceof Long) { - final Object object = data.object(); - Platform.runLater(() -> { - Long timeStamp = (Long) object; - //log.trace("Get invalidationTimestamp from DHT was successful. TimeStamp=" + timeStamp); - invalidationTimestamp.set(timeStamp); - }); - } - else { - //log.error("Get invalidationTimestamp from DHT failed. Data = " + data); - } - } - else if (getFuture.data() == null) { - // OK as nothing is set at the moment - // log.trace("Get invalidationTimestamp from DHT returns null. That is ok for the startup."); - } - else { - log.error("Get invalidationTimestamp from DHT failed with reason:" + getFuture.failedReason()); - } - } - - @Override - public void exceptionCaught(Throwable t) throws Exception { - log.error("Get invalidationTimestamp from DHT failed with exception:" + t.getMessage()); - t.printStackTrace(); - } - }); - } - - private Number160 getInvalidatedLocationKey(Number160 locationKey) { - return Number160.createHash(locationKey + "invalidated"); - } - - /////////////////////////////////////////////////////////////////////////////////////////// // Incoming message handler /////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/main/java/io/bitsquare/msg/listeners/OfferBookListener.java b/src/main/java/io/bitsquare/offer/OfferModule.java similarity index 64% rename from src/main/java/io/bitsquare/msg/listeners/OfferBookListener.java rename to src/main/java/io/bitsquare/offer/OfferModule.java index 8a6edae6dc..dc7b826183 100644 --- a/src/main/java/io/bitsquare/msg/listeners/OfferBookListener.java +++ b/src/main/java/io/bitsquare/offer/OfferModule.java @@ -15,16 +15,20 @@ * along with Bitsquare. If not, see . */ -package io.bitsquare.msg.listeners; +package io.bitsquare.offer; -import io.bitsquare.offer.Offer; +import io.bitsquare.AbstractBitsquareModule; -import java.util.List; +import java.util.Properties; -public interface OfferBookListener { - void onOfferAdded(Offer offer); +public class OfferModule extends AbstractBitsquareModule { - void onOffersReceived(List offers); + public OfferModule(Properties properties) { + super(properties); + } - void onOfferRemoved(Offer offer); -} \ No newline at end of file + @Override + protected void configure() { + bind(OfferRepository.class).to(TomP2POfferRepository.class).asEagerSingleton(); + } +} diff --git a/src/main/java/io/bitsquare/offer/OfferRepository.java b/src/main/java/io/bitsquare/offer/OfferRepository.java new file mode 100644 index 0000000000..a7f42c987b --- /dev/null +++ b/src/main/java/io/bitsquare/offer/OfferRepository.java @@ -0,0 +1,49 @@ +/* + * 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.offer; + +import io.bitsquare.msg.listeners.AddOfferListener; + +import java.util.List; + +import javafx.beans.property.LongProperty; + +public interface OfferRepository { + + void getOffers(String fiatCode); + + void addOffer(Offer offer, AddOfferListener addOfferListener); + + void removeOffer(Offer offer); + + void addListener(Listener listener); + + void removeListener(Listener listener); + + LongProperty invalidationTimestampProperty(); + + void requestInvalidationTimeStampFromDHT(String fiatCode); + + interface Listener { + void onOfferAdded(Offer offer); + + void onOffersReceived(List offers); + + void onOfferRemoved(Offer offer); + } +} diff --git a/src/main/java/io/bitsquare/offer/TomP2POfferRepository.java b/src/main/java/io/bitsquare/offer/TomP2POfferRepository.java new file mode 100644 index 0000000000..8bb753068c --- /dev/null +++ b/src/main/java/io/bitsquare/offer/TomP2POfferRepository.java @@ -0,0 +1,294 @@ +/* + * 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.offer; + +import io.bitsquare.msg.P2PNode; +import io.bitsquare.msg.listeners.AddOfferListener; + +import java.io.IOException; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import javax.inject.Inject; + +import javafx.application.Platform; +import javafx.beans.property.LongProperty; +import javafx.beans.property.SimpleLongProperty; + +import net.tomp2p.dht.FutureGet; +import net.tomp2p.dht.FuturePut; +import net.tomp2p.dht.FutureRemove; +import net.tomp2p.futures.BaseFuture; +import net.tomp2p.futures.BaseFutureAdapter; +import net.tomp2p.futures.BaseFutureListener; +import net.tomp2p.peers.Number160; +import net.tomp2p.peers.Number640; +import net.tomp2p.storage.Data; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +class TomP2POfferRepository implements OfferRepository { + + private static final Logger log = LoggerFactory.getLogger(TomP2POfferRepository.class); + + private final List offerRepositoryListeners = new ArrayList<>(); + private final LongProperty invalidationTimestamp = new SimpleLongProperty(0); + + private final P2PNode p2pNode; + + @Inject + public TomP2POfferRepository(P2PNode p2pNode) { + this.p2pNode = p2pNode; + } + + @Override + public void addOffer(Offer offer, AddOfferListener addOfferListener) { + Number160 locationKey = Number160.createHash(offer.getCurrency().getCurrencyCode()); + try { + final Data offerData = new Data(offer); + + // the offer is default 30 days valid + int defaultOfferTTL = 30 * 24 * 60 * 60; + offerData.ttlSeconds(defaultOfferTTL); + log.trace("Add offer to DHT requested. Added data: [locationKey: " + locationKey + + ", hash: " + offerData.hash().toString() + "]"); + FuturePut futurePut = p2pNode.addProtectedData(locationKey, offerData); + futurePut.addListener(new BaseFutureListener() { + @Override + public void operationComplete(BaseFuture future) throws Exception { + // deactivate it for the moment until the port forwarding bug is fixed + // if (future.isSuccess()) { + Platform.runLater(() -> { + addOfferListener.onComplete(); + offerRepositoryListeners.stream().forEach(listener -> { + try { + Object offerDataObject = offerData.object(); + if (offerDataObject instanceof Offer) { + log.error("Added offer to DHT with ID: " + ((Offer) offerDataObject).getId()); + listener.onOfferAdded((Offer) offerDataObject); + } + } catch (ClassNotFoundException | IOException e) { + e.printStackTrace(); + log.error("Add offer to DHT failed: " + e.getMessage()); + } + }); + + writeInvalidationTimestampToDHT(locationKey); + log.trace("Add offer to DHT was successful. Added data: [locationKey: " + locationKey + + ", value: " + offerData + "]"); + }); + } + + @Override + public void exceptionCaught(Throwable t) throws Exception { + Platform.runLater(() -> { + addOfferListener.onFailed("Add offer to DHT failed with an exception.", t); + log.error("Add offer to DHT failed with an exception: " + t.getMessage()); + }); + } + }); + } catch (IOException e) { + Platform.runLater(() -> { + addOfferListener.onFailed("Add offer to DHT failed with an exception.", e); + log.error("Add offer to DHT failed with an exception: " + e.getMessage()); + }); + } + } + + //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) { + Number160 locationKey = Number160.createHash(offer.getCurrency().getCurrencyCode()); + try { + final Data offerData = new Data(offer); + log.trace("Remove offer from DHT requested. Removed data: [locationKey: " + locationKey + + ", hash: " + offerData.hash().toString() + "]"); + FutureRemove futureRemove = p2pNode.removeFromDataMap(locationKey, offerData); + futureRemove.addListener(new BaseFutureListener() { + @Override + public void operationComplete(BaseFuture future) throws Exception { + // deactivate it for the moment until the port forwarding bug is fixed + // if (future.isSuccess()) { + Platform.runLater(() -> { + 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 + "]"); + listener.onOfferRemoved((Offer) offerDataObject); + } + } catch (ClassNotFoundException | IOException e) { + e.printStackTrace(); + log.error("Remove offer from DHT failed. Error: " + e.getMessage()); + } + }); + writeInvalidationTimestampToDHT(locationKey); + }); + } + + @Override + public void exceptionCaught(Throwable t) throws Exception { + log.error("Remove offer from DHT failed. Error: " + t.getMessage()); + } + }); + } catch (IOException e) { + e.printStackTrace(); + log.error("Remove offer from DHT failed. Error: " + e.getMessage()); + } + } + + public void getOffers(String currencyCode) { + Number160 locationKey = Number160.createHash(currencyCode); + log.trace("Get offers from DHT requested for locationKey: " + locationKey); + FutureGet futureGet = p2pNode.getDataMap(locationKey); + futureGet.addListener(new BaseFutureAdapter() { + @Override + public void operationComplete(BaseFuture baseFuture) throws Exception { + if (baseFuture.isSuccess()) { + final Map dataMap = futureGet.dataMap(); + final List offers = new ArrayList<>(); + if (dataMap != null) { + for (Data offerData : dataMap.values()) { + try { + Object offerDataObject = offerData.object(); + if (offerDataObject instanceof Offer) { + offers.add((Offer) offerDataObject); + } + } catch (ClassNotFoundException | IOException e) { + e.printStackTrace(); + } + } + + Platform.runLater(() -> offerRepositoryListeners.stream().forEach(listener -> + listener.onOffersReceived(offers))); + } + + log.trace("Get offers from DHT was successful. Stored data: [key: " + locationKey + + ", values: " + futureGet.dataMap() + "]"); + } + else { + final Map dataMap = futureGet.dataMap(); + if (dataMap == null || dataMap.size() == 0) { + log.trace("Get offers from DHT delivered empty dataMap."); + Platform.runLater(() -> offerRepositoryListeners.stream().forEach(listener -> + listener.onOffersReceived(new ArrayList<>()))); + } + else { + log.error("Get offers from DHT was not successful with reason:" + baseFuture.failedReason()); + } + } + } + }); + } + + @Override + public void addListener(Listener listener) { + offerRepositoryListeners.add(listener); + } + + @Override + public void removeListener(Listener listener) { + offerRepositoryListeners.remove(listener); + } + + /* + * We store the timestamp of any change of the offer list (add, remove offer) and we poll + * in intervals for changes. If we detect a change we request the offer list from the DHT. + * Polling should be replaced by a push based solution later. + */ + + /////////////////////////////////////////////////////////////////////////////////////////// + // Polling + /////////////////////////////////////////////////////////////////////////////////////////// + + private void writeInvalidationTimestampToDHT(Number160 locationKey) { + invalidationTimestamp.set(System.currentTimeMillis()); + try { + FuturePut putFuture = p2pNode.putData(getInvalidatedLocationKey(locationKey), + new Data(invalidationTimestamp.get())); + putFuture.addListener(new BaseFutureListener() { + @Override + public void operationComplete(BaseFuture future) throws Exception { + if (putFuture.isSuccess()) + log.trace("Update invalidationTimestamp to DHT was successful. TimeStamp=" + + invalidationTimestamp.get()); + else + log.error("Update invalidationTimestamp to DHT failed with reason:" + putFuture.failedReason()); + } + + @Override + public void exceptionCaught(Throwable t) throws Exception { + log.error("Update invalidationTimestamp to DHT failed with exception:" + t.getMessage()); + } + }); + } catch (IOException e) { + log.error("Update invalidationTimestamp to DHT failed with exception:" + e.getMessage()); + } + } + + public LongProperty invalidationTimestampProperty() { + return invalidationTimestamp; + } + + public void requestInvalidationTimeStampFromDHT(String currencyCode) { + Number160 locationKey = Number160.createHash(currencyCode); + FutureGet getFuture = p2pNode.getData(getInvalidatedLocationKey(locationKey)); + getFuture.addListener(new BaseFutureListener() { + @Override + public void operationComplete(BaseFuture future) throws Exception { + if (getFuture.isSuccess()) { + Data data = getFuture.data(); + if (data != null && data.object() instanceof Long) { + final Object object = data.object(); + Platform.runLater(() -> { + Long timeStamp = (Long) object; + //log.trace("Get invalidationTimestamp from DHT was successful. TimeStamp=" + timeStamp); + invalidationTimestamp.set(timeStamp); + }); + } + else { + //log.error("Get invalidationTimestamp from DHT failed. Data = " + data); + } + } + else if (getFuture.data() == null) { + // OK as nothing is set at the moment + // log.trace("Get invalidationTimestamp from DHT returns null. That is ok for the startup."); + } + else { + log.error("Get invalidationTimestamp from DHT failed with reason:" + getFuture.failedReason()); + } + } + + @Override + public void exceptionCaught(Throwable t) throws Exception { + log.error("Get invalidationTimestamp from DHT failed with exception:" + t.getMessage()); + t.printStackTrace(); + } + }); + } + + private Number160 getInvalidatedLocationKey(Number160 locationKey) { + return Number160.createHash(locationKey + "invalidated"); + } + +} diff --git a/src/main/java/io/bitsquare/trade/TradeManager.java b/src/main/java/io/bitsquare/trade/TradeManager.java index 7956036edb..da3704d330 100644 --- a/src/main/java/io/bitsquare/trade/TradeManager.java +++ b/src/main/java/io/bitsquare/trade/TradeManager.java @@ -25,6 +25,7 @@ import io.bitsquare.msg.MessageFacade; import io.bitsquare.network.Peer; import io.bitsquare.offer.Direction; import io.bitsquare.offer.Offer; +import io.bitsquare.offer.OfferRepository; import io.bitsquare.persistence.Persistence; import io.bitsquare.settings.Settings; import io.bitsquare.trade.handlers.ErrorMessageHandler; @@ -78,6 +79,7 @@ public class TradeManager { private final BlockChainFacade blockChainFacade; private final WalletFacade walletFacade; private final CryptoFacade cryptoFacade; + private final OfferRepository offerRepository; //TODO store TakerAsSellerProtocol in trade private final Map takerAsSellerProtocolMap = new HashMap<>(); @@ -99,7 +101,8 @@ public class TradeManager { @Inject public TradeManager(User user, Settings settings, Persistence persistence, MessageFacade messageFacade, - BlockChainFacade blockChainFacade, WalletFacade walletFacade, CryptoFacade cryptoFacade) { + BlockChainFacade blockChainFacade, WalletFacade walletFacade, CryptoFacade cryptoFacade, + OfferRepository offerRepository) { this.user = user; this.settings = settings; this.persistence = persistence; @@ -107,6 +110,7 @@ public class TradeManager { this.blockChainFacade = blockChainFacade; this.walletFacade = walletFacade; this.cryptoFacade = cryptoFacade; + this.offerRepository = offerRepository; Object offersObject = persistence.read(this, "offers"); if (offersObject instanceof Map) { @@ -189,7 +193,7 @@ public class TradeManager { (message, throwable) -> { errorMessageHandler.onFault(message); createOfferCoordinatorMap.remove(offer.getId()); - }); + }, offerRepository); createOfferCoordinatorMap.put(offer.getId(), createOfferCoordinator); createOfferCoordinator.start(); } @@ -210,7 +214,7 @@ public class TradeManager { offers.remove(offer.getId()); persistOffers(); - messageFacade.removeOffer(offer); + offerRepository.removeOffer(offer); } diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java index 4e17d6d897..d9e982c158 100644 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java +++ b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java @@ -20,6 +20,7 @@ package io.bitsquare.trade.protocol.createoffer; import io.bitsquare.btc.WalletFacade; import io.bitsquare.msg.MessageFacade; import io.bitsquare.offer.Offer; +import io.bitsquare.offer.OfferRepository; import io.bitsquare.persistence.Persistence; import io.bitsquare.trade.handlers.FaultHandler; import io.bitsquare.trade.handlers.TransactionResultHandler; @@ -90,22 +91,25 @@ public class CreateOfferCoordinator { private final TransactionResultHandler resultHandler; private final FaultHandler faultHandler; private final Model model; + private final OfferRepository offerRepository; public CreateOfferCoordinator(Persistence persistence, Offer offer, WalletFacade walletFacade, MessageFacade messageFacade, TransactionResultHandler resultHandler, - FaultHandler faultHandler) { - this(offer, walletFacade, messageFacade, resultHandler, faultHandler, new Model(persistence)); + FaultHandler faultHandler, OfferRepository offerRepository) { + this(offer, walletFacade, messageFacade, resultHandler, faultHandler, new Model(persistence), offerRepository); } // for recovery from model public CreateOfferCoordinator(Offer offer, WalletFacade walletFacade, MessageFacade messageFacade, - TransactionResultHandler resultHandler, FaultHandler faultHandler, Model model) { + TransactionResultHandler resultHandler, FaultHandler faultHandler, Model model, + OfferRepository offerRepository) { this.offer = offer; this.walletFacade = walletFacade; this.messageFacade = messageFacade; this.resultHandler = resultHandler; this.faultHandler = faultHandler; this.model = model; + this.offerRepository = offerRepository; model.setState(State.INITED); } @@ -129,7 +133,7 @@ public class CreateOfferCoordinator { private void onOfferFeeTxBroadCasted() { model.setState(State.OFFER_FEE_BROAD_CASTED); - PublishOfferToDHT.run(this::onOfferPublishedToDHT, this::onFailed, messageFacade, offer); + PublishOfferToDHT.run(this::onOfferPublishedToDHT, this::onFailed, offerRepository, offer); } private void onOfferPublishedToDHT() { @@ -159,7 +163,7 @@ public class CreateOfferCoordinator { case OFFER_FEE_BROAD_CASTED: // actually the only replay case here, tx publish was successful but storage to dht failed. // Republish the offer to DHT - PublishOfferToDHT.run(this::onOfferPublishedToDHT, this::onFailed, messageFacade, offer); + PublishOfferToDHT.run(this::onOfferPublishedToDHT, this::onFailed, offerRepository, offer); break; case OFFER_PUBLISHED_TO_DHT: // should be impossible diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/PublishOfferToDHT.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/PublishOfferToDHT.java index d5611bd519..143a06afed 100644 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/PublishOfferToDHT.java +++ b/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/PublishOfferToDHT.java @@ -17,9 +17,9 @@ package io.bitsquare.trade.protocol.createoffer.tasks; -import io.bitsquare.msg.MessageFacade; import io.bitsquare.msg.listeners.AddOfferListener; import io.bitsquare.offer.Offer; +import io.bitsquare.offer.OfferRepository; import io.bitsquare.trade.handlers.FaultHandler; import io.bitsquare.trade.handlers.ResultHandler; @@ -29,9 +29,9 @@ import org.slf4j.LoggerFactory; public class PublishOfferToDHT { private static final Logger log = LoggerFactory.getLogger(PublishOfferToDHT.class); - public static void run(ResultHandler resultHandler, FaultHandler faultHandler, MessageFacade messageFacade, + public static void run(ResultHandler resultHandler, FaultHandler faultHandler, OfferRepository offerRepository, Offer offer) { - messageFacade.addOffer(offer, new AddOfferListener() { + offerRepository.addOffer(offer, new AddOfferListener() { @Override public void onComplete() { resultHandler.onResult(); From aac4731f807b7a6c0f96914ac8a83b862462764d Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Wed, 5 Nov 2014 12:58:29 +0100 Subject: [PATCH 02/18] Replace AddOfferListener Result/Fault handlers This change begins the process of simplifying the trade protocol by eliminating extra callback layers such as AddOfferListener and task layers such as PublishOfferToDHT in favor of calling directly into Repository interfaces. --- .../msg/listeners/AddOfferListener.java | 24 ---------- .../io/bitsquare/offer/OfferRepository.java | 5 +- .../offer/TomP2POfferRepository.java | 17 ++++--- .../createoffer/CreateOfferCoordinator.java | 5 +- .../createoffer/tasks/PublishOfferToDHT.java | 46 ------------------- 5 files changed, 13 insertions(+), 84 deletions(-) delete mode 100644 src/main/java/io/bitsquare/msg/listeners/AddOfferListener.java delete mode 100644 src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/PublishOfferToDHT.java diff --git a/src/main/java/io/bitsquare/msg/listeners/AddOfferListener.java b/src/main/java/io/bitsquare/msg/listeners/AddOfferListener.java deleted file mode 100644 index 7a05c60141..0000000000 --- a/src/main/java/io/bitsquare/msg/listeners/AddOfferListener.java +++ /dev/null @@ -1,24 +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.msg.listeners; - -public interface AddOfferListener { - void onComplete(); - - void onFailed(String reason, Throwable throwable); -} diff --git a/src/main/java/io/bitsquare/offer/OfferRepository.java b/src/main/java/io/bitsquare/offer/OfferRepository.java index a7f42c987b..5ff36cea12 100644 --- a/src/main/java/io/bitsquare/offer/OfferRepository.java +++ b/src/main/java/io/bitsquare/offer/OfferRepository.java @@ -17,7 +17,8 @@ package io.bitsquare.offer; -import io.bitsquare.msg.listeners.AddOfferListener; +import io.bitsquare.trade.handlers.FaultHandler; +import io.bitsquare.trade.handlers.ResultHandler; import java.util.List; @@ -27,7 +28,7 @@ public interface OfferRepository { void getOffers(String fiatCode); - void addOffer(Offer offer, AddOfferListener addOfferListener); + void addOffer(Offer offer, ResultHandler resultHandler, FaultHandler faultHandler); void removeOffer(Offer offer); diff --git a/src/main/java/io/bitsquare/offer/TomP2POfferRepository.java b/src/main/java/io/bitsquare/offer/TomP2POfferRepository.java index 8bb753068c..b4270c6886 100644 --- a/src/main/java/io/bitsquare/offer/TomP2POfferRepository.java +++ b/src/main/java/io/bitsquare/offer/TomP2POfferRepository.java @@ -18,7 +18,8 @@ package io.bitsquare.offer; import io.bitsquare.msg.P2PNode; -import io.bitsquare.msg.listeners.AddOfferListener; +import io.bitsquare.trade.handlers.FaultHandler; +import io.bitsquare.trade.handlers.ResultHandler; import java.io.IOException; @@ -60,7 +61,7 @@ class TomP2POfferRepository implements OfferRepository { } @Override - public void addOffer(Offer offer, AddOfferListener addOfferListener) { + public void addOffer(Offer offer, ResultHandler resultHandler, FaultHandler faultHandler) { Number160 locationKey = Number160.createHash(offer.getCurrency().getCurrencyCode()); try { final Data offerData = new Data(offer); @@ -77,7 +78,7 @@ class TomP2POfferRepository implements OfferRepository { // deactivate it for the moment until the port forwarding bug is fixed // if (future.isSuccess()) { Platform.runLater(() -> { - addOfferListener.onComplete(); + resultHandler.onResult(); offerRepositoryListeners.stream().forEach(listener -> { try { Object offerDataObject = offerData.object(); @@ -98,17 +99,15 @@ class TomP2POfferRepository implements OfferRepository { } @Override - public void exceptionCaught(Throwable t) throws Exception { + public void exceptionCaught(Throwable ex) throws Exception { Platform.runLater(() -> { - addOfferListener.onFailed("Add offer to DHT failed with an exception.", t); - log.error("Add offer to DHT failed with an exception: " + t.getMessage()); + faultHandler.onFault("Failed to add offer to DHT", ex); }); } }); - } catch (IOException e) { + } catch (IOException ex) { Platform.runLater(() -> { - addOfferListener.onFailed("Add offer to DHT failed with an exception.", e); - log.error("Add offer to DHT failed with an exception: " + e.getMessage()); + faultHandler.onFault("Failed to add offer to DHT", ex); }); } } diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java index d9e982c158..2b10909293 100644 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java +++ b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java @@ -26,7 +26,6 @@ import io.bitsquare.trade.handlers.FaultHandler; import io.bitsquare.trade.handlers.TransactionResultHandler; import io.bitsquare.trade.protocol.createoffer.tasks.BroadCastOfferFeeTx; import io.bitsquare.trade.protocol.createoffer.tasks.CreateOfferFeeTx; -import io.bitsquare.trade.protocol.createoffer.tasks.PublishOfferToDHT; import io.bitsquare.trade.protocol.createoffer.tasks.VerifyOffer; import org.bitcoinj.core.Transaction; @@ -133,7 +132,7 @@ public class CreateOfferCoordinator { private void onOfferFeeTxBroadCasted() { model.setState(State.OFFER_FEE_BROAD_CASTED); - PublishOfferToDHT.run(this::onOfferPublishedToDHT, this::onFailed, offerRepository, offer); + offerRepository.addOffer(offer, this::onOfferPublishedToDHT, faultHandler); } private void onOfferPublishedToDHT() { @@ -163,7 +162,7 @@ public class CreateOfferCoordinator { case OFFER_FEE_BROAD_CASTED: // actually the only replay case here, tx publish was successful but storage to dht failed. // Republish the offer to DHT - PublishOfferToDHT.run(this::onOfferPublishedToDHT, this::onFailed, offerRepository, offer); + offerRepository.addOffer(offer, this::onOfferPublishedToDHT, faultHandler); break; case OFFER_PUBLISHED_TO_DHT: // should be impossible diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/PublishOfferToDHT.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/PublishOfferToDHT.java deleted file mode 100644 index 143a06afed..0000000000 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/PublishOfferToDHT.java +++ /dev/null @@ -1,46 +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.trade.protocol.createoffer.tasks; - -import io.bitsquare.msg.listeners.AddOfferListener; -import io.bitsquare.offer.Offer; -import io.bitsquare.offer.OfferRepository; -import io.bitsquare.trade.handlers.FaultHandler; -import io.bitsquare.trade.handlers.ResultHandler; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class PublishOfferToDHT { - private static final Logger log = LoggerFactory.getLogger(PublishOfferToDHT.class); - - public static void run(ResultHandler resultHandler, FaultHandler faultHandler, OfferRepository offerRepository, - Offer offer) { - offerRepository.addOffer(offer, new AddOfferListener() { - @Override - public void onComplete() { - resultHandler.onResult(); - } - - @Override - public void onFailed(String reason, Throwable throwable) { - faultHandler.onFault("Publish offer to DHT failed.", throwable); - } - }); - } -} From f72bdf5f71712ab736dbbb03911274675dc75413 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Wed, 5 Nov 2014 13:06:31 +0100 Subject: [PATCH 03/18] Move generic *Handler types to new util.task package --- src/main/java/io/bitsquare/offer/OfferRepository.java | 4 ++-- src/main/java/io/bitsquare/offer/TomP2POfferRepository.java | 4 ++-- src/main/java/io/bitsquare/trade/TradeManager.java | 2 +- .../trade/protocol/createoffer/CreateOfferCoordinator.java | 2 +- .../trade/protocol/createoffer/tasks/BroadCastOfferFeeTx.java | 4 ++-- .../trade/protocol/createoffer/tasks/CreateOfferFeeTx.java | 2 +- .../trade/protocol/createoffer/tasks/VerifyOffer.java | 4 ++-- .../trade/protocol/trade/offerer/tasks/CreateDepositTx.java | 2 +- .../protocol/trade/offerer/tasks/HandleTakeOfferRequest.java | 2 +- .../trade/offerer/tasks/RequestTakerDepositPayment.java | 4 ++-- .../protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java | 4 ++-- .../protocol/trade/offerer/tasks/SendSignedPayoutTx.java | 4 ++-- .../offerer/tasks/SetupListenerForBlockChainConfirmation.java | 2 +- .../protocol/trade/offerer/tasks/SignAndPublishDepositTx.java | 2 +- .../protocol/trade/offerer/tasks/VerifyAndSignContract.java | 2 +- .../trade/offerer/tasks/VerifyTakeOfferFeePayment.java | 4 ++-- .../protocol/trade/offerer/tasks/VerifyTakerAccount.java | 4 ++-- .../trade/protocol/trade/shared/tasks/VerifyPeerAccount.java | 4 ++-- .../protocol/trade/taker/tasks/CreateAndSignContract.java | 2 +- .../trade/protocol/trade/taker/tasks/GetPeerAddress.java | 2 +- .../trade/protocol/trade/taker/tasks/PayDeposit.java | 2 +- .../trade/protocol/trade/taker/tasks/PayTakeOfferFee.java | 2 +- .../trade/protocol/trade/taker/tasks/RequestTakeOffer.java | 4 ++-- .../protocol/trade/taker/tasks/SendPayoutTxToOfferer.java | 4 ++-- .../trade/taker/tasks/SendSignedTakerDepositTxAsHex.java | 4 ++-- .../protocol/trade/taker/tasks/SendTakeOfferFeePayedTxId.java | 4 ++-- .../protocol/trade/taker/tasks/SignAndPublishPayoutTx.java | 2 +- .../protocol/trade/taker/tasks/VerifyOffererAccount.java | 4 ++-- .../{trade/handlers => util/task}/ErrorMessageHandler.java | 2 +- .../{trade/handlers => util/task}/ExceptionHandler.java | 2 +- .../bitsquare/{trade/handlers => util/task}/FaultHandler.java | 2 +- .../{trade/handlers => util/task}/ResultHandler.java | 2 +- 32 files changed, 47 insertions(+), 47 deletions(-) rename src/main/java/io/bitsquare/{trade/handlers => util/task}/ErrorMessageHandler.java (95%) rename src/main/java/io/bitsquare/{trade/handlers => util/task}/ExceptionHandler.java (95%) rename src/main/java/io/bitsquare/{trade/handlers => util/task}/FaultHandler.java (95%) rename src/main/java/io/bitsquare/{trade/handlers => util/task}/ResultHandler.java (95%) diff --git a/src/main/java/io/bitsquare/offer/OfferRepository.java b/src/main/java/io/bitsquare/offer/OfferRepository.java index 5ff36cea12..2b8c60f0c7 100644 --- a/src/main/java/io/bitsquare/offer/OfferRepository.java +++ b/src/main/java/io/bitsquare/offer/OfferRepository.java @@ -17,8 +17,8 @@ package io.bitsquare.offer; -import io.bitsquare.trade.handlers.FaultHandler; -import io.bitsquare.trade.handlers.ResultHandler; +import io.bitsquare.util.task.FaultHandler; +import io.bitsquare.util.task.ResultHandler; import java.util.List; diff --git a/src/main/java/io/bitsquare/offer/TomP2POfferRepository.java b/src/main/java/io/bitsquare/offer/TomP2POfferRepository.java index b4270c6886..f2f8a8ad95 100644 --- a/src/main/java/io/bitsquare/offer/TomP2POfferRepository.java +++ b/src/main/java/io/bitsquare/offer/TomP2POfferRepository.java @@ -18,8 +18,8 @@ package io.bitsquare.offer; import io.bitsquare.msg.P2PNode; -import io.bitsquare.trade.handlers.FaultHandler; -import io.bitsquare.trade.handlers.ResultHandler; +import io.bitsquare.util.task.FaultHandler; +import io.bitsquare.util.task.ResultHandler; import java.io.IOException; diff --git a/src/main/java/io/bitsquare/trade/TradeManager.java b/src/main/java/io/bitsquare/trade/TradeManager.java index da3704d330..e14d57522d 100644 --- a/src/main/java/io/bitsquare/trade/TradeManager.java +++ b/src/main/java/io/bitsquare/trade/TradeManager.java @@ -28,7 +28,6 @@ import io.bitsquare.offer.Offer; import io.bitsquare.offer.OfferRepository; import io.bitsquare.persistence.Persistence; import io.bitsquare.settings.Settings; -import io.bitsquare.trade.handlers.ErrorMessageHandler; import io.bitsquare.trade.handlers.TransactionResultHandler; import io.bitsquare.trade.protocol.createoffer.CreateOfferCoordinator; import io.bitsquare.trade.protocol.trade.TradeMessage; @@ -45,6 +44,7 @@ import io.bitsquare.trade.protocol.trade.taker.messages.RequestOffererPublishDep 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 org.bitcoinj.core.Coin; import org.bitcoinj.core.Transaction; diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java index 2b10909293..dcca6b7f9d 100644 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java +++ b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java @@ -22,7 +22,7 @@ import io.bitsquare.msg.MessageFacade; import io.bitsquare.offer.Offer; import io.bitsquare.offer.OfferRepository; import io.bitsquare.persistence.Persistence; -import io.bitsquare.trade.handlers.FaultHandler; +import io.bitsquare.util.task.FaultHandler; import io.bitsquare.trade.handlers.TransactionResultHandler; import io.bitsquare.trade.protocol.createoffer.tasks.BroadCastOfferFeeTx; import io.bitsquare.trade.protocol.createoffer.tasks.CreateOfferFeeTx; diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/BroadCastOfferFeeTx.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/BroadCastOfferFeeTx.java index fc5a30f763..30cd4ba4b9 100644 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/BroadCastOfferFeeTx.java +++ b/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/BroadCastOfferFeeTx.java @@ -18,8 +18,8 @@ package io.bitsquare.trade.protocol.createoffer.tasks; import io.bitsquare.btc.WalletFacade; -import io.bitsquare.trade.handlers.FaultHandler; -import io.bitsquare.trade.handlers.ResultHandler; +import io.bitsquare.util.task.FaultHandler; +import io.bitsquare.util.task.ResultHandler; import org.bitcoinj.core.Transaction; diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/CreateOfferFeeTx.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/CreateOfferFeeTx.java index 4c944a0332..5c48b07dae 100644 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/CreateOfferFeeTx.java +++ b/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/CreateOfferFeeTx.java @@ -18,7 +18,7 @@ package io.bitsquare.trade.protocol.createoffer.tasks; import io.bitsquare.btc.WalletFacade; -import io.bitsquare.trade.handlers.FaultHandler; +import io.bitsquare.util.task.FaultHandler; import io.bitsquare.trade.handlers.TransactionResultHandler; import org.bitcoinj.core.InsufficientMoneyException; diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/VerifyOffer.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/VerifyOffer.java index d3857a74bb..d5d5253226 100644 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/VerifyOffer.java +++ b/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/VerifyOffer.java @@ -19,8 +19,8 @@ package io.bitsquare.trade.protocol.createoffer.tasks; import io.bitsquare.btc.Restrictions; import io.bitsquare.offer.Offer; -import io.bitsquare.trade.handlers.FaultHandler; -import io.bitsquare.trade.handlers.ResultHandler; +import io.bitsquare.util.task.FaultHandler; +import io.bitsquare.util.task.ResultHandler; import javax.annotation.concurrent.Immutable; diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateDepositTx.java b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateDepositTx.java index fa15c22276..cd3aad7a56 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateDepositTx.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateDepositTx.java @@ -18,7 +18,7 @@ package io.bitsquare.trade.protocol.trade.offerer.tasks; import io.bitsquare.btc.WalletFacade; -import io.bitsquare.trade.handlers.ExceptionHandler; +import io.bitsquare.util.task.ExceptionHandler; import org.bitcoinj.core.Coin; import org.bitcoinj.core.InsufficientMoneyException; diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/HandleTakeOfferRequest.java b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/HandleTakeOfferRequest.java index 02147d4e82..a03083c37d 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/HandleTakeOfferRequest.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/HandleTakeOfferRequest.java @@ -21,8 +21,8 @@ import io.bitsquare.msg.MessageFacade; import io.bitsquare.msg.listeners.OutgoingMessageListener; import io.bitsquare.network.Peer; import io.bitsquare.trade.Trade; -import io.bitsquare.trade.handlers.ExceptionHandler; import io.bitsquare.trade.protocol.trade.offerer.messages.RespondToTakeOfferRequestMessage; +import io.bitsquare.util.task.ExceptionHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RequestTakerDepositPayment.java b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RequestTakerDepositPayment.java index ac34b12810..96d07a30ff 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RequestTakerDepositPayment.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RequestTakerDepositPayment.java @@ -21,9 +21,9 @@ import io.bitsquare.bank.BankAccount; import io.bitsquare.msg.MessageFacade; import io.bitsquare.msg.listeners.OutgoingMessageListener; import io.bitsquare.network.Peer; -import io.bitsquare.trade.handlers.ExceptionHandler; -import io.bitsquare.trade.handlers.ResultHandler; import io.bitsquare.trade.protocol.trade.offerer.messages.RequestTakerDepositPaymentMessage; +import io.bitsquare.util.task.ExceptionHandler; +import io.bitsquare.util.task.ResultHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java index 74287b44b9..a8e82e9cee 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java @@ -20,9 +20,9 @@ package io.bitsquare.trade.protocol.trade.offerer.tasks; import io.bitsquare.msg.MessageFacade; import io.bitsquare.msg.listeners.OutgoingMessageListener; import io.bitsquare.network.Peer; -import io.bitsquare.trade.handlers.ExceptionHandler; -import io.bitsquare.trade.handlers.ResultHandler; import io.bitsquare.trade.protocol.trade.offerer.messages.DepositTxPublishedMessage; +import io.bitsquare.util.task.ExceptionHandler; +import io.bitsquare.util.task.ResultHandler; import org.bitcoinj.core.Transaction; import org.bitcoinj.core.Utils; diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendSignedPayoutTx.java b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendSignedPayoutTx.java index 3000aa8b95..6ec2e9cd23 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendSignedPayoutTx.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendSignedPayoutTx.java @@ -21,9 +21,9 @@ import io.bitsquare.btc.WalletFacade; import io.bitsquare.msg.MessageFacade; import io.bitsquare.msg.listeners.OutgoingMessageListener; import io.bitsquare.network.Peer; -import io.bitsquare.trade.handlers.ExceptionHandler; -import io.bitsquare.trade.handlers.ResultHandler; import io.bitsquare.trade.protocol.trade.offerer.messages.BankTransferInitedMessage; +import io.bitsquare.util.task.ExceptionHandler; +import io.bitsquare.util.task.ResultHandler; import org.bitcoinj.core.Coin; import org.bitcoinj.core.ECKey; diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SetupListenerForBlockChainConfirmation.java b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SetupListenerForBlockChainConfirmation.java index 2a7128d84f..af0422afb9 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SetupListenerForBlockChainConfirmation.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SetupListenerForBlockChainConfirmation.java @@ -17,8 +17,8 @@ package io.bitsquare.trade.protocol.trade.offerer.tasks; -import io.bitsquare.trade.handlers.ResultHandler; import io.bitsquare.trade.protocol.trade.offerer.BuyerAcceptsOfferProtocolListener; +import io.bitsquare.util.task.ResultHandler; import org.bitcoinj.core.Transaction; import org.bitcoinj.core.TransactionConfidence; diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignAndPublishDepositTx.java b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignAndPublishDepositTx.java index 06fa14e8f1..a03e5e3648 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignAndPublishDepositTx.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignAndPublishDepositTx.java @@ -18,7 +18,7 @@ package io.bitsquare.trade.protocol.trade.offerer.tasks; import io.bitsquare.btc.WalletFacade; -import io.bitsquare.trade.handlers.ExceptionHandler; +import io.bitsquare.util.task.ExceptionHandler; import org.bitcoinj.core.Transaction; diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyAndSignContract.java b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyAndSignContract.java index a8afea8c00..9d6d795ff7 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyAndSignContract.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyAndSignContract.java @@ -21,8 +21,8 @@ import io.bitsquare.bank.BankAccount; import io.bitsquare.crypto.CryptoFacade; import io.bitsquare.offer.Offer; import io.bitsquare.trade.Contract; -import io.bitsquare.trade.handlers.ExceptionHandler; import io.bitsquare.util.Utilities; +import io.bitsquare.util.task.ExceptionHandler; import org.bitcoinj.core.Coin; import org.bitcoinj.core.ECKey; diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java index 5b731a86e2..ead2b6a5b4 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java +++ b/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.btc.WalletFacade; -import io.bitsquare.trade.handlers.ExceptionHandler; -import io.bitsquare.trade.handlers.ResultHandler; +import io.bitsquare.util.task.ExceptionHandler; +import io.bitsquare.util.task.ResultHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakerAccount.java b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakerAccount.java index e1ed167ba4..2ffc5ebf3f 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakerAccount.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakerAccount.java @@ -19,9 +19,9 @@ package io.bitsquare.trade.protocol.trade.offerer.tasks; import io.bitsquare.bank.BankAccount; import io.bitsquare.btc.BlockChainFacade; -import io.bitsquare.trade.handlers.ExceptionHandler; -import io.bitsquare.trade.handlers.ResultHandler; import io.bitsquare.trade.protocol.trade.shared.tasks.VerifyPeerAccount; +import io.bitsquare.util.task.ExceptionHandler; +import io.bitsquare.util.task.ResultHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/shared/tasks/VerifyPeerAccount.java b/src/main/java/io/bitsquare/trade/protocol/trade/shared/tasks/VerifyPeerAccount.java index b60ae370cc..00f8d12561 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/shared/tasks/VerifyPeerAccount.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/shared/tasks/VerifyPeerAccount.java @@ -19,8 +19,8 @@ package io.bitsquare.trade.protocol.trade.shared.tasks; import io.bitsquare.bank.BankAccount; import io.bitsquare.btc.BlockChainFacade; -import io.bitsquare.trade.handlers.ExceptionHandler; -import io.bitsquare.trade.handlers.ResultHandler; +import io.bitsquare.util.task.ExceptionHandler; +import io.bitsquare.util.task.ResultHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java index ea634dfa75..f34b03325c 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java @@ -21,8 +21,8 @@ import io.bitsquare.bank.BankAccount; import io.bitsquare.crypto.CryptoFacade; import io.bitsquare.offer.Offer; import io.bitsquare.trade.Contract; -import io.bitsquare.trade.handlers.ExceptionHandler; import io.bitsquare.util.Utilities; +import io.bitsquare.util.task.ExceptionHandler; import org.bitcoinj.core.Coin; import org.bitcoinj.core.ECKey; diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java index 85fdbdb1c4..37aad9cd01 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java @@ -20,7 +20,7 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.msg.MessageFacade; import io.bitsquare.msg.listeners.GetPeerAddressListener; import io.bitsquare.network.Peer; -import io.bitsquare.trade.handlers.ExceptionHandler; +import io.bitsquare.util.task.ExceptionHandler; import java.security.PublicKey; diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java index b4fa012929..586d68d1b1 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java @@ -18,7 +18,7 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.btc.WalletFacade; -import io.bitsquare.trade.handlers.ExceptionHandler; +import io.bitsquare.util.task.ExceptionHandler; import org.bitcoinj.core.Coin; import org.bitcoinj.core.InsufficientMoneyException; diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayTakeOfferFee.java b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayTakeOfferFee.java index 122f6a4287..fcf0e14276 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayTakeOfferFee.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayTakeOfferFee.java @@ -18,7 +18,7 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.btc.WalletFacade; -import io.bitsquare.trade.handlers.ExceptionHandler; +import io.bitsquare.util.task.ExceptionHandler; import org.bitcoinj.core.InsufficientMoneyException; import org.bitcoinj.core.Transaction; diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/RequestTakeOffer.java b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/RequestTakeOffer.java index 412f6ceaf0..b2f64004ac 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/RequestTakeOffer.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/RequestTakeOffer.java @@ -20,9 +20,9 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.msg.MessageFacade; import io.bitsquare.msg.listeners.OutgoingMessageListener; import io.bitsquare.network.Peer; -import io.bitsquare.trade.handlers.ExceptionHandler; -import io.bitsquare.trade.handlers.ResultHandler; import io.bitsquare.trade.protocol.trade.taker.messages.RequestTakeOfferMessage; +import io.bitsquare.util.task.ExceptionHandler; +import io.bitsquare.util.task.ResultHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java index 79f120bca1..40f2d6754f 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java @@ -20,9 +20,9 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.msg.MessageFacade; import io.bitsquare.msg.listeners.OutgoingMessageListener; import io.bitsquare.network.Peer; -import io.bitsquare.trade.handlers.ExceptionHandler; -import io.bitsquare.trade.handlers.ResultHandler; import io.bitsquare.trade.protocol.trade.taker.messages.PayoutTxPublishedMessage; +import io.bitsquare.util.task.ExceptionHandler; +import io.bitsquare.util.task.ResultHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java index 45bf09cfe2..ad6f7755b4 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java @@ -22,9 +22,9 @@ import io.bitsquare.btc.WalletFacade; import io.bitsquare.msg.MessageFacade; import io.bitsquare.msg.listeners.OutgoingMessageListener; import io.bitsquare.network.Peer; -import io.bitsquare.trade.handlers.ExceptionHandler; -import io.bitsquare.trade.handlers.ResultHandler; import io.bitsquare.trade.protocol.trade.taker.messages.RequestOffererPublishDepositTxMessage; +import io.bitsquare.util.task.ExceptionHandler; +import io.bitsquare.util.task.ResultHandler; import org.bitcoinj.core.Transaction; import org.bitcoinj.core.Utils; diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedTxId.java b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedTxId.java index e9366ba9a6..ac7186a28d 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedTxId.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedTxId.java @@ -20,9 +20,9 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.msg.MessageFacade; import io.bitsquare.msg.listeners.OutgoingMessageListener; import io.bitsquare.network.Peer; -import io.bitsquare.trade.handlers.ExceptionHandler; -import io.bitsquare.trade.handlers.ResultHandler; import io.bitsquare.trade.protocol.trade.taker.messages.TakeOfferFeePayedMessage; +import io.bitsquare.util.task.ExceptionHandler; +import io.bitsquare.util.task.ResultHandler; import org.bitcoinj.core.Coin; diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java index 38353fa8ef..89e6a26923 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java @@ -18,7 +18,7 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.btc.WalletFacade; -import io.bitsquare.trade.handlers.ExceptionHandler; +import io.bitsquare.util.task.ExceptionHandler; import org.bitcoinj.core.Coin; import org.bitcoinj.core.Transaction; diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOffererAccount.java b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOffererAccount.java index f42cc1ad98..f83af3358b 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOffererAccount.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOffererAccount.java @@ -19,9 +19,9 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.bank.BankAccount; import io.bitsquare.btc.BlockChainFacade; -import io.bitsquare.trade.handlers.ExceptionHandler; -import io.bitsquare.trade.handlers.ResultHandler; import io.bitsquare.trade.protocol.trade.shared.tasks.VerifyPeerAccount; +import io.bitsquare.util.task.ExceptionHandler; +import io.bitsquare.util.task.ResultHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/io/bitsquare/trade/handlers/ErrorMessageHandler.java b/src/main/java/io/bitsquare/util/task/ErrorMessageHandler.java similarity index 95% rename from src/main/java/io/bitsquare/trade/handlers/ErrorMessageHandler.java rename to src/main/java/io/bitsquare/util/task/ErrorMessageHandler.java index 0b911733a6..57634b3459 100644 --- a/src/main/java/io/bitsquare/trade/handlers/ErrorMessageHandler.java +++ b/src/main/java/io/bitsquare/util/task/ErrorMessageHandler.java @@ -15,7 +15,7 @@ * along with Bitsquare. If not, see . */ -package io.bitsquare.trade.handlers; +package io.bitsquare.util.task; /** * For reporting error message only (UI) diff --git a/src/main/java/io/bitsquare/trade/handlers/ExceptionHandler.java b/src/main/java/io/bitsquare/util/task/ExceptionHandler.java similarity index 95% rename from src/main/java/io/bitsquare/trade/handlers/ExceptionHandler.java rename to src/main/java/io/bitsquare/util/task/ExceptionHandler.java index 6babb5075b..0f513bcf88 100644 --- a/src/main/java/io/bitsquare/trade/handlers/ExceptionHandler.java +++ b/src/main/java/io/bitsquare/util/task/ExceptionHandler.java @@ -15,7 +15,7 @@ * along with Bitsquare. If not, see . */ -package io.bitsquare.trade.handlers; +package io.bitsquare.util.task; /** * For reporting throwables only diff --git a/src/main/java/io/bitsquare/trade/handlers/FaultHandler.java b/src/main/java/io/bitsquare/util/task/FaultHandler.java similarity index 95% rename from src/main/java/io/bitsquare/trade/handlers/FaultHandler.java rename to src/main/java/io/bitsquare/util/task/FaultHandler.java index 9cea5fb056..e21b5ce8aa 100644 --- a/src/main/java/io/bitsquare/trade/handlers/FaultHandler.java +++ b/src/main/java/io/bitsquare/util/task/FaultHandler.java @@ -15,7 +15,7 @@ * along with Bitsquare. If not, see . */ -package io.bitsquare.trade.handlers; +package io.bitsquare.util.task; /** * For reporting a description message and throwable diff --git a/src/main/java/io/bitsquare/trade/handlers/ResultHandler.java b/src/main/java/io/bitsquare/util/task/ResultHandler.java similarity index 95% rename from src/main/java/io/bitsquare/trade/handlers/ResultHandler.java rename to src/main/java/io/bitsquare/util/task/ResultHandler.java index f18e242cb3..ca0ac45475 100644 --- a/src/main/java/io/bitsquare/trade/handlers/ResultHandler.java +++ b/src/main/java/io/bitsquare/util/task/ResultHandler.java @@ -15,7 +15,7 @@ * along with Bitsquare. If not, see . */ -package io.bitsquare.trade.handlers; +package io.bitsquare.util.task; public interface ResultHandler { void onResult(); From 44dc76e07e6206c5fbd7c465a941739f834f6767 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Wed, 5 Nov 2014 13:12:30 +0100 Subject: [PATCH 04/18] Rename *Handler methods --- .../java/io/bitsquare/offer/TomP2POfferRepository.java | 6 +++--- src/main/java/io/bitsquare/trade/TradeManager.java | 7 ++++--- .../protocol/createoffer/CreateOfferCoordinator.java | 2 +- .../createoffer/tasks/BroadCastOfferFeeTx.java | 10 +++++----- .../protocol/createoffer/tasks/CreateOfferFeeTx.java | 5 +++-- .../trade/protocol/createoffer/tasks/VerifyOffer.java | 4 ++-- .../protocol/trade/offerer/tasks/CreateDepositTx.java | 2 +- .../trade/offerer/tasks/HandleTakeOfferRequest.java | 2 +- .../offerer/tasks/RequestTakerDepositPayment.java | 5 +++-- .../trade/offerer/tasks/SendDepositTxIdToTaker.java | 4 ++-- .../trade/offerer/tasks/SendSignedPayoutTx.java | 6 +++--- .../tasks/SetupListenerForBlockChainConfirmation.java | 2 +- .../trade/offerer/tasks/SignAndPublishDepositTx.java | 4 ++-- .../trade/offerer/tasks/VerifyTakeOfferFeePayment.java | 2 +- .../protocol/trade/shared/tasks/VerifyPeerAccount.java | 7 ++++--- .../trade/taker/tasks/CreateAndSignContract.java | 2 +- .../protocol/trade/taker/tasks/GetPeerAddress.java | 2 +- .../trade/protocol/trade/taker/tasks/PayDeposit.java | 2 +- .../protocol/trade/taker/tasks/PayTakeOfferFee.java | 4 ++-- .../protocol/trade/taker/tasks/RequestTakeOffer.java | 5 +++-- .../trade/taker/tasks/SendPayoutTxToOfferer.java | 4 ++-- .../taker/tasks/SendSignedTakerDepositTxAsHex.java | 4 ++-- .../trade/taker/tasks/SendTakeOfferFeePayedTxId.java | 4 ++-- .../trade/taker/tasks/SignAndPublishPayoutTx.java | 4 ++-- .../io/bitsquare/util/task/ErrorMessageHandler.java | 2 +- .../java/io/bitsquare/util/task/ExceptionHandler.java | 2 +- src/main/java/io/bitsquare/util/task/FaultHandler.java | 2 +- .../java/io/bitsquare/util/task/ResultHandler.java | 2 +- 28 files changed, 56 insertions(+), 51 deletions(-) diff --git a/src/main/java/io/bitsquare/offer/TomP2POfferRepository.java b/src/main/java/io/bitsquare/offer/TomP2POfferRepository.java index f2f8a8ad95..8acce93bd9 100644 --- a/src/main/java/io/bitsquare/offer/TomP2POfferRepository.java +++ b/src/main/java/io/bitsquare/offer/TomP2POfferRepository.java @@ -78,7 +78,7 @@ class TomP2POfferRepository implements OfferRepository { // deactivate it for the moment until the port forwarding bug is fixed // if (future.isSuccess()) { Platform.runLater(() -> { - resultHandler.onResult(); + resultHandler.handleResult(); offerRepositoryListeners.stream().forEach(listener -> { try { Object offerDataObject = offerData.object(); @@ -101,13 +101,13 @@ class TomP2POfferRepository implements OfferRepository { @Override public void exceptionCaught(Throwable ex) throws Exception { Platform.runLater(() -> { - faultHandler.onFault("Failed to add offer to DHT", ex); + faultHandler.handleFault("Failed to add offer to DHT", ex); }); } }); } catch (IOException ex) { Platform.runLater(() -> { - faultHandler.onFault("Failed to add offer to DHT", ex); + faultHandler.handleFault("Failed to add offer to DHT", ex); }); } } diff --git a/src/main/java/io/bitsquare/trade/TradeManager.java b/src/main/java/io/bitsquare/trade/TradeManager.java index e14d57522d..86a3206c07 100644 --- a/src/main/java/io/bitsquare/trade/TradeManager.java +++ b/src/main/java/io/bitsquare/trade/TradeManager.java @@ -168,7 +168,8 @@ public class TradeManager { settings.getAcceptedLanguageLocales()); if (createOfferCoordinatorMap.containsKey(offer.getId())) { - errorMessageHandler.onFault("A createOfferCoordinator for the offer with the id " + offer.getId() + " " + + errorMessageHandler.handleErrorMessage("A createOfferCoordinator for the offer with the id " + offer + .getId() + " " + "already exists."); } else { @@ -185,13 +186,13 @@ public class TradeManager { resultHandler.onResult(transactionId); } catch (Exception e) { //TODO retry policy - errorMessageHandler.onFault("Could not save offer. Reason: " + + errorMessageHandler.handleErrorMessage("Could not save offer. Reason: " + (e.getCause() != null ? e.getCause().getMessage() : e.toString())); createOfferCoordinatorMap.remove(offer.getId()); } }, (message, throwable) -> { - errorMessageHandler.onFault(message); + errorMessageHandler.handleErrorMessage(message); createOfferCoordinatorMap.remove(offer.getId()); }, offerRepository); createOfferCoordinatorMap.put(offer.getId(), createOfferCoordinator); diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java index dcca6b7f9d..213ac653f4 100644 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java +++ b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java @@ -142,7 +142,7 @@ public class CreateOfferCoordinator { private void onFailed(String message, Throwable throwable) { //TODO recover policy, timer - faultHandler.onFault(message, throwable); + faultHandler.handleFault(message, throwable); } diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/BroadCastOfferFeeTx.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/BroadCastOfferFeeTx.java index 30cd4ba4b9..eeac649317 100644 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/BroadCastOfferFeeTx.java +++ b/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/BroadCastOfferFeeTx.java @@ -42,24 +42,24 @@ public class BroadCastOfferFeeTx { log.info("sendResult onSuccess:" + transaction); if (transaction != null) { try { - resultHandler.onResult(); + resultHandler.handleResult(); } catch (Exception e) { - faultHandler.onFault("Offer fee payment failed.", e); + faultHandler.handleFault("Offer fee payment failed.", e); } } else { - faultHandler.onFault("Offer fee payment failed.", + faultHandler.handleFault("Offer fee payment failed.", new Exception("Offer fee payment failed. Transaction = null.")); } } @Override public void onFailure(@NotNull Throwable t) { - faultHandler.onFault("Offer fee payment failed with an exception.", t); + faultHandler.handleFault("Offer fee payment failed with an exception.", t); } }); } catch (Throwable t) { - faultHandler.onFault("Offer fee payment failed because an exception occurred.", t); + faultHandler.handleFault("Offer fee payment failed because an exception occurred.", t); } } } diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/CreateOfferFeeTx.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/CreateOfferFeeTx.java index 5c48b07dae..8d60fcc2a4 100644 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/CreateOfferFeeTx.java +++ b/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/CreateOfferFeeTx.java @@ -34,10 +34,11 @@ public class CreateOfferFeeTx { try { resultHandler.onResult(walletFacade.createOfferFeeTx(offerId)); } catch (InsufficientMoneyException e) { - faultHandler.onFault("Offer fee payment failed because there is insufficient money in the trade wallet. " + + faultHandler.handleFault("Offer fee payment failed because there is insufficient money in the trade " + + "wallet. " + "", e); } catch (Throwable t) { - faultHandler.onFault("Offer fee payment failed because of an exception occurred. ", t); + faultHandler.handleFault("Offer fee payment failed because of an exception occurred. ", t); } } } diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/VerifyOffer.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/VerifyOffer.java index d5d5253226..7c6e8ea6c4 100644 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/VerifyOffer.java +++ b/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/VerifyOffer.java @@ -66,9 +66,9 @@ public class VerifyOffer { // getAddressInfoByTradeID(offerId) // TODO when offer is flattened continue here... - resultHandler.onResult(); + resultHandler.handleResult(); } catch (Throwable t) { - faultHandler.onFault("Offer validation failed.", t); + faultHandler.handleFault("Offer validation failed.", t); } } } diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateDepositTx.java b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateDepositTx.java index cd3aad7a56..bc82c84cc6 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateDepositTx.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateDepositTx.java @@ -50,7 +50,7 @@ public class CreateDepositTx { resultHandler.onResult(offererPubKey, preparedOffererDepositTxAsHex, offererTxOutIndex); } catch (InsufficientMoneyException e) { log.error("Create deposit tx faultHandler.onFault due InsufficientMoneyException " + e); - exceptionHandler.onError( + exceptionHandler.handleException( new Exception("Create deposit tx faultHandler.onFault due InsufficientMoneyException " + e)); } } diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/HandleTakeOfferRequest.java b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/HandleTakeOfferRequest.java index a03083c37d..f889d3f5da 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/HandleTakeOfferRequest.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/HandleTakeOfferRequest.java @@ -49,7 +49,7 @@ public class HandleTakeOfferRequest { @Override public void onFailed() { log.error("AcceptTakeOfferRequestMessage did not arrive at peer"); - exceptionHandler.onError(new Exception("AcceptTakeOfferRequestMessage did not arrive at peer")); + exceptionHandler.handleException(new Exception("AcceptTakeOfferRequestMessage did not arrive at peer")); } }); } diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RequestTakerDepositPayment.java b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RequestTakerDepositPayment.java index 96d07a30ff..6352ac73d9 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RequestTakerDepositPayment.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RequestTakerDepositPayment.java @@ -48,13 +48,14 @@ public class RequestTakerDepositPayment { @Override public void onResult() { log.trace("RequestTakerDepositPaymentMessage successfully arrived at peer"); - resultHandler.onResult(); + resultHandler.handleResult(); } @Override public void onFailed() { log.error("RequestTakerDepositPaymentMessage did not arrive at peer"); - exceptionHandler.onError(new Exception("RequestTakerDepositPaymentMessage did not arrive at peer")); + exceptionHandler.handleException(new Exception("RequestTakerDepositPaymentMessage did not arrive at " + + "peer")); } }); } diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java index a8e82e9cee..7c597bca8a 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java @@ -43,13 +43,13 @@ public class SendDepositTxIdToTaker { @Override public void onResult() { log.trace("DepositTxPublishedMessage successfully arrived at peer"); - resultHandler.onResult(); + resultHandler.handleResult(); } @Override public void onFailed() { log.error("DepositTxPublishedMessage did not arrive at peer"); - exceptionHandler.onError(new Exception("DepositTxPublishedMessage did not arrive at peer")); + exceptionHandler.handleException(new Exception("DepositTxPublishedMessage did not arrive at peer")); } }); } diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendSignedPayoutTx.java b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendSignedPayoutTx.java index 6ec2e9cd23..c58a49871e 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendSignedPayoutTx.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendSignedPayoutTx.java @@ -72,19 +72,19 @@ public class SendSignedPayoutTx { @Override public void onResult() { log.trace("BankTransferInitedMessage successfully arrived at peer"); - resultHandler.onResult(); + resultHandler.handleResult(); } @Override public void onFailed() { log.error("BankTransferInitedMessage did not arrive at peer"); - exceptionHandler.onError(new Exception("BankTransferInitedMessage did not arrive at peer")); + exceptionHandler.handleException(new Exception("BankTransferInitedMessage did not arrive at peer")); } }); } catch (Exception e) { log.error("Exception at OffererCreatesAndSignsPayoutTx " + e); - exceptionHandler.onError(e); + exceptionHandler.handleException(e); } } } diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SetupListenerForBlockChainConfirmation.java b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SetupListenerForBlockChainConfirmation.java index af0422afb9..982e5d11ac 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SetupListenerForBlockChainConfirmation.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SetupListenerForBlockChainConfirmation.java @@ -44,7 +44,7 @@ public class SetupListenerForBlockChainConfirmation { listener.onDepositTxConfirmedInBlockchain(); depositTransaction.getConfidence().removeEventListener(this); log.trace("Tx is in blockchain"); - resultHandler.onResult(); + resultHandler.handleResult(); } } }); diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignAndPublishDepositTx.java b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignAndPublishDepositTx.java index a03e5e3648..5a3c20e477 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignAndPublishDepositTx.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignAndPublishDepositTx.java @@ -59,12 +59,12 @@ public class SignAndPublishDepositTx { @Override public void onFailure(@NotNull Throwable t) { log.error("offererSignAndPublishTx faultHandler.onFault:" + t); - exceptionHandler.onError(t); + exceptionHandler.handleException(t); } }); } catch (Exception e) { log.error("offererSignAndPublishTx faultHandler.onFault:" + e); - exceptionHandler.onError(e); + exceptionHandler.handleException(e); } } diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java index ead2b6a5b4..d29f7c7edb 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java @@ -33,7 +33,7 @@ public class VerifyTakeOfferFeePayment { //TODO mocked yet, need a confidence listeners int numOfPeersSeenTx = walletFacade.getNumOfPeersSeenTx(takeOfferFeeTxId); if (numOfPeersSeenTx > 2) { - resultHandler.onResult(); + resultHandler.handleResult(); } } diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/shared/tasks/VerifyPeerAccount.java b/src/main/java/io/bitsquare/trade/protocol/trade/shared/tasks/VerifyPeerAccount.java index 00f8d12561..b4d7ba4ad9 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/shared/tasks/VerifyPeerAccount.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/shared/tasks/VerifyPeerAccount.java @@ -34,15 +34,16 @@ public class VerifyPeerAccount { if (blockChainFacade.verifyAccountRegistration()) { if (blockChainFacade.isAccountBlackListed(peersAccountId, peersBankAccount)) { log.error("Taker is blacklisted"); - exceptionHandler.onError(new Exception("Taker is blacklisted")); + exceptionHandler.handleException(new Exception("Taker is blacklisted")); } else { - resultHandler.onResult(); + resultHandler.handleResult(); } } else { log.error("Account registration validation for peer faultHandler.onFault."); - exceptionHandler.onError(new Exception("Account registration validation for peer faultHandler.onFault.")); + exceptionHandler.handleException(new Exception("Account registration validation for peer faultHandler" + + ".onFault.")); } } diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java index f34b03325c..8bfbe31d73 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java @@ -58,7 +58,7 @@ public class CreateAndSignContract { resultHandler.onResult(contract, contractAsJson, signature); } catch (Throwable t) { log.error("Exception at sign contract " + t); - exceptionHandler.onError(t); + exceptionHandler.handleException(t); } } diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java index 37aad9cd01..a083549ba3 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java @@ -43,7 +43,7 @@ public class GetPeerAddress { @Override public void onFailed() { log.error("Lookup for peer address faultHandler.onFault."); - exceptionHandler.onError(new Exception("Lookup for peer address faultHandler.onFault.")); + exceptionHandler.handleException(new Exception("Lookup for peer address faultHandler.onFault.")); } }); } diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java index 586d68d1b1..1c44dad458 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java @@ -57,7 +57,7 @@ public class PayDeposit { resultHandler.onResult(signedTakerDepositTx); } catch (InsufficientMoneyException e) { log.error("Pay deposit faultHandler.onFault due InsufficientMoneyException " + e); - exceptionHandler.onError( + exceptionHandler.handleException( new Exception("Pay deposit faultHandler.onFault due InsufficientMoneyException " + e)); } } diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayTakeOfferFee.java b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayTakeOfferFee.java index fcf0e14276..8889b7a05e 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayTakeOfferFee.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayTakeOfferFee.java @@ -47,13 +47,13 @@ public class PayTakeOfferFee { @Override public void onFailure(@NotNull Throwable t) { log.error("Take offer fee paid faultHandler.onFault with exception: " + t); - exceptionHandler.onError( + exceptionHandler.handleException( new Exception("Take offer fee paid faultHandler.onFault with exception: " + t)); } }); } catch (InsufficientMoneyException e) { log.error("Take offer fee paid faultHandler.onFault due InsufficientMoneyException " + e); - exceptionHandler.onError( + exceptionHandler.handleException( new Exception("Take offer fee paid faultHandler.onFault due to InsufficientMoneyException " + e)); } } diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/RequestTakeOffer.java b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/RequestTakeOffer.java index b2f64004ac..de4f78e7bc 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/RequestTakeOffer.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/RequestTakeOffer.java @@ -38,13 +38,14 @@ public class RequestTakeOffer { @Override public void onResult() { log.trace("RequestTakeOfferMessage successfully arrived at peer"); - resultHandler.onResult(); + resultHandler.handleResult(); } @Override public void onFailed() { log.error("RequestTakeOfferMessage did not arrive at peer"); - exceptionHandler.onError(new Exception("RequestTakeOfferMessage did not arrive at peer")); + exceptionHandler.handleException(new Exception("RequestTakeOfferMessage did not arrive at " + + "peer")); } }); } diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java index 40f2d6754f..81eeef6b87 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java @@ -38,13 +38,13 @@ public class SendPayoutTxToOfferer { @Override public void onResult() { log.trace("PayoutTxPublishedMessage successfully arrived at peer"); - resultHandler.onResult(); + resultHandler.handleResult(); } @Override public void onFailed() { log.error("PayoutTxPublishedMessage did not arrive at peer"); - exceptionHandler.onError(new Exception("PayoutTxPublishedMessage did not arrive at peer")); + exceptionHandler.handleException(new Exception("PayoutTxPublishedMessage did not arrive at peer")); } }); diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java index ad6f7755b4..249baf2de2 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java @@ -72,13 +72,13 @@ public class SendSignedTakerDepositTxAsHex { @Override public void onResult() { log.trace("RequestOffererDepositPublicationMessage successfully arrived at peer"); - resultHandler.onResult(); + resultHandler.handleResult(); } @Override public void onFailed() { log.error("RequestOffererDepositPublicationMessage did not arrive at peer"); - exceptionHandler.onError( + exceptionHandler.handleException( new Exception("RequestOffererDepositPublicationMessage did not arrive at peer")); } }); diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedTxId.java b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedTxId.java index ac7186a28d..4e0d3bd44e 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedTxId.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedTxId.java @@ -48,13 +48,13 @@ public class SendTakeOfferFeePayedTxId { @Override public void onResult() { log.trace("TakeOfferFeePayedMessage successfully arrived at peer"); - resultHandler.onResult(); + resultHandler.handleResult(); } @Override public void onFailed() { log.error("TakeOfferFeePayedMessage did not arrive at peer"); - exceptionHandler.onError(new Exception("TakeOfferFeePayedMessage did not arrive at peer")); + exceptionHandler.handleException(new Exception("TakeOfferFeePayedMessage did not arrive at peer")); } }); } diff --git a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java index 89e6a26923..ddaf56f9e8 100644 --- a/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java +++ b/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java @@ -65,12 +65,12 @@ public class SignAndPublishPayoutTx { @Override public void onFailure(@NotNull Throwable t) { log.error("Exception at takerSignsAndSendsTx " + t); - exceptionHandler.onError(t); + exceptionHandler.handleException(t); } }); } catch (Exception e) { log.error("Exception at takerSignsAndSendsTx " + e); - exceptionHandler.onError(e); + exceptionHandler.handleException(e); } } diff --git a/src/main/java/io/bitsquare/util/task/ErrorMessageHandler.java b/src/main/java/io/bitsquare/util/task/ErrorMessageHandler.java index 57634b3459..db4cf95fa8 100644 --- a/src/main/java/io/bitsquare/util/task/ErrorMessageHandler.java +++ b/src/main/java/io/bitsquare/util/task/ErrorMessageHandler.java @@ -21,5 +21,5 @@ package io.bitsquare.util.task; * For reporting error message only (UI) */ public interface ErrorMessageHandler { - void onFault(String errorMessage); + void handleErrorMessage(String errorMessage); } diff --git a/src/main/java/io/bitsquare/util/task/ExceptionHandler.java b/src/main/java/io/bitsquare/util/task/ExceptionHandler.java index 0f513bcf88..f598cd3585 100644 --- a/src/main/java/io/bitsquare/util/task/ExceptionHandler.java +++ b/src/main/java/io/bitsquare/util/task/ExceptionHandler.java @@ -21,5 +21,5 @@ package io.bitsquare.util.task; * For reporting throwables only */ public interface ExceptionHandler { - void onError(Throwable throwable); + void handleException(Throwable throwable); } diff --git a/src/main/java/io/bitsquare/util/task/FaultHandler.java b/src/main/java/io/bitsquare/util/task/FaultHandler.java index e21b5ce8aa..ecb0bb2874 100644 --- a/src/main/java/io/bitsquare/util/task/FaultHandler.java +++ b/src/main/java/io/bitsquare/util/task/FaultHandler.java @@ -21,5 +21,5 @@ package io.bitsquare.util.task; * For reporting a description message and throwable */ public interface FaultHandler { - void onFault(String message, Throwable throwable); + void handleFault(String message, Throwable throwable); } diff --git a/src/main/java/io/bitsquare/util/task/ResultHandler.java b/src/main/java/io/bitsquare/util/task/ResultHandler.java index ca0ac45475..bb8f25c8ed 100644 --- a/src/main/java/io/bitsquare/util/task/ResultHandler.java +++ b/src/main/java/io/bitsquare/util/task/ResultHandler.java @@ -18,5 +18,5 @@ package io.bitsquare.util.task; public interface ResultHandler { - void onResult(); + void handleResult(); } From 45a4bf7c09c2bba3aeaf9c3c18246334ce50008d Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Wed, 5 Nov 2014 13:17:31 +0100 Subject: [PATCH 05/18] Rename methods used to implement *Handler lambdas --- .../trade/protocol/createoffer/CreateOfferCoordinator.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java index 213ac653f4..042a1041ad 100644 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java +++ b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java @@ -132,10 +132,10 @@ public class CreateOfferCoordinator { private void onOfferFeeTxBroadCasted() { model.setState(State.OFFER_FEE_BROAD_CASTED); - offerRepository.addOffer(offer, this::onOfferPublishedToDHT, faultHandler); + offerRepository.addOffer(offer, this::addOfferResultHandler, faultHandler); } - private void onOfferPublishedToDHT() { + private void addOfferResultHandler() { model.setState(State.OFFER_PUBLISHED_TO_DHT); resultHandler.onResult(model.transaction); } @@ -162,7 +162,7 @@ public class CreateOfferCoordinator { case OFFER_FEE_BROAD_CASTED: // actually the only replay case here, tx publish was successful but storage to dht failed. // Republish the offer to DHT - offerRepository.addOffer(offer, this::onOfferPublishedToDHT, faultHandler); + offerRepository.addOffer(offer, this::addOfferResultHandler, faultHandler); break; case OFFER_PUBLISHED_TO_DHT: // should be impossible From b3670c5201a989330bc8914835a2abef822beac7 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Wed, 5 Nov 2014 13:21:07 +0100 Subject: [PATCH 06/18] Inline CreateOfferCoordinator#onFailed --- .../protocol/createoffer/CreateOfferCoordinator.java | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java index 042a1041ad..bdf58aee24 100644 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java +++ b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java @@ -115,19 +115,19 @@ public class CreateOfferCoordinator { public void start() { model.setState(State.STARTED); - VerifyOffer.run(this::onOfferValidated, this::onFailed, offer); + VerifyOffer.run(this::onOfferValidated, faultHandler, offer); } private void onOfferValidated() { model.setState(State.VALIDATED); - CreateOfferFeeTx.run(this::onOfferFeeTxCreated, this::onFailed, walletFacade, offer.getId()); + CreateOfferFeeTx.run(this::onOfferFeeTxCreated, faultHandler, walletFacade, offer.getId()); } private void onOfferFeeTxCreated(Transaction transaction) { model.transaction = transaction; model.setState(State.OFFER_FEE_TX_CREATED); offer.setOfferFeePaymentTxID(transaction.getHashAsString()); - BroadCastOfferFeeTx.run(this::onOfferFeeTxBroadCasted, this::onFailed, walletFacade, transaction); + BroadCastOfferFeeTx.run(this::onOfferFeeTxBroadCasted, faultHandler, walletFacade, transaction); } private void onOfferFeeTxBroadCasted() { @@ -140,11 +140,6 @@ public class CreateOfferCoordinator { resultHandler.onResult(model.transaction); } - private void onFailed(String message, Throwable throwable) { - //TODO recover policy, timer - faultHandler.handleFault(message, throwable); - } - /////////////////////////////////////////////////////////////////////////////////////////// // Recovery From 7fffa81f0268af4b9922ae701667f8e849ade0d9 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Wed, 5 Nov 2014 13:41:39 +0100 Subject: [PATCH 07/18] Replace VerifyOffer class with Offer#validate method --- src/main/java/io/bitsquare/offer/Offer.java | 40 ++++++++-- .../createoffer/CreateOfferCoordinator.java | 15 ++-- .../createoffer/tasks/VerifyOffer.java | 74 ------------------- 3 files changed, 44 insertions(+), 85 deletions(-) delete mode 100644 src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/VerifyOffer.java diff --git a/src/main/java/io/bitsquare/offer/Offer.java b/src/main/java/io/bitsquare/offer/Offer.java index 8cfa2940e4..a80e4e1dce 100644 --- a/src/main/java/io/bitsquare/offer/Offer.java +++ b/src/main/java/io/bitsquare/offer/Offer.java @@ -19,6 +19,7 @@ package io.bitsquare.offer; import io.bitsquare.arbitrator.Arbitrator; import io.bitsquare.bank.BankAccountType; +import io.bitsquare.btc.Restrictions; import io.bitsquare.locale.Country; import org.bitcoinj.core.Coin; @@ -34,6 +35,9 @@ import java.util.Date; import java.util.List; import java.util.Locale; +import static com.google.common.base.Preconditions.*; +import static io.bitsquare.btc.Restrictions.MIN_TRADE_AMOUNT; + //TODO flatten down? public class Offer implements Serializable { @@ -194,6 +198,37 @@ public class Offer implements Serializable { return bankAccountUID; } + public Date getCreationDate() { + return creationDate; + } + + public void validate() throws Exception { + checkNotNull(getAcceptedCountries(), "AcceptedCountries is null"); + checkNotNull(getAcceptedLanguageLocales(), "AcceptedLanguageLocales is null"); + checkNotNull(getAmount(), "Amount is null"); + checkNotNull(getArbitrators(), "Arbitrator is null"); + checkNotNull(getBankAccountId(), "BankAccountId is null"); + checkNotNull(getSecurityDeposit(), "SecurityDeposit is null"); + checkNotNull(getCreationDate(), "CreationDate is null"); + checkNotNull(getCurrency(), "Currency is null"); + checkNotNull(getDirection(), "Direction is null"); + checkNotNull(getId(), "Id is null"); + checkNotNull(getMessagePublicKey(), "MessagePublicKey is null"); + checkNotNull(getMinAmount(), "MinAmount is null"); + checkNotNull(getPrice(), "Price is null"); + + checkArgument(getMinAmount().compareTo(MIN_TRADE_AMOUNT) >= 0, "MinAmount is less then " + MIN_TRADE_AMOUNT); + checkArgument(getAmount().compareTo(MIN_TRADE_AMOUNT) >= 0, "Amount is less then " + MIN_TRADE_AMOUNT); + checkArgument(getAmount().compareTo(getMinAmount()) >= 0, "MinAmount is larger then Amount"); + checkArgument(getSecurityDeposit().isPositive(), "SecurityDeposit is not positive"); + checkArgument(getPrice().isPositive(), "Price is 0 or negative"); + + // TODO check balance + // securityDeposit + // Coin totalsToFund + // getAddressInfoByTradeID(offerId) + // TODO when offer is flattened continue here... + } @Override public String toString() { @@ -215,9 +250,4 @@ public class Offer implements Serializable { ", arbitrator=" + arbitrators + '}'; } - - - public Date getCreationDate() { - return creationDate; - } } diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java index bdf58aee24..0bd14957ec 100644 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java +++ b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java @@ -22,11 +22,10 @@ import io.bitsquare.msg.MessageFacade; import io.bitsquare.offer.Offer; import io.bitsquare.offer.OfferRepository; import io.bitsquare.persistence.Persistence; -import io.bitsquare.util.task.FaultHandler; import io.bitsquare.trade.handlers.TransactionResultHandler; import io.bitsquare.trade.protocol.createoffer.tasks.BroadCastOfferFeeTx; import io.bitsquare.trade.protocol.createoffer.tasks.CreateOfferFeeTx; -import io.bitsquare.trade.protocol.createoffer.tasks.VerifyOffer; +import io.bitsquare.util.task.FaultHandler; import org.bitcoinj.core.Transaction; @@ -115,11 +114,15 @@ public class CreateOfferCoordinator { public void start() { model.setState(State.STARTED); - VerifyOffer.run(this::onOfferValidated, faultHandler, offer); - } - private void onOfferValidated() { - model.setState(State.VALIDATED); + try { + offer.validate(); + model.setState(State.VALIDATED); + } catch (Exception ex) { + faultHandler.handleFault("Offer validation failed", ex); + return; + } + CreateOfferFeeTx.run(this::onOfferFeeTxCreated, faultHandler, walletFacade, offer.getId()); } diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/VerifyOffer.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/VerifyOffer.java deleted file mode 100644 index 7c6e8ea6c4..0000000000 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/VerifyOffer.java +++ /dev/null @@ -1,74 +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.trade.protocol.createoffer.tasks; - -import io.bitsquare.btc.Restrictions; -import io.bitsquare.offer.Offer; -import io.bitsquare.util.task.FaultHandler; -import io.bitsquare.util.task.ResultHandler; - -import javax.annotation.concurrent.Immutable; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static com.google.common.base.Preconditions.*; - -@Immutable -public class VerifyOffer { - private static final Logger log = LoggerFactory.getLogger(VerifyOffer.class); - - public static void run(ResultHandler resultHandler, FaultHandler faultHandler, Offer offer) { - try { - checkNotNull(offer.getAcceptedCountries(), "AcceptedCountries is null"); - checkNotNull(offer.getAcceptedLanguageLocales(), "AcceptedLanguageLocales is null"); - checkNotNull(offer.getAmount(), "Amount is null"); - checkNotNull(offer.getArbitrators(), "Arbitrator is null"); - //checkNotNull(offer.getBankAccountCountry(), "BankAccountCountry is null"); - checkNotNull(offer.getBankAccountId(), "BankAccountId is null"); - checkNotNull(offer.getSecurityDeposit(), "SecurityDeposit is null"); - checkNotNull(offer.getCreationDate(), "CreationDate is null"); - checkNotNull(offer.getCurrency(), "Currency is null"); - checkNotNull(offer.getDirection(), "Direction is null"); - checkNotNull(offer.getId(), "Id is null"); - checkNotNull(offer.getMessagePublicKey(), "MessagePublicKey is null"); - checkNotNull(offer.getMinAmount(), "MinAmount is null"); - checkNotNull(offer.getPrice(), "Price is null"); - - //checkArgument(!offer.getAcceptedCountries().isEmpty(), "AcceptedCountries is empty"); - //checkArgument(!offer.getAcceptedLanguageLocales().isEmpty(), "AcceptedLanguageLocales is empty"); - checkArgument(offer.getMinAmount().compareTo(Restrictions.MIN_TRADE_AMOUNT) >= 0, - "MinAmount is less then " + Restrictions.MIN_TRADE_AMOUNT); - checkArgument(offer.getAmount().compareTo(Restrictions.MIN_TRADE_AMOUNT) >= 0, - "Amount is less then " + Restrictions.MIN_TRADE_AMOUNT); - checkArgument(offer.getAmount().compareTo(offer.getMinAmount()) >= 0, "MinAmount is larger then Amount"); - checkArgument(offer.getSecurityDeposit().isPositive(), "SecurityDeposit is not positive"); - checkArgument(offer.getPrice().isPositive(), "Price is 0 or negative"); - - // TODO check balance - // securityDeposit - // Coin totalsToFund - // getAddressInfoByTradeID(offerId) - // TODO when offer is flattened continue here... - - resultHandler.handleResult(); - } catch (Throwable t) { - faultHandler.handleFault("Offer validation failed.", t); - } - } -} From 2adac9475e9d94c3dc2a8b8f1724b3bf3749eee1 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Wed, 5 Nov 2014 14:00:39 +0100 Subject: [PATCH 08/18] Inline CreateOfferFeeTx#run into CreateOfferCoordinator --- .../createoffer/CreateOfferCoordinator.java | 22 ++++++---- .../createoffer/tasks/CreateOfferFeeTx.java | 44 ------------------- 2 files changed, 14 insertions(+), 52 deletions(-) delete mode 100644 src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/CreateOfferFeeTx.java diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java index 0bd14957ec..45de559c3e 100644 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java +++ b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java @@ -24,9 +24,9 @@ import io.bitsquare.offer.OfferRepository; import io.bitsquare.persistence.Persistence; import io.bitsquare.trade.handlers.TransactionResultHandler; import io.bitsquare.trade.protocol.createoffer.tasks.BroadCastOfferFeeTx; -import io.bitsquare.trade.protocol.createoffer.tasks.CreateOfferFeeTx; import io.bitsquare.util.task.FaultHandler; +import org.bitcoinj.core.InsufficientMoneyException; import org.bitcoinj.core.Transaction; import java.io.Serializable; @@ -123,14 +123,20 @@ public class CreateOfferCoordinator { return; } - CreateOfferFeeTx.run(this::onOfferFeeTxCreated, faultHandler, walletFacade, offer.getId()); - } + try { + model.transaction = walletFacade.createOfferFeeTx(offer.getId()); + model.setState(State.OFFER_FEE_TX_CREATED); + offer.setOfferFeePaymentTxID(model.transaction.getHashAsString()); + } catch (InsufficientMoneyException ex) { + faultHandler.handleFault( + "Offer fee payment failed because there is insufficient money in the trade wallet", ex); + return; + } catch (Throwable ex) { + faultHandler.handleFault("Offer fee payment failed because of an exception occurred", ex); + return; + } - private void onOfferFeeTxCreated(Transaction transaction) { - model.transaction = transaction; - model.setState(State.OFFER_FEE_TX_CREATED); - offer.setOfferFeePaymentTxID(transaction.getHashAsString()); - BroadCastOfferFeeTx.run(this::onOfferFeeTxBroadCasted, faultHandler, walletFacade, transaction); + BroadCastOfferFeeTx.run(this::onOfferFeeTxBroadCasted, faultHandler, walletFacade, model.transaction); } private void onOfferFeeTxBroadCasted() { diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/CreateOfferFeeTx.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/CreateOfferFeeTx.java deleted file mode 100644 index 8d60fcc2a4..0000000000 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/CreateOfferFeeTx.java +++ /dev/null @@ -1,44 +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.trade.protocol.createoffer.tasks; - -import io.bitsquare.btc.WalletFacade; -import io.bitsquare.util.task.FaultHandler; -import io.bitsquare.trade.handlers.TransactionResultHandler; - -import org.bitcoinj.core.InsufficientMoneyException; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class CreateOfferFeeTx { - private static final Logger log = LoggerFactory.getLogger(CreateOfferFeeTx.class); - - public static void run(TransactionResultHandler resultHandler, FaultHandler faultHandler, - WalletFacade walletFacade, String offerId) { - try { - resultHandler.onResult(walletFacade.createOfferFeeTx(offerId)); - } catch (InsufficientMoneyException e) { - faultHandler.handleFault("Offer fee payment failed because there is insufficient money in the trade " + - "wallet. " + - "", e); - } catch (Throwable t) { - faultHandler.handleFault("Offer fee payment failed because of an exception occurred. ", t); - } - } -} From 40d7da8d1098d8b792ced8b2652d3b41b4ac17d9 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Wed, 5 Nov 2014 14:07:55 +0100 Subject: [PATCH 09/18] Inline BroadCastOfferFeeTx#run into CreateOfferCoordinator --- .../createoffer/CreateOfferCoordinator.java | 35 ++++++++-- .../tasks/BroadCastOfferFeeTx.java | 65 ------------------- 2 files changed, 29 insertions(+), 71 deletions(-) delete mode 100644 src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/BroadCastOfferFeeTx.java diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java index 45de559c3e..d2f9be3873 100644 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java +++ b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java @@ -23,12 +23,13 @@ import io.bitsquare.offer.Offer; import io.bitsquare.offer.OfferRepository; import io.bitsquare.persistence.Persistence; import io.bitsquare.trade.handlers.TransactionResultHandler; -import io.bitsquare.trade.protocol.createoffer.tasks.BroadCastOfferFeeTx; import io.bitsquare.util.task.FaultHandler; import org.bitcoinj.core.InsufficientMoneyException; import org.bitcoinj.core.Transaction; +import com.google.common.util.concurrent.FutureCallback; + import java.io.Serializable; import javax.annotation.concurrent.Immutable; @@ -136,12 +137,34 @@ public class CreateOfferCoordinator { return; } - BroadCastOfferFeeTx.run(this::onOfferFeeTxBroadCasted, faultHandler, walletFacade, model.transaction); - } + try { + walletFacade.broadcastCreateOfferFeeTx(model.transaction, new FutureCallback() { + @Override + public void onSuccess(Transaction transaction) { + log.info("sendResult onSuccess:" + transaction); + if (transaction == null) { + faultHandler.handleFault("Offer fee payment failed.", + new Exception("Offer fee payment failed. Transaction = null.")); + return; + } - private void onOfferFeeTxBroadCasted() { - model.setState(State.OFFER_FEE_BROAD_CASTED); - offerRepository.addOffer(offer, this::addOfferResultHandler, faultHandler); + try { + model.setState(State.OFFER_FEE_BROAD_CASTED); + offerRepository.addOffer(offer, CreateOfferCoordinator.this::addOfferResultHandler, faultHandler); + } catch (Exception e) { + faultHandler.handleFault("Offer fee payment failed.", e); + } + } + + @Override + public void onFailure(Throwable t) { + faultHandler.handleFault("Offer fee payment failed with an exception.", t); + } + }); + } catch (Throwable t) { + faultHandler.handleFault("Offer fee payment failed because an exception occurred.", t); + return; + } } private void addOfferResultHandler() { diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/BroadCastOfferFeeTx.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/BroadCastOfferFeeTx.java deleted file mode 100644 index eeac649317..0000000000 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/tasks/BroadCastOfferFeeTx.java +++ /dev/null @@ -1,65 +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.trade.protocol.createoffer.tasks; - -import io.bitsquare.btc.WalletFacade; -import io.bitsquare.util.task.FaultHandler; -import io.bitsquare.util.task.ResultHandler; - -import org.bitcoinj.core.Transaction; - -import com.google.common.util.concurrent.FutureCallback; - -import org.jetbrains.annotations.NotNull; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class BroadCastOfferFeeTx { - private static final Logger log = LoggerFactory.getLogger(BroadCastOfferFeeTx.class); - - public static void run(ResultHandler resultHandler, FaultHandler faultHandler, WalletFacade walletFacade, - Transaction tx) { - try { - walletFacade.broadcastCreateOfferFeeTx(tx, new FutureCallback() { - @Override - public void onSuccess(@javax.annotation.Nullable Transaction transaction) { - log.info("sendResult onSuccess:" + transaction); - if (transaction != null) { - try { - resultHandler.handleResult(); - } catch (Exception e) { - faultHandler.handleFault("Offer fee payment failed.", e); - } - } - else { - faultHandler.handleFault("Offer fee payment failed.", - new Exception("Offer fee payment failed. Transaction = null.")); - } - } - - @Override - public void onFailure(@NotNull Throwable t) { - faultHandler.handleFault("Offer fee payment failed with an exception.", t); - } - }); - } catch (Throwable t) { - faultHandler.handleFault("Offer fee payment failed because an exception occurred.", t); - } - } -} From 72423dce8adc7a0fadbb9efedbe801c7496fcb88 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Wed, 5 Nov 2014 14:50:39 +0100 Subject: [PATCH 10/18] Remove unused MessageFacade from CreateOfferCoordinator --- src/main/java/io/bitsquare/trade/TradeManager.java | 1 - .../createoffer/CreateOfferCoordinator.java | 14 +++++--------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/main/java/io/bitsquare/trade/TradeManager.java b/src/main/java/io/bitsquare/trade/TradeManager.java index 86a3206c07..4521d080ec 100644 --- a/src/main/java/io/bitsquare/trade/TradeManager.java +++ b/src/main/java/io/bitsquare/trade/TradeManager.java @@ -176,7 +176,6 @@ public class TradeManager { CreateOfferCoordinator createOfferCoordinator = new CreateOfferCoordinator(persistence, offer, walletFacade, - messageFacade, (transactionId) -> { try { offer.setOfferFeePaymentTxID(transactionId.getHashAsString()); diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java index d2f9be3873..722b900e84 100644 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java +++ b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java @@ -18,7 +18,6 @@ package io.bitsquare.trade.protocol.createoffer; import io.bitsquare.btc.WalletFacade; -import io.bitsquare.msg.MessageFacade; import io.bitsquare.offer.Offer; import io.bitsquare.offer.OfferRepository; import io.bitsquare.persistence.Persistence; @@ -86,25 +85,22 @@ public class CreateOfferCoordinator { private final Offer offer; private final WalletFacade walletFacade; - private final MessageFacade messageFacade; private final TransactionResultHandler resultHandler; private final FaultHandler faultHandler; private final Model model; private final OfferRepository offerRepository; public CreateOfferCoordinator(Persistence persistence, Offer offer, WalletFacade walletFacade, - MessageFacade messageFacade, TransactionResultHandler resultHandler, - FaultHandler faultHandler, OfferRepository offerRepository) { - this(offer, walletFacade, messageFacade, resultHandler, faultHandler, new Model(persistence), offerRepository); + TransactionResultHandler resultHandler, FaultHandler faultHandler, + OfferRepository offerRepository) { + this(offer, walletFacade, resultHandler, faultHandler, new Model(persistence), offerRepository); } // for recovery from model - public CreateOfferCoordinator(Offer offer, WalletFacade walletFacade, MessageFacade messageFacade, - TransactionResultHandler resultHandler, FaultHandler faultHandler, Model model, - OfferRepository offerRepository) { + public CreateOfferCoordinator(Offer offer, WalletFacade walletFacade, TransactionResultHandler resultHandler, + FaultHandler faultHandler, Model model, OfferRepository offerRepository) { this.offer = offer; this.walletFacade = walletFacade; - this.messageFacade = messageFacade; this.resultHandler = resultHandler; this.faultHandler = faultHandler; this.model = model; From aeaef72834d9c37aa3e912181bba6464a90049c4 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Wed, 5 Nov 2014 15:37:07 +0100 Subject: [PATCH 11/18] Remove offer creation recovery from CreateOfferCoordinator Recovery was never fully implemented, and removing it dramatically simplifies things. We can return to this with a proper analysis of finite state machine libraries when the time comes. --- .../java/io/bitsquare/trade/TradeManager.java | 46 +++----- .../createoffer/CreateOfferCoordinator.java | 108 ++---------------- 2 files changed, 23 insertions(+), 131 deletions(-) diff --git a/src/main/java/io/bitsquare/trade/TradeManager.java b/src/main/java/io/bitsquare/trade/TradeManager.java index 4521d080ec..1d9d7d7dc4 100644 --- a/src/main/java/io/bitsquare/trade/TradeManager.java +++ b/src/main/java/io/bitsquare/trade/TradeManager.java @@ -84,7 +84,6 @@ public class TradeManager { //TODO store TakerAsSellerProtocol in trade private final Map takerAsSellerProtocolMap = new HashMap<>(); private final Map offererAsBuyerProtocolMap = new HashMap<>(); - private final Map createOfferCoordinatorMap = new HashMap<>(); private final ObservableMap offers = FXCollections.observableHashMap(); private final ObservableMap pendingTrades = FXCollections.observableHashMap(); @@ -167,36 +166,23 @@ public class TradeManager { settings.getAcceptedCountries(), settings.getAcceptedLanguageLocales()); - if (createOfferCoordinatorMap.containsKey(offer.getId())) { - errorMessageHandler.handleErrorMessage("A createOfferCoordinator for the offer with the id " + offer - .getId() + " " + - "already exists."); - } - else { - CreateOfferCoordinator createOfferCoordinator = new CreateOfferCoordinator(persistence, - offer, - walletFacade, - (transactionId) -> { - try { - offer.setOfferFeePaymentTxID(transactionId.getHashAsString()); - addOffer(offer); - createOfferCoordinatorMap.remove(offer.getId()); + CreateOfferCoordinator createOfferCoordinator = new CreateOfferCoordinator( + offer, + walletFacade, + (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())); + } + }, + (message, throwable) -> errorMessageHandler.handleErrorMessage(message), + offerRepository); - resultHandler.onResult(transactionId); - } catch (Exception e) { - //TODO retry policy - errorMessageHandler.handleErrorMessage("Could not save offer. Reason: " + - (e.getCause() != null ? e.getCause().getMessage() : e.toString())); - createOfferCoordinatorMap.remove(offer.getId()); - } - }, - (message, throwable) -> { - errorMessageHandler.handleErrorMessage(message); - createOfferCoordinatorMap.remove(offer.getId()); - }, offerRepository); - createOfferCoordinatorMap.put(offer.getId(), createOfferCoordinator); - createOfferCoordinator.start(); - } + createOfferCoordinator.start(); } private void addOffer(Offer offer) { diff --git a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java index 722b900e84..c9bd515b22 100644 --- a/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java +++ b/src/main/java/io/bitsquare/trade/protocol/createoffer/CreateOfferCoordinator.java @@ -20,7 +20,6 @@ package io.bitsquare.trade.protocol.createoffer; import io.bitsquare.btc.WalletFacade; import io.bitsquare.offer.Offer; import io.bitsquare.offer.OfferRepository; -import io.bitsquare.persistence.Persistence; import io.bitsquare.trade.handlers.TransactionResultHandler; import io.bitsquare.util.task.FaultHandler; @@ -29,57 +28,13 @@ import org.bitcoinj.core.Transaction; import com.google.common.util.concurrent.FutureCallback; -import java.io.Serializable; - -import javax.annotation.concurrent.Immutable; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Responsible for coordinating tasks involved in the create offer process. - * It holds the model.state of the current process and support recovery if possible. */ -//TODO recover policy, timer - -@Immutable public class CreateOfferCoordinator { - public enum State { - INITED, - STARTED, - VALIDATED, - OFFER_FEE_TX_CREATED, - OFFER_FEE_BROAD_CASTED, - OFFER_PUBLISHED_TO_DHT - } - - /** - * The model is not immutable but only exposed to the CreateOfferCoordinator - */ - static class Model implements Serializable { - private static final long serialVersionUID = 3027720554200858916L; - - private final Persistence persistence; - private State state; - //TODO use tx id - Transaction transaction; - - Model(Persistence persistence) { - this.persistence = persistence; - } - - public State getState() { - return state; - } - - public void setState(State state) { - this.state = state; - - //TODO will have performance issues, but could be handled inside the persistence solution (queue up save - // requests and exec. them on dedicated thread) - persistence.write(this, "state", state); - } - } private static final Logger log = LoggerFactory.getLogger(CreateOfferCoordinator.class); @@ -87,43 +42,30 @@ public class CreateOfferCoordinator { private final WalletFacade walletFacade; private final TransactionResultHandler resultHandler; private final FaultHandler faultHandler; - private final Model model; private final OfferRepository offerRepository; - public CreateOfferCoordinator(Persistence persistence, Offer offer, WalletFacade walletFacade, - TransactionResultHandler resultHandler, FaultHandler faultHandler, - OfferRepository offerRepository) { - this(offer, walletFacade, resultHandler, faultHandler, new Model(persistence), offerRepository); - } - - // for recovery from model public CreateOfferCoordinator(Offer offer, WalletFacade walletFacade, TransactionResultHandler resultHandler, - FaultHandler faultHandler, Model model, OfferRepository offerRepository) { + FaultHandler faultHandler, OfferRepository offerRepository) { this.offer = offer; this.walletFacade = walletFacade; this.resultHandler = resultHandler; this.faultHandler = faultHandler; - this.model = model; this.offerRepository = offerRepository; - - model.setState(State.INITED); } public void start() { - model.setState(State.STARTED); - try { offer.validate(); - model.setState(State.VALIDATED); } catch (Exception ex) { faultHandler.handleFault("Offer validation failed", ex); return; } + Transaction transaction; + try { - model.transaction = walletFacade.createOfferFeeTx(offer.getId()); - model.setState(State.OFFER_FEE_TX_CREATED); - offer.setOfferFeePaymentTxID(model.transaction.getHashAsString()); + transaction = walletFacade.createOfferFeeTx(offer.getId()); + offer.setOfferFeePaymentTxID(transaction.getHashAsString()); } catch (InsufficientMoneyException ex) { faultHandler.handleFault( "Offer fee payment failed because there is insufficient money in the trade wallet", ex); @@ -134,7 +76,7 @@ public class CreateOfferCoordinator { } try { - walletFacade.broadcastCreateOfferFeeTx(model.transaction, new FutureCallback() { + walletFacade.broadcastCreateOfferFeeTx(transaction, new FutureCallback() { @Override public void onSuccess(Transaction transaction) { log.info("sendResult onSuccess:" + transaction); @@ -145,8 +87,7 @@ public class CreateOfferCoordinator { } try { - model.setState(State.OFFER_FEE_BROAD_CASTED); - offerRepository.addOffer(offer, CreateOfferCoordinator.this::addOfferResultHandler, faultHandler); + offerRepository.addOffer(offer, () -> resultHandler.onResult(transaction), faultHandler); } catch (Exception e) { faultHandler.handleFault("Offer fee payment failed.", e); } @@ -162,39 +103,4 @@ public class CreateOfferCoordinator { return; } } - - private void addOfferResultHandler() { - model.setState(State.OFFER_PUBLISHED_TO_DHT); - resultHandler.onResult(model.transaction); - } - - - /////////////////////////////////////////////////////////////////////////////////////////// - // Recovery - /////////////////////////////////////////////////////////////////////////////////////////// - - public void recover() { - switch (model.getState()) { - case INITED: - case STARTED: - case VALIDATED: - case OFFER_FEE_TX_CREATED: - // we start over again, no critical and expensive work done yet - start(); - break; - case OFFER_FEE_BROAD_CASTED: - // actually the only replay case here, tx publish was successful but storage to dht failed. - // Republish the offer to DHT - offerRepository.addOffer(offer, this::addOfferResultHandler, faultHandler); - break; - case OFFER_PUBLISHED_TO_DHT: - // should be impossible - log.warn("That case must not happen."); - break; - default: - log.error("Illegal state passes. That must not happen"); - break; - } - } - } From 57f2b43845a1caf52f2215184a3f477dbff43d6a Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Thu, 6 Nov 2014 14:59:59 +0100 Subject: [PATCH 12/18] Extract isSuccess(BaseFuture) method into util class --- .../io/bitsquare/msg/TomP2PMessageFacade.java | 8 ++--- .../network/tomp2p/BaseFutureUtil.java | 29 +++++++++++++++++++ .../offer/TomP2POfferRepository.java | 8 ++--- 3 files changed, 33 insertions(+), 12 deletions(-) create mode 100644 src/main/java/io/bitsquare/network/tomp2p/BaseFutureUtil.java diff --git a/src/main/java/io/bitsquare/msg/TomP2PMessageFacade.java b/src/main/java/io/bitsquare/msg/TomP2PMessageFacade.java index 0548e793c2..614586e053 100644 --- a/src/main/java/io/bitsquare/msg/TomP2PMessageFacade.java +++ b/src/main/java/io/bitsquare/msg/TomP2PMessageFacade.java @@ -53,6 +53,8 @@ import net.tomp2p.utils.Utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static io.bitsquare.network.tomp2p.BaseFutureUtil.isSuccess; + /** * That facade delivers direct messaging and DHT functionality from the TomP2P library @@ -280,12 +282,6 @@ class TomP2PMessageFacade implements MessageFacade { incomingMessageListeners.remove(listener); } - // Isolate the success handling as there is bug in port forwarding mode - private boolean isSuccess(BaseFuture baseFuture) { - // return baseFuture.isSuccess(); - return true; - } - /////////////////////////////////////////////////////////////////////////////////////////// // Incoming message handler /////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/main/java/io/bitsquare/network/tomp2p/BaseFutureUtil.java b/src/main/java/io/bitsquare/network/tomp2p/BaseFutureUtil.java new file mode 100644 index 0000000000..7d35bfc73c --- /dev/null +++ b/src/main/java/io/bitsquare/network/tomp2p/BaseFutureUtil.java @@ -0,0 +1,29 @@ +/* + * 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.network.tomp2p; + +import net.tomp2p.futures.BaseFuture; + +public class BaseFutureUtil { + + // Isolate the success handling as there is bug in port forwarding mode + public static boolean isSuccess(BaseFuture baseFuture) { + // return baseFuture.isSuccess(); + return true; + } +} diff --git a/src/main/java/io/bitsquare/offer/TomP2POfferRepository.java b/src/main/java/io/bitsquare/offer/TomP2POfferRepository.java index 6cd949b0d1..19fd758847 100644 --- a/src/main/java/io/bitsquare/offer/TomP2POfferRepository.java +++ b/src/main/java/io/bitsquare/offer/TomP2POfferRepository.java @@ -46,6 +46,8 @@ import net.tomp2p.storage.Data; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static io.bitsquare.network.tomp2p.BaseFutureUtil.isSuccess; + class TomP2POfferRepository implements OfferRepository { private static final Logger log = LoggerFactory.getLogger(TomP2POfferRepository.class); @@ -289,10 +291,4 @@ class TomP2POfferRepository implements OfferRepository { private Number160 getInvalidatedLocationKey(Number160 locationKey) { return Number160.createHash(locationKey + "invalidated"); } - - // Isolate the success handling as there is bug in port forwarding mode - private boolean isSuccess(BaseFuture baseFuture) { - // return baseFuture.isSuccess(); - return true; - } } From 467f76fd76202bd64b01f499c3cb88ddedd9b2de Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Thu, 6 Nov 2014 15:20:05 +0100 Subject: [PATCH 13/18] Introduce io.bitsquare.offer.tomp2p package --- .../io/bitsquare/app/BitsquareModule.java | 5 ++- .../java/io/bitsquare/offer/OfferModule.java | 8 +++-- .../offer/tomp2p/TomP2POfferModule.java | 36 +++++++++++++++++++ .../{ => tomp2p}/TomP2POfferRepository.java | 4 ++- 4 files changed, 46 insertions(+), 7 deletions(-) create mode 100644 src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferModule.java rename src/main/java/io/bitsquare/offer/{ => tomp2p}/TomP2POfferRepository.java (99%) diff --git a/src/main/java/io/bitsquare/app/BitsquareModule.java b/src/main/java/io/bitsquare/app/BitsquareModule.java index da11e8aa60..32312a5913 100644 --- a/src/main/java/io/bitsquare/app/BitsquareModule.java +++ b/src/main/java/io/bitsquare/app/BitsquareModule.java @@ -24,6 +24,7 @@ import io.bitsquare.gui.GuiModule; import io.bitsquare.msg.DefaultMessageModule; import io.bitsquare.msg.MessageModule; import io.bitsquare.offer.OfferModule; +import io.bitsquare.offer.tomp2p.TomP2POfferModule; import io.bitsquare.persistence.Persistence; import io.bitsquare.settings.Settings; import io.bitsquare.trade.TradeModule; @@ -97,9 +98,7 @@ public class BitsquareModule extends AbstractBitsquareModule { return new TradeModule(properties); } - protected OfferModule offerModule() { - return new OfferModule(properties); - } + protected OfferModule offerModule() { return new TomP2POfferModule(properties); } protected GuiModule guiModule() { return new GuiModule(properties, primaryStage); diff --git a/src/main/java/io/bitsquare/offer/OfferModule.java b/src/main/java/io/bitsquare/offer/OfferModule.java index dc7b826183..47f500b5a3 100644 --- a/src/main/java/io/bitsquare/offer/OfferModule.java +++ b/src/main/java/io/bitsquare/offer/OfferModule.java @@ -21,14 +21,16 @@ import io.bitsquare.AbstractBitsquareModule; import java.util.Properties; -public class OfferModule extends AbstractBitsquareModule { +public abstract class OfferModule extends AbstractBitsquareModule { - public OfferModule(Properties properties) { + protected OfferModule(Properties properties) { super(properties); } @Override protected void configure() { - bind(OfferRepository.class).to(TomP2POfferRepository.class).asEagerSingleton(); + bind(OfferRepository.class).to(offerRepository()).asEagerSingleton(); } + + protected abstract Class offerRepository(); } diff --git a/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferModule.java b/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferModule.java new file mode 100644 index 0000000000..e60ea70bfb --- /dev/null +++ b/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferModule.java @@ -0,0 +1,36 @@ +/* + * 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.offer.tomp2p; + +import io.bitsquare.AbstractBitsquareModule; +import io.bitsquare.offer.OfferModule; +import io.bitsquare.offer.OfferRepository; + +import java.util.Properties; + +public class TomP2POfferModule extends OfferModule { + + public TomP2POfferModule(Properties properties) { + super(properties); + } + + @Override + public Class offerRepository() { + return TomP2POfferRepository.class; + } +} diff --git a/src/main/java/io/bitsquare/offer/TomP2POfferRepository.java b/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferRepository.java similarity index 99% rename from src/main/java/io/bitsquare/offer/TomP2POfferRepository.java rename to src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferRepository.java index 19fd758847..2f18103e56 100644 --- a/src/main/java/io/bitsquare/offer/TomP2POfferRepository.java +++ b/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferRepository.java @@ -15,9 +15,11 @@ * along with Bitsquare. If not, see . */ -package io.bitsquare.offer; +package io.bitsquare.offer.tomp2p; import io.bitsquare.msg.P2PNode; +import io.bitsquare.offer.Offer; +import io.bitsquare.offer.OfferRepository; import io.bitsquare.util.task.FaultHandler; import io.bitsquare.util.task.ResultHandler; From 96fa93f608970817d407a909e5b977970794f567 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Thu, 6 Nov 2014 16:03:42 +0100 Subject: [PATCH 14/18] Introduce io.bitsquare.msg.tomp2p package --- .../io/bitsquare/app/BitsquareModule.java | 4 +- .../bitsquare/msg/DefaultMessageModule.java | 54 ------------------- .../java/io/bitsquare/msg/MessageModule.java | 40 +++++++++++++- .../{ => tomp2p}/BootstrappedPeerFactory.java | 4 +- .../msg/{ => tomp2p}/TomP2PMessageFacade.java | 8 +-- .../msg/tomp2p/TomP2PMessageModule.java | 41 ++++++++++++++ .../{P2PNode.java => tomp2p/TomP2PNode.java} | 23 ++++---- .../offer/tomp2p/TomP2POfferModule.java | 1 - .../offer/tomp2p/TomP2POfferRepository.java | 6 +-- .../TomP2PNodeTest.java} | 32 +++++------ 10 files changed, 117 insertions(+), 96 deletions(-) delete mode 100644 src/main/java/io/bitsquare/msg/DefaultMessageModule.java rename src/main/java/io/bitsquare/msg/{ => tomp2p}/BootstrappedPeerFactory.java (99%) rename src/main/java/io/bitsquare/msg/{ => tomp2p}/TomP2PMessageFacade.java (98%) create mode 100644 src/main/java/io/bitsquare/msg/tomp2p/TomP2PMessageModule.java rename src/main/java/io/bitsquare/msg/{P2PNode.java => tomp2p/TomP2PNode.java} (96%) rename src/test/java/io/bitsquare/msg/{P2PNodeTest.java => tomp2p/TomP2PNodeTest.java} (94%) diff --git a/src/main/java/io/bitsquare/app/BitsquareModule.java b/src/main/java/io/bitsquare/app/BitsquareModule.java index 32312a5913..afb3b548ab 100644 --- a/src/main/java/io/bitsquare/app/BitsquareModule.java +++ b/src/main/java/io/bitsquare/app/BitsquareModule.java @@ -21,8 +21,8 @@ import io.bitsquare.AbstractBitsquareModule; import io.bitsquare.btc.BitcoinModule; import io.bitsquare.crypto.CryptoModule; import io.bitsquare.gui.GuiModule; -import io.bitsquare.msg.DefaultMessageModule; import io.bitsquare.msg.MessageModule; +import io.bitsquare.msg.tomp2p.TomP2PMessageModule; import io.bitsquare.offer.OfferModule; import io.bitsquare.offer.tomp2p.TomP2POfferModule; import io.bitsquare.persistence.Persistence; @@ -83,7 +83,7 @@ public class BitsquareModule extends AbstractBitsquareModule { } protected MessageModule messageModule() { - return new DefaultMessageModule(properties); + return new TomP2PMessageModule(properties); } protected BitcoinModule bitcoinModule() { diff --git a/src/main/java/io/bitsquare/msg/DefaultMessageModule.java b/src/main/java/io/bitsquare/msg/DefaultMessageModule.java deleted file mode 100644 index 4e1e75c2fe..0000000000 --- a/src/main/java/io/bitsquare/msg/DefaultMessageModule.java +++ /dev/null @@ -1,54 +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.msg; - -import io.bitsquare.AbstractBitsquareModule; -import io.bitsquare.network.BootstrapNodes; -import io.bitsquare.network.Node; - -import com.google.inject.Injector; -import com.google.inject.name.Names; - -import java.util.Properties; - -public class DefaultMessageModule extends AbstractBitsquareModule implements MessageModule { - - public DefaultMessageModule(Properties properties) { - super(properties); - } - - @Override - protected void configure() { - bind(MessageFacade.class).to(TomP2PMessageFacade.class).asEagerSingleton(); - bind(P2PNode.class).asEagerSingleton(); - bind(BootstrappedPeerFactory.class).asEagerSingleton(); - bind(DHTSeedService.class); - - // we will probably later use disk storage instead of memory storage for TomP2P - bind(Boolean.class).annotatedWith(Names.named("useDiskStorage")).toInstance(false); - - bind(Node.class) - .annotatedWith(Names.named("bootstrapNode")) - .toInstance(BootstrapNodes.LOCALHOST); - } - - @Override - protected void doClose(Injector injector) { - injector.getInstance(MessageFacade.class).shutDown(); - } -} diff --git a/src/main/java/io/bitsquare/msg/MessageModule.java b/src/main/java/io/bitsquare/msg/MessageModule.java index c87f29439d..31de0addba 100644 --- a/src/main/java/io/bitsquare/msg/MessageModule.java +++ b/src/main/java/io/bitsquare/msg/MessageModule.java @@ -17,7 +17,43 @@ package io.bitsquare.msg; -import com.google.inject.Module; +import io.bitsquare.AbstractBitsquareModule; +import io.bitsquare.network.BootstrapNodes; +import io.bitsquare.network.Node; -public interface MessageModule extends Module { +import com.google.inject.Injector; +import com.google.inject.name.Names; + +import java.util.Properties; + +public abstract class MessageModule extends AbstractBitsquareModule { + + protected MessageModule(Properties properties) { + super(properties); + } + + @Override + protected final void configure() { + bind(MessageFacade.class).to(messageFacade()).asEagerSingleton(); + bind(DHTSeedService.class); + + // we will probably later use disk storage instead of memory storage for TomP2P + bind(Boolean.class).annotatedWith(Names.named("useDiskStorage")).toInstance(false); + + bind(Node.class) + .annotatedWith(Names.named("bootstrapNode")) + .toInstance(BootstrapNodes.DIGITAL_OCEAN_1); + + doConfigure(); + } + + protected void doConfigure() { + } + + protected abstract Class messageFacade(); + + @Override + protected void doClose(Injector injector) { + injector.getInstance(MessageFacade.class).shutDown(); + } } diff --git a/src/main/java/io/bitsquare/msg/BootstrappedPeerFactory.java b/src/main/java/io/bitsquare/msg/tomp2p/BootstrappedPeerFactory.java similarity index 99% rename from src/main/java/io/bitsquare/msg/BootstrappedPeerFactory.java rename to src/main/java/io/bitsquare/msg/tomp2p/BootstrappedPeerFactory.java index df591d90b7..ba92febd6a 100644 --- a/src/main/java/io/bitsquare/msg/BootstrappedPeerFactory.java +++ b/src/main/java/io/bitsquare/msg/tomp2p/BootstrappedPeerFactory.java @@ -15,7 +15,7 @@ * along with Bitsquare. If not, see . */ -package io.bitsquare.msg; +package io.bitsquare.msg.tomp2p; import io.bitsquare.network.BootstrapState; import io.bitsquare.network.Node; @@ -65,7 +65,7 @@ import org.slf4j.LoggerFactory; /** * Creates a DHT peer and bootstrap to the network via a seed node */ -public class BootstrappedPeerFactory { +class BootstrappedPeerFactory { private static final Logger log = LoggerFactory.getLogger(BootstrappedPeerFactory.class); private KeyPair keyPair; diff --git a/src/main/java/io/bitsquare/msg/TomP2PMessageFacade.java b/src/main/java/io/bitsquare/msg/tomp2p/TomP2PMessageFacade.java similarity index 98% rename from src/main/java/io/bitsquare/msg/TomP2PMessageFacade.java rename to src/main/java/io/bitsquare/msg/tomp2p/TomP2PMessageFacade.java index 614586e053..0acba66858 100644 --- a/src/main/java/io/bitsquare/msg/TomP2PMessageFacade.java +++ b/src/main/java/io/bitsquare/msg/tomp2p/TomP2PMessageFacade.java @@ -15,9 +15,11 @@ * along with Bitsquare. If not, see . */ -package io.bitsquare.msg; +package io.bitsquare.msg.tomp2p; import io.bitsquare.arbitrator.Arbitrator; +import io.bitsquare.msg.Message; +import io.bitsquare.msg.MessageFacade; import io.bitsquare.msg.listeners.ArbitratorListener; import io.bitsquare.msg.listeners.BootstrapListener; import io.bitsquare.msg.listeners.GetPeerAddressListener; @@ -68,7 +70,7 @@ class TomP2PMessageFacade implements MessageFacade { private static final Logger log = LoggerFactory.getLogger(TomP2PMessageFacade.class); private static final String ARBITRATORS_ROOT = "ArbitratorsRoot"; - private final P2PNode p2pNode; + private final TomP2PNode p2pNode; private final User user; private final List arbitratorListeners = new ArrayList<>(); @@ -80,7 +82,7 @@ class TomP2PMessageFacade implements MessageFacade { /////////////////////////////////////////////////////////////////////////////////////////// @Inject - public TomP2PMessageFacade(User user, P2PNode p2pNode) { + public TomP2PMessageFacade(User user, TomP2PNode p2pNode) { this.user = user; this.p2pNode = p2pNode; } diff --git a/src/main/java/io/bitsquare/msg/tomp2p/TomP2PMessageModule.java b/src/main/java/io/bitsquare/msg/tomp2p/TomP2PMessageModule.java new file mode 100644 index 0000000000..3e31154074 --- /dev/null +++ b/src/main/java/io/bitsquare/msg/tomp2p/TomP2PMessageModule.java @@ -0,0 +1,41 @@ +/* + * 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.msg.tomp2p; + +import io.bitsquare.msg.MessageFacade; +import io.bitsquare.msg.MessageModule; + +import java.util.Properties; + +public class TomP2PMessageModule extends MessageModule { + + public TomP2PMessageModule(Properties properties) { + super(properties); + } + + @Override + protected void doConfigure() { + bind(TomP2PNode.class).asEagerSingleton(); + bind(BootstrappedPeerFactory.class).asEagerSingleton(); + } + + @Override + protected Class messageFacade() { + return TomP2PMessageFacade.class; + } +} diff --git a/src/main/java/io/bitsquare/msg/P2PNode.java b/src/main/java/io/bitsquare/msg/tomp2p/TomP2PNode.java similarity index 96% rename from src/main/java/io/bitsquare/msg/P2PNode.java rename to src/main/java/io/bitsquare/msg/tomp2p/TomP2PNode.java index 58ae953cec..aed00768d6 100644 --- a/src/main/java/io/bitsquare/msg/P2PNode.java +++ b/src/main/java/io/bitsquare/msg/tomp2p/TomP2PNode.java @@ -15,8 +15,9 @@ * along with Bitsquare. If not, see . */ -package io.bitsquare.msg; +package io.bitsquare.msg.tomp2p; +import io.bitsquare.msg.MessageBroker; import io.bitsquare.msg.listeners.BootstrapListener; import io.bitsquare.network.tomp2p.TomP2PPeer; @@ -66,14 +67,16 @@ import org.slf4j.LoggerFactory; import lighthouse.files.AppDirectory; +import static io.bitsquare.network.tomp2p.BaseFutureUtil.isSuccess; + /** * The fully bootstrapped P2PNode which is responsible himself for his availability in the messaging system. It saves * for instance the IP address periodically. * This class is offering generic functionality of TomP2P needed for Bitsquare, like data and domain protection. * It does not handle any domain aspects of Bitsquare. */ -public class P2PNode { - private static final Logger log = LoggerFactory.getLogger(P2PNode.class); +public class TomP2PNode { + private static final Logger log = LoggerFactory.getLogger(TomP2PNode.class); private KeyPair keyPair; private final Boolean useDiskStorage; @@ -90,14 +93,14 @@ public class P2PNode { /////////////////////////////////////////////////////////////////////////////////////////// @Inject - public P2PNode(BootstrappedPeerFactory bootstrappedPeerFactory, - @Named("useDiskStorage") Boolean useDiskStorage) { + public TomP2PNode(BootstrappedPeerFactory bootstrappedPeerFactory, + @Named("useDiskStorage") Boolean useDiskStorage) { this.bootstrappedPeerFactory = bootstrappedPeerFactory; this.useDiskStorage = useDiskStorage; } // for unit testing - P2PNode(KeyPair keyPair, PeerDHT peerDHT) { + TomP2PNode(KeyPair keyPair, PeerDHT peerDHT) { this.keyPair = keyPair; this.peerDHT = peerDHT; peerDHT.peerBean().keyPair(keyPair); @@ -309,7 +312,7 @@ public class P2PNode { public void onSuccess(@Nullable PeerDHT peerDHT) { try { if (peerDHT != null) { - P2PNode.this.peerDHT = peerDHT; + TomP2PNode.this.peerDHT = peerDHT; setupReplyHandler(); FuturePut futurePut = storePeerAddress(); futurePut.addListener(new BaseFutureListener() { @@ -400,10 +403,4 @@ public class P2PNode { storage = new StorageMemory(); } } - - // Isolate the success handling as there is bug in port forwarding mode - private boolean isSuccess(BaseFuture baseFuture) { - // return baseFuture.isSuccess(); - return true; - } } diff --git a/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferModule.java b/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferModule.java index e60ea70bfb..fb7e3729ad 100644 --- a/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferModule.java +++ b/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferModule.java @@ -17,7 +17,6 @@ package io.bitsquare.offer.tomp2p; -import io.bitsquare.AbstractBitsquareModule; import io.bitsquare.offer.OfferModule; import io.bitsquare.offer.OfferRepository; diff --git a/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferRepository.java b/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferRepository.java index 2f18103e56..e7bc05df90 100644 --- a/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferRepository.java +++ b/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferRepository.java @@ -17,7 +17,7 @@ package io.bitsquare.offer.tomp2p; -import io.bitsquare.msg.P2PNode; +import io.bitsquare.msg.tomp2p.TomP2PNode; import io.bitsquare.offer.Offer; import io.bitsquare.offer.OfferRepository; import io.bitsquare.util.task.FaultHandler; @@ -57,10 +57,10 @@ class TomP2POfferRepository implements OfferRepository { private final List offerRepositoryListeners = new ArrayList<>(); private final LongProperty invalidationTimestamp = new SimpleLongProperty(0); - private final P2PNode p2pNode; + private final TomP2PNode p2pNode; @Inject - public TomP2POfferRepository(P2PNode p2pNode) { + public TomP2POfferRepository(TomP2PNode p2pNode) { this.p2pNode = p2pNode; } diff --git a/src/test/java/io/bitsquare/msg/P2PNodeTest.java b/src/test/java/io/bitsquare/msg/tomp2p/TomP2PNodeTest.java similarity index 94% rename from src/test/java/io/bitsquare/msg/P2PNodeTest.java rename to src/test/java/io/bitsquare/msg/tomp2p/TomP2PNodeTest.java index 05d79f07d7..1d1742d5ba 100644 --- a/src/test/java/io/bitsquare/msg/P2PNodeTest.java +++ b/src/test/java/io/bitsquare/msg/tomp2p/TomP2PNodeTest.java @@ -15,7 +15,7 @@ * along with Bitsquare. If not, see . */ -package io.bitsquare.msg; +package io.bitsquare.msg.tomp2p; import java.io.IOException; @@ -48,12 +48,12 @@ import org.slf4j.LoggerFactory; import static org.junit.Assert.*; -// TODO Reactivate tests when P2PNode is using original code again. we deactivated the security features atm. +// TODO Reactivate tests when TomP2PNode is using original code again. we deactivated the security features atm. // cause IOException: Not listening to anything. Maybe your binding information is wrong. // investigate what has broken it, probably from update to latest head @Ignore -public class P2PNodeTest { - private static final Logger log = LoggerFactory.getLogger(P2PNodeTest.class); +public class TomP2PNodeTest { + private static final Logger log = LoggerFactory.getLogger(TomP2PNodeTest.class); final private static Random rnd = new Random(42L); @@ -80,12 +80,12 @@ public class P2PNodeTest { KeyPair keyPairClient = keyGen.genKeyPair(); KeyPair keyPairOtherPeer = keyGen.genKeyPair(); - P2PNode node; + TomP2PNode node; Number160 locationKey; Object object; FutureDirect futureDirect; - node = new P2PNode(keyPairClient, client); + node = new TomP2PNode(keyPairClient, client); object = "clients data"; futureDirect = node.sendData(otherPeer.peerAddress(), object); futureDirect.awaitUninterruptibly(); @@ -110,7 +110,7 @@ public class P2PNodeTest { KeyPair keyPairClient = keyGen.genKeyPair(); KeyPair keyPairOtherPeer = keyGen.genKeyPair(); - P2PNode node; + TomP2PNode node; Number160 locationKey; Data data; FuturePut futurePut; @@ -119,7 +119,7 @@ public class P2PNodeTest { // otherPeer tries to squat clients location store // he can do it but as he has not the domain key of the client he cannot do any harm // he only can store und that path: locationKey.otherPeerDomainKey.data - node = new P2PNode(keyPairOtherPeer, otherPeer); + node = new TomP2PNode(keyPairOtherPeer, otherPeer); locationKey = Number160.createHash("clients location"); data = new Data("otherPeer data"); futurePut = node.putDomainProtectedData(locationKey, data); @@ -133,7 +133,7 @@ public class P2PNodeTest { // client store his data und his domainkey, no problem with previous occupied // he only can store und that path: locationKey.clientDomainKey.data - node = new P2PNode(keyPairClient, client); + node = new TomP2PNode(keyPairClient, client); locationKey = Number160.createHash("clients location"); data = new Data("client data"); futurePut = node.putDomainProtectedData(locationKey, data); @@ -146,7 +146,7 @@ public class P2PNodeTest { assertEquals("client data", futureGet.data().object()); // also other peers can read that data if they know the public key of the client - node = new P2PNode(keyPairOtherPeer, otherPeer); + node = new TomP2PNode(keyPairOtherPeer, otherPeer); futureGet = node.getDomainProtectedData(locationKey, keyPairClient.getPublic()); futureGet.awaitUninterruptibly(); assertTrue(futureGet.isSuccess()); @@ -168,7 +168,7 @@ public class P2PNodeTest { assertFalse(futurePut.isSuccess()); // he can read his prev. stored data - node = new P2PNode(keyPairOtherPeer, otherPeer); + node = new TomP2PNode(keyPairOtherPeer, otherPeer); futureGet = node.getDomainProtectedData(locationKey, keyPairOtherPeer.getPublic()); futureGet.awaitUninterruptibly(); assertTrue(futureGet.isSuccess()); @@ -226,7 +226,7 @@ public class P2PNodeTest { PeerDHT otherPeer = peers[2]; UtilsDHT2.perfectRouting(peers); - P2PNode node; + TomP2PNode node; final KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA"); keyGen.initialize(1024); KeyPair keyPairClient = keyGen.genKeyPair(); @@ -243,7 +243,7 @@ public class P2PNodeTest { KeyPair keyPair1 = gen.generateKeyPair(); keyPairClient = keyPair1; - node = new P2PNode(keyPairClient, client); + node = new TomP2PNode(keyPairClient, client); locationKey = Number160.createHash("add to list clients location"); data = new Data("add to list client data1"); Data data_1 = data; @@ -298,7 +298,7 @@ public class P2PNodeTest { futurePut.awaitUninterruptibly(); assertTrue(futurePut.isSuccess()); - node = new P2PNode(keyPairOtherPeer, otherPeer); + node = new TomP2PNode(keyPairOtherPeer, otherPeer); futureGet = node.getDataMap(locationKey); futureGet.awaitUninterruptibly(); assertTrue(futureGet.isSuccess()); @@ -334,7 +334,7 @@ public class P2PNodeTest { // client removes his entry -> OK - node = new P2PNode(keyPairClient, client); + node = new TomP2PNode(keyPairClient, client); FutureRemove futureRemove = node.removeFromDataMap(locationKey, data_1); futureRemove.awaitUninterruptibly(); assertTrue(futureRemove.isSuccess()); @@ -375,7 +375,7 @@ public class P2PNodeTest { // otherPeer tries to removes client entry -> FAIL - node = new P2PNode(keyPairOtherPeer, otherPeer); + node = new TomP2PNode(keyPairOtherPeer, otherPeer); futureRemove = node.removeFromDataMap(locationKey, data_2); futureRemove.awaitUninterruptibly(); assertFalse(futureRemove.isSuccess()); From 21098afd455036284fc4ea2b6f49d0a00a5d3362 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Thu, 6 Nov 2014 16:04:39 +0100 Subject: [PATCH 15/18] Optimize imports --- src/main/java/io/bitsquare/offer/Offer.java | 1 - src/test/java/io/bitsquare/util/Repeat.java | 1 - 2 files changed, 2 deletions(-) diff --git a/src/main/java/io/bitsquare/offer/Offer.java b/src/main/java/io/bitsquare/offer/Offer.java index a80e4e1dce..e439a78271 100644 --- a/src/main/java/io/bitsquare/offer/Offer.java +++ b/src/main/java/io/bitsquare/offer/Offer.java @@ -19,7 +19,6 @@ package io.bitsquare.offer; import io.bitsquare.arbitrator.Arbitrator; import io.bitsquare.bank.BankAccountType; -import io.bitsquare.btc.Restrictions; import io.bitsquare.locale.Country; import org.bitcoinj.core.Coin; diff --git a/src/test/java/io/bitsquare/util/Repeat.java b/src/test/java/io/bitsquare/util/Repeat.java index d67c8be70b..2e8501d892 100644 --- a/src/test/java/io/bitsquare/util/Repeat.java +++ b/src/test/java/io/bitsquare/util/Repeat.java @@ -18,7 +18,6 @@ package io.bitsquare.util; import java.lang.annotation.ElementType; - import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; From 486cd9824e0fd4f47592745984dbb7fb69e0bdc5 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Thu, 6 Nov 2014 16:35:03 +0100 Subject: [PATCH 16/18] Introduce app.gui.MainModule --- .../{BitsquareModule.java => AppModule.java} | 24 +++-------- src/main/java/io/bitsquare/app/gui/Main.java | 9 ++-- .../java/io/bitsquare/app/gui/MainModule.java | 43 +++++++++++++++++++ .../gui/ViewLoaderTests.java} | 10 +++-- 4 files changed, 59 insertions(+), 27 deletions(-) rename src/main/java/io/bitsquare/app/{BitsquareModule.java => AppModule.java} (81%) create mode 100644 src/main/java/io/bitsquare/app/gui/MainModule.java rename src/test/java/io/bitsquare/{gui/ViewLoaderTest.java => app/gui/ViewLoaderTests.java} (88%) diff --git a/src/main/java/io/bitsquare/app/BitsquareModule.java b/src/main/java/io/bitsquare/app/AppModule.java similarity index 81% rename from src/main/java/io/bitsquare/app/BitsquareModule.java rename to src/main/java/io/bitsquare/app/AppModule.java index afb3b548ab..fe281c942e 100644 --- a/src/main/java/io/bitsquare/app/BitsquareModule.java +++ b/src/main/java/io/bitsquare/app/AppModule.java @@ -20,7 +20,6 @@ package io.bitsquare.app; import io.bitsquare.AbstractBitsquareModule; import io.bitsquare.btc.BitcoinModule; import io.bitsquare.crypto.CryptoModule; -import io.bitsquare.gui.GuiModule; import io.bitsquare.msg.MessageModule; import io.bitsquare.msg.tomp2p.TomP2PMessageModule; import io.bitsquare.offer.OfferModule; @@ -29,15 +28,12 @@ import io.bitsquare.persistence.Persistence; import io.bitsquare.settings.Settings; import io.bitsquare.trade.TradeModule; import io.bitsquare.user.User; -import io.bitsquare.util.ConfigLoader; import com.google.inject.Injector; import com.google.inject.name.Names; import java.util.Properties; -import javafx.stage.Stage; - import net.tomp2p.connection.Ports; import org.slf4j.Logger; @@ -46,19 +42,16 @@ import org.slf4j.LoggerFactory; import akka.actor.ActorSystem; import scala.concurrent.duration.Duration; -public class BitsquareModule extends AbstractBitsquareModule { +/** + * Configures all non-UI modules necessary to run a Bitsquare application. + */ +public class AppModule extends AbstractBitsquareModule { + private static final Logger log = LoggerFactory.getLogger(AppModule.class); - private static final Logger log = LoggerFactory.getLogger(BitsquareModule.class); - private final Stage primaryStage; private final String appName; - public BitsquareModule(Stage primaryStage, String appName) { - this(primaryStage, appName, ConfigLoader.loadConfig()); - } - - public BitsquareModule(Stage primaryStage, String appName, Properties properties) { + public AppModule(Properties properties, String appName) { super(properties); - this.primaryStage = primaryStage; this.appName = appName; } @@ -73,7 +66,6 @@ public class BitsquareModule extends AbstractBitsquareModule { install(cryptoModule()); install(tradeModule()); install(offerModule()); - install(guiModule()); bindConstant().annotatedWith(Names.named("appName")).to(appName); bind(ActorSystem.class).toInstance(ActorSystem.create(appName)); @@ -100,10 +92,6 @@ public class BitsquareModule extends AbstractBitsquareModule { protected OfferModule offerModule() { return new TomP2POfferModule(properties); } - protected GuiModule guiModule() { - return new GuiModule(properties, primaryStage); - } - @Override protected void doClose(Injector injector) { ActorSystem actorSystem = injector.getInstance(ActorSystem.class); diff --git a/src/main/java/io/bitsquare/app/gui/Main.java b/src/main/java/io/bitsquare/app/gui/Main.java index cc8edb5d7b..e35cb8cfad 100644 --- a/src/main/java/io/bitsquare/app/gui/Main.java +++ b/src/main/java/io/bitsquare/app/gui/Main.java @@ -18,7 +18,6 @@ package io.bitsquare.app.gui; import io.bitsquare.app.ArgumentParser; -import io.bitsquare.app.BitsquareModule; import io.bitsquare.gui.Navigation; import io.bitsquare.gui.SystemTray; import io.bitsquare.gui.ViewLoader; @@ -51,7 +50,7 @@ public class Main extends Application { private static final Logger log = LoggerFactory.getLogger(Main.class); private static String appName = "Bitsquare"; - private BitsquareModule bitsquareModule; + private MainModule mainModule; private Injector injector; public static void main(String[] args) { @@ -67,8 +66,8 @@ public class Main extends Application { @Override public void start(Stage primaryStage) { - bitsquareModule = new BitsquareModule(primaryStage, appName); - injector = Guice.createInjector(bitsquareModule); + mainModule = new MainModule(appName, primaryStage); + injector = Guice.createInjector(mainModule); // route uncaught exceptions to a user-facing dialog @@ -138,7 +137,7 @@ public class Main extends Application { @Override public void stop() { - bitsquareModule.close(injector); + mainModule.close(injector); System.exit(0); } } diff --git a/src/main/java/io/bitsquare/app/gui/MainModule.java b/src/main/java/io/bitsquare/app/gui/MainModule.java new file mode 100644 index 0000000000..07cd1a1189 --- /dev/null +++ b/src/main/java/io/bitsquare/app/gui/MainModule.java @@ -0,0 +1,43 @@ +/* + * 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.app.gui; + +import io.bitsquare.AbstractBitsquareModule; +import io.bitsquare.app.AppModule; +import io.bitsquare.gui.GuiModule; +import io.bitsquare.util.ConfigLoader; + +import javafx.stage.Stage; + +class MainModule extends AbstractBitsquareModule { + + private final String appName; + private final Stage primaryStage; + + public MainModule(String appName, Stage primaryStage) { + super(ConfigLoader.loadConfig()); + this.appName = appName; + this.primaryStage = primaryStage; + } + + @Override + protected void configure() { + install(new AppModule(properties, appName)); + install(new GuiModule(properties, primaryStage)); + } +} diff --git a/src/test/java/io/bitsquare/gui/ViewLoaderTest.java b/src/test/java/io/bitsquare/app/gui/ViewLoaderTests.java similarity index 88% rename from src/test/java/io/bitsquare/gui/ViewLoaderTest.java rename to src/test/java/io/bitsquare/app/gui/ViewLoaderTests.java index 26cd7a32e4..77d0bcd6f9 100644 --- a/src/test/java/io/bitsquare/gui/ViewLoaderTest.java +++ b/src/test/java/io/bitsquare/app/gui/ViewLoaderTests.java @@ -15,9 +15,11 @@ * along with Bitsquare. If not, see . */ -package io.bitsquare.gui; +package io.bitsquare.app.gui; -import io.bitsquare.app.BitsquareModule; +import io.bitsquare.gui.FatalException; +import io.bitsquare.gui.Navigation; +import io.bitsquare.gui.ViewLoader; import com.google.inject.Guice; import com.google.inject.Injector; @@ -30,7 +32,7 @@ import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; -public class ViewLoaderTest { +public class ViewLoaderTests { public static class TestApp extends Application { static Stage primaryStage; @@ -56,7 +58,7 @@ public class ViewLoaderTest { @Before public void setUp() { - Injector injector = Guice.createInjector(new BitsquareModule(TestApp.primaryStage, "testApp")); + Injector injector = Guice.createInjector(new MainModule("testApp", TestApp.primaryStage)); ViewLoader.setInjector(injector); } From 1546285b8b63b8756afd481653ce1a6c84a244cd Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Thu, 6 Nov 2014 16:38:00 +0100 Subject: [PATCH 17/18] Move io.bitsquare.{network=>util}.tomp2p.BaseFutureUtil --- src/main/java/io/bitsquare/msg/tomp2p/TomP2PMessageFacade.java | 2 +- src/main/java/io/bitsquare/msg/tomp2p/TomP2PNode.java | 2 +- .../java/io/bitsquare/offer/tomp2p/TomP2POfferRepository.java | 2 +- .../io/bitsquare/{network => util}/tomp2p/BaseFutureUtil.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename src/main/java/io/bitsquare/{network => util}/tomp2p/BaseFutureUtil.java (96%) diff --git a/src/main/java/io/bitsquare/msg/tomp2p/TomP2PMessageFacade.java b/src/main/java/io/bitsquare/msg/tomp2p/TomP2PMessageFacade.java index 0acba66858..b223884544 100644 --- a/src/main/java/io/bitsquare/msg/tomp2p/TomP2PMessageFacade.java +++ b/src/main/java/io/bitsquare/msg/tomp2p/TomP2PMessageFacade.java @@ -55,7 +55,7 @@ import net.tomp2p.utils.Utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static io.bitsquare.network.tomp2p.BaseFutureUtil.isSuccess; +import static io.bitsquare.util.tomp2p.BaseFutureUtil.isSuccess; /** diff --git a/src/main/java/io/bitsquare/msg/tomp2p/TomP2PNode.java b/src/main/java/io/bitsquare/msg/tomp2p/TomP2PNode.java index aed00768d6..c186428e7c 100644 --- a/src/main/java/io/bitsquare/msg/tomp2p/TomP2PNode.java +++ b/src/main/java/io/bitsquare/msg/tomp2p/TomP2PNode.java @@ -67,7 +67,7 @@ import org.slf4j.LoggerFactory; import lighthouse.files.AppDirectory; -import static io.bitsquare.network.tomp2p.BaseFutureUtil.isSuccess; +import static io.bitsquare.util.tomp2p.BaseFutureUtil.isSuccess; /** * The fully bootstrapped P2PNode which is responsible himself for his availability in the messaging system. It saves diff --git a/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferRepository.java b/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferRepository.java index e7bc05df90..86f8ea1061 100644 --- a/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferRepository.java +++ b/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferRepository.java @@ -48,7 +48,7 @@ import net.tomp2p.storage.Data; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static io.bitsquare.network.tomp2p.BaseFutureUtil.isSuccess; +import static io.bitsquare.util.tomp2p.BaseFutureUtil.isSuccess; class TomP2POfferRepository implements OfferRepository { diff --git a/src/main/java/io/bitsquare/network/tomp2p/BaseFutureUtil.java b/src/main/java/io/bitsquare/util/tomp2p/BaseFutureUtil.java similarity index 96% rename from src/main/java/io/bitsquare/network/tomp2p/BaseFutureUtil.java rename to src/main/java/io/bitsquare/util/tomp2p/BaseFutureUtil.java index 7d35bfc73c..fd11371e1e 100644 --- a/src/main/java/io/bitsquare/network/tomp2p/BaseFutureUtil.java +++ b/src/main/java/io/bitsquare/util/tomp2p/BaseFutureUtil.java @@ -15,7 +15,7 @@ * along with Bitsquare. If not, see . */ -package io.bitsquare.network.tomp2p; +package io.bitsquare.util.tomp2p; import net.tomp2p.futures.BaseFuture; From ca070941dc1a62dbdb24772e878e0eb991c6830f Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Thu, 6 Nov 2014 16:41:17 +0100 Subject: [PATCH 18/18] Rename io.bitsquare.{Abstract=>}BitsquareModule --- ...stractBitsquareModule.java => BitsquareModule.java} | 10 +++++----- src/main/java/io/bitsquare/app/AppModule.java | 4 ++-- src/main/java/io/bitsquare/app/gui/MainModule.java | 4 ++-- src/main/java/io/bitsquare/btc/BitcoinModule.java | 4 ++-- src/main/java/io/bitsquare/crypto/CryptoModule.java | 4 ++-- src/main/java/io/bitsquare/gui/GuiModule.java | 4 ++-- src/main/java/io/bitsquare/msg/MessageModule.java | 4 ++-- src/main/java/io/bitsquare/offer/OfferModule.java | 4 ++-- src/main/java/io/bitsquare/trade/TradeModule.java | 4 ++-- 9 files changed, 21 insertions(+), 21 deletions(-) rename src/main/java/io/bitsquare/{AbstractBitsquareModule.java => BitsquareModule.java} (84%) diff --git a/src/main/java/io/bitsquare/AbstractBitsquareModule.java b/src/main/java/io/bitsquare/BitsquareModule.java similarity index 84% rename from src/main/java/io/bitsquare/AbstractBitsquareModule.java rename to src/main/java/io/bitsquare/BitsquareModule.java index 46a6f88c98..9293650999 100644 --- a/src/main/java/io/bitsquare/AbstractBitsquareModule.java +++ b/src/main/java/io/bitsquare/BitsquareModule.java @@ -25,24 +25,24 @@ import com.google.inject.Injector; import java.util.Properties; import java.util.Set; -public abstract class AbstractBitsquareModule extends AbstractModule { +public abstract class BitsquareModule extends AbstractModule { protected final Properties properties; - private final Set modules = Sets.newHashSet(); + private final Set modules = Sets.newHashSet(); - protected AbstractBitsquareModule(Properties properties) { + protected BitsquareModule(Properties properties) { this.properties = properties; } - protected void install(AbstractBitsquareModule module) { + protected void install(BitsquareModule module) { super.install(module); modules.add(module); } /** * Close any instances this module is responsible for and recursively close any - * sub-modules installed via {@link #install(AbstractBitsquareModule)}. This method + * sub-modules installed via {@link #install(BitsquareModule)}. This method * must be called manually, e.g. at the end of a main() method or in the stop() method * of a JavaFX Application; alternatively it may be registered as a JVM shutdown hook. * diff --git a/src/main/java/io/bitsquare/app/AppModule.java b/src/main/java/io/bitsquare/app/AppModule.java index fe281c942e..904d3fb1ae 100644 --- a/src/main/java/io/bitsquare/app/AppModule.java +++ b/src/main/java/io/bitsquare/app/AppModule.java @@ -17,7 +17,7 @@ package io.bitsquare.app; -import io.bitsquare.AbstractBitsquareModule; +import io.bitsquare.BitsquareModule; import io.bitsquare.btc.BitcoinModule; import io.bitsquare.crypto.CryptoModule; import io.bitsquare.msg.MessageModule; @@ -45,7 +45,7 @@ import scala.concurrent.duration.Duration; /** * Configures all non-UI modules necessary to run a Bitsquare application. */ -public class AppModule extends AbstractBitsquareModule { +public class AppModule extends BitsquareModule { private static final Logger log = LoggerFactory.getLogger(AppModule.class); private final String appName; diff --git a/src/main/java/io/bitsquare/app/gui/MainModule.java b/src/main/java/io/bitsquare/app/gui/MainModule.java index 07cd1a1189..db57b7779d 100644 --- a/src/main/java/io/bitsquare/app/gui/MainModule.java +++ b/src/main/java/io/bitsquare/app/gui/MainModule.java @@ -17,14 +17,14 @@ package io.bitsquare.app.gui; -import io.bitsquare.AbstractBitsquareModule; +import io.bitsquare.BitsquareModule; import io.bitsquare.app.AppModule; import io.bitsquare.gui.GuiModule; import io.bitsquare.util.ConfigLoader; import javafx.stage.Stage; -class MainModule extends AbstractBitsquareModule { +class MainModule extends BitsquareModule { private final String appName; private final Stage primaryStage; diff --git a/src/main/java/io/bitsquare/btc/BitcoinModule.java b/src/main/java/io/bitsquare/btc/BitcoinModule.java index c08f2eb562..c6346f3a49 100644 --- a/src/main/java/io/bitsquare/btc/BitcoinModule.java +++ b/src/main/java/io/bitsquare/btc/BitcoinModule.java @@ -17,7 +17,7 @@ package io.bitsquare.btc; -import io.bitsquare.AbstractBitsquareModule; +import io.bitsquare.BitsquareModule; import org.bitcoinj.core.NetworkParameters; import org.bitcoinj.params.MainNetParams; @@ -28,7 +28,7 @@ import com.google.inject.Injector; import java.util.Properties; -public class BitcoinModule extends AbstractBitsquareModule { +public class BitcoinModule extends BitsquareModule { private static final BitcoinNetwork DEFAULT_NETWORK = BitcoinNetwork.REGTEST; diff --git a/src/main/java/io/bitsquare/crypto/CryptoModule.java b/src/main/java/io/bitsquare/crypto/CryptoModule.java index 4f114b65d1..fc3472c98b 100644 --- a/src/main/java/io/bitsquare/crypto/CryptoModule.java +++ b/src/main/java/io/bitsquare/crypto/CryptoModule.java @@ -17,11 +17,11 @@ package io.bitsquare.crypto; -import io.bitsquare.AbstractBitsquareModule; +import io.bitsquare.BitsquareModule; import java.util.Properties; -public class CryptoModule extends AbstractBitsquareModule { +public class CryptoModule extends BitsquareModule { public CryptoModule(Properties properties) { super(properties); diff --git a/src/main/java/io/bitsquare/gui/GuiModule.java b/src/main/java/io/bitsquare/gui/GuiModule.java index dd39924be1..8491ce60bb 100644 --- a/src/main/java/io/bitsquare/gui/GuiModule.java +++ b/src/main/java/io/bitsquare/gui/GuiModule.java @@ -17,7 +17,7 @@ package io.bitsquare.gui; -import io.bitsquare.AbstractBitsquareModule; +import io.bitsquare.BitsquareModule; import io.bitsquare.gui.components.Popups; import io.bitsquare.gui.main.help.Help; import io.bitsquare.gui.main.trade.offerbook.OfferBook; @@ -32,7 +32,7 @@ import java.util.Properties; import javafx.stage.Stage; -public class GuiModule extends AbstractBitsquareModule { +public class GuiModule extends BitsquareModule { private final Stage primaryStage; diff --git a/src/main/java/io/bitsquare/msg/MessageModule.java b/src/main/java/io/bitsquare/msg/MessageModule.java index 31de0addba..351fd3a923 100644 --- a/src/main/java/io/bitsquare/msg/MessageModule.java +++ b/src/main/java/io/bitsquare/msg/MessageModule.java @@ -17,7 +17,7 @@ package io.bitsquare.msg; -import io.bitsquare.AbstractBitsquareModule; +import io.bitsquare.BitsquareModule; import io.bitsquare.network.BootstrapNodes; import io.bitsquare.network.Node; @@ -26,7 +26,7 @@ import com.google.inject.name.Names; import java.util.Properties; -public abstract class MessageModule extends AbstractBitsquareModule { +public abstract class MessageModule extends BitsquareModule { protected MessageModule(Properties properties) { super(properties); diff --git a/src/main/java/io/bitsquare/offer/OfferModule.java b/src/main/java/io/bitsquare/offer/OfferModule.java index 47f500b5a3..a83627f92e 100644 --- a/src/main/java/io/bitsquare/offer/OfferModule.java +++ b/src/main/java/io/bitsquare/offer/OfferModule.java @@ -17,11 +17,11 @@ package io.bitsquare.offer; -import io.bitsquare.AbstractBitsquareModule; +import io.bitsquare.BitsquareModule; import java.util.Properties; -public abstract class OfferModule extends AbstractBitsquareModule { +public abstract class OfferModule extends BitsquareModule { protected OfferModule(Properties properties) { super(properties); diff --git a/src/main/java/io/bitsquare/trade/TradeModule.java b/src/main/java/io/bitsquare/trade/TradeModule.java index 3ccd4fc18c..626e01e6ce 100644 --- a/src/main/java/io/bitsquare/trade/TradeModule.java +++ b/src/main/java/io/bitsquare/trade/TradeModule.java @@ -17,11 +17,11 @@ package io.bitsquare.trade; -import io.bitsquare.AbstractBitsquareModule; +import io.bitsquare.BitsquareModule; import java.util.Properties; -public class TradeModule extends AbstractBitsquareModule { +public class TradeModule extends BitsquareModule { public TradeModule(Properties properties) { super(properties);