diff --git a/pom.xml b/pom.xml index 9d359f7..5355566 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ io.sfjava.ui sf-java-ui - 1.0.1-SNAPSHOT + 1.0.2-SNAPSHOT jar sf-java-ui diff --git a/src/main/java/io/asfjava/ui/core/schema/UiFormSchemaGenerator.java b/src/main/java/io/asfjava/ui/core/schema/UiFormSchemaGenerator.java index 7e1e678..110adee 100644 --- a/src/main/java/io/asfjava/ui/core/schema/UiFormSchemaGenerator.java +++ b/src/main/java/io/asfjava/ui/core/schema/UiFormSchemaGenerator.java @@ -3,6 +3,7 @@ import java.io.Serializable; import java.lang.annotation.Annotation; import java.lang.reflect.Field; +import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; @@ -12,9 +13,12 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Optional; +import java.util.Set; import java.util.function.Predicate; import java.util.stream.Collectors; +import org.reflections.ReflectionUtils; + import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @@ -43,7 +47,8 @@ public final class UiFormSchemaGenerator { private static UiFormSchemaGenerator instance; public UiForm generate(Class formDto) throws JsonMappingException { - Field[] declaredFields = formDto.getDeclaredFields(); + Set declaredFields = ReflectionUtils.getAllFields(formDto, + field -> !Modifier.isStatic(field.getModifiers())); ObjectMapper mapper = new ObjectMapper(); JsonSchemaGenerator schemaGen = initSchemaGen(mapper); @@ -105,13 +110,13 @@ private ObjectNode buildActionNode(ObjectMapper mapper, Action action) { return node; } - private ObjectNode handlerGroupedFields(ObjectMapper mapper, Field[] declaredFields, + private ObjectNode handlerGroupedFields(ObjectMapper mapper, Set declaredFields, Map sortedNodes) { Predicate checkFieldSetAnnotation = field -> field.isAnnotationPresent(FieldSet.class); Map> groupedFields = new LinkedHashMap<>(); - Arrays.stream(declaredFields).filter(checkFieldSetAnnotation) + declaredFields.stream().filter(checkFieldSetAnnotation) .forEach(field -> groupFieldsByTab(sortedNodes, field, groupedFields)); ArrayNode groups = mapper.createArrayNode(); @@ -123,7 +128,7 @@ private ObjectNode handlerGroupedFields(ObjectMapper mapper, Field[] declaredFie } - private ObjectNode handleTabbedFields(ObjectMapper mapper, Field[] declaredFields, Map nodes) { + private ObjectNode handleTabbedFields(ObjectMapper mapper, Set declaredFields, Map nodes) { Predicate checkTabAnnotation = field -> field.isAnnotationPresent(Tab.class); Comparator tabIndexComparator = (field1, field2) -> Integer @@ -138,7 +143,7 @@ private ObjectNode handleTabbedFields(ObjectMapper mapper, Field[] declaredField Map> groupedFieldsByTab = new LinkedHashMap<>(); - Arrays.stream(declaredFields).filter(checkTabAnnotation).sorted(fieldIndexComparator).sorted(tabIndexComparator) + declaredFields.stream().filter(checkTabAnnotation).sorted(fieldIndexComparator).sorted(tabIndexComparator) .forEach(field -> groupFieldsByTab(nodes, field, groupedFieldsByTab)); ArrayNode tabs = mapper.createArrayNode(); @@ -161,10 +166,10 @@ private ObjectNode handleTabbedFields(ObjectMapper mapper, Field[] declaredField } - private Map initFieldsFormDefinition(ObjectMapper mapper, Field[] declaredFields) { + private Map initFieldsFormDefinition(ObjectMapper mapper, Set declaredFields) { Map nodes = new HashMap<>(); - Arrays.stream(declaredFields).forEach(field -> buildFormDefinition(nodes, mapper, field)); + declaredFields.forEach(field -> buildFormDefinition(nodes, mapper, field)); return nodes; }