From 5e3f467904740bb859d522f6419191758cec3b80 Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Mon, 24 Oct 2022 18:41:21 +0200 Subject: [PATCH] Import Categorizations after all other objects --- .../org/libreccm/imexport/ImportExport.java | 28 +++++++- .../security/RoleMembershipImExporter.java | 70 +++++++++---------- 2 files changed, 62 insertions(+), 36 deletions(-) diff --git a/ccm-core/src/main/java/org/libreccm/imexport/ImportExport.java b/ccm-core/src/main/java/org/libreccm/imexport/ImportExport.java index 758800916..519662a4d 100644 --- a/ccm-core/src/main/java/org/libreccm/imexport/ImportExport.java +++ b/ccm-core/src/main/java/org/libreccm/imexport/ImportExport.java @@ -18,6 +18,7 @@ */ package org.libreccm.imexport; +import org.libreccm.categorization.Categorization; import org.libreccm.core.UnexpectedErrorException; import org.libreccm.files.CcmFiles; import org.libreccm.files.CcmFilesConfiguration; @@ -230,10 +231,35 @@ public class ImportExport { final List orderedNodes = treeManager .orderImExporters(tree); + // Put the node for Categorizations to the end of the list + final EntityImExporterTreeNode categorizationsNode = orderedNodes + .stream() + .filter( + node -> node.getEntityImExporter().getEntityClass().equals( + Categorization.class + ) + ) + .findAny() + .orElseThrow( + () -> new UnexpectedErrorException( + String.format( + "There should be an ImExporter in the tree for " + + "%s, but it is not.", + Categorization.class.getName() + ) + ) + ); + orderedNodes.remove(categorizationsNode); + orderedNodes.add(categorizationsNode); + // Put the node for Permissions to the end of the list. final EntityImExporterTreeNode permissionsNode = orderedNodes .stream() - .filter(node -> node.getEntityImExporter().getEntityClass().equals(Permission.class)) + .filter( + node -> node.getEntityImExporter().getEntityClass().equals( + Permission.class + ) + ) .findAny() .orElseThrow( () -> new UnexpectedErrorException( diff --git a/ccm-core/src/main/java/org/libreccm/security/RoleMembershipImExporter.java b/ccm-core/src/main/java/org/libreccm/security/RoleMembershipImExporter.java index 69a1d5ce4..68f8f6298 100644 --- a/ccm-core/src/main/java/org/libreccm/security/RoleMembershipImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/security/RoleMembershipImExporter.java @@ -56,42 +56,42 @@ public class RoleMembershipImExporter @Override @Transactional(Transactional.TxType.REQUIRED) protected void saveImportedEntity(final RoleMembership entity) { - final CriteriaBuilder criteriaBuilder = entityManager - .getCriteriaBuilder(); - final CriteriaQuery criteriaQuery = criteriaBuilder - .createQuery(RoleMembership.class); - final Root from = criteriaQuery.from( - RoleMembership.class - ); - criteriaQuery.where( - criteriaBuilder.equal( - from.get("role"), - entity.getRole() - ) - ); - criteriaQuery.where( - criteriaBuilder.equal( - from.get("member"), - entity.getMember() - ) - ); - final TypedQuery query = entityManager.createQuery( - criteriaQuery - ); - final List results = query.getResultList(); - if (results.isEmpty()) { - final RoleMembership membership = new RoleMembership(); - membership.setUuid(entity.getUuid()); - membership.setMember(entity.getMember()); - membership.setRole(entity.getRole()); - entityManager.persist(membership); - } - -// if (entity.getMembershipId() == 0) { -// entityManager.persist(entity); -// } else { -// entityManager.merge(entity); +// final CriteriaBuilder criteriaBuilder = entityManager +// .getCriteriaBuilder(); +// final CriteriaQuery criteriaQuery = criteriaBuilder +// .createQuery(RoleMembership.class); +// final Root from = criteriaQuery.from( +// RoleMembership.class +// ); +// criteriaQuery.where( +// criteriaBuilder.equal( +// from.get("role"), +// entity.getRole() +// ) +// ); +// criteriaQuery.where( +// criteriaBuilder.equal( +// from.get("member"), +// entity.getMember() +// ) +// ); +// final TypedQuery query = entityManager.createQuery( +// criteriaQuery +// ); +// final List results = query.getResultList(); +// if (results.isEmpty()) { +// final RoleMembership membership = new RoleMembership(); +// membership.setUuid(entity.getUuid()); +// membership.setMember(entity.getMember()); +// membership.setRole(entity.getRole()); +// entityManager.persist(membership); // } + + if (entity.getMembershipId() == 0) { + entityManager.persist(entity); + } else { + entityManager.merge(entity); + } } @Override