diff --git a/common/src/main/java/io/bitsquare/common/Payload.java b/common/src/main/java/io/bitsquare/common/Payload.java deleted file mode 100644 index d08e1c61d2..0000000000 --- a/common/src/main/java/io/bitsquare/common/Payload.java +++ /dev/null @@ -1,6 +0,0 @@ -package io.bitsquare.common; - -import java.io.Serializable; - -public interface Payload extends Serializable { -} diff --git a/common/src/main/java/io/bitsquare/common/crypto/DecryptedPayloadWithPubKey.java b/common/src/main/java/io/bitsquare/common/crypto/DecryptedDataTuple.java similarity index 85% rename from common/src/main/java/io/bitsquare/common/crypto/DecryptedPayloadWithPubKey.java rename to common/src/main/java/io/bitsquare/common/crypto/DecryptedDataTuple.java index e4011aa2d2..23d5679fa7 100644 --- a/common/src/main/java/io/bitsquare/common/crypto/DecryptedPayloadWithPubKey.java +++ b/common/src/main/java/io/bitsquare/common/crypto/DecryptedDataTuple.java @@ -20,11 +20,11 @@ package io.bitsquare.common.crypto; import java.io.Serializable; import java.security.PublicKey; -public final class DecryptedPayloadWithPubKey implements Serializable { +public final class DecryptedDataTuple { public final Serializable payload; public final PublicKey sigPublicKey; - public DecryptedPayloadWithPubKey(Serializable payload, PublicKey sigPublicKey) { + public DecryptedDataTuple(Serializable payload, PublicKey sigPublicKey) { this.payload = payload; this.sigPublicKey = sigPublicKey; } @@ -32,9 +32,9 @@ public final class DecryptedPayloadWithPubKey implements Serializable { @Override public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof DecryptedPayloadWithPubKey)) return false; + if (!(o instanceof DecryptedDataTuple)) return false; - DecryptedPayloadWithPubKey that = (DecryptedPayloadWithPubKey) o; + DecryptedDataTuple that = (DecryptedDataTuple) o; if (payload != null ? !payload.equals(that.payload) : that.payload != null) return false; return !(sigPublicKey != null ? !sigPublicKey.equals(that.sigPublicKey) : that.sigPublicKey != null); diff --git a/common/src/main/java/io/bitsquare/common/crypto/Encryption.java b/common/src/main/java/io/bitsquare/common/crypto/Encryption.java index 3e8286cadd..e0e2e57453 100644 --- a/common/src/main/java/io/bitsquare/common/crypto/Encryption.java +++ b/common/src/main/java/io/bitsquare/common/crypto/Encryption.java @@ -233,7 +233,7 @@ public class Encryption { * @return A DecryptedPayloadWithPubKey object. * @throws CryptoException */ - public static DecryptedPayloadWithPubKey decryptHybridWithSignature(SealedAndSigned sealedAndSigned, PrivateKey privateKey) throws CryptoException { + public static DecryptedDataTuple decryptHybridWithSignature(SealedAndSigned sealedAndSigned, PrivateKey privateKey) throws CryptoException { SecretKey secretKey = getSecretKeyFromBytes(decrypt(sealedAndSigned.encryptedSecretKey, privateKey)); boolean isValid = Sig.verify(sealedAndSigned.sigPublicKey, Hash.getHash(sealedAndSigned.encryptedPayloadWithHmac), @@ -242,7 +242,7 @@ public class Encryption { throw new CryptoException("Signature verification failed."); Serializable decryptedPayload = Utilities.deserialize(decryptPayloadWithHmac(sealedAndSigned.encryptedPayloadWithHmac, secretKey)); - return new DecryptedPayloadWithPubKey(decryptedPayload, sealedAndSigned.sigPublicKey); + return new DecryptedDataTuple(decryptedPayload, sealedAndSigned.sigPublicKey); } diff --git a/common/src/main/java/io/bitsquare/common/crypto/PubKeyRing.java b/common/src/main/java/io/bitsquare/common/crypto/PubKeyRing.java index c09c8686fe..f09b04142b 100644 --- a/common/src/main/java/io/bitsquare/common/crypto/PubKeyRing.java +++ b/common/src/main/java/io/bitsquare/common/crypto/PubKeyRing.java @@ -18,12 +18,12 @@ package io.bitsquare.common.crypto; import io.bitsquare.app.Version; +import io.bitsquare.common.wire.Payload; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.io.ObjectInputStream; -import java.io.Serializable; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; @@ -35,7 +35,7 @@ import java.security.spec.X509EncodedKeySpec; * Same as KeyRing but with public keys only. * Used to send public keys over the wire to other peer. */ -public final class PubKeyRing implements Serializable { +public final class PubKeyRing implements Payload { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.P2P_NETWORK_VERSION; diff --git a/common/src/main/java/io/bitsquare/common/crypto/SealedAndSigned.java b/common/src/main/java/io/bitsquare/common/crypto/SealedAndSigned.java index add2fef527..fb6f7abb43 100644 --- a/common/src/main/java/io/bitsquare/common/crypto/SealedAndSigned.java +++ b/common/src/main/java/io/bitsquare/common/crypto/SealedAndSigned.java @@ -18,12 +18,12 @@ package io.bitsquare.common.crypto; import io.bitsquare.app.Version; +import io.bitsquare.common.wire.Payload; -import java.io.Serializable; import java.security.PublicKey; import java.util.Arrays; -public final class SealedAndSigned implements Serializable { +public final class SealedAndSigned implements Payload { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.P2P_NETWORK_VERSION; diff --git a/common/src/main/java/io/bitsquare/common/persistance/Persistable.java b/common/src/main/java/io/bitsquare/common/persistance/Persistable.java new file mode 100644 index 0000000000..4d9876a7f6 --- /dev/null +++ b/common/src/main/java/io/bitsquare/common/persistance/Persistable.java @@ -0,0 +1,9 @@ +package io.bitsquare.common.persistance; + +import java.io.Serializable; + +/** + * Marker interface for data which is used for local data persistence + */ +public interface Persistable extends Serializable { +} diff --git a/common/src/main/java/io/bitsquare/common/wire/Payload.java b/common/src/main/java/io/bitsquare/common/wire/Payload.java new file mode 100644 index 0000000000..f888791b21 --- /dev/null +++ b/common/src/main/java/io/bitsquare/common/wire/Payload.java @@ -0,0 +1,9 @@ +package io.bitsquare.common.wire; + +import java.io.Serializable; + +/** + * Marker interface for data which is sent over the wire + */ +public interface Payload extends Serializable { +} diff --git a/core/src/main/java/io/bitsquare/alert/Alert.java b/core/src/main/java/io/bitsquare/alert/Alert.java index bbd9d82337..0aa3b8ba8c 100644 --- a/core/src/main/java/io/bitsquare/alert/Alert.java +++ b/core/src/main/java/io/bitsquare/alert/Alert.java @@ -18,7 +18,7 @@ package io.bitsquare.alert; import io.bitsquare.app.Version; -import io.bitsquare.p2p.storage.messages.StoragePayload; +import io.bitsquare.p2p.storage.data.StoragePayload; import java.security.PublicKey; import java.util.concurrent.TimeUnit; diff --git a/core/src/main/java/io/bitsquare/arbitration/Arbitrator.java b/core/src/main/java/io/bitsquare/arbitration/Arbitrator.java index c5c9253c41..eb4014ee73 100644 --- a/core/src/main/java/io/bitsquare/arbitration/Arbitrator.java +++ b/core/src/main/java/io/bitsquare/arbitration/Arbitrator.java @@ -20,7 +20,7 @@ package io.bitsquare.arbitration; import io.bitsquare.app.Version; import io.bitsquare.common.crypto.PubKeyRing; import io.bitsquare.p2p.NodeAddress; -import io.bitsquare.p2p.storage.messages.StoragePayload; +import io.bitsquare.p2p.storage.data.StoragePayload; import java.security.PublicKey; import java.util.Arrays; diff --git a/core/src/main/java/io/bitsquare/arbitration/Dispute.java b/core/src/main/java/io/bitsquare/arbitration/Dispute.java index 6175d1445c..50706fa41c 100644 --- a/core/src/main/java/io/bitsquare/arbitration/Dispute.java +++ b/core/src/main/java/io/bitsquare/arbitration/Dispute.java @@ -20,6 +20,7 @@ package io.bitsquare.arbitration; import io.bitsquare.app.Version; import io.bitsquare.arbitration.messages.DisputeCommunicationMessage; import io.bitsquare.common.crypto.PubKeyRing; +import io.bitsquare.common.wire.Payload; import io.bitsquare.storage.Storage; import io.bitsquare.trade.Contract; import javafx.beans.property.*; @@ -32,13 +33,12 @@ import org.slf4j.LoggerFactory; import javax.annotation.Nullable; import java.io.IOException; import java.io.ObjectInputStream; -import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; -public final class Dispute implements Serializable { +public final class Dispute implements Payload { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.P2P_NETWORK_VERSION; private static final Logger log = LoggerFactory.getLogger(Dispute.class); diff --git a/core/src/main/java/io/bitsquare/arbitration/DisputeList.java b/core/src/main/java/io/bitsquare/arbitration/DisputeList.java index 0855a80c25..b50e51b4a0 100644 --- a/core/src/main/java/io/bitsquare/arbitration/DisputeList.java +++ b/core/src/main/java/io/bitsquare/arbitration/DisputeList.java @@ -18,6 +18,7 @@ package io.bitsquare.arbitration; import io.bitsquare.app.Version; +import io.bitsquare.common.persistance.Persistable; import io.bitsquare.storage.Storage; import javafx.collections.FXCollections; import javafx.collections.ObservableList; @@ -27,10 +28,9 @@ import org.slf4j.LoggerFactory; import java.io.IOException; import java.io.ObjectInputStream; -import java.io.Serializable; import java.util.ArrayList; -public class DisputeList extends ArrayList implements Serializable { +public class DisputeList extends ArrayList implements Persistable { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/arbitration/DisputeResult.java b/core/src/main/java/io/bitsquare/arbitration/DisputeResult.java index 8ea569a545..50b4c2581d 100644 --- a/core/src/main/java/io/bitsquare/arbitration/DisputeResult.java +++ b/core/src/main/java/io/bitsquare/arbitration/DisputeResult.java @@ -19,6 +19,7 @@ package io.bitsquare.arbitration; import io.bitsquare.app.Version; import io.bitsquare.arbitration.messages.DisputeCommunicationMessage; +import io.bitsquare.common.wire.Payload; import javafx.beans.property.*; import org.bitcoinj.core.Coin; import org.slf4j.Logger; @@ -26,11 +27,10 @@ import org.slf4j.LoggerFactory; import java.io.IOException; import java.io.ObjectInputStream; -import java.io.Serializable; import java.util.Arrays; import java.util.Date; -public final class DisputeResult implements Serializable { +public final class DisputeResult implements Payload { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.P2P_NETWORK_VERSION; private static final Logger log = LoggerFactory.getLogger(DisputeResult.class); diff --git a/core/src/main/java/io/bitsquare/arbitration/payload/Attachment.java b/core/src/main/java/io/bitsquare/arbitration/payload/Attachment.java index f6204cb4df..0bc1d49f48 100644 --- a/core/src/main/java/io/bitsquare/arbitration/payload/Attachment.java +++ b/core/src/main/java/io/bitsquare/arbitration/payload/Attachment.java @@ -1,13 +1,13 @@ package io.bitsquare.arbitration.payload; import io.bitsquare.app.Version; +import io.bitsquare.common.wire.Payload; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.Serializable; import java.util.Arrays; -public final class Attachment implements Serializable { +public final class Attachment implements Payload { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.P2P_NETWORK_VERSION; private static final Logger log = LoggerFactory.getLogger(Attachment.class); diff --git a/core/src/main/java/io/bitsquare/btc/AddressEntry.java b/core/src/main/java/io/bitsquare/btc/AddressEntry.java index 846b015e9c..cc499ec935 100644 --- a/core/src/main/java/io/bitsquare/btc/AddressEntry.java +++ b/core/src/main/java/io/bitsquare/btc/AddressEntry.java @@ -18,6 +18,7 @@ package io.bitsquare.btc; import io.bitsquare.app.Version; +import io.bitsquare.common.persistance.Persistable; import org.bitcoinj.core.Address; import org.bitcoinj.core.NetworkParameters; import org.bitcoinj.crypto.DeterministicKey; @@ -30,14 +31,13 @@ import org.slf4j.LoggerFactory; import javax.annotation.Nullable; import java.io.IOException; import java.io.ObjectInputStream; -import java.io.Serializable; /** * Every trade use a addressEntry with a dedicated address for all transactions related to the trade. * That way we have a kind of separated trade wallet, isolated from other transactions and avoiding coin merge. * If we would not avoid coin merge the user would lose privacy between trades. */ -public class AddressEntry implements Serializable { +public class AddressEntry implements Persistable { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/btc/AddressEntryList.java b/core/src/main/java/io/bitsquare/btc/AddressEntryList.java index e1397c7716..11bcf664e6 100644 --- a/core/src/main/java/io/bitsquare/btc/AddressEntryList.java +++ b/core/src/main/java/io/bitsquare/btc/AddressEntryList.java @@ -19,19 +19,19 @@ package io.bitsquare.btc; import com.google.inject.Inject; import io.bitsquare.app.Version; +import io.bitsquare.common.persistance.Persistable; import io.bitsquare.storage.Storage; import org.bitcoinj.core.Wallet; import org.bitcoinj.crypto.DeterministicKey; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.Serializable; import java.util.ArrayList; /** * The List supporting our persistence solution. */ -public class AddressEntryList extends ArrayList implements Serializable { +public class AddressEntryList extends ArrayList implements Persistable { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; private static final Logger log = LoggerFactory.getLogger(AddressEntryList.class); diff --git a/core/src/main/java/io/bitsquare/btc/BitcoinNetwork.java b/core/src/main/java/io/bitsquare/btc/BitcoinNetwork.java index ebaf73deff..3200632dd4 100644 --- a/core/src/main/java/io/bitsquare/btc/BitcoinNetwork.java +++ b/core/src/main/java/io/bitsquare/btc/BitcoinNetwork.java @@ -17,15 +17,13 @@ package io.bitsquare.btc; +import io.bitsquare.common.persistance.Persistable; import org.bitcoinj.core.NetworkParameters; import org.bitcoinj.params.MainNetParams; import org.bitcoinj.params.RegTestParams; import org.bitcoinj.params.TestNet3Params; -import java.io.Serializable; - -public enum BitcoinNetwork implements Serializable { - +public enum BitcoinNetwork implements Persistable { MAINNET(MainNetParams.get()), TESTNET(TestNet3Params.get()), REGTEST(RegTestParams.get()); diff --git a/core/src/main/java/io/bitsquare/btc/data/RawInput.java b/core/src/main/java/io/bitsquare/btc/data/RawInput.java index b533db5e6d..0e9f4ac017 100644 --- a/core/src/main/java/io/bitsquare/btc/data/RawInput.java +++ b/core/src/main/java/io/bitsquare/btc/data/RawInput.java @@ -18,11 +18,11 @@ package io.bitsquare.btc.data; import io.bitsquare.app.Version; +import io.bitsquare.common.wire.Payload; -import java.io.Serializable; import java.util.Arrays; -public final class RawInput implements Serializable { +public final class RawInput implements Payload { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.P2P_NETWORK_VERSION; diff --git a/core/src/main/java/io/bitsquare/locale/Country.java b/core/src/main/java/io/bitsquare/locale/Country.java index acd4b14e20..451660ebef 100644 --- a/core/src/main/java/io/bitsquare/locale/Country.java +++ b/core/src/main/java/io/bitsquare/locale/Country.java @@ -18,12 +18,12 @@ package io.bitsquare.locale; import io.bitsquare.app.Version; +import io.bitsquare.common.persistance.Persistable; import javax.annotation.concurrent.Immutable; -import java.io.Serializable; @Immutable -public class Country implements Serializable { +public class Country implements Persistable { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/locale/CryptoCurrency.java b/core/src/main/java/io/bitsquare/locale/CryptoCurrency.java index 436813ad52..bee6c4f6d4 100644 --- a/core/src/main/java/io/bitsquare/locale/CryptoCurrency.java +++ b/core/src/main/java/io/bitsquare/locale/CryptoCurrency.java @@ -18,10 +18,9 @@ package io.bitsquare.locale; import io.bitsquare.app.Version; +import io.bitsquare.common.persistance.Persistable; -import java.io.Serializable; - -public class CryptoCurrency extends TradeCurrency implements Serializable { +public class CryptoCurrency extends TradeCurrency implements Persistable { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/locale/FiatCurrency.java b/core/src/main/java/io/bitsquare/locale/FiatCurrency.java index 07196ea0c9..ef8108d450 100644 --- a/core/src/main/java/io/bitsquare/locale/FiatCurrency.java +++ b/core/src/main/java/io/bitsquare/locale/FiatCurrency.java @@ -18,12 +18,12 @@ package io.bitsquare.locale; import io.bitsquare.app.Version; +import io.bitsquare.common.persistance.Persistable; import io.bitsquare.user.Preferences; -import java.io.Serializable; import java.util.Currency; -public class FiatCurrency extends TradeCurrency implements Serializable { +public class FiatCurrency extends TradeCurrency implements Persistable { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/locale/Region.java b/core/src/main/java/io/bitsquare/locale/Region.java index cfcad71028..60afbed9f9 100644 --- a/core/src/main/java/io/bitsquare/locale/Region.java +++ b/core/src/main/java/io/bitsquare/locale/Region.java @@ -18,12 +18,12 @@ package io.bitsquare.locale; import io.bitsquare.app.Version; +import io.bitsquare.common.persistance.Persistable; import javax.annotation.concurrent.Immutable; -import java.io.Serializable; @Immutable -public class Region implements Serializable { +public class Region implements Persistable { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/locale/TradeCurrency.java b/core/src/main/java/io/bitsquare/locale/TradeCurrency.java index 5f20eb467f..2b378c25e6 100644 --- a/core/src/main/java/io/bitsquare/locale/TradeCurrency.java +++ b/core/src/main/java/io/bitsquare/locale/TradeCurrency.java @@ -18,10 +18,9 @@ package io.bitsquare.locale; import io.bitsquare.app.Version; +import io.bitsquare.common.persistance.Persistable; -import java.io.Serializable; - -public class TradeCurrency implements Serializable { +public class TradeCurrency implements Persistable { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/payment/AliPayAccount.java b/core/src/main/java/io/bitsquare/payment/AliPayAccount.java index af6e35fd37..0e1a5ca901 100644 --- a/core/src/main/java/io/bitsquare/payment/AliPayAccount.java +++ b/core/src/main/java/io/bitsquare/payment/AliPayAccount.java @@ -20,9 +20,7 @@ package io.bitsquare.payment; import io.bitsquare.app.Version; import io.bitsquare.locale.FiatCurrency; -import java.io.Serializable; - -public class AliPayAccount extends PaymentAccount implements Serializable { +public class AliPayAccount extends PaymentAccount { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/payment/AliPayAccountContractData.java b/core/src/main/java/io/bitsquare/payment/AliPayAccountContractData.java index 14e3810402..c9a0035c1c 100644 --- a/core/src/main/java/io/bitsquare/payment/AliPayAccountContractData.java +++ b/core/src/main/java/io/bitsquare/payment/AliPayAccountContractData.java @@ -19,9 +19,7 @@ package io.bitsquare.payment; import io.bitsquare.app.Version; -import java.io.Serializable; - -public final class AliPayAccountContractData extends PaymentAccountContractData implements Serializable { +public final class AliPayAccountContractData extends PaymentAccountContractData { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.P2P_NETWORK_VERSION; diff --git a/core/src/main/java/io/bitsquare/payment/BlockChainAccount.java b/core/src/main/java/io/bitsquare/payment/BlockChainAccount.java index d39c4e4de4..d7a89eeb6f 100644 --- a/core/src/main/java/io/bitsquare/payment/BlockChainAccount.java +++ b/core/src/main/java/io/bitsquare/payment/BlockChainAccount.java @@ -19,9 +19,7 @@ package io.bitsquare.payment; import io.bitsquare.app.Version; -import java.io.Serializable; - -public class BlockChainAccount extends PaymentAccount implements Serializable { +public class BlockChainAccount extends PaymentAccount { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/payment/BlockChainAccountContractData.java b/core/src/main/java/io/bitsquare/payment/BlockChainAccountContractData.java index 0f77a699c6..05fda06088 100644 --- a/core/src/main/java/io/bitsquare/payment/BlockChainAccountContractData.java +++ b/core/src/main/java/io/bitsquare/payment/BlockChainAccountContractData.java @@ -19,9 +19,7 @@ package io.bitsquare.payment; import io.bitsquare.app.Version; -import java.io.Serializable; - -public final class BlockChainAccountContractData extends PaymentAccountContractData implements Serializable { +public final class BlockChainAccountContractData extends PaymentAccountContractData { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.P2P_NETWORK_VERSION; @@ -49,7 +47,7 @@ public final class BlockChainAccountContractData extends PaymentAccountContractD @Override public String getPaymentDetailsForTradePopup() { return getPaymentDetails(); - } + } public void setPaymentId(String paymentId) { this.paymentId = paymentId; diff --git a/core/src/main/java/io/bitsquare/payment/OKPayAccount.java b/core/src/main/java/io/bitsquare/payment/OKPayAccount.java index 08eadf4d14..692ae4ea4e 100644 --- a/core/src/main/java/io/bitsquare/payment/OKPayAccount.java +++ b/core/src/main/java/io/bitsquare/payment/OKPayAccount.java @@ -22,9 +22,7 @@ import io.bitsquare.locale.CurrencyUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.Serializable; - -public class OKPayAccount extends PaymentAccount implements Serializable { +public class OKPayAccount extends PaymentAccount { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/payment/OKPayAccountContractData.java b/core/src/main/java/io/bitsquare/payment/OKPayAccountContractData.java index 3fca90082a..5b33b525cd 100644 --- a/core/src/main/java/io/bitsquare/payment/OKPayAccountContractData.java +++ b/core/src/main/java/io/bitsquare/payment/OKPayAccountContractData.java @@ -19,9 +19,7 @@ package io.bitsquare.payment; import io.bitsquare.app.Version; -import java.io.Serializable; - -public final class OKPayAccountContractData extends PaymentAccountContractData implements Serializable { +public final class OKPayAccountContractData extends PaymentAccountContractData { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.P2P_NETWORK_VERSION; diff --git a/core/src/main/java/io/bitsquare/payment/PaymentAccount.java b/core/src/main/java/io/bitsquare/payment/PaymentAccount.java index 6cc4ccb7ee..e4cf06bccb 100644 --- a/core/src/main/java/io/bitsquare/payment/PaymentAccount.java +++ b/core/src/main/java/io/bitsquare/payment/PaymentAccount.java @@ -18,19 +18,19 @@ package io.bitsquare.payment; import io.bitsquare.app.Version; +import io.bitsquare.common.persistance.Persistable; import io.bitsquare.locale.Country; import io.bitsquare.locale.TradeCurrency; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.annotation.Nullable; -import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.UUID; -public class PaymentAccount implements Serializable { +public class PaymentAccount implements Persistable { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/payment/PaymentAccountContractData.java b/core/src/main/java/io/bitsquare/payment/PaymentAccountContractData.java index 75eaf15a7e..ca5d4ab4e9 100644 --- a/core/src/main/java/io/bitsquare/payment/PaymentAccountContractData.java +++ b/core/src/main/java/io/bitsquare/payment/PaymentAccountContractData.java @@ -18,11 +18,11 @@ package io.bitsquare.payment; import io.bitsquare.app.Version; +import io.bitsquare.common.wire.Payload; import javax.annotation.Nullable; -import java.io.Serializable; -public abstract class PaymentAccountContractData implements Serializable { +public abstract class PaymentAccountContractData implements Payload { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.P2P_NETWORK_VERSION; diff --git a/core/src/main/java/io/bitsquare/payment/PaymentMethod.java b/core/src/main/java/io/bitsquare/payment/PaymentMethod.java index 6bc8ebb555..ffcca1e727 100644 --- a/core/src/main/java/io/bitsquare/payment/PaymentMethod.java +++ b/core/src/main/java/io/bitsquare/payment/PaymentMethod.java @@ -18,17 +18,17 @@ package io.bitsquare.payment; import io.bitsquare.app.Version; +import io.bitsquare.common.persistance.Persistable; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.List; // Don't use Enum as it breaks serialisation when changing entries and we want to stay flexible here -public class PaymentMethod implements Serializable, Comparable { +public class PaymentMethod implements Persistable, Comparable { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/payment/PerfectMoneyAccount.java b/core/src/main/java/io/bitsquare/payment/PerfectMoneyAccount.java index 8f028004fa..a5055e2124 100644 --- a/core/src/main/java/io/bitsquare/payment/PerfectMoneyAccount.java +++ b/core/src/main/java/io/bitsquare/payment/PerfectMoneyAccount.java @@ -20,9 +20,7 @@ package io.bitsquare.payment; import io.bitsquare.app.Version; import io.bitsquare.locale.FiatCurrency; -import java.io.Serializable; - -public class PerfectMoneyAccount extends PaymentAccount implements Serializable { +public class PerfectMoneyAccount extends PaymentAccount { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/payment/PerfectMoneyAccountContractData.java b/core/src/main/java/io/bitsquare/payment/PerfectMoneyAccountContractData.java index afe20aa5ad..e1cb8d55ce 100644 --- a/core/src/main/java/io/bitsquare/payment/PerfectMoneyAccountContractData.java +++ b/core/src/main/java/io/bitsquare/payment/PerfectMoneyAccountContractData.java @@ -19,9 +19,7 @@ package io.bitsquare.payment; import io.bitsquare.app.Version; -import java.io.Serializable; - -public final class PerfectMoneyAccountContractData extends PaymentAccountContractData implements Serializable { +public final class PerfectMoneyAccountContractData extends PaymentAccountContractData { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.P2P_NETWORK_VERSION; diff --git a/core/src/main/java/io/bitsquare/payment/SepaAccount.java b/core/src/main/java/io/bitsquare/payment/SepaAccount.java index 835e5dec2c..f6b8b47e72 100644 --- a/core/src/main/java/io/bitsquare/payment/SepaAccount.java +++ b/core/src/main/java/io/bitsquare/payment/SepaAccount.java @@ -19,10 +19,9 @@ package io.bitsquare.payment; import io.bitsquare.app.Version; -import java.io.Serializable; import java.util.List; -public class SepaAccount extends PaymentAccount implements Serializable { +public class SepaAccount extends PaymentAccount { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/payment/SepaAccountContractData.java b/core/src/main/java/io/bitsquare/payment/SepaAccountContractData.java index 13efd3ee0a..f304936ecf 100644 --- a/core/src/main/java/io/bitsquare/payment/SepaAccountContractData.java +++ b/core/src/main/java/io/bitsquare/payment/SepaAccountContractData.java @@ -22,13 +22,12 @@ import io.bitsquare.locale.CountryUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.stream.Collectors; -public final class SepaAccountContractData extends PaymentAccountContractData implements Serializable { +public final class SepaAccountContractData extends PaymentAccountContractData { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.P2P_NETWORK_VERSION; diff --git a/core/src/main/java/io/bitsquare/payment/SwishAccount.java b/core/src/main/java/io/bitsquare/payment/SwishAccount.java index 6f81a9fbe6..3cc4d3b31d 100644 --- a/core/src/main/java/io/bitsquare/payment/SwishAccount.java +++ b/core/src/main/java/io/bitsquare/payment/SwishAccount.java @@ -20,9 +20,7 @@ package io.bitsquare.payment; import io.bitsquare.app.Version; import io.bitsquare.locale.FiatCurrency; -import java.io.Serializable; - -public class SwishAccount extends PaymentAccount implements Serializable { +public class SwishAccount extends PaymentAccount { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/payment/SwishAccountContractData.java b/core/src/main/java/io/bitsquare/payment/SwishAccountContractData.java index feb412c386..c9c196288b 100644 --- a/core/src/main/java/io/bitsquare/payment/SwishAccountContractData.java +++ b/core/src/main/java/io/bitsquare/payment/SwishAccountContractData.java @@ -19,9 +19,7 @@ package io.bitsquare.payment; import io.bitsquare.app.Version; -import java.io.Serializable; - -public final class SwishAccountContractData extends PaymentAccountContractData implements Serializable { +public final class SwishAccountContractData extends PaymentAccountContractData { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.P2P_NETWORK_VERSION; diff --git a/core/src/main/java/io/bitsquare/payment/unused/FedWireAccount.java b/core/src/main/java/io/bitsquare/payment/unused/FedWireAccount.java index b0fe5ff9a1..2f35e94953 100644 --- a/core/src/main/java/io/bitsquare/payment/unused/FedWireAccount.java +++ b/core/src/main/java/io/bitsquare/payment/unused/FedWireAccount.java @@ -23,10 +23,8 @@ import io.bitsquare.payment.PaymentMethod; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.Serializable; - // US only -public class FedWireAccount extends PaymentAccount implements Serializable { +public class FedWireAccount extends PaymentAccount { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/payment/unused/TransferWiseAccount.java b/core/src/main/java/io/bitsquare/payment/unused/TransferWiseAccount.java index 63cd839a78..3864e0941a 100644 --- a/core/src/main/java/io/bitsquare/payment/unused/TransferWiseAccount.java +++ b/core/src/main/java/io/bitsquare/payment/unused/TransferWiseAccount.java @@ -23,9 +23,7 @@ import io.bitsquare.payment.PaymentMethod; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.Serializable; - -public class TransferWiseAccount extends PaymentAccount implements Serializable { +public class TransferWiseAccount extends PaymentAccount { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/payment/unused/USPostalMoneyOrderAccount.java b/core/src/main/java/io/bitsquare/payment/unused/USPostalMoneyOrderAccount.java index 83845d26f8..422e7d9afb 100644 --- a/core/src/main/java/io/bitsquare/payment/unused/USPostalMoneyOrderAccount.java +++ b/core/src/main/java/io/bitsquare/payment/unused/USPostalMoneyOrderAccount.java @@ -22,9 +22,7 @@ import io.bitsquare.payment.PaymentAccount; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.Serializable; - -public class USPostalMoneyOrderAccount extends PaymentAccount implements Serializable { +public class USPostalMoneyOrderAccount extends PaymentAccount { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/trade/BuyerTrade.java b/core/src/main/java/io/bitsquare/trade/BuyerTrade.java index d1762b80aa..32f0805e60 100644 --- a/core/src/main/java/io/bitsquare/trade/BuyerTrade.java +++ b/core/src/main/java/io/bitsquare/trade/BuyerTrade.java @@ -28,11 +28,9 @@ import org.bitcoinj.core.Coin; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.Serializable; - import static com.google.common.base.Preconditions.checkArgument; -public abstract class BuyerTrade extends Trade implements Serializable { +public abstract class BuyerTrade extends Trade { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/trade/Contract.java b/core/src/main/java/io/bitsquare/trade/Contract.java index c2e67865ca..affee0f842 100644 --- a/core/src/main/java/io/bitsquare/trade/Contract.java +++ b/core/src/main/java/io/bitsquare/trade/Contract.java @@ -20,20 +20,20 @@ package io.bitsquare.trade; import io.bitsquare.app.Version; import io.bitsquare.common.crypto.PubKeyRing; import io.bitsquare.common.util.JsonExclude; +import io.bitsquare.common.wire.Payload; import io.bitsquare.p2p.NodeAddress; import io.bitsquare.payment.PaymentAccountContractData; import io.bitsquare.trade.offer.Offer; import org.bitcoinj.core.Coin; import javax.annotation.concurrent.Immutable; -import java.io.Serializable; import java.util.Arrays; import static com.google.common.base.Preconditions.checkArgument; @SuppressWarnings("WeakerAccess") @Immutable -public final class Contract implements Serializable { +public final class Contract implements Payload { // That object is sent over the wire, so we need to take care of version compatibility. @JsonExclude public static final long serialVersionUID = Version.P2P_NETWORK_VERSION; diff --git a/core/src/main/java/io/bitsquare/trade/SellerTrade.java b/core/src/main/java/io/bitsquare/trade/SellerTrade.java index 6f765e5905..2c77e95034 100644 --- a/core/src/main/java/io/bitsquare/trade/SellerTrade.java +++ b/core/src/main/java/io/bitsquare/trade/SellerTrade.java @@ -26,11 +26,9 @@ import org.bitcoinj.core.Coin; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.Serializable; - import static com.google.common.base.Preconditions.checkArgument; -public abstract class SellerTrade extends Trade implements Serializable { +public abstract class SellerTrade extends Trade { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/trade/Tradable.java b/core/src/main/java/io/bitsquare/trade/Tradable.java index 1b3f7cabfc..333c5d02b8 100644 --- a/core/src/main/java/io/bitsquare/trade/Tradable.java +++ b/core/src/main/java/io/bitsquare/trade/Tradable.java @@ -17,12 +17,12 @@ package io.bitsquare.trade; +import io.bitsquare.common.persistance.Persistable; import io.bitsquare.trade.offer.Offer; -import java.io.Serializable; import java.util.Date; -public interface Tradable extends Serializable { +public interface Tradable extends Persistable { Offer getOffer(); Date getDate(); diff --git a/core/src/main/java/io/bitsquare/trade/TradableList.java b/core/src/main/java/io/bitsquare/trade/TradableList.java index 0cc3cb97c8..c34a24d05f 100644 --- a/core/src/main/java/io/bitsquare/trade/TradableList.java +++ b/core/src/main/java/io/bitsquare/trade/TradableList.java @@ -18,6 +18,7 @@ package io.bitsquare.trade; import io.bitsquare.app.Version; +import io.bitsquare.common.persistance.Persistable; import io.bitsquare.storage.Storage; import javafx.collections.FXCollections; import javafx.collections.ObservableList; @@ -26,10 +27,9 @@ import org.slf4j.LoggerFactory; import java.io.IOException; import java.io.ObjectInputStream; -import java.io.Serializable; import java.util.ArrayList; -public class TradableList extends ArrayList implements Serializable { +public class TradableList extends ArrayList implements Persistable { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/trade/Trade.java b/core/src/main/java/io/bitsquare/trade/Trade.java index 7af5aeb147..8a36f5cfda 100644 --- a/core/src/main/java/io/bitsquare/trade/Trade.java +++ b/core/src/main/java/io/bitsquare/trade/Trade.java @@ -50,14 +50,13 @@ import org.slf4j.LoggerFactory; import javax.annotation.Nullable; import java.io.IOException; import java.io.ObjectInputStream; -import java.io.Serializable; import java.util.Date; /** * Holds all data which are relevant to the trade, but not those which are only needed in the trade process as shared data between tasks. Those data are * stored in the task model. */ -abstract public class Trade implements Tradable, Model, Serializable { +abstract public class Trade implements Tradable, Model { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/trade/offer/Offer.java b/core/src/main/java/io/bitsquare/trade/offer/Offer.java index 57b15f09f3..85314c219a 100644 --- a/core/src/main/java/io/bitsquare/trade/offer/Offer.java +++ b/core/src/main/java/io/bitsquare/trade/offer/Offer.java @@ -25,8 +25,8 @@ import io.bitsquare.common.handlers.ResultHandler; import io.bitsquare.common.util.JsonExclude; import io.bitsquare.locale.Country; import io.bitsquare.p2p.NodeAddress; -import io.bitsquare.p2p.storage.messages.RequiresOwnerIsOnlinePayload; -import io.bitsquare.p2p.storage.messages.StoragePayload; +import io.bitsquare.p2p.storage.data.RequiresOwnerIsOnlinePayload; +import io.bitsquare.p2p.storage.data.StoragePayload; import io.bitsquare.payment.PaymentMethod; import io.bitsquare.trade.protocol.availability.OfferAvailabilityModel; import io.bitsquare.trade.protocol.availability.OfferAvailabilityProtocol; diff --git a/core/src/main/java/io/bitsquare/trade/offer/OpenOfferManager.java b/core/src/main/java/io/bitsquare/trade/offer/OpenOfferManager.java index 70c0706e3c..8566cb480a 100644 --- a/core/src/main/java/io/bitsquare/trade/offer/OpenOfferManager.java +++ b/core/src/main/java/io/bitsquare/trade/offer/OpenOfferManager.java @@ -122,13 +122,12 @@ public class OpenOfferManager { }); NetworkNode networkNode = p2PService.getNetworkNode(); + + // TODO: Use check for detecting inactivity instead. run timer and check if elapsed time is in expected range, + // if not we have been in standby and need a republish networkNode.addConnectionListener(new ConnectionListener() { @Override public void onConnection(Connection connection) { - log.error("ConnectionListener onConnection size " + networkNode.getAllConnections().size()); - log.error("ConnectionListener onConnection lostAllConnections " + lostAllConnections); - log.error("ConnectionListener onConnection allowRefreshOffers " + allowRefreshOffers); - log.error("ConnectionListener onConnection republishOffersTime " + republishOffersTime); if (lostAllConnections) { lostAllConnections = false; allowRefreshOffers = false; @@ -148,7 +147,6 @@ public class OpenOfferManager { @Override public void onDisconnect(CloseConnectionReason closeConnectionReason, Connection connection) { - log.error("ConnectionListener onDisconnect size " + networkNode.getAllConnections().size()); lostAllConnections = networkNode.getAllConnections().isEmpty(); if (lostAllConnections) allowRefreshOffers = false; @@ -225,7 +223,6 @@ public class OpenOfferManager { } private void republishOffers() { - log.error("republishOffers "); Log.traceCall("Number of offer for republish: " + openOffers.size()); for (OpenOffer openOffer : openOffers) { offerBookService.republishOffers(openOffer.getOffer(), diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/TradingPeer.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/TradingPeer.java index 3d7d1e830a..9de3f1e915 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/TradingPeer.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/TradingPeer.java @@ -20,6 +20,7 @@ package io.bitsquare.trade.protocol.trade; import io.bitsquare.app.Version; import io.bitsquare.btc.data.RawInput; import io.bitsquare.common.crypto.PubKeyRing; +import io.bitsquare.common.persistance.Persistable; import io.bitsquare.payment.PaymentAccountContractData; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,10 +28,9 @@ import org.slf4j.LoggerFactory; import javax.annotation.Nullable; import java.io.IOException; import java.io.ObjectInputStream; -import java.io.Serializable; import java.util.List; -public class TradingPeer implements Serializable { +public class TradingPeer implements Persistable { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/user/BlockChainExplorer.java b/core/src/main/java/io/bitsquare/user/BlockChainExplorer.java index bfe8ae5909..59528e9085 100644 --- a/core/src/main/java/io/bitsquare/user/BlockChainExplorer.java +++ b/core/src/main/java/io/bitsquare/user/BlockChainExplorer.java @@ -18,12 +18,11 @@ package io.bitsquare.user; import io.bitsquare.app.Version; +import io.bitsquare.common.persistance.Persistable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.Serializable; - -public class BlockChainExplorer implements Serializable { +public class BlockChainExplorer implements Persistable { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/user/Preferences.java b/core/src/main/java/io/bitsquare/user/Preferences.java index e7e7816860..233c67b44b 100644 --- a/core/src/main/java/io/bitsquare/user/Preferences.java +++ b/core/src/main/java/io/bitsquare/user/Preferences.java @@ -21,6 +21,7 @@ import io.bitsquare.app.BitsquareEnvironment; import io.bitsquare.app.Version; import io.bitsquare.btc.BitcoinNetwork; import io.bitsquare.btc.FeePolicy; +import io.bitsquare.common.persistance.Persistable; import io.bitsquare.locale.CountryUtil; import io.bitsquare.locale.CurrencyUtil; import io.bitsquare.locale.TradeCurrency; @@ -39,10 +40,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Inject; -import java.io.Serializable; import java.util.*; -public class Preferences implements Serializable { +public class Preferences implements Persistable { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/core/src/main/java/io/bitsquare/user/User.java b/core/src/main/java/io/bitsquare/user/User.java index caf8a220f2..02423ff77a 100644 --- a/core/src/main/java/io/bitsquare/user/User.java +++ b/core/src/main/java/io/bitsquare/user/User.java @@ -21,6 +21,7 @@ import io.bitsquare.alert.Alert; import io.bitsquare.app.Version; import io.bitsquare.arbitration.Arbitrator; import io.bitsquare.common.crypto.KeyRing; +import io.bitsquare.common.persistance.Persistable; import io.bitsquare.locale.LanguageUtil; import io.bitsquare.locale.TradeCurrency; import io.bitsquare.p2p.NodeAddress; @@ -38,7 +39,6 @@ import javax.annotation.Nullable; import javax.inject.Inject; import java.io.IOException; import java.io.ObjectInputStream; -import java.io.Serializable; import java.security.NoSuchAlgorithmException; import java.util.*; import java.util.stream.Collectors; @@ -48,7 +48,7 @@ import java.util.stream.Collectors; * The User is persisted locally. * It must never be transmitted over the wire (messageKeyPair contains private key!). */ -public class User implements Serializable { +public class User implements Persistable { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/gui/src/main/java/io/bitsquare/gui/Navigation.java b/gui/src/main/java/io/bitsquare/gui/Navigation.java index 3ffd768d86..650c9c0873 100644 --- a/gui/src/main/java/io/bitsquare/gui/Navigation.java +++ b/gui/src/main/java/io/bitsquare/gui/Navigation.java @@ -19,6 +19,7 @@ package io.bitsquare.gui; import com.google.inject.Inject; import io.bitsquare.app.Version; +import io.bitsquare.common.persistance.Persistable; import io.bitsquare.gui.common.view.View; import io.bitsquare.gui.common.view.ViewPath; import io.bitsquare.gui.main.MainView; @@ -27,11 +28,10 @@ import io.bitsquare.storage.Storage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.Serializable; import java.util.ArrayList; import java.util.concurrent.CopyOnWriteArraySet; -public class Navigation implements Serializable { +public class Navigation implements Persistable { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; private static final Logger log = LoggerFactory.getLogger(Navigation.class); diff --git a/gui/src/main/java/io/bitsquare/gui/common/view/ViewPath.java b/gui/src/main/java/io/bitsquare/gui/common/view/ViewPath.java index ee78309b90..49ebab828c 100644 --- a/gui/src/main/java/io/bitsquare/gui/common/view/ViewPath.java +++ b/gui/src/main/java/io/bitsquare/gui/common/view/ViewPath.java @@ -18,14 +18,14 @@ package io.bitsquare.gui.common.view; import io.bitsquare.app.Version; +import io.bitsquare.common.persistance.Persistable; -import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; -public class ViewPath extends ArrayList> implements Serializable { +public class ViewPath extends ArrayList> implements Persistable { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; diff --git a/gui/src/main/java/io/bitsquare/gui/main/account/content/arbitratorselection/ArbitratorSelectionView.java b/gui/src/main/java/io/bitsquare/gui/main/account/content/arbitratorselection/ArbitratorSelectionView.java index a0250e69b2..0ed3a33c53 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/account/content/arbitratorselection/ArbitratorSelectionView.java +++ b/gui/src/main/java/io/bitsquare/gui/main/account/content/arbitratorselection/ArbitratorSelectionView.java @@ -90,7 +90,8 @@ public class ArbitratorSelectionView extends ActivatableViewAndModel getDataMap() { + public Map getDataMap() { return p2PDataStorage.getMap(); } diff --git a/network/src/main/java/io/bitsquare/p2p/peers/peerexchange/ReportedPeer.java b/network/src/main/java/io/bitsquare/p2p/peers/peerexchange/ReportedPeer.java index 32390021be..d66de178d7 100644 --- a/network/src/main/java/io/bitsquare/p2p/peers/peerexchange/ReportedPeer.java +++ b/network/src/main/java/io/bitsquare/p2p/peers/peerexchange/ReportedPeer.java @@ -1,12 +1,13 @@ package io.bitsquare.p2p.peers.peerexchange; import io.bitsquare.app.Version; +import io.bitsquare.common.persistance.Persistable; +import io.bitsquare.common.wire.Payload; import io.bitsquare.p2p.NodeAddress; -import java.io.Serializable; import java.util.Date; -public class ReportedPeer implements Serializable { +public class ReportedPeer implements Payload, Persistable { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.P2P_NETWORK_VERSION; diff --git a/network/src/main/java/io/bitsquare/p2p/storage/P2PDataStorage.java b/network/src/main/java/io/bitsquare/p2p/storage/P2PDataStorage.java index 5791a4a462..935f1624ca 100644 --- a/network/src/main/java/io/bitsquare/p2p/storage/P2PDataStorage.java +++ b/network/src/main/java/io/bitsquare/p2p/storage/P2PDataStorage.java @@ -8,15 +8,14 @@ import io.bitsquare.common.UserThread; import io.bitsquare.common.crypto.CryptoException; import io.bitsquare.common.crypto.Hash; import io.bitsquare.common.crypto.Sig; -import io.bitsquare.common.util.Tuple2; +import io.bitsquare.common.persistance.Persistable; import io.bitsquare.common.util.Utilities; +import io.bitsquare.common.wire.Payload; import io.bitsquare.p2p.Message; import io.bitsquare.p2p.NodeAddress; import io.bitsquare.p2p.network.*; import io.bitsquare.p2p.peers.Broadcaster; -import io.bitsquare.p2p.storage.data.ProtectedData; -import io.bitsquare.p2p.storage.data.ProtectedMailboxData; -import io.bitsquare.p2p.storage.data.RefreshTTLBundle; +import io.bitsquare.p2p.storage.data.*; import io.bitsquare.p2p.storage.messages.*; import io.bitsquare.storage.Storage; import org.apache.commons.lang3.StringUtils; @@ -44,7 +43,7 @@ public class P2PDataStorage implements MessageListener, ConnectionListener { private final Broadcaster broadcaster; private final Map map = new ConcurrentHashMap<>(); private final CopyOnWriteArraySet hashMapChangedListeners = new CopyOnWriteArraySet<>(); - private HashMap> sequenceNumberMap = new HashMap<>(); + private HashMap sequenceNumberMap = new HashMap<>(); private final Storage storage; private final ScheduledThreadPoolExecutor removeExpiredEntriesExecutor; @@ -65,7 +64,7 @@ public class P2PDataStorage implements MessageListener, ConnectionListener { } private void init() { - HashMap> persisted = storage.initAndGetPersisted("SequenceNumberMap"); + HashMap persisted = storage.initAndGetPersisted("SequenceNumberMap"); if (persisted != null) sequenceNumberMap = getPurgedSequenceNumberMap(persisted); @@ -192,9 +191,9 @@ public class P2PDataStorage implements MessageListener, ConnectionListener { // Republished data have a larger sequence number. We set the rePublish flag to enable broadcasting // even we had the data with the old seq nr. already if (sequenceNumberMap.containsKey(hashOfPayload) && - protectedData.sequenceNumber > sequenceNumberMap.get(hashOfPayload).first) + protectedData.sequenceNumber > sequenceNumberMap.get(hashOfPayload).sequenceNr) - sequenceNumberMap.put(hashOfPayload, new Tuple2<>(protectedData.sequenceNumber, System.currentTimeMillis())); + sequenceNumberMap.put(hashOfPayload, new MapValue(protectedData.sequenceNumber, System.currentTimeMillis())); storage.queueUpForSave(sequenceNumberMap, 5000); StringBuilder sb = new StringBuilder("\n\n------------------------------------------------------------\n"); @@ -226,7 +225,7 @@ public class P2PDataStorage implements MessageListener, ConnectionListener { ByteArray hashOfPayload = new ByteArray(refreshTTLBundle.hashOfPayload); if (map.containsKey(hashOfPayload)) { - if (sequenceNumberMap.containsKey(hashOfPayload) && sequenceNumberMap.get(hashOfPayload).first == sequenceNumber) { + if (sequenceNumberMap.containsKey(hashOfPayload) && sequenceNumberMap.get(hashOfPayload).sequenceNr == sequenceNumber) { log.warn("We got that message with that seq nr already from another peer. We ignore that message."); return true; } else { @@ -239,7 +238,7 @@ public class P2PDataStorage implements MessageListener, ConnectionListener { ProtectedData storedData = map.get(hashOfPayload); storedData.refreshDate(); - sequenceNumberMap.put(hashOfPayload, new Tuple2<>(sequenceNumber, System.currentTimeMillis())); + sequenceNumberMap.put(hashOfPayload, new MapValue(sequenceNumber, System.currentTimeMillis())); storage.queueUpForSave(sequenceNumberMap, 5000); StringBuilder sb = new StringBuilder("\n\n------------------------------------------------------------\n"); @@ -278,7 +277,7 @@ public class P2PDataStorage implements MessageListener, ConnectionListener { broadcast(new RemoveDataMessage(protectedData), sender); - sequenceNumberMap.put(hashOfPayload, new Tuple2<>(protectedData.sequenceNumber, System.currentTimeMillis())); + sequenceNumberMap.put(hashOfPayload, new MapValue(protectedData.sequenceNumber, System.currentTimeMillis())); storage.queueUpForSave(sequenceNumberMap, 5000); } else { log.debug("remove failed"); @@ -303,7 +302,7 @@ public class P2PDataStorage implements MessageListener, ConnectionListener { broadcast(new RemoveMailboxDataMessage(protectedMailboxData), sender); - sequenceNumberMap.put(hashOfData, new Tuple2<>(protectedMailboxData.sequenceNumber, System.currentTimeMillis())); + sequenceNumberMap.put(hashOfData, new MapValue(protectedMailboxData.sequenceNumber, System.currentTimeMillis())); storage.queueUpForSave(sequenceNumberMap, 5000); } else { log.debug("removeMailboxData failed"); @@ -321,7 +320,7 @@ public class P2PDataStorage implements MessageListener, ConnectionListener { ByteArray hashOfData = getHashAsByteArray(payload); int sequenceNumber; if (sequenceNumberMap.containsKey(hashOfData)) - sequenceNumber = sequenceNumberMap.get(hashOfData).first + 1; + sequenceNumber = sequenceNumberMap.get(hashOfData).sequenceNr + 1; else sequenceNumber = 0; @@ -335,7 +334,7 @@ public class P2PDataStorage implements MessageListener, ConnectionListener { ByteArray hashOfPayload = getHashAsByteArray(payload); int sequenceNumber; if (sequenceNumberMap.containsKey(hashOfPayload)) - sequenceNumber = sequenceNumberMap.get(hashOfPayload).first + 1; + sequenceNumber = sequenceNumberMap.get(hashOfPayload).sequenceNr + 1; else sequenceNumber = 0; @@ -351,7 +350,7 @@ public class P2PDataStorage implements MessageListener, ConnectionListener { ByteArray hashOfData = getHashAsByteArray(expirableMailboxPayload); int sequenceNumber; if (sequenceNumberMap.containsKey(hashOfData)) - sequenceNumber = sequenceNumberMap.get(hashOfData).first + 1; + sequenceNumber = sequenceNumberMap.get(hashOfData).sequenceNr + 1; else sequenceNumber = 0; @@ -385,7 +384,7 @@ public class P2PDataStorage implements MessageListener, ConnectionListener { private boolean isSequenceNrValid(int newSequenceNumber, ByteArray hashOfData) { if (sequenceNumberMap.containsKey(hashOfData)) { - Integer storedSequenceNumber = sequenceNumberMap.get(hashOfData).first; + Integer storedSequenceNumber = sequenceNumberMap.get(hashOfData).sequenceNr; if (newSequenceNumber < storedSequenceNumber) { log.warn("Sequence number is invalid. newSequenceNumber=" + newSequenceNumber + " / storedSequenceNumber=" + storedSequenceNumber); @@ -472,11 +471,11 @@ public class P2PDataStorage implements MessageListener, ConnectionListener { return new ByteArray(Hash.getHash(data)); } - private HashMap> getPurgedSequenceNumberMap(HashMap> persisted) { - HashMap> purged = new HashMap<>(); + private HashMap getPurgedSequenceNumberMap(HashMap persisted) { + HashMap purged = new HashMap<>(); long maxAgeTs = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(10); persisted.entrySet().stream().forEach(entry -> { - if (entry.getValue().second > maxAgeTs) + if (entry.getValue().timeStamp > maxAgeTs) purged.put(entry.getKey(), entry.getValue()); }); return purged; @@ -487,13 +486,18 @@ public class P2PDataStorage implements MessageListener, ConnectionListener { // Static class /////////////////////////////////////////////////////////////////////////////////////////// - // Used as container for calculating cryptographic hash of data and sequenceNumber + + /** + * Used as container for calculating cryptographic hash of data and sequenceNumber. + * Needs to be Serializable because we convert the object to a byte array via java serialization + * before calculating the hash. + */ public static final class DataAndSeqNrPair implements Serializable { // data are only used for calculating cryptographic hash from both values so they are kept private - private final Serializable data; + private final Payload data; private final int sequenceNumber; - public DataAndSeqNrPair(Serializable data, int sequenceNumber) { + public DataAndSeqNrPair(Payload data, int sequenceNumber) { this.data = data; this.sequenceNumber = sequenceNumber; } @@ -507,9 +511,12 @@ public class P2PDataStorage implements MessageListener, ConnectionListener { } } - // Used as key object in map for cryptographic hash of stored data as byte[] as primitive data type cannot be - // used as key - public static final class ByteArray implements Serializable { + + /** + * Used as key object in map for cryptographic hash of stored data as byte[] as primitive data type cannot be + * used as key + */ + public static final class ByteArray implements Persistable { // That object is saved to disc. We need to take care of changes to not break deserialization. private static final long serialVersionUID = Version.LOCAL_DB_VERSION; @@ -536,4 +543,46 @@ public class P2PDataStorage implements MessageListener, ConnectionListener { } + /** + * Used as value in map + */ + private static final class MapValue implements Persistable { + // That object is saved to disc. We need to take care of changes to not break deserialization. + private static final long serialVersionUID = Version.LOCAL_DB_VERSION; + + final public int sequenceNr; + final public long timeStamp; + + public MapValue(int sequenceNr, long timeStamp) { + this.sequenceNr = sequenceNr; + this.timeStamp = timeStamp; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof MapValue)) return false; + + MapValue mapValue = (MapValue) o; + + if (sequenceNr != mapValue.sequenceNr) return false; + return timeStamp == mapValue.timeStamp; + + } + + @Override + public int hashCode() { + int result = sequenceNr; + result = 31 * result + (int) (timeStamp ^ (timeStamp >>> 32)); + return result; + } + + @Override + public String toString() { + return "MapValue{" + + "sequenceNr=" + sequenceNr + + ", timeStamp=" + timeStamp + + '}'; + } + } } diff --git a/network/src/main/java/io/bitsquare/p2p/storage/messages/ExpirablePayload.java b/network/src/main/java/io/bitsquare/p2p/storage/data/ExpirablePayload.java similarity index 61% rename from network/src/main/java/io/bitsquare/p2p/storage/messages/ExpirablePayload.java rename to network/src/main/java/io/bitsquare/p2p/storage/data/ExpirablePayload.java index b337fd35e8..d5b24103f0 100644 --- a/network/src/main/java/io/bitsquare/p2p/storage/messages/ExpirablePayload.java +++ b/network/src/main/java/io/bitsquare/p2p/storage/data/ExpirablePayload.java @@ -1,6 +1,6 @@ -package io.bitsquare.p2p.storage.messages; +package io.bitsquare.p2p.storage.data; -import java.io.Serializable; +import io.bitsquare.common.wire.Payload; /** * Messages which support a time to live @@ -10,7 +10,7 @@ import java.io.Serializable; * @see StoragePayload * @see MailboxPayload */ -public interface ExpirablePayload extends Serializable { +public interface ExpirablePayload extends Payload { /** * @return Time to live in milli seconds */ diff --git a/network/src/main/java/io/bitsquare/p2p/storage/messages/MailboxPayload.java b/network/src/main/java/io/bitsquare/p2p/storage/data/MailboxPayload.java similarity index 97% rename from network/src/main/java/io/bitsquare/p2p/storage/messages/MailboxPayload.java rename to network/src/main/java/io/bitsquare/p2p/storage/data/MailboxPayload.java index 38201e271e..0e8c840996 100644 --- a/network/src/main/java/io/bitsquare/p2p/storage/messages/MailboxPayload.java +++ b/network/src/main/java/io/bitsquare/p2p/storage/data/MailboxPayload.java @@ -1,9 +1,8 @@ -package io.bitsquare.p2p.storage.messages; +package io.bitsquare.p2p.storage.data; import io.bitsquare.app.Version; import io.bitsquare.crypto.PrefixedSealedAndSignedMessage; import io.bitsquare.p2p.NodeAddress; -import io.bitsquare.p2p.storage.data.ProtectedData; import java.security.PublicKey; import java.util.concurrent.TimeUnit; diff --git a/network/src/main/java/io/bitsquare/p2p/storage/data/ProtectedData.java b/network/src/main/java/io/bitsquare/p2p/storage/data/ProtectedData.java index b63340e117..da80b2a74b 100644 --- a/network/src/main/java/io/bitsquare/p2p/storage/data/ProtectedData.java +++ b/network/src/main/java/io/bitsquare/p2p/storage/data/ProtectedData.java @@ -1,18 +1,17 @@ package io.bitsquare.p2p.storage.data; import com.google.common.annotations.VisibleForTesting; +import io.bitsquare.common.wire.Payload; import io.bitsquare.p2p.storage.P2PDataStorage; -import io.bitsquare.p2p.storage.messages.ExpirablePayload; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; -import java.io.Serializable; import java.security.PublicKey; import java.util.Arrays; import java.util.Date; -public class ProtectedData implements Serializable { +public class ProtectedData implements Payload { private static final Logger log = LoggerFactory.getLogger(P2PDataStorage.class); public final ExpirablePayload expirablePayload; diff --git a/network/src/main/java/io/bitsquare/p2p/storage/data/ProtectedMailboxData.java b/network/src/main/java/io/bitsquare/p2p/storage/data/ProtectedMailboxData.java index 6ff2e05158..ed0d8cb11b 100644 --- a/network/src/main/java/io/bitsquare/p2p/storage/data/ProtectedMailboxData.java +++ b/network/src/main/java/io/bitsquare/p2p/storage/data/ProtectedMailboxData.java @@ -1,7 +1,6 @@ package io.bitsquare.p2p.storage.data; import io.bitsquare.p2p.storage.P2PDataStorage; -import io.bitsquare.p2p.storage.messages.MailboxPayload; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/network/src/main/java/io/bitsquare/p2p/storage/data/RefreshTTLBundle.java b/network/src/main/java/io/bitsquare/p2p/storage/data/RefreshTTLBundle.java index 64ea337e81..2706773a64 100644 --- a/network/src/main/java/io/bitsquare/p2p/storage/data/RefreshTTLBundle.java +++ b/network/src/main/java/io/bitsquare/p2p/storage/data/RefreshTTLBundle.java @@ -2,12 +2,12 @@ package io.bitsquare.p2p.storage.data; import io.bitsquare.app.Version; import io.bitsquare.common.crypto.Sig; +import io.bitsquare.common.wire.Payload; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.io.ObjectInputStream; -import java.io.Serializable; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; @@ -16,7 +16,7 @@ import java.security.spec.InvalidKeySpecException; import java.security.spec.X509EncodedKeySpec; import java.util.Arrays; -public class RefreshTTLBundle implements Serializable { +public class RefreshTTLBundle implements Payload { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.P2P_NETWORK_VERSION; diff --git a/network/src/main/java/io/bitsquare/p2p/storage/messages/RequiresOwnerIsOnlinePayload.java b/network/src/main/java/io/bitsquare/p2p/storage/data/RequiresOwnerIsOnlinePayload.java similarity index 74% rename from network/src/main/java/io/bitsquare/p2p/storage/messages/RequiresOwnerIsOnlinePayload.java rename to network/src/main/java/io/bitsquare/p2p/storage/data/RequiresOwnerIsOnlinePayload.java index d131f794fc..d44ad1d5e2 100644 --- a/network/src/main/java/io/bitsquare/p2p/storage/messages/RequiresOwnerIsOnlinePayload.java +++ b/network/src/main/java/io/bitsquare/p2p/storage/data/RequiresOwnerIsOnlinePayload.java @@ -1,16 +1,15 @@ -package io.bitsquare.p2p.storage.messages; +package io.bitsquare.p2p.storage.data; +import io.bitsquare.common.wire.Payload; import io.bitsquare.p2p.NodeAddress; -import java.io.Serializable; - /** * Used for messages which require that the data owner is online. *

* This is used for the offers to avoid dead offers in case the offerer is in sleep/hibernate mode or the app has * terminated without sending the remove message (e.g. in case of a crash). */ -public interface RequiresOwnerIsOnlinePayload extends Serializable { +public interface RequiresOwnerIsOnlinePayload extends Payload { /** * @return NodeAddress of the data owner */ diff --git a/network/src/main/java/io/bitsquare/p2p/storage/messages/StoragePayload.java b/network/src/main/java/io/bitsquare/p2p/storage/data/StoragePayload.java similarity index 90% rename from network/src/main/java/io/bitsquare/p2p/storage/messages/StoragePayload.java rename to network/src/main/java/io/bitsquare/p2p/storage/data/StoragePayload.java index 0245818eac..3cee52c814 100644 --- a/network/src/main/java/io/bitsquare/p2p/storage/messages/StoragePayload.java +++ b/network/src/main/java/io/bitsquare/p2p/storage/data/StoragePayload.java @@ -1,7 +1,6 @@ -package io.bitsquare.p2p.storage.messages; +package io.bitsquare.p2p.storage.data; import io.bitsquare.p2p.NodeAddress; -import io.bitsquare.p2p.storage.data.ProtectedData; import java.security.PublicKey; diff --git a/network/src/test/java/io/bitsquare/p2p/mocks/MockMailboxPayload.java b/network/src/test/java/io/bitsquare/p2p/mocks/MockMailboxPayload.java index 53cebbff91..df3f9605f5 100644 --- a/network/src/test/java/io/bitsquare/p2p/mocks/MockMailboxPayload.java +++ b/network/src/test/java/io/bitsquare/p2p/mocks/MockMailboxPayload.java @@ -3,7 +3,7 @@ package io.bitsquare.p2p.mocks; import io.bitsquare.app.Version; import io.bitsquare.p2p.NodeAddress; import io.bitsquare.p2p.messaging.MailboxMessage; -import io.bitsquare.p2p.storage.messages.ExpirablePayload; +import io.bitsquare.p2p.storage.data.ExpirablePayload; public final class MockMailboxPayload implements MailboxMessage, ExpirablePayload { private final int messageVersion = Version.getP2PMessageVersion(); diff --git a/network/src/test/java/io/bitsquare/p2p/mocks/MockPayload.java b/network/src/test/java/io/bitsquare/p2p/mocks/MockPayload.java index 28f9fc1890..f4665d3430 100644 --- a/network/src/test/java/io/bitsquare/p2p/mocks/MockPayload.java +++ b/network/src/test/java/io/bitsquare/p2p/mocks/MockPayload.java @@ -2,7 +2,7 @@ package io.bitsquare.p2p.mocks; import io.bitsquare.app.Version; import io.bitsquare.p2p.Message; -import io.bitsquare.p2p.storage.messages.ExpirablePayload; +import io.bitsquare.p2p.storage.data.ExpirablePayload; public final class MockPayload implements Message, ExpirablePayload { public final String msg; diff --git a/network/src/test/java/io/bitsquare/p2p/storage/mocks/MockData.java b/network/src/test/java/io/bitsquare/p2p/storage/mocks/MockData.java index 3461043839..cc5334929e 100644 --- a/network/src/test/java/io/bitsquare/p2p/storage/mocks/MockData.java +++ b/network/src/test/java/io/bitsquare/p2p/storage/mocks/MockData.java @@ -1,6 +1,6 @@ package io.bitsquare.p2p.storage.mocks; -import io.bitsquare.p2p.storage.messages.StoragePayload; +import io.bitsquare.p2p.storage.data.StoragePayload; import java.security.PublicKey;