From 65f548477b3833b4512668dd04afe97fbe6e6732 Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Mon, 24 Oct 2022 19:22:00 +0200 Subject: [PATCH] Added missing ImExporter for Folders --- ccm-cms/package-lock.json | 4 +- ccm-cms/package.json | 2 +- .../org/librecms/contentsection/Folder.java | 22 +++- .../contentsection/FolderImExporter.java | 101 ++++++++++++++++++ .../contentsection/FolderRepository.java | 15 +++ .../categorization/CategoryImExporter.java | 8 +- .../categorization/CategoryRepository.java | 8 +- 7 files changed, 146 insertions(+), 14 deletions(-) create mode 100644 ccm-cms/src/main/java/org/librecms/contentsection/FolderImExporter.java diff --git a/ccm-cms/package-lock.json b/ccm-cms/package-lock.json index 7313c760a..ff4c021eb 100644 --- a/ccm-cms/package-lock.json +++ b/ccm-cms/package-lock.json @@ -1,12 +1,12 @@ { "name": "@librecms/ccm-cms", - "version": "7.0.0-SNAPSHOT.2022-10-23T091504", + "version": "7.0.0-SNAPSHOT.2022-10-24T164011", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@librecms/ccm-cms", - "version": "7.0.0-SNAPSHOT.2022-10-23T091504", + "version": "7.0.0-SNAPSHOT.2022-10-24T164011", "license": "LGPL-3.0-or-later", "dependencies": { "@tiptap/core": "^2.0.0-beta.127", diff --git a/ccm-cms/package.json b/ccm-cms/package.json index 18c2c5524..364733805 100644 --- a/ccm-cms/package.json +++ b/ccm-cms/package.json @@ -1,6 +1,6 @@ { "name": "@librecms/ccm-cms", - "version": "7.0.0-SNAPSHOT.2022-10-23T091504", + "version": "7.0.0-SNAPSHOT.2022-10-24T164011", "description": "JavaScript stuff for ccm-cms", "main": "target/generated-resources/assets/@content-sections/cms-admin.js", "types": "target/generated-resources/assets/@content-sections/cms-admin.d.ts", diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/Folder.java b/ccm-cms/src/main/java/org/librecms/contentsection/Folder.java index c6d5984f0..ed290c930 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/Folder.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/Folder.java @@ -18,6 +18,8 @@ */ package org.librecms.contentsection; +import org.libreccm.categorization.Categorization; + import javax.persistence.Entity; import javax.persistence.JoinColumn; import javax.persistence.OneToOne; @@ -58,10 +60,16 @@ import static org.librecms.CmsConstants.*; name = "Folder.rootFolders", query = "SELECT f FROM Folder f " + "WHERE f.parentCategory IS NULL " - + " AND f.type = :type"), + + " AND f.type = :type" + ), + @NamedQuery( + name = "Folder.findByUuid", + query = "SELECT f FROM Folder f WHERE f.uuid = :uuid" + ), @NamedQuery( name = "Folder.findByName", - query = "SELECT f FROM Folder f WHERE f.name = :name"), + query = "SELECT f FROM Folder f WHERE f.name = :name" + ), @NamedQuery( name = "Folder.findSubFolders", query = "SELECT f " @@ -330,6 +338,16 @@ public class Folder extends Category implements Serializable { return (Folder) getParentCategory(); } + @Override + protected void setObjects(final List objects) { + super.setObjects(objects); + } + + @Override + protected void setSubCategories(final List subCategories) { + super.setSubCategories(subCategories); + } + /** * A convenient method for getting all sub folders of folder. * diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/FolderImExporter.java b/ccm-cms/src/main/java/org/librecms/contentsection/FolderImExporter.java new file mode 100644 index 000000000..3fcde686d --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/contentsection/FolderImExporter.java @@ -0,0 +1,101 @@ +package org.librecms.contentsection; + +import org.libreccm.categorization.Domain; +import org.libreccm.imexport.AbstractEntityImExporter; +import org.libreccm.imexport.Exportable; +import org.libreccm.imexport.Processes; + +import java.util.Objects; +import java.util.Optional; +import java.util.Set; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import javax.transaction.Transactional; + +/* + * Copyright (C) 2022 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ +/** + * Exporter/Importer for {@link Folder} entities. + * + * @author Jens Pelzetter + */ +@RequestScoped +@Processes(Folder.class) +public class FolderImExporter extends AbstractEntityImExporter { + + @Inject + private FolderRepository folderRepo; + + @Override + public Class getEntityClass() { + return Folder.class; + } + + @Override + protected Set> getRequiredEntities() { + return Set.of( + ContentSection.class, + Domain.class + ); + } + + @Override + @Transactional(Transactional.TxType.REQUIRED) + protected void saveImportedEntity(final Folder entity) { + final Optional result = folderRepo.findByUuid( + entity.getUuid() + ); + final Folder folder; + if (result.isPresent()) { + folder = result.get(); + folder.setAbstractCategory(entity.isAbstractCategory()); + folder.setCategoryOrder(entity.getCategoryOrder()); + folder.setDescription(entity.getDescription()); + folder.setDisplayName(entity.getDisplayName()); + folder.setEnabled(entity.isEnabled()); + folder.setName(entity.getName()); + folder.setObjects(entity.getObjects()); + folder.setParentCategory(entity.getParentCategory()); + folder.setSection(entity.getSection()); + folder.setSubCategories(entity.getSubCategories()); + folder.setTitle(entity.getTitle()); + folder.setType(entity.getType()); + folder.setUniqueId(entity.getUniqueId()); + folder.setVisible(entity.isVisible()); + } else { + folder = entity; + } + folderRepo.save(folder); + } + + @Override + protected Folder reloadEntity(final Folder entity) { + return folderRepo + .findById(Objects.requireNonNull(entity).getObjectId()) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "Folder entity %s does not exist in the database.", + Objects.toString(entity) + ) + ) + ); + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/FolderRepository.java b/ccm-cms/src/main/java/org/librecms/contentsection/FolderRepository.java index d06182548..4f1228ee7 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/FolderRepository.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/FolderRepository.java @@ -35,6 +35,7 @@ import java.util.UUID; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; +import javax.persistence.NoResultException; import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaDelete; @@ -98,6 +99,20 @@ public class FolderRepository extends AbstractEntityRepository { return query.getResultList(); } + @Transactional(Transactional.TxType.REQUIRED) + public Optional findByUuid(final String uuid) { + try { + return Optional.of( + getEntityManager() + .createNamedQuery("Folder.findByUuid", Folder.class) + .setParameter("uuid", uuid) + .getSingleResult() + ); + } catch(NoResultException ex) { + return Optional.empty(); + } + } + public Optional findByPath(final String path, final FolderType type) { if (path == null || path.isEmpty()) { diff --git a/ccm-core/src/main/java/org/libreccm/categorization/CategoryImExporter.java b/ccm-core/src/main/java/org/libreccm/categorization/CategoryImExporter.java index 9f99743af..f6d1b92ea 100644 --- a/ccm-core/src/main/java/org/libreccm/categorization/CategoryImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/categorization/CategoryImExporter.java @@ -31,7 +31,6 @@ import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.transaction.Transactional; -import static com.ctc.wstx.shaded.msv_core.datatype.xsd.NumberType.save; /** * Exporter/Importer for {@link Category} entities. @@ -52,10 +51,9 @@ public class CategoryImExporter extends AbstractEntityImExporter { @Override protected Set> getRequiredEntities() { - final Set> entities = new HashSet<>(); - entities.add(Domain.class); - - return entities; + return Set.of( + Domain.class + ); } @Override diff --git a/ccm-core/src/main/java/org/libreccm/categorization/CategoryRepository.java b/ccm-core/src/main/java/org/libreccm/categorization/CategoryRepository.java index 83ec5d88e..294e04144 100644 --- a/ccm-core/src/main/java/org/libreccm/categorization/CategoryRepository.java +++ b/ccm-core/src/main/java/org/libreccm/categorization/CategoryRepository.java @@ -65,7 +65,7 @@ public class CategoryRepository extends AbstractEntityRepository public Class getEntityClass() { return Category.class; } - + @Override public String getIdAttributeName() { return "objectId"; @@ -75,7 +75,7 @@ public class CategoryRepository extends AbstractEntityRepository public Long getIdOfEntity(final Category entity) { return entity.getObjectId(); } - + @Override public boolean isNew(final Category entity) { return entity.getObjectId() == 0; @@ -109,8 +109,8 @@ public class CategoryRepository extends AbstractEntityRepository */ @Transactional(Transactional.TxType.REQUIRED) public Optional findByUuid(final String uuid) { - final TypedQuery query = getEntityManager(). - createNamedQuery("Category.findByUuid", Category.class); + final TypedQuery query = getEntityManager() + .createNamedQuery("Category.findByUuid", Category.class); query.setParameter("uuid", uuid); try {