diff --git a/core/src/main/java/io/bitsquare/gui/main/portfolio/pending/PendingTradesView.java b/core/src/main/java/io/bitsquare/gui/main/portfolio/pending/PendingTradesView.java index 69b7900a70..117c371f78 100644 --- a/core/src/main/java/io/bitsquare/gui/main/portfolio/pending/PendingTradesView.java +++ b/core/src/main/java/io/bitsquare/gui/main/portfolio/pending/PendingTradesView.java @@ -297,6 +297,7 @@ public class PendingTradesView extends ActivatableViewAndModel { } } - public void removeFile(T serializable) { - storageFile.delete(); + public void removeFile(String fileName) { + File file = new File(dir, fileName); + boolean result = file.delete(); + if (!result) + log.warn("Could not delete file: " + file.toString()); File backupDir = new File(Paths.get(dir.getAbsolutePath(), "backup").toString()); if (backupDir.exists()) { - File backupFile = new File(backupDir, serializable.getClass().getSimpleName()); - if (backupFile.exists()) - backupFile.delete(); + File backupFile = new File(Paths.get(dir.getAbsolutePath(), "backup", fileName).toString()); + if (backupFile.exists()) { + result = backupFile.delete(); + if (!result) + log.warn("Could not delete backupFile: " + file.toString()); + } } } @@ -203,20 +209,22 @@ public class FileManager { } } - public void removeAndBackupFile(File storageFile, File dir, String name) throws IOException { + public void removeAndBackupFile(String fileName) throws IOException { File corruptedBackupDir = new File(Paths.get(dir.getAbsolutePath(), "corrupted").toString()); if (!corruptedBackupDir.exists()) corruptedBackupDir.mkdir(); - renameTempFileToFile(storageFile, new File(corruptedBackupDir, serializable.getClass().getSimpleName())); + File corruptedFile = new File(Paths.get(dir.getAbsolutePath(), "corrupted", fileName).toString()); + renameTempFileToFile(storageFile, corruptedFile); } - public void backupFile(T serializable) throws IOException { + public void backupFile(String fileName) throws IOException { File backupDir = new File(Paths.get(dir.getAbsolutePath(), "backup").toString()); if (!backupDir.exists()) backupDir.mkdir(); - Files.copy(storageFile, new File(backupDir, serializable.getClass().getSimpleName())); + File backupFile = new File(Paths.get(dir.getAbsolutePath(), "backup", fileName).toString()); + Files.copy(storageFile, backupFile); } /////////////////////////////////////////////////////////////////////////////////////////// diff --git a/core/src/main/java/io/bitsquare/storage/Storage.java b/core/src/main/java/io/bitsquare/storage/Storage.java index 395682a39e..942f2a5594 100644 --- a/core/src/main/java/io/bitsquare/storage/Storage.java +++ b/core/src/main/java/io/bitsquare/storage/Storage.java @@ -25,8 +25,6 @@ import java.io.IOException; import java.io.InvalidClassException; import java.io.Serializable; -import java.nio.file.Paths; - import java.util.concurrent.TimeUnit; import javax.inject.Inject; @@ -60,6 +58,7 @@ public class Storage { private FileManager fileManager; private File storageFile; private T serializable; + private String fileName; /////////////////////////////////////////////////////////////////////////////////////////// @@ -77,6 +76,7 @@ public class Storage { public T initAndGetPersisted(T serializable, String fileName) { this.serializable = serializable; + this.fileName = fileName; storageFile = new File(dir, fileName); fileManager = new FileManager<>(dir, storageFile, 500, TimeUnit.MILLISECONDS); @@ -91,8 +91,8 @@ public class Storage { fileManager.saveLater(serializable); } - public void remove() { - fileManager.removeFile(serializable); + public void remove(String fileName) { + fileManager.removeFile(fileName); } @@ -113,7 +113,7 @@ public class Storage { // If we did not get any exception we can be sure the data are consistent so we make a backup now = System.currentTimeMillis(); - fileManager.backupFile(serializable); + fileManager.backupFile(fileName); log.info("Backup {} completed in {}msec", serializable.getClass().getSimpleName(), System.currentTimeMillis() - now); return persistedObject; @@ -121,8 +121,7 @@ public class Storage { log.error("Version of persisted class has changed. We cannot read the persisted data anymore. We make a backup and remove the inconsistent file."); try { // In case the persisted data have been critical (keys) we keep a backup which might be used for recovery - fileManager.removeAndBackupFile(storageFile, new File(Paths.get(dir.getAbsolutePath(), "inconsistent").toString()), - serializable.getClass().getSimpleName()); + fileManager.removeAndBackupFile(fileName); } catch (IOException e1) { e1.printStackTrace(); log.error(e1.getMessage()); diff --git a/core/src/main/java/io/bitsquare/trade/TradeList.java b/core/src/main/java/io/bitsquare/trade/TradeList.java index 2a6c02ea1c..37b3a1d93d 100644 --- a/core/src/main/java/io/bitsquare/trade/TradeList.java +++ b/core/src/main/java/io/bitsquare/trade/TradeList.java @@ -19,8 +19,7 @@ package io.bitsquare.trade; import io.bitsquare.storage.Storage; -import com.google.inject.Inject; - +import java.io.File; import java.io.Serializable; import java.util.ArrayList; @@ -38,11 +37,10 @@ public class TradeList extends ArrayList implements Serializable { transient final private Storage storage; transient private ObservableList observableList; - @Inject - public TradeList(Storage storage) { - this.storage = storage; + public TradeList(File storageDir, String fileName) { + this.storage = new Storage<>(storageDir); - TradeList persisted = storage.initAndGetPersisted(this); + TradeList persisted = storage.initAndGetPersisted(this, fileName); if (persisted != null) { this.addAll(persisted); observableList = FXCollections.observableArrayList(this); diff --git a/core/src/main/java/io/bitsquare/trade/TradeManager.java b/core/src/main/java/io/bitsquare/trade/TradeManager.java index 7e364b43bc..6c3dd6dc84 100644 --- a/core/src/main/java/io/bitsquare/trade/TradeManager.java +++ b/core/src/main/java/io/bitsquare/trade/TradeManager.java @@ -95,15 +95,12 @@ public class TradeManager { /////////////////////////////////////////////////////////////////////////////////////////// @Inject - public TradeManager(User user, AccountSettings accountSettings, TradeList openOfferTrades, TradeList pendingTrades, TradeList closedTrades, + public TradeManager(User user, AccountSettings accountSettings, MessageService messageService, MailboxService mailboxService, AddressService addressService, BlockChainService blockChainService, WalletService walletService, SignatureService signatureService, EncryptionService encryptionService, OfferBookService offerBookService, @Named("storage.dir") File storageDir) { this.user = user; this.accountSettings = accountSettings; - this.openOfferTrades = openOfferTrades; - this.pendingTrades = pendingTrades; - this.closedTrades = closedTrades; this.messageService = messageService; this.mailboxService = mailboxService; this.addressService = addressService; @@ -113,6 +110,10 @@ public class TradeManager { this.encryptionService = encryptionService; this.offerBookService = offerBookService; this.storageDir = storageDir; + + this.openOfferTrades = new TradeList(storageDir, "OpenOfferTrades"); + this.pendingTrades = new TradeList(storageDir, "PendingTrades"); + this.closedTrades = new TradeList(storageDir, "ClosedTrades"); } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/models/OffererAsBuyerModel.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/models/OffererAsBuyerModel.java index 9a95012d5f..2f771911c2 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/models/OffererAsBuyerModel.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/models/OffererAsBuyerModel.java @@ -39,7 +39,7 @@ public class OffererAsBuyerModel extends SharedTradeModel implements Serializabl transient private Storage storage; transient public final Trade trade; - + public final Taker taker; public final Offerer offerer; @@ -63,8 +63,8 @@ public class OffererAsBuyerModel extends SharedTradeModel implements Serializabl this.trade = trade; this.storage = new Storage<>(storageDir); - - OffererAsBuyerModel persisted = storage.initAndGetPersisted(this, getClass().getSimpleName() + id); + + OffererAsBuyerModel persisted = storage.initAndGetPersisted(this, getFileName()); if (persisted != null) { log.debug("Model reconstructed form persisted model."); @@ -98,7 +98,7 @@ public class OffererAsBuyerModel extends SharedTradeModel implements Serializabl @Override public void onComplete() { // Just in case of successful completion we delete our persisted object - storage.remove(); + storage.remove(getFileName()); } public String getTakeOfferFeeTxId() { @@ -108,4 +108,8 @@ public class OffererAsBuyerModel extends SharedTradeModel implements Serializabl public void setTakeOfferFeeTxId(String takeOfferFeeTxId) { this.takeOfferFeeTxId = takeOfferFeeTxId; } + + private String getFileName() { + return getClass().getSimpleName() + "_" + id; + } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/models/TakerAsSellerModel.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/models/TakerAsSellerModel.java index 68133ac1bd..8515ccda48 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/models/TakerAsSellerModel.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/models/TakerAsSellerModel.java @@ -55,7 +55,7 @@ public class TakerAsSellerModel extends SharedTradeModel implements Serializable WalletService walletService, BlockChainService blockChainService, SignatureService signatureService, - User user, + User user, File storageDir) { super(trade.getOffer(), messageService, @@ -67,7 +67,7 @@ public class TakerAsSellerModel extends SharedTradeModel implements Serializable this.trade = trade; this.storage = new Storage<>(storageDir); - TakerAsSellerModel persisted = storage.initAndGetPersisted(this, getClass().getSimpleName() + id); + TakerAsSellerModel persisted = storage.initAndGetPersisted(this, getFileName()); if (persisted != null) { log.debug("Model reconstructed from persisted model."); @@ -101,10 +101,9 @@ public class TakerAsSellerModel extends SharedTradeModel implements Serializable @Override public void onComplete() { // Just in case of successful completion we delete our persisted object - storage.remove(); + storage.remove(getFileName()); } - public Transaction getTakeOfferFeeTx() { return takeOfferFeeTx; } @@ -120,4 +119,9 @@ public class TakerAsSellerModel extends SharedTradeModel implements Serializable public void setPayoutTx(Transaction payoutTx) { this.payoutTx = payoutTx; } + + private String getFileName() { + return getClass().getSimpleName() + "_" + id; + } + }