From 017851805d280a7cccc7eaba81300679d76c9d83 Mon Sep 17 00:00:00 2001
From: Daniel Gerhardt <code@dgerhardt.net>
Date: Sat, 21 Jul 2018 16:45:10 +0200
Subject: [PATCH] Add finalize methods which are run after create/update

These methods allow additonal application logic based on an created/
updated entity.
---
 .../services/DefaultEntityServiceImpl.java    | 28 +++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/services/DefaultEntityServiceImpl.java b/src/main/java/de/thm/arsnova/services/DefaultEntityServiceImpl.java
index b4a1391f9..2602578dd 100644
--- a/src/main/java/de/thm/arsnova/services/DefaultEntityServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/services/DefaultEntityServiceImpl.java
@@ -69,9 +69,12 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService
 			throw new IllegalArgumentException("Entity is not new.");
 		}
 		entity.setCreationTimestamp(new Date());
+
 		prepareCreate(entity);
+		final T createdEntity = repository.save(entity);
+		finalizeCreate(entity);
 
-		return repository.save(entity);
+		return createdEntity;
 	}
 
 	/**
@@ -83,6 +86,15 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService
 
 	}
 
+	/**
+	 * This method can be overridden by subclasses to modify the entity after creation.
+	 *
+	 * @param entity The entity which has been created
+	 */
+	protected void finalizeCreate(final T entity) {
+
+	}
+
 	public T update(final T entity) {
 		return update(repository.findOne(entity.getId()), entity);
 	}
@@ -92,9 +104,12 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService
 	public T update(final T oldEntity, final T newEntity) {
 		newEntity.setId(oldEntity.getId());
 		newEntity.setUpdateTimestamp(new Date());
+
 		prepareUpdate(newEntity);
+		final T updatedEntity = repository.save(newEntity);
+		finalizeUpdate(updatedEntity);
 
-		return repository.save(newEntity);
+		return updatedEntity;
 	}
 
 	/**
@@ -106,6 +121,15 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService
 
 	}
 
+	/**
+	 * This method can be overridden by subclasses to modify the entity after updating.
+	 *
+	 * @param entity The entity which has been updated
+	 */
+	protected void finalizeUpdate(final T entity) {
+
+	}
+
 	@Override
 	public T patch(final T entity, final Map<String, Object> changes) throws IOException {
 		return patch(entity, changes, Function.identity());
-- 
GitLab