/***********************************************************************
*
* $CVSHeader$
*
* This file is part of WebScarab, an Open Web Application Security
* Project utility. For details, please see http://www.owasp.org/
*
* Copyright (c) 2002 - 2004 Rogan Dawes
*
* 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.
*
* Getting Source
* ==============
*
* Source for this application is maintained at Sourceforge.net, a
* repository for free software projects.
*
* For details, please see http://www.sourceforge.net/projects/owasp
*
*/
package org.owasp.webscarab.ui.swing;
import org.owasp.webscarab.model.UrlModel;
import org.owasp.webscarab.model.HttpUrl;
import org.owasp.webscarab.util.swing.treetable.TreeTableModel;
import org.owasp.webscarab.util.swing.ColumnDataModel;
import org.owasp.webscarab.util.swing.ColumnDataListener;
import org.owasp.webscarab.util.swing.ColumnDataEvent;
import java.util.List;
import java.util.ArrayList;
public class UrlTreeTableModelAdapter extends UrlTreeModelAdapter implements TreeTableModel {
private List<ColumnDataModel<HttpUrl>> _columns = new ArrayList<ColumnDataModel<HttpUrl>>();
private ColumnDataListener<HttpUrl> _columnListener;
public UrlTreeTableModelAdapter(UrlModel model) {
super(model);
createListener();
}
private void createListener() {
_columnListener = new ColumnDataListener<HttpUrl>() {
public void dataChanged(ColumnDataEvent<HttpUrl> cde) {
Object column = cde.getSource();
int col = _columns.indexOf(column);
if (col < 0) return;
HttpUrl key = cde.getKey();
if (key == null) {
fireStructureChanged();
} else {
firePathChanged(urlTreePath(key));
}
}
};
}
public void addColumn(ColumnDataModel<HttpUrl> column) {
_columns.add(column);
column.addColumnDataListener(_columnListener);
fireStructureChanged();
}
public void removeColumn(ColumnDataModel<HttpUrl> column) {
int index = _columns.indexOf(column);
if (index < 0) return;
column.removeColumnDataListener(_columnListener);
_columns.remove(index);
fireStructureChanged();
}
//
// The TreeTableNode interface.
//
/**
* Returns the number of columns.
*/
public int getColumnCount() {
return _columns.size()+1;
}
/**
* Returns the name for a particular column.
*/
public String getColumnName(int column) {
if (column == 0) return "Url";
return _columns.get(column-1).getColumnName();
}
/**
* Returns the class for the particular column.
*/
public Class<?> getColumnClass(int column) {
if (column == 0) return TreeTableModel.class;
return _columns.get(column-1).getColumnClass();
}
/**
* Returns the value of the particular column.
*/
public Object getValueAt(Object node, int column) {
if (! (node instanceof HttpUrl)) return null;
HttpUrl url = (HttpUrl) node;
if (column == 0) return url;
return _columns.get(column-1).getValue(url);
}
/** By default, make the column with the Tree in it the only editable one.
* Making this column editable causes the JTable to forward mouse
* and keyboard events in the Tree column to the underlying JTree.
*/
public boolean isCellEditable(Object node, int column) {
return getColumnClass(column) == TreeTableModel.class;
}
public void setValueAt(Object aValue, Object node, int column) {}
}