package org.multibit.file; import java.math.BigInteger; import java.text.DateFormat; import java.text.SimpleDateFormat; import org.joda.money.Money; import org.multibit.controller.bitcoin.BitcoinController; import org.multibit.exchange.CurrencyConverter; import org.multibit.model.bitcoin.WalletTableData; import com.googlecode.jcsv.writer.CSVEntryConverter; /** * Convert WalletTableData into single fields for use in a CSV file. */ public class WalletTableDataEntryConverter implements CSVEntryConverter<WalletTableData> { BitcoinController bitcoinController = null; DateFormat dateFormatter = null; @Override public String[] convertEntry(WalletTableData walletTableData) { String[] columns = new String[5]; // Date. String formattedDate = ""; if (walletTableData.getDate() != null) { if (walletTableData.getDate().getTime() != 0) { try { formattedDate = dateFormatter.format(walletTableData.getDate()); } catch (IllegalArgumentException iae) { // ok } } } columns[0] = formattedDate; // Description. columns[1] = walletTableData.getDescription() == null ? "" : walletTableData.getDescription(); // Amount in BTC. String amountBTC = ""; BigInteger debitAmount = walletTableData.getDebit(); BigInteger creditAmount = walletTableData.getCredit(); if (debitAmount != null && debitAmount.compareTo(BigInteger.ZERO) > 0) { amountBTC = bitcoinController.getLocaliser().bitcoinValueToString(debitAmount.negate(), false, true); } else { if (creditAmount != null) { amountBTC = bitcoinController.getLocaliser().bitcoinValueToString(creditAmount, false, true); } } columns[2] = amountBTC; // Amount in fiat String amountFiat = ""; if (CurrencyConverter.INSTANCE.isShowingFiat()) { if (walletTableData.getDebit() != null && walletTableData.getDebit().compareTo(BigInteger.ZERO) > 0) { Money debitAmountFiat = CurrencyConverter.INSTANCE.convertFromBTCToFiat(walletTableData.getDebit()); if (debitAmountFiat != null) { amountFiat = CurrencyConverter.INSTANCE.getFiatAsLocalisedString(debitAmountFiat.negated(), false, false); } } else { Money creditAmountFiat = CurrencyConverter.INSTANCE.convertFromBTCToFiat(walletTableData.getCredit()); if (creditAmountFiat != null) { amountFiat = CurrencyConverter.INSTANCE.getFiatAsLocalisedString(creditAmountFiat, false, false); } } } columns[3] = amountFiat; // Transaction hash. columns[4] = walletTableData.getTransaction() == null ? "" : walletTableData.getTransaction().getHashAsString(); return columns; } public void setBitcoinController(BitcoinController bitcoinController) { this.bitcoinController = bitcoinController; dateFormatter = new SimpleDateFormat("dd MMM yyyy HH:mm", bitcoinController.getLocaliser().getLocale()); } }