package com.kapti.administration.tablemodels; import com.kapti.client.finance.Exchange; import com.kapti.client.finance.Security; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Collection; import java.util.ResourceBundle; import javax.swing.table.AbstractTableModel; /** * * @author Dieter */ public class SecuritiesTableModel extends AbstractTableModel { private static final ResourceBundle translations = ResourceBundle.getBundle("com/kapti/administration/translations"); private final static String[] columnTitles = { translations.getString("ISIN_COLUMN"), translations.getString("SYMBOL_COLUMN"), translations.getString("EXCHANGE_COLUMN"), translations.getString("NAME_COLUMN"), //translations.getString("SECURITY_COLUMN"), translations.getString("VISIBLE_COLUMN"), translations.getString("GESCHORST")}; private final static Class[] columnTypes = { String.class, String.class, String.class, String.class, //String.class, Boolean.class, Boolean.class}; private final static boolean[] editableColumns = new boolean[]{ false, false, false, true, //true, true, true}; //Andere opmaak van datums kan bekommen worden met een "SimpleDateFormat" toe te passen //maar geen enkel formaat dat ik ingeef wordt ooit geaccepteerd... Security[] securities = new Security[]{}; boolean[] changed = new boolean[]{}; public SecuritiesTableModel() { } public void setSecurities(Collection<Security> securities) { this.securities = securities.toArray(this.securities); this.changed= new boolean[this.securities.length]; for (int i = 0; i < securities.size(); i++) { this.securities[i].addPropertyChangeListener(new SecurityPropertyChangeListener(this, i)); this.changed[i] =false; } } private class SecurityPropertyChangeListener implements PropertyChangeListener { private int index; private SecuritiesTableModel model; public SecurityPropertyChangeListener(SecuritiesTableModel model, int index) { this.model = model; this.index = index; } public void propertyChange(PropertyChangeEvent evt) { model.changed[index] = true; model.fireTableRowsUpdated(index, index); } } public Security[] getSecurities() { return securities; } public void setChangesSaved(){ for(int i = 0; i < changed.length; i++) changed[i] = false; fireTableRowsUpdated(0, securities.length-1); } public int getChangedRowsCount(){ int result = 0; for(boolean c :changed) if(c) result++; return result; } public int getRowCount() { return securities.length; } public int getColumnCount() { return columnTitles.length; } public Security getSecurityAt(int rowIndex) { return securities[rowIndex]; } public void setSecurityAt(int rowIndex, Security security) { securities[rowIndex] = security; this.fireTableRowsUpdated(rowIndex, rowIndex); } public Object getValueAt(int rowIndex, int columnIndex) { Security security = securities[rowIndex]; switch (columnIndex) { case 0: return security.getISIN(); case 1: return security.getSymbol(); case 2: return security.getExchange().getName(); case 3: return security.getName(); // case 4: // return security.getType(); case 4: return security.isVisible(); case 5: return security.isSuspended(); default: return null; } } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { Security security = securities[rowIndex]; switch (columnIndex) { case 2: security.setExchange((Exchange) aValue); break; case 3: security.setName((String) aValue); break; // case 4: // security.setType((Security.SecurityType) aValue); // break; case 4: security.setVisible((Boolean) aValue); break; case 5: security.setSuspended((Boolean) aValue); break; } } @Override public String getColumnName(int col) { return columnTitles[col]; } @Override public Class getColumnClass(int col) { return columnTypes[col]; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return editableColumns[columnIndex]; } }