/*
* DatabaseManagerModel
*
* Copyright (C) 2010 Jaroslav Merxbauer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package notwa.gui.datamodels;
import java.util.Collection;
import java.util.HashMap;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
import notwa.common.NotwaConnectionInfo;
import org.apache.log4j.Logger;
public class DatabaseManagerModel extends DefaultTableModel {
private Logger log;
private Collection<NotwaConnectionInfo> data;
private HashMap<Integer, ColumnSettings<DatabaseManagerTableColumn>> columns;
public DatabaseManagerModel(Collection<NotwaConnectionInfo> nci) {
this.log = Logger.getLogger(this.getClass());
this.data = nci;
configureColumns();
}
@Override
public String getColumnName(int c) {
ColumnSettings<DatabaseManagerTableColumn> cs = columns.get(c);
return (cs != null) ? cs.getColumnHeader() : "Hey! I need name!";
}
@Override
public int getColumnCount() {
return columns.size();
}
@Override
public int getRowCount() {
return (data == null) ? 0 : data.size();
}
@Override
public void addRow(Vector v) {
NotwaConnectionInfo nci = new NotwaConnectionInfo();
nci.setLabel("New " + (this.getRowCount()+1));
data.add(nci);
super.fireTableDataChanged();
}
@Override
public void removeRow(int row) {
data.remove(data.toArray()[row]);
super.fireTableDataChanged();
}
@Override
public void setValueAt(Object value, int rowIndex, int columnIndex) {
NotwaConnectionInfo row = (NotwaConnectionInfo)data.toArray()[rowIndex];
ColumnSettings<DatabaseManagerTableColumn> cs = columns.get(columnIndex);
switch (cs.getColumnAlias()) {
case COLUMN_DATABASE_LABEL:
row.setLabel((String)value);
break;
case COLUMN_DATABASE_DBNAME:
row.setDbname((String)value);
break;
case COLUMN_DATABASE_HOST:
row.setHost((String)value);
break;
case COLUMN_DATABASE_PORT:
row.setPort((String)value);
break;
case COLUMN_DATABASE_USER:
row.setUser((String)value);
break;
case COLUMN_DATABASE_PASSWORD:
row.setPassword((String)value);
break;
default:
log.debug("Unsupported cell update!");
}
super.fireTableCellUpdated(rowIndex, columnIndex);
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
NotwaConnectionInfo row = (NotwaConnectionInfo)data.toArray()[rowIndex];
ColumnSettings<DatabaseManagerTableColumn> cs = columns.get(columnIndex);
switch (cs.getColumnAlias()) {
case COLUMN_DATABASE_LABEL:
return row.getLabel();
case COLUMN_DATABASE_DBNAME:
return row.getDbname();
case COLUMN_DATABASE_HOST:
return row.getHost();
case COLUMN_DATABASE_PORT:
return row.getPort();
case COLUMN_DATABASE_USER:
return row.getUser();
case COLUMN_DATABASE_PASSWORD:
return "|_PASSWORD_PROTECTED_|";
default:
return null;
}
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
ColumnSettings<DatabaseManagerTableColumn> cs = columns.get(columnIndex);
return (cs != null) ? cs.getClass() : Object.class;
}
public ColumnSettings<DatabaseManagerTableColumn> getColumnSettings(int columnIndex) {
if (columnIndex < columns.size()) {
return columns.get(columnIndex);
} else {
return null;
}
}
private void configureColumns() {
columns = new HashMap<Integer, ColumnSettings<DatabaseManagerTableColumn>>(1);
columns.put(0, new ColumnSettings<DatabaseManagerTableColumn>(0, String.class, "Label", DatabaseManagerTableColumn.COLUMN_DATABASE_LABEL));
columns.put(1, new ColumnSettings<DatabaseManagerTableColumn>(1, String.class, "Database name", DatabaseManagerTableColumn.COLUMN_DATABASE_DBNAME));
columns.put(2, new ColumnSettings<DatabaseManagerTableColumn>(2, String.class, "Host", DatabaseManagerTableColumn.COLUMN_DATABASE_HOST));
columns.put(3, new ColumnSettings<DatabaseManagerTableColumn>(3, String.class, ":Port", DatabaseManagerTableColumn.COLUMN_DATABASE_PORT));
columns.put(4, new ColumnSettings<DatabaseManagerTableColumn>(4, String.class, "DB User", DatabaseManagerTableColumn.COLUMN_DATABASE_USER));
columns.put(5, new ColumnSettings<DatabaseManagerTableColumn>(5, String.class, "DB Password", DatabaseManagerTableColumn.COLUMN_DATABASE_PASSWORD));
}
public enum DatabaseManagerTableColumn {
COLUMN_DATABASE_LABEL, COLUMN_DATABASE_DBNAME, COLUMN_DATABASE_HOST,
COLUMN_DATABASE_PORT, COLUMN_DATABASE_USER, COLUMN_DATABASE_PASSWORD
}
}