/*
* $Id$
*
* Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
* Santa Clara, California 95054, U.S.A. All rights reserved.
*/
package org.jdesktop.swingx.test;
import java.beans.PropertyChangeEvent;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.TableColumnModelEvent;
import javax.swing.table.TableColumnModel;
import org.jdesktop.swingx.event.TableColumnModelExtListener;
import org.jdesktop.test.PropertyChangeReport;
/**
* A TableColumnExtListener that stores the received TableColumnEvents and
* PropertyChangeEvents originating from the TableColumns contained in the
* TableColumnModel.
*/
public class ColumnModelReport implements TableColumnModelExtListener {
/**
* Holds a list of all received ValueChangeEvents.
*/
private List<TableColumnModelEvent> removedEvents = Collections.synchronizedList(new LinkedList<TableColumnModelEvent>());
private List<TableColumnModelEvent> addedEvents = Collections.synchronizedList(new LinkedList<TableColumnModelEvent>());
private List<TableColumnModelEvent> movedEvents = Collections.synchronizedList(new LinkedList<TableColumnModelEvent>());
private List<ListSelectionEvent> selectionEvents = Collections.synchronizedList(new LinkedList<ListSelectionEvent>());
private List<ChangeEvent> changeEvents = Collections.synchronizedList(new LinkedList<ChangeEvent>());
// private List<PropertyChangeEvent> columnPropertyEvents = new LinkedList<PropertyChangeEvent>();
private PropertyChangeReport propertyReport = new PropertyChangeReport();
public ColumnModelReport() {
this(null);
}
public ColumnModelReport(TableColumnModel model) {
if (model != null) {
model.addColumnModelListener(this);
}
}
//------------------------ implement TableColumnModelListener
public void columnAdded(TableColumnModelEvent e) {
addedEvents.add(0, e);
}
public void columnMarginChanged(ChangeEvent e) {
changeEvents.add(0, e);
}
public void columnMoved(TableColumnModelEvent e) {
movedEvents.add(0, e);
}
public void columnRemoved(TableColumnModelEvent e) {
removedEvents.add(0, e);
}
public void columnSelectionChanged(ListSelectionEvent e) {
selectionEvents.add(0, e);
}
//---------------------- implement TableColumnModelExtListener
public void columnPropertyChange(PropertyChangeEvent e) {
propertyReport.propertyChange(e);
}
public boolean hasEvents() {
return getEventCount() > 0;
}
public void clear() {
addedEvents.clear();
removedEvents.clear();
movedEvents.clear();
changeEvents.clear();
selectionEvents.clear();
propertyReport.clear();
}
public int getEventCount() {
return addedEvents.size() + removedEvents.size() + movedEvents.size() +
changeEvents.size() + selectionEvents.size() + propertyReport.getEventCount();
}
// -------------- access reported TableModelEvents
public boolean hasRemovedEvent() {
return !removedEvents.isEmpty();
}
public TableColumnModelEvent getLastRemoveEvent() {
return removedEvents.isEmpty() ? null : removedEvents.get(0);
}
public boolean hasAddedEvent() {
return !addedEvents.isEmpty();
}
public TableColumnModelEvent getLastAddEvent() {
return addedEvents.isEmpty() ? null : addedEvents.get(0);
}
public boolean hasChangeEvent() {
return !changeEvents.isEmpty();
}
public int getChangeEventCount() {
return changeEvents.size();
}
public ChangeEvent getLastChangeEvent() {
return hasChangeEvent() ? changeEvents.get(0) : null;
}
public boolean hasSelectionEvent() {
return !selectionEvents.isEmpty();
}
public int getSelectionEventCount() {
return selectionEvents.size();
}
public ListSelectionEvent getLastSelectionEvent() {
return hasSelectionEvent() ? selectionEvents.get(0) : null;
}
//--------------- access reported propertyChangeEvent
public boolean hasColumnPropertyEvent() {
return propertyReport.hasEvents();
}
public int getColumnPropertyEventCount() {
return propertyReport.getEventCount();
}
public PropertyChangeEvent getLastColumnPropertyEvent() {
return propertyReport.getLastEvent();
}
public int getColumnPropertyEventCount(String property) {
return propertyReport.getEventCount(property);
}
public Object getLastColumnPropertyEvent(String property) {
return propertyReport.getLastEvent(property);
}
public PropertyChangeReport getPropertyChangeReport() {
return propertyReport;
}
}