001 package org.tynamo.descriptor.decorators;
002
003 import org.apache.commons.lang.StringUtils;
004 import org.apache.tapestry5.beaneditor.NonVisual;
005 import org.apache.tapestry5.beaneditor.ReorderProperties;
006 import org.apache.tapestry5.ioc.services.ClassPropertyAdapter;
007 import org.apache.tapestry5.ioc.services.PropertyAccess;
008 import org.apache.tapestry5.ioc.services.PropertyAdapter;
009 import org.tynamo.internal.InternalConstants;
010 import org.tynamo.descriptor.TynamoClassDescriptor;
011 import org.tynamo.descriptor.extension.BeanModelExtension;
012
013 public class TapestryDecorator implements DescriptorDecorator
014 {
015
016 PropertyAccess propertyAccess;
017
018 public TapestryDecorator(PropertyAccess propertyAccess)
019 {
020 this.propertyAccess = propertyAccess;
021 }
022
023 public TynamoClassDescriptor decorate(TynamoClassDescriptor descriptor)
024 {
025 ClassPropertyAdapter adapter = propertyAccess.getAdapter(descriptor.getBeanType());
026
027 for (final String propertyName : adapter.getPropertyNames())
028 {
029 PropertyAdapter pa = adapter.getPropertyAdapter(propertyName);
030
031 if (pa.getAnnotation(NonVisual.class) != null)
032 {
033 descriptor.getPropertyDescriptor(pa.getName()).setNonVisual(true);
034 } else if (pa.getAnnotation(ReorderProperties.class) != null)
035 {
036 String reorder = pa.getAnnotation(ReorderProperties.class).value();
037
038 BeanModelExtension beanModelExtension = BeanModelExtension.obtainBeanModelExtension(descriptor);
039
040 if (StringUtils.isNotEmpty(reorder))
041 beanModelExtension.setReorderPropertyNames(InternalConstants.DEFAULT_BEANMODEL_CONTEXT_KEY, reorder);
042 }
043
044 }
045
046 return descriptor;
047 }
048 }