diff --git a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java index 1c9d3ba8e1f344ef8a0ac132155cb95088d85f27..f4497c4fbaa439261c7dcd42160295abe10d0176 100755 --- a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java +++ b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java @@ -41,6 +41,7 @@ import org.olat.basesecurity.SecurityGroupMembershipImpl; import org.olat.basesecurity.manager.GroupDAO; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.persistence.DB; +import org.olat.core.commons.persistence.DBFactory; import org.olat.core.commons.persistence.DBQuery; import org.olat.core.commons.persistence.PersistentObject; import org.olat.core.commons.services.commentAndRating.CommentAndRatingService; @@ -961,22 +962,17 @@ public class EPStructureManager extends BasicManager { return;//nothing to delete } - //already delete in removeStructureRecursively: deletePortfolioMapTemplateRecursively((EPStructureElement)map); + if(map instanceof EPAbstractMap) { + //owner group has its constraints shared beetwen the repository entry and the template + ((EPAbstractMap)map).getGroups().clear(); + map = DBFactory.getInstance().getCurrentEntityManager().merge(map); + } + removeStructureRecursively(map); - //already delete in removeStructureRecursively: dbInstance.deleteObject(map); + + dbInstance.commit(); } - /*private void deletePortfolioMapTemplateRecursively(EPStructureElement element) { - element.getInternalArtefacts().clear(); - element.setRoot(null); - element.setRootMap(null); - List<EPStructureToStructureLink> links = element.getInternalChildren(); - for(EPStructureToStructureLink subLink:links) { - deletePortfolioMapTemplateRecursively((EPStructureElement)subLink.getChild()); - } - links.clear(); - }*/ - public void removeStructureRecursively(PortfolioStructure struct){ List<PortfolioStructure> children = loadStructureChildren(struct); for (PortfolioStructure childstruct : children) { diff --git a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java b/src/main/java/org/olat/repository/handlers/PortfolioHandler.java index 8e640d14c0d24ade4629e3f9013954aed99fd212..af811b7e78eb227ee91b2dc21e6f8533a1ac47cb 100644 --- a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java +++ b/src/main/java/org/olat/repository/handlers/PortfolioHandler.java @@ -180,30 +180,28 @@ public class PortfolioHandler implements RepositoryHandler { @Override public boolean readyToDelete(OLATResourceable res, Identity identity, Roles roles, Locale locale, ErrorList errors) { - EPFrontendManager ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager"); + EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class); PortfolioStructure map = ePFMgr.loadPortfolioStructure(res); - if(map != null) { - //owner group has its constraints shared beetwen the repository entry and the template - ((EPAbstractMap)map).setGroups(null); - } if(map instanceof EPStructuredMapTemplate) { EPStructuredMapTemplate exercise = (EPStructuredMapTemplate)map; - if (ePFMgr.isTemplateInUse(exercise, null, null, null)) return false; + if (ePFMgr.isTemplateInUse(exercise, null, null, null)) { + return false; + } } + ReferenceManager refM = ReferenceManager.getInstance(); String referencesSummary = refM.getReferencesToSummary(res, locale); if (referencesSummary != null) { Translator translator = Util.createPackageTranslator(RepositoryManager.class, locale); errors.setError(translator.translate("details.delete.error.references", new String[] { referencesSummary })); return false; - } + } return true; } @Override public boolean cleanupOnDelete(OLATResourceable res) { - EPFrontendManager ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager"); - ePFMgr.deletePortfolioMapTemplate(res); + CoreSpringFactory.getImpl(EPFrontendManager.class).deletePortfolioMapTemplate(res); return true; } @@ -215,7 +213,7 @@ public class PortfolioHandler implements RepositoryHandler { public MediaResource getAsMediaResource(OLATResourceable res, boolean backwardsCompatible) { MediaResource mr = null; - EPFrontendManager ePFMgr = (EPFrontendManager)CoreSpringFactory.getBean("epFrontendManager"); + EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class); PortfolioStructure structure = ePFMgr.loadPortfolioStructure(res); try { InputStream inOut = EPXStreamHandler.toStream(structure); diff --git a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java index ac23400c22e7c43bcc7e0f1b9d466b1f53cd03e2..a1143b4a693b61b6bdcfeb365fe2c225fa025502 100644 --- a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java +++ b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java @@ -277,7 +277,7 @@ public class RepositoryServiceImpl implements RepositoryService { public void deleteRepositoryEntryAndBaseGroups(RepositoryEntry entry) { RepositoryEntry reloadedEntry = dbInstance.getCurrentEntityManager() .getReference(RepositoryEntry.class, entry.getKey()); - OLATResource resource = reloadedEntry.getOlatResource(); + Long resourceKey = reloadedEntry.getOlatResource().getKey(); Group defaultGroup = reToGroupDao.getDefaultGroup(reloadedEntry); groupDao.removeMemberships(defaultGroup); @@ -286,8 +286,11 @@ public class RepositoryServiceImpl implements RepositoryService { dbInstance.getCurrentEntityManager().remove(reloadedEntry); groupDao.removeGroup(defaultGroup); dbInstance.commit(); - - dbInstance.getCurrentEntityManager().remove(resource); + + OLATResource reloadedResource = resourceManager.findResourceById(resourceKey); + if(reloadedResource != null) { + dbInstance.getCurrentEntityManager().remove(reloadedResource); + } dbInstance.commit(); } diff --git a/src/main/java/org/olat/resource/OLATResourceManager.java b/src/main/java/org/olat/resource/OLATResourceManager.java index d5d5f7c9af45e92a0ba4fbb2ded8701c59d3a88f..5ae7dd1e60da7f54128609aa3e4eade7b7917488 100644 --- a/src/main/java/org/olat/resource/OLATResourceManager.java +++ b/src/main/java/org/olat/resource/OLATResourceManager.java @@ -200,7 +200,7 @@ public class OLATResourceManager extends BasicManager { List<OLATResource> resources = dbInstance.getCurrentEntityManager() .createQuery(s, OLATResource.class) .setParameter("resname", type) - .setParameter("resid", resourceableId.longValue()) + .setParameter("resid", resourceableId) .setHint("org.hibernate.cacheable", Boolean.TRUE) .getResultList(); @@ -210,4 +210,15 @@ public class OLATResourceManager extends BasicManager { } return resources.get(0); } + + public OLATResource findResourceById(Long key) { + if (key == null) return null; + + String s = "select ori from org.olat.resource.OLATResourceImpl ori where ori.key=:resourceKey"; + List<OLATResource> resources = dbInstance.getCurrentEntityManager() + .createQuery(s, OLATResource.class) + .setParameter("resourceKey", key) + .getResultList(); + return resources.isEmpty() ? null : resources.get(0); + } } \ No newline at end of file