diff --git a/amp/src/main/java/org/dgfoundation/amp/permissionmanager/web/PMUtil.java b/amp/src/main/java/org/dgfoundation/amp/permissionmanager/web/PMUtil.java index ce622f58b76..25783756bee 100644 --- a/amp/src/main/java/org/dgfoundation/amp/permissionmanager/web/PMUtil.java +++ b/amp/src/main/java/org/dgfoundation/amp/permissionmanager/web/PMUtil.java @@ -174,9 +174,17 @@ public static void deletePermissionMap(PermissionMap permissionMap, Session sess //we delete the old permissions, if they are dedicated if (p!=null && p.isDedicated()) { CompositePermission cp = (CompositePermission)p; - Iterator i = cp.getPermissions().iterator(); - while (i.hasNext()) { - Permission element = (Permission) i.next(); + List toDelete = new ArrayList<>(cp.getPermissions()); + cp.getPermissions().clear(); + for (Permission element : toDelete) { + // Remove from every CompositePermission that references this element so + // Hibernate does not attempt to re-save a deleted object via cascade on flush + Iterator linkedIt = element.getCompositeLinkedPermissions().iterator(); + while (linkedIt.hasNext()) { + CompositePermission linkedCp = linkedIt.next(); + linkedCp.getPermissions().remove(element); + linkedIt.remove(); + } Object object = session.load(Permission.class, element.getId()); session.delete(object); } @@ -189,11 +197,17 @@ public static void deletePermissionMap(PermissionMap permissionMap, Session sess public static void deleteCompositePermission(CompositePermission cp, Session session, boolean delCompositePermission) { - // TODO Auto-generated method stub -//session.flush(); - Iterator i = cp.getPermissions().iterator(); - while (i.hasNext()) { - Permission element = (Permission) i.next(); + List toDelete = new ArrayList<>(cp.getPermissions()); + cp.getPermissions().clear(); + for (Permission element : toDelete) { + // Remove from every CompositePermission that references this element so + // Hibernate does not attempt to re-save a deleted object via cascade on flush + Iterator linkedIt = element.getCompositeLinkedPermissions().iterator(); + while (linkedIt.hasNext()) { + CompositePermission linkedCp = linkedIt.next(); + linkedCp.getPermissions().remove(element); + linkedIt.remove(); + } Object object = session.load(Permission.class, element.getId()); session.delete(object); } diff --git a/amp/src/main/webapp/WEB-INF/jsp/help/view/helpTopics.jsp b/amp/src/main/webapp/WEB-INF/jsp/help/view/helpTopics.jsp index 77ec86ee314..68d8fb8dc23 100644 --- a/amp/src/main/webapp/WEB-INF/jsp/help/view/helpTopics.jsp +++ b/amp/src/main/webapp/WEB-INF/jsp/help/view/helpTopics.jsp @@ -108,7 +108,7 @@ if (typeof DOMParser == "undefined") { var id = document.getElementById("treeboxbox_tree"); tree = new dhtmlXTreeObject(id,"100%","100%",0); - tree.setImagePath("../../jsp/help/view/images/csh_vista/"); + tree.setImagePath("<%=request.getContextPath()%>/resources/images/jsp/help/view/images/csh_vista/"); tree.enableTreeImages(false); tree.enableDragAndDrop(true);