package gui.models; import java.util.List; import java.util.Observable; import java.util.Observer; import javax.swing.table.AbstractTableModel; import utils.ObserverMessage; import controller.Controller; import network.Peer; @SuppressWarnings("serial") public class PeersTableModel extends AbstractTableModel implements Observer{ private List<Peer> peers; private String[] columnNames = {"IP"}; public PeersTableModel() { Controller.getInstance().addActivePeersObserver(this); } @Override public int getColumnCount() { return columnNames.length; } @Override public String getColumnName(int index) { return columnNames[index]; } @Override public int getRowCount() { if(peers == null) { return 0; } return peers.size(); } @Override public Object getValueAt(int row, int column) { if(peers == null) { return null; } return peers.get(row).getAddress().getHostAddress(); } @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; if(message.getType() == ObserverMessage.LIST_PEER_TYPE) { this.peers = (List<Peer>) message.getValue(); this.fireTableDataChanged(); } } public void removeObservers() { Controller.getInstance().removeActivePeersObserver(this); } }