001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.wicket.extensions.markup.html.repeater.data.table;
018:
019: import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
020: import org.apache.wicket.markup.html.basic.Label;
021: import org.apache.wicket.markup.repeater.Item;
022: import org.apache.wicket.model.IModel;
023: import org.apache.wicket.model.PropertyModel;
024:
025: /**
026: * A convinience implementation of column that adds a label to the cell whose
027: * model is determined by the provided wicket property expression (same as used
028: * by {@link PropertyModel}) that is evaluated against the current row's model
029: * object
030: * <p>
031: * Example
032: *
033: * <pre>
034: * columns[0] = new PropertyColumn(new Model("First Name"), "name.first");
035: * </pre>
036: *
037: * The above will attach a label to the cell with a property model for the
038: * expression "name.first"
039: *
040: * @see PropertyModel
041: *
042: * @author Igor Vaynberg ( ivaynberg )
043: *
044: */
045: public class PropertyColumn extends AbstractColumn {
046: private static final long serialVersionUID = 1L;
047:
048: private final String propertyExpression;
049:
050: /**
051: * Creates a property column that is also sortable
052: *
053: * @param displayModel
054: * display model
055: * @param sortProperty
056: * sort property
057: * @param propertyExpression
058: * wicket property expression used by PropertyModel
059: */
060: public PropertyColumn(IModel displayModel, String sortProperty,
061: String propertyExpression) {
062: super (displayModel, sortProperty);
063: this .propertyExpression = propertyExpression;
064: }
065:
066: /**
067: * Creates a non sortable property column
068: *
069: * @param displayModel
070: * display model
071: * @param propertyExpression
072: * wicket property expression
073: * @see PropertyModel
074: */
075: public PropertyColumn(IModel displayModel, String propertyExpression) {
076: super (displayModel, null);
077: this .propertyExpression = propertyExpression;
078: }
079:
080: /**
081: * Implementation of populateItem which adds a label to the cell whose model
082: * is the provided property expression evaluated agains rowModelObject
083: *
084: * @see ICellPopulator#populateItem(Item, String, IModel)
085: */
086: public void populateItem(Item item, String componentId, IModel model) {
087: item.add(new Label(componentId, createLabelModel(model)));
088: }
089:
090: // TODO Post 1.3: rename embeddedModel to itemModel
091: protected IModel createLabelModel(IModel embeddedModel) {
092: return new PropertyModel(embeddedModel, propertyExpression);
093: }
094:
095: /**
096: * @return wicket property expression
097: */
098: public String getPropertyExpression() {
099: return propertyExpression;
100: }
101:
102: }
|