From e308f23b72fc2b232bfee37e66138fe9a9d9712c Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Wed, 22 Jan 2014 15:00:02 +0100
Subject: [PATCH] OO-948: load directly the resource in logging (seem caching
 to be better)

---
 .../olat/repository/RepositoryManager.java    | 27 +++++++++++++++----
 .../logging/activity/LoggingResourceable.java | 16 +++++------
 .../repository/RepositoryManagerTest.java     |  9 +++++++
 3 files changed, 39 insertions(+), 13 deletions(-)

diff --git a/src/main/java/org/olat/repository/RepositoryManager.java b/src/main/java/org/olat/repository/RepositoryManager.java
index b9a1a43141f..eca8ba317e4 100644
--- a/src/main/java/org/olat/repository/RepositoryManager.java
+++ b/src/main/java/org/olat/repository/RepositoryManager.java
@@ -477,11 +477,11 @@ public class RepositoryManager extends BasicManager {
 		}
 		StringBuilder query = new StringBuilder();
 		query.append("select v from ").append(RepositoryEntry.class.getName()).append(" as v ")
-				 .append(" inner join fetch v.olatResource as ores")
-				 .append(" left join fetch v.lifecycle as lifecycle")
-			   .append(" left join fetch v.ownerGroup as ownerGroup")
-			   .append(" left join fetch v.participantGroup as participantGroup")
-			   .append(" left join fetch v.tutorGroup as tutorGroup")
+		     .append(" inner join fetch v.olatResource as ores")
+		     .append(" left join fetch v.lifecycle as lifecycle")
+		     .append(" left join fetch v.ownerGroup as ownerGroup")
+		     .append(" left join fetch v.participantGroup as participantGroup")
+		     .append(" left join fetch v.tutorGroup as tutorGroup")
 		     .append(" where v.key = :repoKey");
 		
 		List<RepositoryEntry> entries = dbInstance.getCurrentEntityManager()
@@ -494,6 +494,23 @@ public class RepositoryManager extends BasicManager {
 		}
 		return entries.get(0);
 	}
+	
+	public OLATResource lookupRepositoryEntryResource(Long key) {
+		if (key == null) return null;
+		StringBuilder query = new StringBuilder();
+		query.append("select v.olatResource from ").append(RepositoryEntry.class.getName()).append(" as v ")
+		     .append(" where v.key = :repoKey");
+		
+		List<OLATResource> entries = dbInstance.getCurrentEntityManager()
+				.createQuery(query.toString(), OLATResource.class)
+				.setParameter("repoKey", key)
+				.setHint("org.hibernate.cacheable", Boolean.TRUE)
+				.getResultList();
+		if(entries.isEmpty()) {
+			return null;
+		}
+		return entries.get(0);
+	}
 
 	public List<RepositoryEntry> lookupRepositoryEntries(Collection<Long> keys) {
 		if (keys == null || keys.isEmpty()) {
diff --git a/src/main/java/org/olat/util/logging/activity/LoggingResourceable.java b/src/main/java/org/olat/util/logging/activity/LoggingResourceable.java
index ccc0f0abe5b..5bc7add13ce 100644
--- a/src/main/java/org/olat/util/logging/activity/LoggingResourceable.java
+++ b/src/main/java/org/olat/util/logging/activity/LoggingResourceable.java
@@ -197,6 +197,9 @@ public class LoggingResourceable implements ILoggingResourceable {
 		id_ = restrictStringLength(id, MAX_ID_LEN, "id", true);
 		name_ = restrictStringLength(name, MAX_NAME_LEN, "name", true);
 		resourceable_ = resourceable;
+		if(resourceableType != null && resourceableType.equals("RepositoryEntry")) {
+			System.out.println();
+		}
 		resourceableType_ = resourceableType;
 		this.ignorable = ignorable;
 	}
@@ -639,14 +642,11 @@ public class LoggingResourceable implements ILoggingResourceable {
 				// in which case all we have is the key of the repositoryentry and we must make a DB lookup to
 				// map the repo key to the corresponding olatresource 
 				
-				RepositoryEntry re = RepositoryManager.getInstance().lookupRepositoryEntry(ceResourceable.getResourceableId());
-				if (re!=null) {
-					OLATResource ores = re.getOlatResource();
-					if (ores!=null && 
-							ores.getResourceableTypeName().equals(resourceable_.getResourceableTypeName()) &&
-							ores.getResourceableId().equals(resourceable_.getResourceableId())) {
-						return true;
-					}
+				OLATResource ores = RepositoryManager.getInstance().lookupRepositoryEntryResource(ceResourceable.getResourceableId());
+				if (ores!=null  && 
+						ores.getResourceableTypeName().equals(resourceable_.getResourceableTypeName()) &&
+						ores.getResourceableId().equals(resourceable_.getResourceableId())) {
+					return true;
 				}
 				
 			}
diff --git a/src/test/java/org/olat/repository/RepositoryManagerTest.java b/src/test/java/org/olat/repository/RepositoryManagerTest.java
index 0f3cc78c852..369e33d2b22 100644
--- a/src/test/java/org/olat/repository/RepositoryManagerTest.java
+++ b/src/test/java/org/olat/repository/RepositoryManagerTest.java
@@ -196,6 +196,15 @@ public class RepositoryManagerTest extends OlatTestCase {
 		Assert.assertNotNull(displayName);
 		Assert.assertEquals(re.getDisplayname(), displayName);
 	}
+	@Test
+	public void lookupResource() {
+		RepositoryEntry re = JunitTestHelper.createAndPersistRepositoryEntry();
+		dbInstance.commitAndCloseSession();
+		
+		OLATResource resource = repositoryManager.lookupRepositoryEntryResource(re.getKey());
+		Assert.assertNotNull(resource);
+		Assert.assertEquals(re.getOlatResource(), resource);
+	}
 	
 	@Test
 	public void queryByOwnerLimitAccess() {
-- 
GitLab