/*
* Created on 02.08.2013
*
*/
package org.jdesktop.swingx.sort;
import java.util.List;
import javax.swing.RowSorter;
import javax.swing.event.RowSorterEvent;
import javax.swing.event.RowSorterListener;
/**
* Wrapping RowSorter for usage (f.i.) in a rowHeader.
*
* Delegates all state queries,
* does nothing on receiving notification of model changes,
* propagates rowSorterEvents from delegates.
*
* PENDING: test formally, until now only poc in JXListSortRevamp!
*
* @author Jeanette Winzenburg, Berlin
*/
public class RowSorterWrapper<M> extends RowSorter<M> {
private RowSorter<M> delegate;
private RowSorterListener rowSorterListener;
public RowSorterWrapper(RowSorter<M> delegate) {
this.delegate = delegate;
delegate.addRowSorterListener(getRowSorterListener());
}
/**
* Creates and returns a RowSorterListener which re-fires received
* events.
*
* @return
*/
protected RowSorterListener getRowSorterListener() {
if (rowSorterListener == null) {
RowSorterListener listener = new RowSorterListener() {
@Override
public void sorterChanged(RowSorterEvent e) {
if (RowSorterEvent.Type.SORT_ORDER_CHANGED == e.getType()) {
fireSortOrderChanged();
} else if (RowSorterEvent.Type.SORTED == e.getType()) {
fireRowSorterChanged(null); }
}
};
rowSorterListener = listener;
}
return rowSorterListener;
}
@Override
public M getModel() {
return delegate.getModel();
}
@Override
public void toggleSortOrder(int column) {
delegate.toggleSortOrder(column);
}
@Override
public int convertRowIndexToModel(int index) {
return delegate.convertRowIndexToModel(index);
}
@Override
public int convertRowIndexToView(int index) {
return delegate.convertRowIndexToModel(index);
}
@Override
public void setSortKeys(List<? extends SortKey> keys) {
delegate.setSortKeys(keys);
}
@Override
public List<? extends SortKey> getSortKeys() {
return delegate.getSortKeys();
}
@Override
public int getViewRowCount() {
return delegate.getViewRowCount();
}
@Override
public int getModelRowCount() {
return delegate.getModelRowCount();
}
/**
* {@inheritDoc} <p>
*
* Implemented to do nothing, we are the slave of the delegate.
*/
@Override
public void modelStructureChanged() {
// do nothing, all work done by delegate
}
/**
* {@inheritDoc} <p>
*
* Implemented to do nothing, we are the slave of the delegate.
*/
@Override
public void allRowsChanged() {
// do nothing, all work done by delegate
}
/**
* {@inheritDoc} <p>
*
* Implemented to do nothing, we are the slave of the delegate.
*/
@Override
public void rowsInserted(int firstRow, int endRow) {
// do nothing, all work done by delegate
}
@Override
public void rowsDeleted(int firstRow, int endRow) {
// do nothing, all work done by delegate
}
/**
* {@inheritDoc} <p>
*
* Implemented to do nothing, we are the slave of the delegate.
*/
@Override
public void rowsUpdated(int firstRow, int endRow) {
// do nothing, all work done by delegate
}
/**
* {@inheritDoc} <p>
*
* Implemented to do nothing, we are the slave of the delegate.
*/
@Override
public void rowsUpdated(int firstRow, int endRow, int column) {
// do nothing, all work done by delegate
}
}