/**
* Copyright 2012 Universitat Pompeu Fabra.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*
*/
package org.onexus.website.api.widgets.tableviewer.columns;
import org.apache.wicket.Component;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.IWrapModel;
import org.onexus.collection.api.IEntity;
import org.onexus.collection.api.IEntityTable;
import org.onexus.resource.api.ORI;
import org.onexus.website.api.widgets.tableviewer.decorators.IDecorator;
import org.onexus.website.api.widgets.tableviewer.headers.IHeader;
import java.util.List;
public class CollectionColumn extends AbstractColumn {
private IHeader headerDecorator;
private IDecorator cellDecorator;
private List<IDecorator> cellActions;
public CollectionColumn(ORI collectionId, IHeader headerDecorator, IDecorator cellDecorator, List<IDecorator> cellActions) {
super(collectionId);
this.headerDecorator = headerDecorator;
this.cellDecorator = cellDecorator;
this.cellActions = cellActions;
}
protected IModel<IEntity> getModelAdapter(IModel<IEntityTable> rowModel) {
return new ModelAdapter(rowModel);
}
@Override
public void populateItem(Item<ICellPopulator<IEntityTable>> cellItem,
String componentId, IModel<IEntityTable> rowModel) {
if (cellActions == null || cellActions.isEmpty()) {
cellDecorator.populateCell(cellItem, componentId, getModelAdapter(rowModel));
} else {
cellDecorator.populateCell(cellItem, componentId, getModelAdapter(rowModel));
cellItem.addOrReplace(new ActionPanel(componentId, cellDecorator, cellActions, getModelAdapter(rowModel)));
}
}
public IDecorator getCellDecorator() {
return cellDecorator;
}
@Override
public Component getHeader(String componentId) {
return headerDecorator.getHeader(componentId);
}
public IHeader getHeaderDecorator() {
return headerDecorator;
}
public boolean isFilterable() {
return headerDecorator.isFilterable();
}
@Override
public String getSortProperty() {
return headerDecorator.getSortProperty();
}
@Override
public boolean isSortable() {
return headerDecorator.isSortable();
}
public class ModelAdapter implements IWrapModel<IEntity> {
private IModel<IEntityTable> rowModel;
public ModelAdapter(IModel<IEntityTable> rowModel) {
this.rowModel = rowModel;
}
@Override
public IEntity getObject() {
return rowModel.getObject().getEntity(CollectionColumn.this.getCollectionId());
}
@Override
public void setObject(IEntity object) {
// Read only model
throw new UnsupportedOperationException("Read-only model");
}
@Override
public void detach() {
}
@Override
public IModel<?> getWrappedModel() {
return rowModel;
}
}
}