diff --git a/pom.xml b/pom.xml index cdba52f..8597ae8 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ 4.0.0 http-server - 0.2.30 + 0.2.31 HttpServer jar diff --git a/src/main/java/info/unterrainer/commons/httpserver/AddonBuilder.java b/src/main/java/info/unterrainer/commons/httpserver/AddonBuilder.java index 3804482..c6738e8 100644 --- a/src/main/java/info/unterrainer/commons/httpserver/AddonBuilder.java +++ b/src/main/java/info/unterrainer/commons/httpserver/AddonBuilder.java @@ -25,12 +25,12 @@ public class AddonBuilder

{ private final GenericHandlerGroupBuilder builder; - public GenericHandlerGroupBuilder postDeleteAsync(final PostDeleteAsync delegate) { + public GenericHandlerGroupBuilder postDeleteAsync(final PostDeleteAsync

delegate) { builder.extensions.postDeleteAsync().add(delegate); return builder; } - public GenericHandlerGroupBuilder postDeleteSync(final PostDeleteSync delegate) { + public GenericHandlerGroupBuilder postDeleteSync(final PostDeleteSync delegate) { builder.extensions.postDeleteSync().add(delegate); return builder; } @@ -75,12 +75,12 @@ public GenericHandlerGroupBuilder postModifySync(final PostModifySync

preDeleteAsync(final PreDeleteAsync delegate) { + public GenericHandlerGroupBuilder preDeleteAsync(final PreDeleteAsync

delegate) { builder.extensions.preDeleteAsync().add(delegate); return builder; } - public GenericHandlerGroupBuilder preDeleteSync(final PreDeleteSync delegate) { + public GenericHandlerGroupBuilder preDeleteSync(final PreDeleteSync delegate) { builder.extensions.preDeleteSync().add(delegate); return builder; } diff --git a/src/main/java/info/unterrainer/commons/httpserver/GenericHandlerGroup.java b/src/main/java/info/unterrainer/commons/httpserver/GenericHandlerGroup.java index 69db800..26a90ff 100644 --- a/src/main/java/info/unterrainer/commons/httpserver/GenericHandlerGroup.java +++ b/src/main/java/info/unterrainer/commons/httpserver/GenericHandlerGroup.java @@ -5,6 +5,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map.Entry; +import java.util.Set; import java.util.concurrent.ExecutorService; import info.unterrainer.commons.httpserver.daos.CoreDao; @@ -211,11 +212,14 @@ private void delete(final Context ctx) { Long id = hu.checkAndGetId(ctx); DaoTransaction transaction = dao.getTransactionManager().beginTransaction(ctx); - id = extensions.runPreDelete(ctx, makeAsyncExtensionContextFor(ctx), transaction.getManager(), id, + Set tenants = hu.getReadTenantIdsFrom(ctx); + P jpa = dao.getById(transaction.getManager(), id, tenants); + id = extensions.runPreDelete(ctx, makeAsyncExtensionContextFor(ctx), transaction.getManager(), id, jpa, executorService); dao.delete(transaction.getManager(), id, hu.getReadTenantIdsFrom(ctx)); ctx.status(204); - extensions.runPostDelete(ctx, makeAsyncExtensionContextFor(ctx), transaction.getManager(), id, executorService); + extensions.runPostDelete(ctx, makeAsyncExtensionContextFor(ctx), transaction.getManager(), id, jpa, + executorService); transaction.end(); } diff --git a/src/main/java/info/unterrainer/commons/httpserver/HandlerExtensions.java b/src/main/java/info/unterrainer/commons/httpserver/HandlerExtensions.java index 4706368..d6ac373 100644 --- a/src/main/java/info/unterrainer/commons/httpserver/HandlerExtensions.java +++ b/src/main/java/info/unterrainer/commons/httpserver/HandlerExtensions.java @@ -36,8 +36,8 @@ @Accessors(fluent = true) public class HandlerExtensions

{ - private final List postDeleteAsync = new ArrayList<>(); - private final List> postDeleteSync = new ArrayList<>(); + private final List> postDeleteAsync = new ArrayList<>(); + private final List> postDeleteSync = new ArrayList<>(); private final List> postGetListAsync = new ArrayList<>(); private final List> postGetListSync = new ArrayList<>(); private final List> postGetSingleAsync = new ArrayList<>(); @@ -46,8 +46,8 @@ public class HandlerExtensions

{ private final List> postInsertSync = new ArrayList<>(); private final List> postModifyAsync = new ArrayList<>(); private final List> postModifySync = new ArrayList<>(); - private final List preDeleteAsync = new ArrayList<>(); - private final List> preDeleteSync = new ArrayList<>(); + private final List> preDeleteAsync = new ArrayList<>(); + private final List> preDeleteSync = new ArrayList<>(); private final List> preInsertAsync = new ArrayList<>(); private final List> preInsertSync = new ArrayList<>(); private final List> preModifyAsync = new ArrayList<>(); @@ -143,13 +143,13 @@ public J runPostModify(final Context ctx, final AsyncExtensionContext asyncCtx, } public Long runPreDelete(final Context ctx, final AsyncExtensionContext asyncCtx, final E entityManager, - final Long receivedId, final ExecutorService executorService) { - for (PreDeleteAsync h : preDeleteAsync()) - executorService.execute(() -> h.handle(asyncCtx, receivedId)); + final Long receivedId, final P jpaToDelete, final ExecutorService executorService) { + for (PreDeleteAsync

h : preDeleteAsync()) + executorService.execute(() -> h.handle(asyncCtx, receivedId, jpaToDelete)); Long result = receivedId; - for (PreDeleteSync h : preDeleteSync()) { - result = h.handle(ctx, entityManager, receivedId); + for (PreDeleteSync h : preDeleteSync()) { + result = h.handle(ctx, entityManager, receivedId, jpaToDelete); if (result == null) throw new GracefulCancelationException(); } @@ -157,12 +157,12 @@ public Long runPreDelete(final Context ctx, final AsyncExtensionContext asyncCtx } public void runPostDelete(final Context ctx, final AsyncExtensionContext asyncCtx, final E entityManager, - final Long receivedId, final ExecutorService executorService) { - for (PostDeleteAsync h : postDeleteAsync()) - executorService.execute(() -> h.handle(asyncCtx, receivedId)); + final Long receivedId, final P deletedJpa, final ExecutorService executorService) { + for (PostDeleteAsync

h : postDeleteAsync()) + executorService.execute(() -> h.handle(asyncCtx, receivedId, deletedJpa)); - for (PostDeleteSync h : postDeleteSync()) - if (!h.handle(ctx, entityManager, receivedId)) + for (PostDeleteSync h : postDeleteSync()) + if (!h.handle(ctx, entityManager, receivedId, deletedJpa)) throw new GracefulCancelationException(); } } diff --git a/src/main/java/info/unterrainer/commons/httpserver/extensions/delegates/PostDeleteAsync.java b/src/main/java/info/unterrainer/commons/httpserver/extensions/delegates/PostDeleteAsync.java index 4393293..572cedb 100644 --- a/src/main/java/info/unterrainer/commons/httpserver/extensions/delegates/PostDeleteAsync.java +++ b/src/main/java/info/unterrainer/commons/httpserver/extensions/delegates/PostDeleteAsync.java @@ -1,8 +1,9 @@ package info.unterrainer.commons.httpserver.extensions.delegates; import info.unterrainer.commons.httpserver.extensions.AsyncExtensionContext; +import info.unterrainer.commons.rdbutils.entities.BasicJpa; -public interface PostDeleteAsync { +public interface PostDeleteAsync

{ /** * Allows you to execute code after the deletion of an item. @@ -10,10 +11,11 @@ public interface PostDeleteAsync { * Since this is asynchronous changing the DTOs will do nothing (runs in * parallel and the action probably already happened when your code is * executed). - * + * * @param asyncCtx a context containing values that have been mapped using * AsyncExtensionContextMappers * @param receivedId the ID of the item that was deleted + * @param deletedJpa the JPA that was deleted */ - void handle(AsyncExtensionContext asyncCtx, Long receivedId); + void handle(AsyncExtensionContext asyncCtx, Long receivedId, P deletedJpa); } diff --git a/src/main/java/info/unterrainer/commons/httpserver/extensions/delegates/PostDeleteSync.java b/src/main/java/info/unterrainer/commons/httpserver/extensions/delegates/PostDeleteSync.java index 1cd51af..dcd0b78 100644 --- a/src/main/java/info/unterrainer/commons/httpserver/extensions/delegates/PostDeleteSync.java +++ b/src/main/java/info/unterrainer/commons/httpserver/extensions/delegates/PostDeleteSync.java @@ -1,8 +1,9 @@ package info.unterrainer.commons.httpserver.extensions.delegates; +import info.unterrainer.commons.rdbutils.entities.BasicJpa; import io.javalin.http.Context; -public interface PostDeleteSync { +public interface PostDeleteSync

{ /** * Allows you to execute code after the deletion of an item.
@@ -15,8 +16,9 @@ public interface PostDeleteSync { * @param entityManager the entity-manager you can use to get the active * transaction, if any * @param receivedId the ID of the item that was deleted + * @param deletedJpa the JPA that was deleted * @return true, if the handler-chain should be continued to be processed, false * otherwise. */ - boolean handle(Context ctx, E entityManager, Long receivedId); + boolean handle(Context ctx, E entityManager, Long receivedId, P deletedJpa); } diff --git a/src/main/java/info/unterrainer/commons/httpserver/extensions/delegates/PreDeleteAsync.java b/src/main/java/info/unterrainer/commons/httpserver/extensions/delegates/PreDeleteAsync.java index be3730b..4abb43e 100644 --- a/src/main/java/info/unterrainer/commons/httpserver/extensions/delegates/PreDeleteAsync.java +++ b/src/main/java/info/unterrainer/commons/httpserver/extensions/delegates/PreDeleteAsync.java @@ -1,8 +1,9 @@ package info.unterrainer.commons.httpserver.extensions.delegates; import info.unterrainer.commons.httpserver.extensions.AsyncExtensionContext; +import info.unterrainer.commons.rdbutils.entities.BasicJpa; -public interface PreDeleteAsync { +public interface PreDeleteAsync

{ /** * Allows you to execute code before deletion of an item. @@ -10,10 +11,11 @@ public interface PreDeleteAsync { * Since this is asynchronous changing the DTOs will do nothing (runs in * parallel and the action probably already happened when your code is * executed). - * - * @param asyncCtx a context containing values that have been mapped using - * AsyncExtensionContextMappers - * @param receivedId the ID of the item that is about to get deleted + * + * @param asyncCtx a context containing values that have been mapped using + * AsyncExtensionContextMappers + * @param receivedId the ID of the item that is about to get deleted + * @param jpaToDelete the JPA to delete */ - void handle(AsyncExtensionContext asyncCtx, Long receivedId); + void handle(AsyncExtensionContext asyncCtx, Long receivedId, P jpaToDelete); } diff --git a/src/main/java/info/unterrainer/commons/httpserver/extensions/delegates/PreDeleteSync.java b/src/main/java/info/unterrainer/commons/httpserver/extensions/delegates/PreDeleteSync.java index f9bc5c4..322b323 100644 --- a/src/main/java/info/unterrainer/commons/httpserver/extensions/delegates/PreDeleteSync.java +++ b/src/main/java/info/unterrainer/commons/httpserver/extensions/delegates/PreDeleteSync.java @@ -1,8 +1,9 @@ package info.unterrainer.commons.httpserver.extensions.delegates; +import info.unterrainer.commons.rdbutils.entities.BasicJpa; import io.javalin.http.Context; -public interface PreDeleteSync { +public interface PreDeleteSync

{ /** * Allows you to execute code before the deletion of an item.
@@ -15,7 +16,8 @@ public interface PreDeleteSync { * @param entityManager the entity-manager you can use to get the active * transaction, if any * @param receivedId the ID of the item that is about to get deleted + * @param jpaToDelete the JPA to delete * @return the ID of the item that is about to get deleted */ - Long handle(Context ctx, E entityManager, Long receivedId); + Long handle(Context ctx, E entityManager, Long receivedId, P jpaToDelete); } diff --git a/src/test/java/info/unterrainer/commons/httpserver/scripts/LocalTestServer.java b/src/test/java/info/unterrainer/commons/httpserver/scripts/LocalTestServer.java index e792df4..1ec1cec 100644 --- a/src/test/java/info/unterrainer/commons/httpserver/scripts/LocalTestServer.java +++ b/src/test/java/info/unterrainer/commons/httpserver/scripts/LocalTestServer.java @@ -57,7 +57,7 @@ private static void startServer() { return resultJpa; }) .extension() - .preDeleteSync((ctx, em, receivedId) -> { + .preDeleteSync((ctx, em, receivedId, deletedJpa) -> { log.info("before delete id:[{}]", receivedId); return receivedId; }) @@ -77,7 +77,7 @@ private static void startServer() { return responseList; }) .extension() - .postDeleteSync((ctx, em, receivedId) -> { + .postDeleteSync((ctx, em, receivedId, deletedJpa) -> { log.info("after delete"); return true; }) @@ -105,7 +105,7 @@ private static void startServer() { return resultJpa; }) .extension() - .preDeleteSync((ctx, em, receivedId) -> { + .preDeleteSync((ctx, em, receivedId, deletedJpa) -> { log.info("before delete id:[{}]", receivedId); return receivedId; }) @@ -125,7 +125,7 @@ private static void startServer() { return responseList; }) .extension() - .postDeleteSync((ctx, em, receivedId) -> { + .postDeleteSync((ctx, em, receivedId, deletedJpa) -> { log.info("after delete"); return true; })