From 589c9c5cd84fafe4462c58e60b98ac8ca06717db Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Tue, 25 Jun 2013 10:48:04 +0200
Subject: [PATCH] OO-637: reload the catalog entry before deleting it, and
 check if it always exists

---
 .../java/org/olat/catalog/CatalogManager.java | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/src/main/java/org/olat/catalog/CatalogManager.java b/src/main/java/org/olat/catalog/CatalogManager.java
index f5179a0cc02..ef0d67f3d61 100644
--- a/src/main/java/org/olat/catalog/CatalogManager.java
+++ b/src/main/java/org/olat/catalog/CatalogManager.java
@@ -292,16 +292,19 @@ public class CatalogManager extends BasicManager implements UserDataDeletable, I
 	 * @param ce
 	 */
 	public void deleteCatalogEntry(CatalogEntry ce) {
-		boolean debug = isLogDebugEnabled();
+		final boolean debug = isLogDebugEnabled();
 		if(debug) logDebug("deleteCatalogEntry start... ce=" + ce);
 		
 		if (ce.getType() == CatalogEntry.TYPE_LEAF) {
-			//delete catalog entry, then delete owner group
-			SecurityGroup owner = ce.getOwnerGroup();
-			dbInstance.getCurrentEntityManager().remove(ce);
-			if (owner != null) {
-				getLogger().debug("deleteCatalogEntry case_1: delete owner-group=" + owner);
-				securityManager.deleteSecurityGroup(owner);
+			//reload the detached catalog entry, delete it and then the owner group
+			ce = getCatalogEntryByKey(ce.getKey());
+			if(ce != null) {
+				SecurityGroup owner = ce.getOwnerGroup();
+				dbInstance.getCurrentEntityManager().remove(ce);
+				if (owner != null) {
+					getLogger().debug("deleteCatalogEntry case_1: delete owner-group=" + owner);
+					securityManager.deleteSecurityGroup(owner);
+				}
 			}
 		} else {
 			List<SecurityGroup> secGroupsToBeDeleted = new ArrayList<SecurityGroup>();
@@ -317,7 +320,7 @@ public class CatalogManager extends BasicManager implements UserDataDeletable, I
 			deleteCatalogSubtree(ce,secGroupsToBeDeleted);
 			// after deleting all entries, delete all secGroups corresponding
 			for (Iterator<SecurityGroup> iter = secGroupsToBeDeleted.iterator(); iter.hasNext();) {
-				SecurityGroup grp = (SecurityGroup) iter.next();
+				SecurityGroup grp = iter.next();
 				if(debug) logDebug("deleteCatalogEntry case_2: delete groups of deleteCatalogSubtree grp=" + grp);
 				securityManager.deleteSecurityGroup(grp);
 			}
-- 
GitLab