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    }