/*
* CapturePlugin by Andreas Hessel (Vidrec@gmx.de), Bodo Tasche
*
* 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 2
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* CVS information:
* $RCSfile$
* $Source$
* $Date: 2010-03-11 09:09:51 +0100 (Thu, 11 Mar 2010) $
* $Author: bananeweizen $
* $Revision: 6554 $
*/
package captureplugin.drivers.defaultdriver.configpanels;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.TreeMap;
import javax.swing.table.AbstractTableModel;
import org.apache.commons.lang.ArrayUtils;
import util.ui.Localizer;
import captureplugin.drivers.defaultdriver.DeviceConfig;
import devplugin.Channel;
import devplugin.Plugin;
import devplugin.PluginManager;
/**
* TableModel for ChannelTable
*/
public class ChannelTableModel extends AbstractTableModel {
/** Translator */
private static final Localizer mLocalizer = Localizer.getLocalizerFor(ChannelTableModel.class);
/** Data */
private DeviceConfig mData;
/** The Rows in the TableModel */
private ArrayList<Channel> mChannelRows;
/**
* creates a new ChannelTableModel
*
* @param data
* Configuration
*/
public ChannelTableModel(DeviceConfig data) {
mData = data;
updateChannels();
}
/**
* Updates the List of Channels
*/
private void updateChannels() {
PluginManager pl = Plugin.getPluginManager();
if (pl == null) {
return;
}
TreeMap<Channel, String> channels = mData.getChannels();
final Channel[] channelArray = pl.getSubscribedChannels();
for (Channel channel : channelArray) {
if (!channels.containsKey(channel)) {
channels.put(channel, "");
}
}
mData.setChannels(channels);
mChannelRows = new ArrayList<Channel>(mData.getChannels().keySet());
Collections.sort(mChannelRows, new Comparator<Channel>() {
public int compare(Channel a, Channel b) {
return ArrayUtils.indexOf(channelArray, a) - ArrayUtils.indexOf(channelArray, b);
}
});
}
/**
* return the "Internal Name" for col 0, "External Name" for col 1
*/
public String getColumnName(int column) {
if (column == 0) {
return mLocalizer.msg("IntName", "Internal Name");
} else {
return mLocalizer.msg("ExtName", "External Name");
}
}
/**
* returns 2
*/
public int getColumnCount() {
return 2;
}
/**
* returns the count of rows in the table
*/
public int getRowCount() {
return mData.getChannels().size();
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return columnIndex == 1;
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
Channel key = getKeyForRow(rowIndex);
if (key != null) {
mData.getChannels().put(key, (String) aValue);
}
super.setValueAt(aValue, rowIndex, columnIndex);
}
/**
* returns the value at Table-Position (row,col)
*/
public Object getValueAt(int row, int col) {
Channel key = getKeyForRow(row);
if (col == 0) {
return key;
} else {
return mData.getChannels().get(key);
}
}
/**
* Get the Channel for a specific Row
*
* @param row
* Row to get Channel for
* @return Channel for Row
*/
private Channel getKeyForRow(int row) {
return mChannelRows.get(row);
}
}