package org.jsondoc.springmvc.scanner.builder; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.Set; import java.util.TreeSet; import org.jsondoc.core.pojo.ApiObjectDoc; import org.jsondoc.core.pojo.ApiObjectFieldDoc; import org.jsondoc.core.scanner.DefaultJSONDocScanner; import org.jsondoc.core.util.JSONDocHibernateValidatorProcessor; import org.jsondoc.core.util.JSONDocType; import org.jsondoc.core.util.JSONDocTypeBuilder; public class SpringObjectBuilder { public static ApiObjectDoc buildObject(Class<?> clazz) { ApiObjectDoc apiObjectDoc = new ApiObjectDoc(); apiObjectDoc.setName(clazz.getSimpleName()); Set<ApiObjectFieldDoc> fieldDocs = new TreeSet<ApiObjectFieldDoc>(); for (Field field : clazz.getDeclaredFields()) { ApiObjectFieldDoc fieldDoc = new ApiObjectFieldDoc(); fieldDoc.setName(field.getName()); fieldDoc.setOrder(Integer.MAX_VALUE); fieldDoc.setRequired(DefaultJSONDocScanner.UNDEFINED.toUpperCase()); fieldDoc.setJsondocType(JSONDocTypeBuilder.build(new JSONDocType(), field.getType(), field.getGenericType())); JSONDocHibernateValidatorProcessor.processHibernateValidatorAnnotations(field, fieldDoc); fieldDocs.add(fieldDoc); } Class<?> superclass = clazz.getSuperclass(); if (superclass != null) { ApiObjectDoc parentObjectDoc = buildObject(superclass); fieldDocs.addAll(parentObjectDoc.getFields()); } if (clazz.isEnum()) { apiObjectDoc.setAllowedvalues(DefaultJSONDocScanner.enumConstantsToStringArray(clazz.getEnumConstants())); } apiObjectDoc.setFields(fieldDocs); if(Modifier.isAbstract(clazz.getModifiers())) { apiObjectDoc.setShow(false); } return apiObjectDoc; } }