@Override public void onBeforeInsert(Group entity, EntityManager entityManager) { createNewHierarchy(entity, entity.getParent()); }
@Override public Group copyAccessGroup(UUID accessGroupId) { checkNotNullArgument(accessGroupId, "Null access group id"); checkUpdatePermission(Group.class); Group clone; Transaction tx = persistence.getTransaction(); try { EntityManager em = persistence.getEntityManager(); Query groupNamesQuery = em.createQuery("select g.name from sec$Group g"); @SuppressWarnings("unchecked") Set<String> groupNames = new HashSet<>(groupNamesQuery.getResultList()); Group accessGroup = em.find(Group.class, accessGroupId, GROUP_COPY_VIEW); if (accessGroup == null) throw new IllegalStateException("Unable to find specified access group with id: " + accessGroupId); clone = cloneGroup(accessGroup, accessGroup.getParent(), groupNames, em); tx.commit(); } finally { tx.end(); } return clone; }
@Override public void onBeforeUpdate(Group entity, EntityManager entityManager) { if (!persistence.getTools().getDirtyFields(entity).contains("parent")) return; EntityManager em = persistence.getEntityManager(); for (GroupHierarchy oldHierarchy : entity.getHierarchyList()) { em.remove(oldHierarchy); } createNewHierarchy(entity, entity.getParent()); TypedQuery<GroupHierarchy> q = em.createQuery( "select h from sec$GroupHierarchy h join fetch h.group " + "where h.parent.id = ?1", GroupHierarchy.class); q.setParameter(1, entity.getId()); List<GroupHierarchy> list = q.getResultList(); for (GroupHierarchy hierarchy : list) { Group dependentGroup = hierarchy.getGroup(); for (GroupHierarchy depHierarchy : dependentGroup.getHierarchyList()) { em.remove(depHierarchy); } em.remove(hierarchy); createNewHierarchy(dependentGroup, dependentGroup.getParent()); } } }