package gui.models; import java.math.BigDecimal; import java.util.Observable; import java.util.Observer; import org.mapdb.Fun.Tuple2; import controller.Controller; import database.SortableList; import database.wallet.NameSaleMap; import qora.account.Account; import qora.naming.NameSale; import utils.ObserverMessage; import utils.Pair; @SuppressWarnings("serial") public class WalletNameSalesTableModel extends QoraTableModel<Tuple2<String, String>, BigDecimal> implements Observer{ public static final int COLUMN_NAME = 0; public static final int COLUMN_OWNER = 1; public static final int COLUMN_PRICE = 2; private String[] columnNames = {"Name", "Seller", "Price"}; private SortableList<Tuple2<String, String>, BigDecimal> nameSales; public WalletNameSalesTableModel() { Controller.getInstance().addWalletListener(this); } @Override public SortableList<Tuple2<String, String>, BigDecimal> getSortableList() { return this.nameSales; } public NameSale getNameSale(int row) { Pair<Tuple2<String, String>, BigDecimal> data = this.nameSales.get(row); return new NameSale(data.getA().b, data.getB()); } @Override public int getColumnCount() { return columnNames.length; } @Override public String getColumnName(int index) { return columnNames[index]; } @Override public int getRowCount() { if(nameSales == null) { return 0; } return nameSales.size(); } @Override public Object getValueAt(int row, int column) { if(nameSales == null || nameSales.size() - 1 < row) { return null; } Pair<Tuple2<String, String>, BigDecimal> data = this.nameSales.get(row); NameSale nameSale = new NameSale(data.getA().b, data.getB()); Account account = new Account(data.getA().a); switch(column) { case COLUMN_NAME: return nameSale.getKey(); case COLUMN_OWNER: return account.getAddress(); case COLUMN_PRICE: return nameSale.getAmount().toPlainString(); } return null; } @Override public void update(Observable o, Object arg) { try { this.syncUpdate(o, arg); } catch(Exception e) { //GUI ERROR } } @SuppressWarnings("unchecked") public synchronized void syncUpdate(Observable o, Object arg) { ObserverMessage message = (ObserverMessage) arg; //CHECK IF NEW LIST if(message.getType() == ObserverMessage.LIST_NAME_SALE_TYPE) { if(this.nameSales == null) { this.nameSales = (SortableList<Tuple2<String, String>, BigDecimal>) message.getValue(); this.nameSales.registerObserver(); this.nameSales.sort(NameSaleMap.NAME_INDEX); } this.fireTableDataChanged(); } //CHECK IF LIST UPDATED if(message.getType() == ObserverMessage.ADD_NAME_SALE_TYPE || message.getType() == ObserverMessage.REMOVE_NAME_SALE_TYPE) { this.fireTableDataChanged(); } } public void removeObservers() { Controller.getInstance().deleteWalletObserver(this); } }