001    package org.tynamo.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.TynamoGridDataSource;
010    import org.tynamo.descriptor.TynamoClassDescriptor;
011    import org.tynamo.services.DescriptorService;
012    import org.tynamo.services.PersistenceService;
013    import org.tynamo.util.BeanModelUtils;
014    import org.tynamo.util.DisplayNameUtils;
015    import org.tynamo.util.Utils;
016    
017    public class List {
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
035            private Object bean;
036    
037            @Property
038            private TynamoClassDescriptor classDescriptor;
039    
040            @Property
041            private BeanModel beanModel;
042    
043            protected void onActivate(Class clazz) throws Exception {
044    
045                    assert clazz != null; //@todo throw a proper exception
046    
047                    classDescriptor = descriptorService.getClassDescriptor(clazz);
048                    beanModel = beanModelSource.createDisplayModel(clazz, messages);
049                    BeanModelUtils.exclude(beanModel, classDescriptor);
050            }
051    
052            protected Object[] onPassivate() {
053                    return new Object[]{classDescriptor.getBeanType()};
054            }
055    
056            public Object getSource() {
057                    return new TynamoGridDataSource(persitenceService, classDescriptor.getBeanType());
058            }
059    
060            public Object[] getEditPageContext() {
061                    return new Object[]{classDescriptor.getBeanType(), bean};
062            }
063    
064            public String getTitle() {
065                    return messages.format(Utils.LIST_MESSAGE, DisplayNameUtils.getPluralDisplayName(classDescriptor, messages));
066            }
067    
068            public String getNewLinkMessage() {
069                    return messages.format(Utils.NEW_MESSAGE, DisplayNameUtils.getDisplayName(classDescriptor, messages));
070            }
071    
072            public final String getModelId() {
073                    return propertyAccess.get(bean, classDescriptor.getIdentifierDescriptor().getName()).toString();
074            }
075    
076    }