package org.tynamo.internal.services; import org.apache.tapestry5.beaneditor.BeanModel; import org.apache.tapestry5.func.F; import org.apache.tapestry5.func.Mapper; import org.apache.tapestry5.func.Predicate; import org.tynamo.PageType; import org.tynamo.descriptor.TynamoClassDescriptor; import org.tynamo.descriptor.TynamoPropertyDescriptor; import org.tynamo.descriptor.extension.BlobDescriptorExtension; import org.tynamo.services.BeanModelModifier; import org.tynamo.services.DescriptorService; import java.util.List; /** * Removes the Tynamo "recommended" list of properties to exclude from the bean model. * <p/> * It excludes all nonVisual properties from the BeanModel for ALL the contexts, and for the "list" context key it also * removes identifier properties, collection properties and blob properties. */ public class DefaultExclusionsBMModifier implements BeanModelModifier { private DescriptorService descriptorService; public DefaultExclusionsBMModifier(DescriptorService descriptorService) { this.descriptorService = descriptorService; } /** * @param beanModel to modifiy * @param key to choose which configuration set to apply */ @Override public boolean modify(BeanModel<?> beanModel, final String key) { TynamoClassDescriptor classDescriptor = descriptorService.getClassDescriptor(beanModel.getBeanType()); List<String> nameList = F.flow(classDescriptor.getPropertyDescriptors()).filter(new Predicate<TynamoPropertyDescriptor>() { public boolean accept(TynamoPropertyDescriptor descriptor) { if (PageType.LIST.getContextKey().equals(key)) { return descriptor.isIdentifier() || descriptor.isCollection() || descriptor.isNonVisual() || descriptor.supportsExtension(BlobDescriptorExtension.class); } else { return descriptor.isNonVisual(); } } }).map(new Mapper<TynamoPropertyDescriptor, String>() { public String map(TynamoPropertyDescriptor descriptor) { return descriptor.getName(); } }).toList(); beanModel.exclude((String[]) nameList.toArray(new String[nameList.size()])); return true; } }