/** * */ package org.minnal.api.filter; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.util.List; import org.minnal.utils.reflection.ClassUtils; import scala.Option; import scala.collection.immutable.Map; import com.google.common.collect.Lists; import com.wordnik.swagger.converter.SwaggerSchemaConverter; import com.wordnik.swagger.model.Model; /** * @author ganeshs * */ public class ExcludeAnnotationsConvertor extends SwaggerSchemaConverter { private List<Class<? extends Annotation>> excludeAnnotations = Lists.newArrayList(); /** * @param excludeAnnotations */ public ExcludeAnnotationsConvertor(List<Class<? extends Annotation>> excludeAnnotations) { this.excludeAnnotations = excludeAnnotations; } @Override public Option<Model> read(Class<?> cls, Map<String, String> typeMap) { Option<Model> model = super.read(cls, typeMap); for (Field field : cls.getDeclaredFields()) { handleExcludedAnnotations(cls, field, model); } return model; } /** * Handles excluded annotations * * @param clazz * @param field * @param model */ protected void handleExcludedAnnotations(Class<?> clazz, Field field, Option<Model> model) { for (Class<? extends Annotation> annotationClass : excludeAnnotations) { if (ClassUtils.hasAnnotation(clazz, field.getName(), annotationClass)) { model.get().properties().remove(field.getName()); } } } /** * @return the excludeAnnotations */ public List<Class<? extends Annotation>> getExcludeAnnotations() { return excludeAnnotations; } }