001 package org.trails.component;
002
003 import org.apache.tapestry.annotations.ComponentClass;
004 import org.apache.tapestry.annotations.InjectObject;
005 import org.apache.tapestry.annotations.Parameter;
006 import org.apache.tapestry.components.Block;
007 import org.apache.tapestry.contrib.table.model.common.AbstractTableColumn;
008 import org.apache.tapestry.contrib.table.model.common.BlockTableRendererSource;
009 import org.hibernate.criterion.DetachedCriteria;
010 import org.trails.descriptor.extension.BlobDescriptorExtension;
011 import org.trails.descriptor.IPropertyDescriptor;
012 import org.trails.persistence.HibernatePersistenceService;
013
014 @ComponentClass(allowBody = true, allowInformalParameters = true)
015 public abstract class HibernateObjectTable extends ObjectTable
016 {
017
018 public static final String BLOB_COLUMN = "blob" + AbstractTableColumn.VALUE_RENDERER_BLOCK_SUFFIX;
019
020 @InjectObject("service:trails.hibernate.PersistenceService")
021 public abstract HibernatePersistenceService getHibernatePersistenceService();
022
023 /**
024 * @return
025 * @todo: remove when the components reuse issue goes away.
026 */
027 public HibernatePersistenceService getPersistenceService()
028 {
029 return getHibernatePersistenceService();
030 }
031
032 @Parameter
033 public abstract DetachedCriteria getCriteria();
034
035 public abstract void setCriteria(DetachedCriteria criteria);
036
037 public Object getSource()
038 {
039 if (getInstances() == null)
040 {
041 return new HibernateTableModel(getClassDescriptor().getType(), getHibernatePersistenceService(),
042 getCriteria());
043 }
044 return getInstances();
045 }
046
047 protected void alterTableColumn(IPropertyDescriptor descriptor, TrailsTableColumn tableColumn)
048 {
049 if (descriptor.supportsExtension(BlobDescriptorExtension.class))
050 {
051 tableColumn.setValueRendererSource(new BlockTableRendererSource((Block) getComponent(BLOB_COLUMN)));
052 }
053 }
054 }