/* * JFileSync * Copyright (C) 2002-2007, Jens Heidrich * * 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., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301, USA */ package jfs.gui; import java.util.List; import javax.swing.DefaultCellEditor; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.border.EmptyBorder; import javax.swing.table.AbstractTableModel; import javax.swing.table.DefaultTableColumnModel; import javax.swing.table.TableColumn; import javax.swing.table.TableModel; import jfs.conf.JFSFilter; import jfs.conf.JFSFilter.FilterRange; import jfs.conf.JFSFilter.FilterType; import jfs.conf.JFSText; /** * A table displaying filters (to include/exclude files). * * @author Jens Heidrich * @version $Id: JFSFilterTable.java,v 1.6 2007/02/26 18:49:10 heidrich Exp $ */ public class JFSFilterTable extends AbstractTableModel { /** The UID. */ private static final long serialVersionUID = 100L; /** The object with information that should be displayed by the table. */ private final List<JFSFilter> filters; /** The corresponding JTable. */ private final JTable table; /** * The default constructor. * * @param filters * The filters to display. */ @SuppressWarnings({"rawtypes", "unchecked"}) public JFSFilterTable(List<JFSFilter> filters) { this.filters = filters; // Create column model: JFSText t = JFSText.getInstance(); DefaultTableColumnModel cm = new DefaultTableColumnModel(); JCheckBox cb = new JCheckBox(); JComboBox typeCombo = new JComboBox(); for (FilterType fType : FilterType.values()) { typeCombo.addItem(t.get(fType.getName())); } JComboBox rangeCombo = new JComboBox(); for (FilterRange fRange : FilterRange.values()) { rangeCombo.addItem(t.get(fRange.getName())); } cb.setHorizontalAlignment(JCheckBox.CENTER); JTextField editor = new JTextField(); editor.setBorder(new EmptyBorder(0, 0, 0, 0)); TableColumn active = new TableColumn(0, 5); active.setHeaderValue(t.get("profile.filter.active")); active.setCellEditor(new DefaultCellEditor(cb)); cm.addColumn(active); TableColumn type = new TableColumn(1, 10); type.setHeaderValue(t.get("profile.filter.type")); type.setCellEditor(new DefaultCellEditor(typeCombo)); cm.addColumn(type); TableColumn range = new TableColumn(2, 10); range.setHeaderValue(t.get("profile.filter.range")); range.setCellEditor(new DefaultCellEditor(rangeCombo)); cm.addColumn(range); TableColumn filter = new TableColumn(3, 75); filter.setHeaderValue(t.get("profile.filter.regexp")); filter.setCellEditor(new DefaultCellEditor(editor)); cm.addColumn(filter); // Create table: table = new JTable(this, cm); table.getTableHeader().setReorderingAllowed(false); } /** * @see TableModel#getRowCount() */ @Override public final int getRowCount() { return filters.size(); } /** * @see TableModel#getColumnCount() */ @Override public final int getColumnCount() { return 4; } /** * @see TableModel#isCellEditable(int, int) */ @Override public final boolean isCellEditable(int row, int column) { return true; } /** * @see TableModel#getValueAt(int, int) */ @Override public final Object getValueAt(int row, int column) { if (row<0||row>=getRowCount()||column<0||column>=getColumnCount()) { return null; } JFSText t = JFSText.getInstance(); switch (column) { case 0: return filters.get(row).isActive(); case 1: return t.get(filters.get(row).getType().getName()); case 2: return t.get(filters.get(row).getRange().getName()); default: return filters.get(row).getFilter(); } } /** * @see TableModel#getColumnClass(int) */ @Override public final Class<?> getColumnClass(int column) { switch (column) { case 0: return Boolean.class; case 1: return String.class; case 2: return String.class; default: return String.class; } } /** * @see TableModel#setValueAt(Object, int, int) */ @Override public final void setValueAt(Object value, int row, int column) { if (row<0||row>=getRowCount()||column<0||column>=getColumnCount()) { return; } JFSText t = JFSText.getInstance(); switch (column) { case 0: filters.get(row).setActive((Boolean)value); break; case 1: String type = String.valueOf(value); for (FilterType fType : FilterType.values()) { if (type.equals(t.get(fType.getName()))) { filters.get(row).setType(fType); } } break; case 2: String range = String.valueOf(value); for (FilterRange fRange : FilterRange.values()) { if (range.equals(t.get(fRange.getName()))) { filters.get(row).setRange(fRange); } } break; default: filters.get(row).setFilter((String)value); break; } } /** * @return Returns the filters. */ public final List<JFSFilter> getFilters() { return filters; } /** * @return Returns the JTable object. */ public final JTable getJTable() { return table; } }