Skip to content

Commit a58cb8a

Browse files
committed
add new @index annotation
handle fields order fix #51
1 parent a2b83bd commit a58cb8a

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

src/main/java/io/asfjava/ui/core/schema/UiFormSchemaGenerator.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.fasterxml.jackson.module.jsonSchema.JsonSchemaGenerator;
2222

2323
import io.asfjava.ui.core.FormDefinitionGeneratorFactory;
24+
import io.asfjava.ui.core.form.Index;
2425
import io.asfjava.ui.core.form.Tab;
2526
import io.asfjava.ui.dto.UiForm;
2627

@@ -81,8 +82,15 @@ private ObjectNode handleTabbedFields(ObjectMapper mapper, Field[] declaredField
8182
}
8283

8384
private Map<Field, JsonNode> initFieldFormDefinition(ObjectMapper mapper, Field[] declaredFields) {
84-
Map<Field, JsonNode> nodes = new HashMap<>();
85-
Arrays.stream(declaredFields).forEach(field -> buildFormDefinition(nodes, mapper, field));
85+
Map<Field, JsonNode> nodes = new LinkedHashMap<>();
86+
87+
Predicate<? super Field> checkIndexAnnotation = field -> field.isAnnotationPresent(Index.class);
88+
Comparator<? super Field> fieldIndexComparator = (field1, field2) -> Integer
89+
.compare(field1.getAnnotation(Index.class).value(), field2.getAnnotation(Index.class).value());
90+
91+
Arrays.stream(declaredFields).filter(checkIndexAnnotation).sorted(fieldIndexComparator)
92+
.forEachOrdered(field -> buildFormDefinition(nodes, mapper, field));
93+
8694
return nodes;
8795
}
8896

0 commit comments

Comments
 (0)