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 }