From 31f915879256ba3915ab11d77ac6ad30873855ad Mon Sep 17 00:00:00 2001 From: Gerald Unterrainer Date: Fri, 30 Jul 2021 14:16:24 +0200 Subject: [PATCH] refactoring --- pom.xml | 2 +- .../commons/httpserver/daos/AsyncJpqlDao.java | 6 ++--- .../httpserver/daos/InsertQueryBuilder.java | 10 +------- .../commons/httpserver/daos/JpqlCoreDao.java | 15 ++++++------ .../commons/httpserver/daos/JpqlDao.java | 13 +++++++---- .../commons/httpserver/daos/TenantData.java | 23 ++++++++++--------- .../httpserver/jpas/BasicPermissionJpa.java | 18 +++++++++++++++ .../scripts/jpas/TestPermissionJpa.java | 7 ++---- 8 files changed, 53 insertions(+), 41 deletions(-) create mode 100644 src/main/java/info/unterrainer/commons/httpserver/jpas/BasicPermissionJpa.java diff --git a/pom.xml b/pom.xml index d92c31d..6f89b5a 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ 4.0.0 http-server - 0.2.28 + 0.2.29 HttpServer jar diff --git a/src/main/java/info/unterrainer/commons/httpserver/daos/AsyncJpqlDao.java b/src/main/java/info/unterrainer/commons/httpserver/daos/AsyncJpqlDao.java index 30aed5c..00d54e5 100644 --- a/src/main/java/info/unterrainer/commons/httpserver/daos/AsyncJpqlDao.java +++ b/src/main/java/info/unterrainer/commons/httpserver/daos/AsyncJpqlDao.java @@ -2,8 +2,8 @@ import javax.persistence.EntityManagerFactory; +import info.unterrainer.commons.httpserver.jpas.BasicPermissionJpa; import info.unterrainer.commons.rdbutils.entities.BasicAsyncJpa; -import info.unterrainer.commons.rdbutils.entities.BasicJpa; public class AsyncJpqlDao

extends BasicJpqlDao

