package org.tynamo.descriptor.annotation.handlers; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.tynamo.PageType; import org.tynamo.descriptor.TynamoClassDescriptor; import org.tynamo.descriptor.annotation.beaneditor.BeanModel; import org.tynamo.descriptor.annotation.beaneditor.BeanModels; import org.tynamo.descriptor.extension.BeanModelExtension; import org.tynamo.mixins.BeanModelAdvisor; public class BeanModelAnnotationHandler implements DescriptorAnnotationHandler<BeanModels, TynamoClassDescriptor> { private final static Logger logger = LoggerFactory.getLogger(BeanModelAdvisor.class); public void decorateFromAnnotation(final BeanModels annotation, final TynamoClassDescriptor descriptor) { BeanModelExtension beanModelExtension = BeanModelExtension.obtainBeanModelExtension(descriptor); for (BeanModel beanModel : annotation.value()) { boolean thereIsAKey = StringUtils.isNotEmpty(beanModel.key()); if (thereIsAKey && beanModel.pageType() != PageType.DEFAULT) logger.warn("{}@BeanModel.pageType is ignored. Reason: @BeanModel.pageType value is ignored if the @BeanModel.key is specified", descriptor.getBeanType().getSimpleName()); if (beanModel.beanType() != void.class) logger.warn("{}@BeanModel.beanType is ignored. Reason: @BeanModel.beanType value is ignored when the @BeanModel annotation is used on entities", descriptor.getBeanType().getSimpleName()); String key = thereIsAKey ? beanModel.key() : beanModel.pageType().getContextKey(); String exclude = beanModel.exclude(); String include = beanModel.include(); String reorder = beanModel.reorder(); if (StringUtils.isNotEmpty(exclude)) beanModelExtension.setExcludePropertyNames(key, exclude); if (StringUtils.isNotEmpty(include)) beanModelExtension.setIncludePropertyNames(key, include); if (StringUtils.isNotEmpty(reorder)) beanModelExtension.setReorderPropertyNames(key, reorder); } } }