package net.sourceforge.squirrel_sql.client.gui.db.aliasproperties; import net.sourceforge.squirrel_sql.client.gui.db.SQLAliasSchemaDetailProperties; import javax.swing.table.DefaultTableModel; import java.util.ArrayList; import java.util.Arrays; public class SchemaTableModel extends DefaultTableModel { private static final long serialVersionUID = 1L; static final int IX_SCHEMA_NAME = 0; static final int IX_TABLE = 1; static final int IX_VIEW = 2; static final int IX_PROCEDURE = 3; private SQLAliasSchemaDetailProperties[] _schemaDetails; public SchemaTableModel(SQLAliasSchemaDetailProperties[] schemaDetails) { _schemaDetails = schemaDetails; } public Object getValueAt(int row, int column) { SQLAliasSchemaDetailProperties buf = _schemaDetails[row]; switch(column) { case IX_SCHEMA_NAME: return buf.getSchemaName(); case IX_TABLE: return SchemaTableCboItem.getItemForID(buf.getTable()); case IX_VIEW: return SchemaTableCboItem.getItemForID(buf.getView()); case IX_PROCEDURE: return SchemaTableCboItem.getItemForID(buf.getProcedure()); default: throw new IllegalArgumentException("Unkown column index " + column); } } public void setValueAt(Object aValue, int row, int column) { SQLAliasSchemaDetailProperties buf = _schemaDetails[row]; switch(column) { case IX_TABLE: buf.setTable(((SchemaTableCboItem)aValue).getID()); break; case IX_VIEW: buf.setView(((SchemaTableCboItem)aValue).getID()); break; case IX_PROCEDURE: buf.setProcedure(((SchemaTableCboItem)aValue).getID()); break; default: throw new IllegalArgumentException("Unkown column index " + column); } fireTableCellUpdated(row, column); } /** * @see javax.swing.table.DefaultTableModel#getColumnCount() */ @Override public int getColumnCount() { return 4; } public boolean isCellEditable(int row, int column) { return IX_SCHEMA_NAME != column && column < getColumnCount(); } public int getRowCount() { if(null == _schemaDetails) { return 0; } else { return _schemaDetails.length; } } public SQLAliasSchemaDetailProperties[] getData() { return _schemaDetails; } public void updateSchemas(String[] schemaNames) { ArrayList<SQLAliasSchemaDetailProperties> newDetails = new ArrayList<SQLAliasSchemaDetailProperties>(); for (int i = 0; i < schemaNames.length; i++) { boolean found = false; for (int j = 0; j < _schemaDetails.length; j++) { if(_schemaDetails[j].getSchemaName().equalsIgnoreCase(schemaNames[i])) { newDetails.add(_schemaDetails[j]); found = true; break; } } if(false == found) { SQLAliasSchemaDetailProperties buf = new SQLAliasSchemaDetailProperties(); buf.setSchemaName(schemaNames[i]); newDetails.add(buf); } } _schemaDetails = newDetails.toArray(new SQLAliasSchemaDetailProperties[newDetails.size()]); Arrays.sort(_schemaDetails); fireTableDataChanged(); } public void setColumnTo(int modelIndex, SchemaTableCboItem toItem) { for (int i = 0; i < _schemaDetails.length; i++) { if(IX_TABLE == modelIndex) { _schemaDetails[i].setTable(toItem.getID()); } else if(IX_VIEW == modelIndex) { _schemaDetails[i].setView(toItem.getID()); } else if(IX_PROCEDURE == modelIndex) { _schemaDetails[i].setProcedure(toItem.getID()); } } fireTableDataChanged(); } }