package hu.sch.web.wicket.components.tables;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
/**
*
* @author messo
* @since 2.3.1
*/
public class DateIntervalPropertyColumn<T> extends PropertyColumn<T, String> {
private final String endPropertyExpression;
private final DateFormat df = new SimpleDateFormat("yyyy.MM.dd.");
/**
* Creates a date property column that is also sortable
*
* @param displayModel display model
* @param sortProperty sort property
* @param startPropertyExpression wicket property expression used by
* PropertyModel
* @param endPropertyExpression wicket property expression used by
* PropertyModel
*/
public DateIntervalPropertyColumn(IModel<String> displayModel, String sortProperty,
String startPropertyExpression, String endPropertyExpression) {
super(displayModel, sortProperty, startPropertyExpression);
this.endPropertyExpression = endPropertyExpression;
}
/**
* Creates a non sortable date property column
*
* @param displayModel display model
* @param propertyExpression wicket property expression
* @see PropertyModel
*/
public DateIntervalPropertyColumn(IModel<String> displayModel, String propertyExpression, String endPropertyExpression) {
super(displayModel, null, propertyExpression);
this.endPropertyExpression = endPropertyExpression;
}
/**
* Implementation of populateItem which adds a label to the cell whose model
* is the provided property expression evaluated against rowModelObject
*
* @see ICellPopulator#populateItem(Item, String, IModel)
*/
@Override
public void populateItem(Item<ICellPopulator<T>> item, String componentId, IModel<T> rowModel) {
Date start = (Date) getDataModel(rowModel).getObject();
Date end = (Date) new PropertyModel(rowModel, endPropertyExpression).getObject();
StringBuilder sb = new StringBuilder(df.format(start));
sb.append(" - ");
if (end != null) {
sb.append(df.format(end));
}
item.add(new Label(componentId, sb.toString()));
item.add(AttributeModifier.replace("style", "width: 180px"));
}
}