diff --git a/src/main/antlr4/io.github.zenwave360.zdl.antlr/Zdl.g4 b/src/main/antlr4/io.github.zenwave360.zdl.antlr/Zdl.g4 index 0672d20..1c3fa60 100644 --- a/src/main/antlr4/io.github.zenwave360.zdl.antlr/Zdl.g4 +++ b/src/main/antlr4/io.github.zenwave360.zdl.antlr/Zdl.g4 @@ -181,7 +181,7 @@ entity_table_name: keyword; entity_body: LBRACE fields RBRACE; fields: (field COMMA?)*; -field: javadoc? annotations field_name field_type field_initialization? (LPAREN entity_table_name RPAREN)? (field_validations)* suffix_javadoc? (nested_field)?; +field: javadoc? annotations field_name field_type (LPAREN entity_table_name RPAREN)? field_initialization? (field_validations)* suffix_javadoc? (nested_field)?; nested_field: LBRACE (field)* RBRACE nested_field_validations*; field_name: keyword; field_type: ID | ID ARRAY; diff --git a/src/main/java/io/github/zenwave360/zdl/ZdlParser.java b/src/main/java/io/github/zenwave360/zdl/ZdlParser.java index 6d382ef..40443d1 100644 --- a/src/main/java/io/github/zenwave360/zdl/ZdlParser.java +++ b/src/main/java/io/github/zenwave360/zdl/ZdlParser.java @@ -18,7 +18,7 @@ public class ZdlParser { - public static final List STANDARD_FIELD_TYPES = List.of("String", "Integer", "Long", "int", "long", "BigDecimal", "Float", "float", "Double", "double", "Enum", "Boolean", "boolean", "LocalDate", "LocalDateTime", "ZonedDateTime", "Instant", "Duration", "UUID", "byte", "byte[]", "Blob", "AnyBlob", "ImageBlob", "TextBlob"); + public static final List STANDARD_FIELD_TYPES = List.of("String", "Integer", "Long", "int", "long", "BigDecimal", "Float", "float", "Double", "double", "Enum", "Boolean", "boolean", "Map", "LocalDate", "LocalDateTime", "ZonedDate", "ZonedDateTime", "Instant", "Duration", "UUID", "byte", "byte[]", "Blob", "AnyBlob", "ImageBlob", "TextBlob"); public static final List STANDARD_VALIDATIONS = List.of("required", "unique", "min", "max", "minlength", "maxlength", "pattern"); diff --git a/src/main/java/io/github/zenwave360/zdl/antlr/ZdlListenerImpl.java b/src/main/java/io/github/zenwave360/zdl/antlr/ZdlListenerImpl.java index de4c9aa..215f4f3 100644 --- a/src/main/java/io/github/zenwave360/zdl/antlr/ZdlListenerImpl.java +++ b/src/main/java/io/github/zenwave360/zdl/antlr/ZdlListenerImpl.java @@ -286,6 +286,10 @@ public void enterNested_field(io.github.zenwave360.zdl.antlr.ZdlParser.Nested_fi ((Map)parentField).put("validations", validations); currentStack.push(processEntity(entityName, entityJavadoc, tableName).with("type", currentCollection.split("\\.")[0])); currentStack.peek().appendTo("options", "embedded", true); + var parenFieldOptions = JSONPath.get(parentField, "options", Map.of()); + for (var entry : parenFieldOptions.entrySet()) { + currentStack.peek().appendTo("options", (String) entry.getKey(), entry.getValue()); + } model.appendTo(currentCollection, entityName, currentStack.peek()); } diff --git a/src/test/resources/complete.zdl b/src/test/resources/complete.zdl index 31d4453..07c4bcb 100644 --- a/src/test/resources/complete.zdl +++ b/src/test/resources/complete.zdl @@ -80,7 +80,7 @@ entity CustomerOrder { orderTime Instant = "Instant.now()" required /** orderTime javadoc */ status OrderStatus = OrderStatus.RECEIVED required @auditing @ref - customerDetails Customer { + customerDetails Customer(customer_table) { customerId String required firstName String required lastName String required