/** * Copyright 2011 multibit.org * * Licensed under the MIT license (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://opensource.org/licenses/mit-license.php * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.multibit.viewsystem.swing.view.models; import java.util.ArrayList; import javax.swing.table.DefaultTableModel; import org.multibit.controller.Controller; import org.multibit.controller.bitcoin.BitcoinController; import org.multibit.model.bitcoin.WalletAddressBookData; import org.multibit.model.bitcoin.WalletInfoData; public class AddressBookTableModel extends DefaultTableModel { private static final long serialVersionUID = -937886012851116208L; private ArrayList<String> headers = new ArrayList<String>(); private final String[] tableHeaderKeys = new String[] { "addressBookTableModel.labelColumnHeader", "addressBookTableModel.addressColumnHeader" }; private boolean isReceiving; private final Controller controller; private final BitcoinController bitcoinController; public AddressBookTableModel(BitcoinController bitcoinController, boolean isReceiving) { this.bitcoinController = bitcoinController; this.controller = this.bitcoinController; for (String tableHeaderKey : tableHeaderKeys) { headers.add(controller.getLocaliser().getString(tableHeaderKey)); } this.isReceiving = isReceiving; } @Override public int getColumnCount() { return tableHeaderKeys.length; } @Override public int getRowCount() { if (controller == null) { return 0; } WalletInfoData walletInfo = this.bitcoinController.getModel().getActiveWalletWalletInfo(); if (isReceiving) { if (walletInfo != null && walletInfo.getReceivingAddresses() != null) { return walletInfo.getReceivingAddresses().size(); } else { return 0; } } else { if (walletInfo != null && walletInfo.getSendingAddresses() != null) { return walletInfo.getSendingAddresses().size(); } else { return 0; } } } @Override public String getColumnName(int column) { return headers.get(column); } @Override public Object getValueAt(int row, int column) { WalletInfoData walletInfo = this.bitcoinController.getModel().getActiveWalletWalletInfo(); if (walletInfo == null) { return null; } ArrayList<WalletAddressBookData> addresses; if (isReceiving) { addresses = walletInfo.getReceivingAddresses(); } else { addresses = walletInfo.getSendingAddresses(); } WalletAddressBookData[] addressesArray = addresses.toArray(new WalletAddressBookData[addresses.size()]); WalletAddressBookData addressBookData = null; if (row >= 0 && row < addresses.size()) { addressBookData = addressesArray[row]; } if (addressBookData == null) { return null; } switch (column) { case 0: return addressBookData.getLabel(); case 1: return addressBookData.getAddress(); default: return null; } } /** * table model is read only */ @Override public void setValueAt(Object value, int row, int column) { throw new UnsupportedOperationException(); } /** * find a row, given an address * * @param address * The address * @param isReceiving * true if receiving * @return The row for the address */ public int findRowByAddress(String address, boolean isReceiving) { if (address == null) { return -1; } WalletInfoData walletInfo = this.bitcoinController.getModel().getActiveWalletWalletInfo(); if (walletInfo == null) { return -1; } ArrayList<WalletAddressBookData> addresses; if (isReceiving) { addresses = walletInfo.getReceivingAddresses(); } else { addresses = walletInfo.getSendingAddresses(); } int row = 0; if (addresses != null) { for (WalletAddressBookData loopAddress : addresses) { if (loopAddress != null) { if (address.equals(loopAddress.getAddress())) { // select this row in the table return row; } } row++; } } return -1; } /** * given a row, return the WalletAddressBookData on this row */ public WalletAddressBookData getAddressBookDataByRow(int row, boolean isReceiving) { WalletInfoData walletInfo = this.bitcoinController.getModel().getActiveWalletWalletInfo(); if (walletInfo == null) { return null; } ArrayList<WalletAddressBookData> addresses; if (isReceiving) { addresses = walletInfo.getReceivingAddresses(); } else { addresses = walletInfo.getSendingAddresses(); } if (addresses != null && addresses.size() > row) { return addresses.get(row); } return null; } /** * set a WalletAddressBookData into a row */ public void setAddressBookDataByRow(WalletAddressBookData addressBookData, int row, boolean isReceiving) { WalletInfoData walletInfo = this.bitcoinController.getModel().getActiveWalletWalletInfo(); if (walletInfo == null) { return; } ArrayList<WalletAddressBookData> addresses; if (isReceiving) { addresses = walletInfo.getReceivingAddresses(); } else { addresses = walletInfo.getSendingAddresses(); } if (addresses != null && addresses.size() > row) { addresses.set(row, addressBookData); fireTableDataChanged(); } } @Override public boolean isCellEditable(int row, int column) { // all cells false return false; } }