From 2bd05a87e7b51dce975e72f2d41b5f1eeda5ad11 Mon Sep 17 00:00:00 2001 From: Daniel Gerhardt <code@dgerhardt.net> Date: Tue, 13 Mar 2018 15:26:16 +0100 Subject: [PATCH] Add "prepare" methods for DefaultEntityServiceImpl These methods allow to perform actions based on the entity before the CRUD operation is executed. --- .../services/DefaultEntityServiceImpl.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/main/java/de/thm/arsnova/services/DefaultEntityServiceImpl.java b/src/main/java/de/thm/arsnova/services/DefaultEntityServiceImpl.java index 0027ffa0a..45ef03c2b 100644 --- a/src/main/java/de/thm/arsnova/services/DefaultEntityServiceImpl.java +++ b/src/main/java/de/thm/arsnova/services/DefaultEntityServiceImpl.java @@ -69,19 +69,39 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService throw new IllegalArgumentException("Entity is not new."); } entity.setCreationTimestamp(new Date()); + prepareCreate(entity); return repository.save(entity); } + /** + * This method can be overridden by subclasses to modify the entity before creation. + * + * @param entity The entity to be created + */ + protected void prepareCreate(final T entity) { + + } + @Override @PreAuthorize("hasPermission(#oldEntity, 'update')") public T update(final T oldEntity, final T newEntity) { newEntity.setId(oldEntity.getId()); newEntity.setUpdateTimestamp(new Date()); + prepareUpdate(newEntity); return repository.save(newEntity); } + /** + * This method can be overridden by subclasses to modify the entity before updating. + * + * @param entity The entity to be updated + */ + protected void prepareUpdate(final T entity) { + + } + @Override public T patch(final T entity, final Map<String, Object> changes) throws IOException { return patch(entity, changes, Function.identity()); @@ -96,6 +116,7 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService JsonNode tree = objectMapper.valueToTree(changes); reader.readValue(tree); entity.setUpdateTimestamp(new Date()); + preparePatch(entity); return repository.save(entity); } @@ -115,17 +136,37 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService ObjectReader reader = objectMapper.readerForUpdating(obj).withView(View.Public.class); reader.readValue(tree); entity.setUpdateTimestamp(new Date()); + preparePatch(entity); } return repository.save(entities); } + /** + * This method can be overridden by subclasses to modify the entity before patching. By default, the implementation + * of {@link #prepareUpdate} is used. + * + * @param entity The entity to be patched + */ + protected void preparePatch(final T entity) { + prepareUpdate(entity); + } + @Override @PreAuthorize("hasPermission(#entity, 'delete')") public void delete(final T entity) { repository.delete(entity); } + /** + * This method can be overridden by subclasses to do additional entity related actions before deletion. + * + * @param entity The entity to be deleted + */ + protected void prepareDelete(final T entity) { + + } + public String getTypeName() { return type.getSimpleName().toLowerCase(); } -- GitLab