package de.sogomn.rat.server.gui; import java.util.ArrayList; import java.util.function.Function; import javax.swing.table.AbstractTableModel; final class ServerClientTableModel extends AbstractTableModel { private static final long serialVersionUID = 919111102883611810L; private ArrayList serverClients; private Column[] columns; private static final int COLUMN_COUNT = 6; public ServerClientTableModel() { serverClients = new ArrayList(); columns = new Column[COLUMN_COUNT]; columns[0] = new Column("Name", String.class, ServerClient::getName); columns[1] = new Column("IP address", String.class, ServerClient::getAddress); columns[2] = new Column("OS", String.class, ServerClient::getOs); columns[3] = new Column("Version", String.class, ServerClient::getVersion); columns[4] = new Column("Streaming desktop", Boolean.class, ServerClient::isStreamingDesktop); columns[5] = new Column("Streaming voice", Boolean.class, ServerClient::isStreamingVoice); } @Override public String getColumnName(final int columnIndex) { if (columnIndex <= COLUMN_COUNT - 1 && columnIndex >= 0) { final Column column = columns[columnIndex]; return column.name; } return super.getColumnName(columnIndex); } @Override public Class getColumnClass(final int columnIndex) { if (columnIndex <= COLUMN_COUNT - 1 && columnIndex >= 0) { final Column column = columns[columnIndex]; return column.clazz; } return super.getColumnClass(columnIndex); } @Override public boolean isCellEditable(final int rowIndex, final int columnIndex) { return false; } @Override public Object getValueAt(final int rowIndex, final int columnIndex) { final ServerClient serverClient = getServerClient(rowIndex); if (serverClient == null || columnIndex > COLUMN_COUNT - 1 || columnIndex < 0) { return null; } final Column column = columns[columnIndex]; final Function value = column.value; return value.apply(serverClient); } @Override public int getColumnCount() { return COLUMN_COUNT; } @Override public int getRowCount() { return serverClients.size(); } public void addServerClient(final ServerClient client) { serverClients.add(client); fireTableDataChanged(); } public void removeServerClient(final ServerClient client) { serverClients.remove(client); fireTableDataChanged(); } public ServerClient getServerClient(final int rowIndex) { if (rowIndex <= serverClients.size() - 1 && rowIndex >= 0) { return serverClients.get(rowIndex); } return null; } private final class Column { final String name; final Class clazz; final Function value; public Column(final String name, final Class clazz, final Function value) { this.name = name; this.clazz = clazz; this.value = value; } } }