{ @@ -21,7 +21,7 @@ public class AsyncJpqlDao

extends BasicJpqlDao

{ * @param tenantJpaType the JPA of the tenant-permission table associated */ public AsyncJpqlDao(final EntityManagerFactory emf, final Class

type, - final Class tenantJpaType) { + final Class tenantJpaType) { super(emf, type); this.coreDao.tenantData = new TenantData(tenantJpaType); } @@ -42,7 +42,7 @@ public AsyncJpqlDao(final EntityManagerFactory emf, final Class

type, * @param tenantIdFieldName the name of the field holding the tenant-ID */ public AsyncJpqlDao(final EntityManagerFactory emf, final Class

type, - final Class tenantJpaType, final String tenantReferenceFieldName, + final Class tenantJpaType, final String tenantReferenceFieldName, final String tenantIdFieldName) { super(emf, type); this.coreDao.tenantData = new TenantData(tenantJpaType, tenantReferenceFieldName, tenantIdFieldName); diff --git a/src/main/java/info/unterrainer/commons/httpserver/daos/InsertQueryBuilder.java b/src/main/java/info/unterrainer/commons/httpserver/daos/InsertQueryBuilder.java index 89dfad0..ce637f1 100644 --- a/src/main/java/info/unterrainer/commons/httpserver/daos/InsertQueryBuilder.java +++ b/src/main/java/info/unterrainer/commons/httpserver/daos/InsertQueryBuilder.java @@ -1,11 +1,9 @@ package info.unterrainer.commons.httpserver.daos; -import java.time.LocalDateTime; import java.util.function.Function; import javax.persistence.EntityManager; -import info.unterrainer.commons.jreutils.DateUtils; import info.unterrainer.commons.rdbutils.Transactions; import info.unterrainer.commons.rdbutils.entities.BasicJpa; import lombok.Getter; @@ -31,12 +29,6 @@ protected V withEntityManager(final Function func) { * @return the entity after insertion */ public P execute() { - return withEntityManager(em -> { - LocalDateTime time = DateUtils.nowUtc(); - entity.setCreatedOn(time); - entity.setEditedOn(time); - em.persist(entity); - return entity; - }); + return withEntityManager(em -> dao.coreDao.create(em, entity, writeTenantIds)); } } diff --git a/src/main/java/info/unterrainer/commons/httpserver/daos/JpqlCoreDao.java b/src/main/java/info/unterrainer/commons/httpserver/daos/JpqlCoreDao.java index ed52174..d8bd52d 100644 --- a/src/main/java/info/unterrainer/commons/httpserver/daos/JpqlCoreDao.java +++ b/src/main/java/info/unterrainer/commons/httpserver/daos/JpqlCoreDao.java @@ -21,6 +21,7 @@ import info.unterrainer.commons.httpserver.exceptions.ForbiddenException; import info.unterrainer.commons.httpserver.exceptions.InternalServerErrorException; +import info.unterrainer.commons.httpserver.jpas.BasicPermissionJpa; import info.unterrainer.commons.httpserver.jsons.ListJson; import info.unterrainer.commons.jreutils.DateUtils; import info.unterrainer.commons.rdbutils.entities.BasicJpa; @@ -61,7 +62,7 @@ public P create(final EntityManager em, final P entity, final Set tenantId if (hasTenantData()) try { for (Long tenantId : tenantIds) { - BasicJpa tenantJpa = tenantData.getType().getConstructor().newInstance(); + BasicPermissionJpa tenantJpa = tenantData.getPermissionJpaType().getConstructor().newInstance(); tenantData.getReferenceSetMethod().invoke(tenantJpa, entity.getId()); tenantData.getTenantIdSetMethod().invoke(tenantJpa, tenantId); @@ -71,8 +72,8 @@ public P create(final EntityManager em, final P entity, final Set tenantId } } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { - throw new InternalServerErrorException( - String.format("Error creating permission-entry in [%s]", tenantData.getType().getSimpleName())); + throw new InternalServerErrorException(String.format("Error creating permission-entry in [%s]", + tenantData.getPermissionJpaType().getSimpleName())); } return entity; } @@ -233,8 +234,8 @@ private String addTenantJoin(final String joinClause) { if (joinClause == null || joinClause.isBlank()) r = ""; - r += String.format(" LEFT JOIN %s tenantTable on o.id = tenantTable.%s", tenantData.getType().getSimpleName(), - tenantData.getMainTableIdReferenceField()); + r += String.format(" LEFT JOIN %s tenantTable on o.id = tenantTable.%s", + tenantData.getPermissionJpaType().getSimpleName(), tenantData.getMainTableIdReferenceField()); return r; } @@ -266,8 +267,8 @@ private Map addTenantParams(final Map map, final } private boolean hasTenantData() { - return tenantData != null && tenantData.getType() != null && tenantData.getMainTableIdReferenceField() != null - && tenantData.getTenantIdField() != null; + return tenantData != null && tenantData.getPermissionJpaType() != null + && tenantData.getMainTableIdReferenceField() != null && tenantData.getTenantIdField() != null; } private boolean isSet(final String str) { diff --git a/src/main/java/info/unterrainer/commons/httpserver/daos/JpqlDao.java b/src/main/java/info/unterrainer/commons/httpserver/daos/JpqlDao.java index 4d667f9..72341d7 100644 --- a/src/main/java/info/unterrainer/commons/httpserver/daos/JpqlDao.java +++ b/src/main/java/info/unterrainer/commons/httpserver/daos/JpqlDao.java @@ -4,6 +4,7 @@ import javax.persistence.EntityManagerFactory; +import info.unterrainer.commons.httpserver.jpas.BasicPermissionJpa; import info.unterrainer.commons.rdbutils.entities.BasicJpa; import io.javalin.http.Context; @@ -22,7 +23,8 @@ public class JpqlDao

extends BasicJpqlDao

{ * @param type the return-type of the query (the underlying JPA) * @param tenantJpaType the JPA of the tenant-permission table associated */ - public JpqlDao(final EntityManagerFactory emf, final Class

type, final Class tenantJpaType) { + public JpqlDao(final EntityManagerFactory emf, final Class

type, + final Class tenantJpaType) { super(emf, type); this.coreDao.tenantData = new TenantData(tenantJpaType); } @@ -45,7 +47,7 @@ public JpqlDao(final EntityManagerFactory emf, final Class

type, final Class< * associated */ public JpqlDao(final Function entityManagerFactorySupplier, final Class

type, - final Class tenantJpaType) { + final Class tenantJpaType) { super(entityManagerFactorySupplier, type); this.coreDao.tenantData = new TenantData(tenantJpaType); } @@ -65,8 +67,9 @@ public JpqlDao(final Function entityManagerFactor * to the main-table-id * @param tenantIdFieldName the name of the field holding the tenant-ID */ - public JpqlDao(final EntityManagerFactory emf, final Class

type, final Class tenantJpaType, - final String tenantReferenceFieldName, final String tenantIdFieldName) { + public JpqlDao(final EntityManagerFactory emf, final Class

type, + final Class tenantJpaType, final String tenantReferenceFieldName, + final String tenantIdFieldName) { super(emf, type); this.coreDao.tenantData = new TenantData(tenantJpaType, tenantReferenceFieldName, tenantIdFieldName); } @@ -90,7 +93,7 @@ public JpqlDao(final EntityManagerFactory emf, final Class

type, final Class< * tenant-ID */ public JpqlDao(final Function entityManagerFactorySupplier, final Class

type, - final Class tenantJpaType, final String tenantReferenceFieldName, + final Class tenantJpaType, final String tenantReferenceFieldName, final String tenantIdFieldName) { super(entityManagerFactorySupplier, type); this.coreDao.tenantData = new TenantData(tenantJpaType, tenantReferenceFieldName, tenantIdFieldName); diff --git a/src/main/java/info/unterrainer/commons/httpserver/daos/TenantData.java b/src/main/java/info/unterrainer/commons/httpserver/daos/TenantData.java index ca7394c..7456609 100644 --- a/src/main/java/info/unterrainer/commons/httpserver/daos/TenantData.java +++ b/src/main/java/info/unterrainer/commons/httpserver/daos/TenantData.java @@ -3,13 +3,13 @@ import java.lang.reflect.Method; import info.unterrainer.commons.httpserver.exceptions.InternalServerErrorException; -import info.unterrainer.commons.rdbutils.entities.BasicJpa; +import info.unterrainer.commons.httpserver.jpas.BasicPermissionJpa; import lombok.Getter; public class TenantData { @Getter - private Class type; + private Class permissionJpaType; @Getter private String mainTableIdReferenceField = "referenceId"; @Getter @@ -18,15 +18,15 @@ public class TenantData { private Method referenceSetMethod; private Method tenantIdSetMethod; - public TenantData(final Class type) { + public TenantData(final Class permissionJpaType) { super(); - this.type = type; + this.permissionJpaType = permissionJpaType; } - public TenantData(final Class type, final String mainTableIdReferenceField, - final String tenantIdField) { + public TenantData(final Class permissionJpaType, + final String mainTableIdReferenceField, final String tenantIdField) { super(); - this.type = type; + this.permissionJpaType = permissionJpaType; this.mainTableIdReferenceField = mainTableIdReferenceField; this.tenantIdField = tenantIdField; } @@ -34,10 +34,11 @@ public TenantData(final Class type, final String mainTableId public Method getReferenceSetMethod() { if (referenceSetMethod == null) try { - referenceSetMethod = type.getMethod("set" + capitalize(mainTableIdReferenceField), Long.class); + referenceSetMethod = permissionJpaType.getMethod("set" + capitalize(mainTableIdReferenceField), + Long.class); } catch (NoSuchMethodException | SecurityException e) { throw new InternalServerErrorException( - String.format("Error creating permission-entry in [%s]", type.getSimpleName()), e); + String.format("Error creating permission-entry in [%s]", permissionJpaType.getSimpleName()), e); } return referenceSetMethod; } @@ -45,10 +46,10 @@ public Method getReferenceSetMethod() { public Method getTenantIdSetMethod() { if (tenantIdSetMethod == null) try { - tenantIdSetMethod = type.getMethod("set" + capitalize(tenantIdField), Long.class); + tenantIdSetMethod = permissionJpaType.getMethod("set" + capitalize(tenantIdField), Long.class); } catch (NoSuchMethodException | SecurityException e) { throw new InternalServerErrorException( - String.format("Error creating permission-entry in [%s]", type.getSimpleName()), e); + String.format("Error creating permission-entry in [%s]", permissionJpaType.getSimpleName()), e); } return tenantIdSetMethod; } diff --git a/src/main/java/info/unterrainer/commons/httpserver/jpas/BasicPermissionJpa.java b/src/main/java/info/unterrainer/commons/httpserver/jpas/BasicPermissionJpa.java new file mode 100644 index 0000000..4752bf6 --- /dev/null +++ b/src/main/java/info/unterrainer/commons/httpserver/jpas/BasicPermissionJpa.java @@ -0,0 +1,18 @@ +package info.unterrainer.commons.httpserver.jpas; + +import javax.persistence.MappedSuperclass; + +import info.unterrainer.commons.rdbutils.entities.BasicJpa; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Data +@NoArgsConstructor +@SuperBuilder(toBuilder = true) +@MappedSuperclass +public class BasicPermissionJpa extends BasicJpa { + + private Long referenceId; + private Long tenantId; +} diff --git a/src/test/java/info/unterrainer/commons/httpserver/scripts/jpas/TestPermissionJpa.java b/src/test/java/info/unterrainer/commons/httpserver/scripts/jpas/TestPermissionJpa.java index bc4495e..80320de 100644 --- a/src/test/java/info/unterrainer/commons/httpserver/scripts/jpas/TestPermissionJpa.java +++ b/src/test/java/info/unterrainer/commons/httpserver/scripts/jpas/TestPermissionJpa.java @@ -3,7 +3,7 @@ import javax.persistence.Entity; import javax.persistence.Table; -import info.unterrainer.commons.rdbutils.entities.BasicJpa; +import info.unterrainer.commons.httpserver.jpas.BasicPermissionJpa; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @@ -15,8 +15,5 @@ @SuperBuilder(toBuilder = true) @Entity @Table(name = "test_permission") -public class TestPermissionJpa extends BasicJpa { - - private Long referenceId; - private Long tenantId; +public class TestPermissionJpa extends BasicPermissionJpa { }