package database.wallet; import java.io.File; import org.mapdb.Atomic.Var; import org.mapdb.DB; import org.mapdb.DBMaker; import database.IDB; import qora.account.Account; import settings.Settings; public class WalletDatabase implements IDB { private static final File WALLET_FILE = new File(Settings.getInstance().getWalletDir(), "wallet.dat"); private static final String VERSION = "version"; private static final String LAST_BLOCK = "lastBlock"; private DB database; private AccountMap accountMap; private TransactionMap transactionMap; private BlockMap blockMap; private NameMap nameMap; private NameSaleMap nameSaleMap; private PollMap pollMap; private AssetMap assetMap; private OrderMap orderMap; private AssetFavoritesSet assetFavoritesSet; public static boolean exists() { return WALLET_FILE.exists(); } public WalletDatabase() { //OPEN WALLET WALLET_FILE.getParentFile().mkdirs(); //DELETE TRANSACTIONS //File transactionFile = new File(Settings.getInstance().getWalletDir(), "wallet.dat.t"); //transactionFile.delete(); this.database = DBMaker.newFileDB(WALLET_FILE) .closeOnJvmShutdown() .cacheSize(2048) .checksumEnable() .mmapFileEnableIfSupported() .make(); this.accountMap = new AccountMap(this, this.database); this.transactionMap = new TransactionMap(this, this.database); this.blockMap = new BlockMap(this, this.database); this.nameMap = new NameMap(this, this.database); this.nameSaleMap = new NameSaleMap(this, this.database); this.pollMap = new PollMap(this, this.database); this.assetMap = new AssetMap(this, this.database); this.orderMap = new OrderMap(this, this.database); this.assetFavoritesSet = new AssetFavoritesSet(this, this.database); } public void setVersion(int version) { this.database.getAtomicInteger(VERSION).set(version); } public int getVersion() { return this.database.getAtomicInteger(VERSION).intValue(); } public void setLastBlockSignature(byte[] signature) { Var<byte[]> atomic = this.database.getAtomicVar(LAST_BLOCK); atomic.set(signature); } public byte[] getLastBlockSignature() { Var<byte[]> atomic = this.database.getAtomicVar(LAST_BLOCK); return atomic.get(); } public AccountMap getAccountMap() { return this.accountMap; } public TransactionMap getTransactionMap() { return this.transactionMap; } public BlockMap getBlockMap() { return this.blockMap; } public NameMap getNameMap() { return this.nameMap; } public NameSaleMap getNameSaleMap() { return this.nameSaleMap; } public PollMap getPollMap() { return this.pollMap; } public AssetMap getAssetMap() { return this.assetMap; } public OrderMap getOrderMap() { return this.orderMap; } public AssetFavoritesSet getAssetFavoritesSet() { return this.assetFavoritesSet; } public void delete(Account account) { this.accountMap.delete(account); this.blockMap.delete(account); this.transactionMap.delete(account); this.nameMap.delete(account); this.nameSaleMap.delete(account); this.pollMap.delete(account); this.assetMap.delete(account); this.orderMap.delete(account); } public void commit() { this.database.commit(); } public void close() { if(this.database != null) { if(!this.database.isClosed()) { this.database.commit(); this.database.close(); } } } }