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    }