diff --git a/sqlschema2java-core/pom.xml b/sqlschema2java-core/pom.xml index 20c23b3..ab1983e 100644 --- a/sqlschema2java-core/pom.xml +++ b/sqlschema2java-core/pom.xml @@ -180,6 +180,12 @@ 2.13.2.2 + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + 2.13.2 + + junit junit diff --git a/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/factory/impl/DTOFactory.java b/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/factory/impl/DTOFactory.java index 4a1ca6a..9320a38 100644 --- a/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/factory/impl/DTOFactory.java +++ b/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/factory/impl/DTOFactory.java @@ -1,7 +1,7 @@ package dev.sassine.api.structure.export.builder.factory.impl; import static dev.sassine.api.structure.export.builder.function.ImportBeanFunction.importEntityClass; -import static dev.sassine.api.structure.export.builder.function.ImportBeanFunction.importJavaTime; +import static dev.sassine.api.structure.export.builder.function.ImportBeanFunction.importJavaTimeAndJSONDeserialize; import static dev.sassine.api.structure.export.builder.function.StoreClassFuncation.store; import static java.lang.String.format; import static java.lang.reflect.Modifier.PUBLIC; @@ -38,7 +38,7 @@ public class DTOFactory implements Factory { private static final String FORMAT_NEW_ENTITY_METHOD = "%s entity = new %s();"; private static final String FORMAT_STRING_FIELDS = "\"%s\""; private static final String FORMAT_PACKAGE_DOT_PACKAGE = "%s.%s"; - private static final String FORMAT_SETTER_EQ_GETTER = "this.%s = entity.get%s();"; + private static final String FORMAT_SET_VALUE = "entity.set%s(this.%s);"; private static final String PARAM_VALUE = "value"; @Override @@ -56,7 +56,7 @@ public void execute(EntityModel entityModel,boolean isAutoGenerated, String name log.debug("Prepare generate ({}) fields", entityModel.getFields().size()); entityModel.getFields().forEach(fieldModel -> { VariableSourceGenerator field = this.buildField(fieldModel); - importJavaTime(gen, fieldModel); + importJavaTimeAndJSONDeserialize(field,gen, fieldModel); this.addFunctionToMethodFunction(fm, fieldModel); log.debug("Adding field in functionMethod toEntity"); clDTO.addField(field); @@ -76,7 +76,7 @@ private void closeMethodFunction(FunctionSourceGenerator functionMethodToEntity) } private void addFunctionToMethodFunction(FunctionSourceGenerator functionMethodToEntity, FieldModel fieldModel) { - functionMethodToEntity.addBodyCodeLine(format(FORMAT_SETTER_EQ_GETTER, fieldModel.getCamelName(), fieldModel.getCamelNameUpper())); + functionMethodToEntity.addBodyCodeLine(format(FORMAT_SET_VALUE, fieldModel.getCamelNameUpper(), fieldModel.getCamelName())); } private VariableSourceGenerator buildField(FieldModel fieldModel) { diff --git a/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/function/ImportBeanFunction.java b/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/function/ImportBeanFunction.java index 745b5f6..6cdbe52 100644 --- a/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/function/ImportBeanFunction.java +++ b/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/function/ImportBeanFunction.java @@ -9,12 +9,21 @@ import java.time.LocalDateTime; import java.time.LocalTime; +import org.burningwave.core.classes.AnnotationSourceGenerator; +import org.burningwave.core.classes.TypeDeclarationSourceGenerator; import org.burningwave.core.classes.UnitSourceGenerator; +import org.burningwave.core.classes.VariableSourceGenerator; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; import dev.sassine.api.structure.model.java.FieldModel; public class ImportBeanFunction { + private static final String PARAM_USING = "using"; private static final String FORMAT_IMPORT_ENTITY_PACKAGE = "%s.domain.%sEntity"; public static void importEntityClass(String nameClass, String packageName, UnitSourceGenerator gen) { @@ -26,5 +35,24 @@ public static void importJavaTime(UnitSourceGenerator gen, FieldModel fieldModel else if (TYPE_LOCAL_DATE.equals(fieldModel.getType())) gen.addImport(LocalDate.class); else if (TYPE_LOCAL_TIME.equals(fieldModel.getType())) gen.addImport(LocalTime.class); } - + + public static void importJavaTimeAndJSONDeserialize(VariableSourceGenerator field, UnitSourceGenerator gen, + FieldModel fieldModel) { + if (TYPE_LOCAL_DATE_TIME.equals(fieldModel.getType())) { + field.addAnnotation(AnnotationSourceGenerator.create(JsonDeserialize.class).addParameter(PARAM_USING, + VariableSourceGenerator + .create(TypeDeclarationSourceGenerator.create(LocalDateTimeDeserializer.class)))); + gen.addImport(LocalDateTime.class); + } else if (TYPE_LOCAL_DATE.equals(fieldModel.getType())) { + gen.addImport(LocalDate.class); + field.addAnnotation(AnnotationSourceGenerator.create(JsonDeserialize.class).addParameter(PARAM_USING, + VariableSourceGenerator + .create(TypeDeclarationSourceGenerator.create(LocalDateDeserializer.class)))); + } else if (TYPE_LOCAL_TIME.equals(fieldModel.getType())) { + gen.addImport(LocalTime.class); + field.addAnnotation(AnnotationSourceGenerator.create(JsonDeserialize.class).addParameter(PARAM_USING, + VariableSourceGenerator + .create(TypeDeclarationSourceGenerator.create(LocalTimeDeserializer.class)))); + } + } }