/*******************************************************************************
* Copyright (c) 2012, 2014 Original authors and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Original authors and others - initial API and implementation
* Dirk Fauth <dirk.fauth@googlemail.com> - Bug 448115, 449361
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.extension.glazedlists.groupBy;
import org.eclipse.nebula.widgets.nattable.data.IColumnAccessor;
/**
* {@link IColumnAccessor} that wraps an instance of {@link IColumnAccessor} and
* adds the ability to handle {@link GroupByObject}s additionally to the
* underlying data structure. Necessary to be able to introduce groupBy
* structures.
*
* @param <T>
* The type of the underlying data model
*/
public class GroupByColumnAccessor<T> implements IColumnAccessor<Object> {
protected final IColumnAccessor<T> columnAccessor;
public GroupByColumnAccessor(IColumnAccessor<T> columnAccessor) {
this.columnAccessor = columnAccessor;
}
@Override
@SuppressWarnings("unchecked")
public Object getDataValue(Object rowObject, int columnIndex) {
if (rowObject instanceof GroupByObject) {
// we return the GroupByObject for every column because we are
// called by the bottom most layer, therefore we don't know which
// column is currently treated as the tree column
// the GroupByDisplayConverter is used to determine
// whether the groupBy value, the groupBy summary value or nothing
// is rendered
return rowObject;
} else {
return this.columnAccessor.getDataValue((T) rowObject, columnIndex);
}
}
@Override
@SuppressWarnings("unchecked")
public void setDataValue(Object rowObject, int columnIndex, Object newValue) {
if (rowObject instanceof GroupByObject) {
// do nothing
} else {
this.columnAccessor.setDataValue((T) rowObject, columnIndex, newValue);
}
}
@Override
public int getColumnCount() {
return this.columnAccessor.getColumnCount();
}
}