From ad5d70de4b534697818700212becdb5e6c570199 Mon Sep 17 00:00:00 2001 From: Sassine El-Asmar Date: Fri, 15 Apr 2022 14:15:08 -0300 Subject: [PATCH 1/4] refactor: JPA Repository Import and expands class Interface --- .../export/builder/factory/impl/RepositoryFactory.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/factory/impl/RepositoryFactory.java b/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/factory/impl/RepositoryFactory.java index 1c1b47f..b57a347 100644 --- a/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/factory/impl/RepositoryFactory.java +++ b/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/factory/impl/RepositoryFactory.java @@ -16,6 +16,7 @@ import org.burningwave.core.classes.GenericSourceGenerator; import org.burningwave.core.classes.TypeDeclarationSourceGenerator; import org.burningwave.core.classes.UnitSourceGenerator; +import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import dev.sassine.api.structure.export.builder.factory.Factory; @@ -25,8 +26,6 @@ public class RepositoryFactory implements Factory { private static final Logger log = getLogger(); - private static final String PACKAGE_JPAREPOSITORY = "org.springframework.data.jpa.repository.JpaRepository"; - private static final String CLASSNAME_JPAREPOSITORY = "JpaRepository"; private static final String DOT_REPOSITORY = ".repository"; private static final String ENTITY_REPOSITORY = "EntityRepository"; private static final String ENTITY = "Entity"; @@ -39,7 +38,6 @@ public void execute(EntityModel entityModel, boolean isAutoGenerated, String nam ClassSourceGenerator interfaceClass = this.buildClassSource(entityModel, nameClass); log.debug("InterfaceRepository builded"); importEntityClass(nameClass, packageName, gen); - gen.addImport(PACKAGE_JPAREPOSITORY); gen.addClass(interfaceClass); store(gen); log.debug("Repository EntityClass ({}) stored", nameClass); @@ -47,8 +45,8 @@ public void execute(EntityModel entityModel, boolean isAutoGenerated, String nam private ClassSourceGenerator buildClassSource(EntityModel entityModel, String nameClass) { return ClassSourceGenerator - .createInterface(TypeDeclarationSourceGenerator.create(ENTITY_REPOSITORY)) - .expands(TypeDeclarationSourceGenerator.create(CLASSNAME_JPAREPOSITORY) + .createInterface(TypeDeclarationSourceGenerator.create(nameClass.concat(ENTITY_REPOSITORY))) + .expands(TypeDeclarationSourceGenerator.create(JpaRepository.class) .addGeneric(GenericSourceGenerator.create(nameClass.concat(ENTITY))) .addGeneric(GenericSourceGenerator.create(this.getIdClassType(entityModel)))) .addModifier(PUBLIC) From b3ca13f75e6225ca0abeffa8ae19e0d51c8057dd Mon Sep 17 00:00:00 2001 From: Sassine El-Asmar Date: Fri, 15 Apr 2022 14:17:55 -0300 Subject: [PATCH 2/4] refactor: call method plugin sqlschema2java to generate --- sqlschema2java-core/pom.xml | 2 +- sqlschema2java-example/pom.xml | 4 ++-- sqlschema2java-maven-plugin/pom.xml | 4 ++-- .../api/maven/plugin/start/SqlSchema2Java.java | 16 ++++++---------- 4 files changed, 11 insertions(+), 15 deletions(-) diff --git a/sqlschema2java-core/pom.xml b/sqlschema2java-core/pom.xml index 510cc8a..20c23b3 100644 --- a/sqlschema2java-core/pom.xml +++ b/sqlschema2java-core/pom.xml @@ -6,7 +6,7 @@ dev.sassine.api sqlschema2java-core - 1.0.0-SNAPSHOT + 1.0.1-SNAPSHOT sqlschema2java-core Auto generate Class DTO, Entity and Repository from SQL Query. diff --git a/sqlschema2java-example/pom.xml b/sqlschema2java-example/pom.xml index 85f6335..9967671 100644 --- a/sqlschema2java-example/pom.xml +++ b/sqlschema2java-example/pom.xml @@ -33,11 +33,11 @@ dev.sassine.api sqlschema2java-maven-plugin - 1.0.0-SNAPSHOT + 1.0.1-SNAPSHOT - sqlschema2java + generate diff --git a/sqlschema2java-maven-plugin/pom.xml b/sqlschema2java-maven-plugin/pom.xml index 5bed96c..1c75c88 100644 --- a/sqlschema2java-maven-plugin/pom.xml +++ b/sqlschema2java-maven-plugin/pom.xml @@ -6,7 +6,7 @@ 4.0.0 dev.sassine.api sqlschema2java-maven-plugin - 1.0.0-SNAPSHOT + 1.0.1-SNAPSHOT sqlschema2java-maven-plugin maven-plugin @@ -81,7 +81,7 @@ - 1.0.0-SNAPSHOT + 1.0.1-SNAPSHOT 1.8 1.8 3.6.2 diff --git a/sqlschema2java-maven-plugin/src/main/java/dev/sassine/api/maven/plugin/start/SqlSchema2Java.java b/sqlschema2java-maven-plugin/src/main/java/dev/sassine/api/maven/plugin/start/SqlSchema2Java.java index ce33952..89d44e7 100644 --- a/sqlschema2java-maven-plugin/src/main/java/dev/sassine/api/maven/plugin/start/SqlSchema2Java.java +++ b/sqlschema2java-maven-plugin/src/main/java/dev/sassine/api/maven/plugin/start/SqlSchema2Java.java @@ -1,4 +1,7 @@ package dev.sassine.api.maven.plugin.start; +import static dev.sassine.api.structure.Sqlschema2Java.generate; +import static java.lang.String.format; + import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; @@ -7,9 +10,7 @@ import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; -import dev.sassine.api.structure.Sqlschema2Java; - -@Mojo(name = "sqlschema2java", defaultPhase = LifecyclePhase.NONE) +@Mojo(name = "generate", defaultPhase = LifecyclePhase.NONE) public class SqlSchema2Java extends AbstractMojo { @Parameter(defaultValue = "${project}", required = true, readonly = true) @@ -27,15 +28,10 @@ public class SqlSchema2Java extends AbstractMojo { @Parameter(property = "sql.type.auto.increment.enabled" , defaultValue = "true", required = false, readonly = true) Boolean useAutoIncrement; - @Parameter(property = "log.debug.enabled" , defaultValue = "false", required = false, readonly = true) - String debugEnabled; - - public void execute() throws MojoExecutionException, MojoFailureException { - getLog().info(" "); - Sqlschema2Java.generate(sourceDirectory, isPostgres, useAutoIncrement,packageName); - getLog().info(" "); + getLog().info(format(" packageName %s - sourceDirectory %s - isPostgres %s - useAutoIncrement %s", sourceDirectory, packageName, isPostgres, useAutoIncrement)); + generate(sourceDirectory, isPostgres, useAutoIncrement, packageName); } } From 13e8152602ccdb4856bf1dcb7d484261ebd6012c Mon Sep 17 00:00:00 2001 From: Sassine El-Asmar Date: Fri, 15 Apr 2022 14:35:01 -0300 Subject: [PATCH 3/4] feature: Adding @JsonDeserialize Local-DateTime/Date/Time in DTO --- sqlschema2java-core/pom.xml | 6 ++++ .../builder/factory/impl/DTOFactory.java | 8 ++--- .../builder/function/ImportBeanFunction.java | 30 ++++++++++++++++++- 3 files changed, 39 insertions(+), 5 deletions(-) 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)))); + } + } } From 0b583aafae40a3a9927bb2dc858da51f9ad115f9 Mon Sep 17 00:00:00 2001 From: Sassine El-Asmar Date: Fri, 15 Apr 2022 15:43:00 -0300 Subject: [PATCH 4/4] version: 1.0.0-beta1 --- pom.xml | 2 +- sqlschema2java-core/pom.xml | 2 +- .../export/builder/factory/impl/EntityFactory.java | 10 ++++++++++ sqlschema2java-example/pom.xml | 4 ++-- sqlschema2java-maven-plugin/pom.xml | 4 ++-- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index cf5f2a1..f4957b8 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 sqlschema2java - 1.0.0-SNAPSHOT + 1.0.0-beta1 sqlschema2java pom dev.sassine.api diff --git a/sqlschema2java-core/pom.xml b/sqlschema2java-core/pom.xml index ab1983e..fc20ddd 100644 --- a/sqlschema2java-core/pom.xml +++ b/sqlschema2java-core/pom.xml @@ -6,7 +6,7 @@ dev.sassine.api sqlschema2java-core - 1.0.1-SNAPSHOT + 1.0.0-beta1 sqlschema2java-core Auto generate Class DTO, Entity and Repository from SQL Query. diff --git a/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/factory/impl/EntityFactory.java b/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/factory/impl/EntityFactory.java index f5d6e25..c425317 100644 --- a/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/factory/impl/EntityFactory.java +++ b/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/factory/impl/EntityFactory.java @@ -6,6 +6,7 @@ import static java.lang.reflect.Modifier.PRIVATE; import static java.lang.reflect.Modifier.PUBLIC; import static java.util.Optional.ofNullable; +import static org.apache.commons.lang3.StringUtils.isNotBlank; import static org.apache.logging.log4j.LogManager.getLogger; import javax.persistence.Column; @@ -20,6 +21,7 @@ import org.burningwave.core.classes.TypeDeclarationSourceGenerator; import org.burningwave.core.classes.UnitSourceGenerator; import org.burningwave.core.classes.VariableSourceGenerator; +import org.hibernate.annotations.ColumnDefault; import dev.sassine.api.structure.export.builder.factory.Factory; import dev.sassine.api.structure.model.java.EntityModel; @@ -51,6 +53,7 @@ public void execute(EntityModel entityModel, boolean isAutoGenerated, String nam entityModel.getFields().forEach(fieldModel -> { VariableSourceGenerator field = this.buildField(fieldModel); importJavaTime(gen, fieldModel); + this.setDefaultValue(field,fieldModel); this.generateEntityPK(isAutoGenerated, fieldModel, field, entityModel); log.debug("Generated EntityPK"); clEntity.addField(field); @@ -61,6 +64,13 @@ public void execute(EntityModel entityModel, boolean isAutoGenerated, String nam log.debug("ClassEntity ({}) stored", nameClass); } + private void setDefaultValue(VariableSourceGenerator field, FieldModel fieldModel) { + if(isNotBlank(fieldModel.getDefaultValue())) { + field.addAnnotation(AnnotationSourceGenerator.create(ColumnDefault.class).addParameter("value", + VariableSourceGenerator.create(format(FORMAT_STRING_FIELDS, fieldModel.getDefaultValue())))); + } + } + private ClassSourceGenerator buildClassSource(EntityModel entityModel, String nameClass) { return ClassSourceGenerator .create(TypeDeclarationSourceGenerator.create(format(FORMAT_ENTITY_CLASSNAME, nameClass))) diff --git a/sqlschema2java-example/pom.xml b/sqlschema2java-example/pom.xml index 9967671..de957c9 100644 --- a/sqlschema2java-example/pom.xml +++ b/sqlschema2java-example/pom.xml @@ -5,7 +5,7 @@ 4.0.0 dev.sasine.api sqlschema2java-example - 1.0.0-SNAPSHOT + 1.0.0-beta1 pom @@ -33,7 +33,7 @@ dev.sassine.api sqlschema2java-maven-plugin - 1.0.1-SNAPSHOT + 1.0.0-beta1 diff --git a/sqlschema2java-maven-plugin/pom.xml b/sqlschema2java-maven-plugin/pom.xml index 1c75c88..b45d306 100644 --- a/sqlschema2java-maven-plugin/pom.xml +++ b/sqlschema2java-maven-plugin/pom.xml @@ -6,7 +6,7 @@ 4.0.0 dev.sassine.api sqlschema2java-maven-plugin - 1.0.1-SNAPSHOT + 1.0.0-beta1 sqlschema2java-maven-plugin maven-plugin @@ -81,7 +81,7 @@ - 1.0.1-SNAPSHOT + 1.0.0-beta1 1.8 1.8 3.6.2