
org.trails.component.HibernateTableModel Maven / Gradle / Ivy
package org.trails.component;
import java.util.Iterator;
import org.apache.commons.lang.SerializationUtils;
import org.apache.tapestry.contrib.table.model.IBasicTableModel;
import org.apache.tapestry.contrib.table.model.ITableColumn;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.trails.persistence.HibernatePersistenceService;
public class HibernateTableModel implements IBasicTableModel
{
private HibernatePersistenceService persistenceService;
private Class entityType;
private DetachedCriteria criteria;
public HibernateTableModel(Class entityType, HibernatePersistenceService persistenceService, DetachedCriteria criteria)
{
super();
this.entityType = entityType;
this.persistenceService = persistenceService;
this.criteria = criteria;
}
public HibernatePersistenceService getPersistenceService()
{
return persistenceService;
}
public void setPersistenceService(HibernatePersistenceService persistenceService)
{
this.persistenceService = persistenceService;
}
public DetachedCriteria getCriteria()
{
return criteria;
}
public void setCriteria(DetachedCriteria criteria)
{
this.criteria = criteria;
}
public Iterator getCurrentPageRows(int startIndex, int maxResults, ITableColumn column,
boolean asc)
{
DetachedCriteria clonedCriteria = (DetachedCriteria) SerializationUtils.clone(getCriteria());
TrailsTableColumn trailsTableColumn = (TrailsTableColumn) column;
if (trailsTableColumn != null)
{
String sortProperty = trailsTableColumn.getPropertyDescriptor().getName();
clonedCriteria.addOrder(asc ? Order.asc(sortProperty) : Order.desc(sortProperty));
}
return getPersistenceService().getInstances(entityType, clonedCriteria, startIndex, maxResults).iterator();
}
public int getRowCount()
{
// doing a count alters the criteria
DetachedCriteria clonedCriteria = (DetachedCriteria) SerializationUtils.clone(getCriteria());
return getPersistenceService().count(entityType, clonedCriteria);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy