001    package org.tynamo.hibernate.pages;
002    
003    import org.apache.tapestry5.annotations.Property;
004    import org.apache.tapestry5.beaneditor.BeanModel;
005    import org.apache.tapestry5.ioc.Messages;
006    import org.apache.tapestry5.ioc.annotations.Inject;
007    import org.apache.tapestry5.ioc.services.PropertyAccess;
008    import org.apache.tapestry5.services.BeanModelSource;
009    import org.tynamo.descriptor.TynamoClassDescriptor;
010    import org.tynamo.services.DescriptorService;
011    import org.tynamo.services.PersistenceService;
012    import org.tynamo.util.BeanModelUtils;
013    import org.tynamo.util.DisplayNameUtils;
014    import org.tynamo.util.Utils;
015    
016    public class HibernateListPage
017    {
018    
019            @Inject
020            private PersistenceService persitenceService;
021    
022            @Inject
023            private DescriptorService descriptorService;
024    
025            @Inject
026            private Messages messages;
027    
028            @Inject
029            private PropertyAccess propertyAccess;
030    
031            @Inject
032            private BeanModelSource beanModelSource;
033    
034            @Property(read = false)
035            private Object bean;
036    
037            private TynamoClassDescriptor classDescriptor;
038    
039            private BeanModel beanModel;
040    
041            protected void onActivate(Class clazz) throws Exception
042            {
043                    classDescriptor = descriptorService.getClassDescriptor(clazz);
044                    beanModel = beanModelSource.createDisplayModel(clazz, messages);
045                    BeanModelUtils.exclude(beanModel, classDescriptor);
046            }
047    
048            protected Object[] onPassivate()
049            {
050                    return new Object[]{classDescriptor.getType()};
051            }
052    
053            public java.util.List getInstances()
054            {
055                    return persitenceService.getInstances(classDescriptor.getType());
056            }
057    
058            public Object[] getEditPageContext()
059            {
060                    return new Object[]{classDescriptor.getType(), bean};
061            }
062    
063            public String getTitle()
064            {
065                    return messages.format(Utils.LIST_MESSAGE, DisplayNameUtils.getPluralDisplayName(classDescriptor, messages));
066            }
067    
068            public String getNewLinkMessage()
069            {
070                    return messages.format(Utils.NEW_MESSAGE, DisplayNameUtils.getDisplayName(classDescriptor, messages));
071            }
072    
073            public final String getModelId()
074            {
075                    return propertyAccess.get(bean, classDescriptor.getIdentifierDescriptor().getName()).toString();
076            }
077    
078    
079            public final TynamoClassDescriptor getClassDescriptor()
080            {
081                    return classDescriptor;
082            }
083    
084            public final BeanModel getBeanModel()
085            {
086                    return beanModel;
087            }
088    
089            public final Object getBean()
090            {
091                    return bean;
092            }
093    }