package org.jsondoc.core.scanner.builder;
import java.lang.reflect.Field;
import java.util.Set;
import java.util.TreeSet;
import org.jsondoc.core.annotation.ApiObject;
import org.jsondoc.core.annotation.ApiObjectField;
import org.jsondoc.core.pojo.ApiObjectDoc;
import org.jsondoc.core.pojo.ApiObjectFieldDoc;
import org.jsondoc.core.scanner.DefaultJSONDocScanner;
public class JSONDocApiObjectDocBuilder {
public static ApiObjectDoc build(Class<?> clazz) {
ApiObject apiObject = clazz.getAnnotation(ApiObject.class);
ApiObjectDoc apiObjectDoc = new ApiObjectDoc();
Set<ApiObjectFieldDoc> fieldDocs = new TreeSet<ApiObjectFieldDoc>();
for (Field field : clazz.getDeclaredFields()) {
if (field.getAnnotation(ApiObjectField.class) != null) {
ApiObjectFieldDoc fieldDoc = JSONDocApiObjectFieldDocBuilder.build(field.getAnnotation(ApiObjectField.class), field);
fieldDoc.setSupportedversions(JSONDocApiVersionDocBuilder.build(field));
fieldDocs.add(fieldDoc);
}
}
Class<?> c = clazz.getSuperclass();
if (c != null) {
if (c.isAnnotationPresent(ApiObject.class)) {
ApiObjectDoc objDoc = build(c);
fieldDocs.addAll(objDoc.getFields());
}
}
if (clazz.isEnum()) {
apiObjectDoc.setAllowedvalues(DefaultJSONDocScanner.enumConstantsToStringArray(clazz.getEnumConstants()));
}
if (apiObject.name().trim().isEmpty()) {
apiObjectDoc.setName(clazz.getSimpleName().toLowerCase());
} else {
apiObjectDoc.setName(apiObject.name());
}
apiObjectDoc.setDescription(apiObject.description());
apiObjectDoc.setFields(fieldDocs);
apiObjectDoc.setGroup(apiObject.group());
apiObjectDoc.setVisibility(apiObject.visibility());
apiObjectDoc.setStage(apiObject.stage());
apiObjectDoc.setShow(apiObject.show());
return apiObjectDoc;
}
}