diff --git a/src/main/java/org/olat/course/MergedCourseContainer.java b/src/main/java/org/olat/course/MergedCourseContainer.java index 339658e18a540d7b92aeaacd99142e761bb9a8d3..d51771e3cadf642b8e176672cbf8e34896c798cc 100644 --- a/src/main/java/org/olat/course/MergedCourseContainer.java +++ b/src/main/java/org/olat/course/MergedCourseContainer.java @@ -19,6 +19,7 @@ */ package org.olat.course; +import org.olat.core.CoreSpringFactory; import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl; import org.olat.core.commons.services.webdav.servlets.RequestUtil; import org.olat.core.gui.components.tree.GenericTreeModel; @@ -45,7 +46,9 @@ import org.olat.course.run.userview.VisibleTreeFilter; import org.olat.modules.sharedfolder.SharedFolderManager; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; +import org.olat.repository.RepositoryService; import org.olat.repository.model.RepositoryEntrySecurity; +import org.olat.resource.OLATResource; /** * @@ -88,10 +91,10 @@ public class MergedCourseContainer extends MergeSource { OlatRootFolderImpl sharedFolder = null; String sfSoftkey = persistingCourse.getCourseConfig().getSharedFolderSoftkey(); if (StringHelper.containsNonWhitespace(sfSoftkey) && !CourseConfig.VALUE_EMPTY_SHAREDFOLDER_SOFTKEY.equals(sfSoftkey)) { - RepositoryManager rm = RepositoryManager.getInstance(); - RepositoryEntry re = rm.lookupRepositoryEntryBySoftkey(sfSoftkey, false); - if (re != null) { - sharedFolder = SharedFolderManager.getInstance().getSharedFolder(re.getOlatResource()); + OLATResource sharedResource = CoreSpringFactory.getImpl(RepositoryService.class) + .loadRepositoryEntryResourceBySoftKey(sfSoftkey); + if (sharedResource != null) { + sharedFolder = SharedFolderManager.getInstance().getSharedFolder(sharedResource); if (sharedFolder != null) { sharedFolder.setLocalSecurityCallback(new ReadOnlyCallback()); //add local course folder's children as read/write source and any sharedfolder as subfolder @@ -150,10 +153,10 @@ public class MergedCourseContainer extends MergeSource { OlatRootFolderImpl sharedFolder = null; String sfSoftkey = course.getCourseConfig().getSharedFolderSoftkey(); if (StringHelper.containsNonWhitespace(sfSoftkey) && !CourseConfig.VALUE_EMPTY_SHAREDFOLDER_SOFTKEY.equals(sfSoftkey)) { - RepositoryManager rm = RepositoryManager.getInstance(); - RepositoryEntry re = rm.lookupRepositoryEntryBySoftkey(sfSoftkey, false); - if (re != null) { - sharedFolder = SharedFolderManager.getInstance().getSharedFolder(re.getOlatResource()); + OLATResource sharedResource = CoreSpringFactory.getImpl(RepositoryService.class) + .loadRepositoryEntryResourceBySoftKey(sfSoftkey); + if (sharedResource != null) { + sharedFolder = SharedFolderManager.getInstance().getSharedFolder(sharedResource); VFSContainer courseBase = sharedFolder; sharedFolder.setLocalSecurityCallback(new ReadOnlyCallback()); subpath = subpath.replaceFirst("/_sharedfolder", ""); diff --git a/src/main/java/org/olat/repository/RepositoryService.java b/src/main/java/org/olat/repository/RepositoryService.java index b4d860a88c8838f26c5fdadd18118773aea62608..0dcef2af6cc1204736b5b031a2e522a55fa8d7dc 100644 --- a/src/main/java/org/olat/repository/RepositoryService.java +++ b/src/main/java/org/olat/repository/RepositoryService.java @@ -61,6 +61,18 @@ public interface RepositoryService { public List<RepositoryEntry> loadByResourceKeys(Collection<Long> keys); + /** + * @param repositoryEntryKey The key of the repository entry + * @return The olat resource of the repository entry + */ + public OLATResource loadRepositoryEntryResource(Long repositoryEntryKey); + + /** + * @param softkey The soft key of the repository entry + * @return The olat resource of the repository entry + */ + public OLATResource loadRepositoryEntryResourceBySoftKey(String softkey); + public VFSLeaf getIntroductionImage(RepositoryEntry re); public VFSLeaf getIntroductionMovie(RepositoryEntry re); diff --git a/src/main/java/org/olat/repository/manager/RepositoryEntryDAO.java b/src/main/java/org/olat/repository/manager/RepositoryEntryDAO.java index 0d6ac5051e4210ad5c380932db4fa581bd721769..628025bdbc975388a5881570091780971a8c9ba7 100644 --- a/src/main/java/org/olat/repository/manager/RepositoryEntryDAO.java +++ b/src/main/java/org/olat/repository/manager/RepositoryEntryDAO.java @@ -28,6 +28,7 @@ import javax.persistence.TypedQuery; import org.olat.core.commons.persistence.DB; import org.olat.core.util.StringHelper; import org.olat.repository.RepositoryEntry; +import org.olat.resource.OLATResource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -123,4 +124,35 @@ public class RepositoryEntryDAO { .setMaxResults(maxResults) .getResultList(); } + + public OLATResource loadRepositoryEntryResource(Long key) { + if (key == null) return null; + String query = "select v.olatResource from repositoryentry as v where v.key=:repoKey"; + + List<OLATResource> entries = dbInstance.getCurrentEntityManager() + .createQuery(query, OLATResource.class) + .setParameter("repoKey", key) + .setHint("org.hibernate.cacheable", Boolean.TRUE) + .getResultList(); + if(entries.isEmpty()) { + return null; + } + return entries.get(0); + } + + public OLATResource loadRepositoryEntryResourceBySoftKey(String softkey) { + if(softkey == null || "sf.notconfigured".equals(softkey)) { + return null; + } + String query = "select v.olatResource from repositoryentry as v where v.softkey=:softkey"; + List<OLATResource> entries = dbInstance.getCurrentEntityManager() + .createQuery(query, OLATResource.class) + .setParameter("softkey", softkey) + .setHint("org.hibernate.cacheable", Boolean.TRUE) + .getResultList(); + if(entries.isEmpty()) { + return null; + } + return entries.get(0); + } } \ No newline at end of file diff --git a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java index bab6ba07495816959ca654f1a603fb085f25fac9..dd4b429865ca785e980cca17db797d4ef21ce0f1 100644 --- a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java +++ b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java @@ -264,6 +264,16 @@ public class RepositoryServiceImpl implements RepositoryService { return repositoryEntryDAO.loadByResourceKeys(resourceKeys); } + @Override + public OLATResource loadRepositoryEntryResource(Long repositoryEntryKey) { + return repositoryEntryDAO.loadRepositoryEntryResource(repositoryEntryKey); + } + + @Override + public OLATResource loadRepositoryEntryResourceBySoftKey(String softkey) { + return repositoryEntryDAO.loadRepositoryEntryResourceBySoftKey(softkey); + } + @Override public VFSLeaf getIntroductionImage(RepositoryEntry re) { VFSContainer repositoryHome = new LocalFolderImpl(new File(FolderConfig.getCanonicalRepositoryHome())); diff --git a/src/test/java/org/olat/repository/manager/RepositoryEntryDAOTest.java b/src/test/java/org/olat/repository/manager/RepositoryEntryDAOTest.java index f37d3a072c3c18543ae30a028468cf88d85f405f..6a63de0e1409c70435861ce0d6d30739eded17a0 100644 --- a/src/test/java/org/olat/repository/manager/RepositoryEntryDAOTest.java +++ b/src/test/java/org/olat/repository/manager/RepositoryEntryDAOTest.java @@ -30,6 +30,7 @@ import org.olat.core.commons.persistence.DB; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; import org.olat.repository.RepositoryService; +import org.olat.resource.OLATResource; import org.olat.test.OlatTestCase; import org.springframework.beans.factory.annotation.Autowired; @@ -154,4 +155,30 @@ public class RepositoryEntryDAOTest extends OlatTestCase { Assert.assertFalse(allRes.isEmpty()); Assert.assertTrue(allRes.size() < 26); } + + @Test + public void loadRepositoryEntryResource() { + RepositoryEntry re = repositoryService.create("Rei Ayanami", "-", "Repository entry DAO Test 5", "", null); + dbInstance.commitAndCloseSession(); + Assert.assertNotNull(re); + Assert.assertNotNull(re.getSoftkey()); + Assert.assertNotNull(re.getOlatResource()); + + OLATResource loadedResource = repositoryEntryDao.loadRepositoryEntryResource(re.getKey()); + Assert.assertNotNull(loadedResource); + Assert.assertEquals(re.getOlatResource(), loadedResource); + } + + @Test + public void loadRepositoryEntryResourceBySoftKey() { + RepositoryEntry re = repositoryService.create("Rei Ayanami", "-", "Repository entry DAO Test 5", "", null); + dbInstance.commitAndCloseSession(); + Assert.assertNotNull(re); + Assert.assertNotNull(re.getSoftkey()); + Assert.assertNotNull(re.getOlatResource()); + + OLATResource loadedResource = repositoryEntryDao.loadRepositoryEntryResourceBySoftKey(re.getSoftkey()); + Assert.assertNotNull(loadedResource); + Assert.assertEquals(re.getOlatResource(), loadedResource); + } } \ No newline at end of file