Added missing ImExporter for Folders

deploy_packages_to_gitea
Jens Pelzetter 2022-10-24 19:22:00 +02:00
parent 5e3f467904
commit 65f548477b
7 changed files with 146 additions and 14 deletions

View File

@ -1,12 +1,12 @@
{ {
"name": "@librecms/ccm-cms", "name": "@librecms/ccm-cms",
"version": "7.0.0-SNAPSHOT.2022-10-23T091504", "version": "7.0.0-SNAPSHOT.2022-10-24T164011",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@librecms/ccm-cms", "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", "license": "LGPL-3.0-or-later",
"dependencies": { "dependencies": {
"@tiptap/core": "^2.0.0-beta.127", "@tiptap/core": "^2.0.0-beta.127",

View File

@ -1,6 +1,6 @@
{ {
"name": "@librecms/ccm-cms", "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", "description": "JavaScript stuff for ccm-cms",
"main": "target/generated-resources/assets/@content-sections/cms-admin.js", "main": "target/generated-resources/assets/@content-sections/cms-admin.js",
"types": "target/generated-resources/assets/@content-sections/cms-admin.d.ts", "types": "target/generated-resources/assets/@content-sections/cms-admin.d.ts",

View File

@ -18,6 +18,8 @@
*/ */
package org.librecms.contentsection; package org.librecms.contentsection;
import org.libreccm.categorization.Categorization;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.OneToOne; import javax.persistence.OneToOne;
@ -58,10 +60,16 @@ import static org.librecms.CmsConstants.*;
name = "Folder.rootFolders", name = "Folder.rootFolders",
query = "SELECT f FROM Folder f " query = "SELECT f FROM Folder f "
+ "WHERE f.parentCategory IS NULL " + "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( @NamedQuery(
name = "Folder.findByName", name = "Folder.findByName",
query = "SELECT f FROM Folder f WHERE f.name = :name"), query = "SELECT f FROM Folder f WHERE f.name = :name"
),
@NamedQuery( @NamedQuery(
name = "Folder.findSubFolders", name = "Folder.findSubFolders",
query = "SELECT f " query = "SELECT f "
@ -330,6 +338,16 @@ public class Folder extends Category implements Serializable {
return (Folder) getParentCategory(); return (Folder) getParentCategory();
} }
@Override
protected void setObjects(final List<Categorization> objects) {
super.setObjects(objects);
}
@Override
protected void setSubCategories(final List<Category> subCategories) {
super.setSubCategories(subCategories);
}
/** /**
* A convenient method for getting all sub folders of folder. * A convenient method for getting all sub folders of folder.
* *

View File

@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Processes(Folder.class)
public class FolderImExporter extends AbstractEntityImExporter<Folder> {
@Inject
private FolderRepository folderRepo;
@Override
public Class<Folder> getEntityClass() {
return Folder.class;
}
@Override
protected Set<Class<? extends Exportable>> getRequiredEntities() {
return Set.of(
ContentSection.class,
Domain.class
);
}
@Override
@Transactional(Transactional.TxType.REQUIRED)
protected void saveImportedEntity(final Folder entity) {
final Optional<Folder> 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)
)
)
);
}
}

View File

@ -35,6 +35,7 @@ import java.util.UUID;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.inject.Inject; import javax.inject.Inject;
import javax.persistence.NoResultException;
import javax.persistence.TypedQuery; import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaDelete; import javax.persistence.criteria.CriteriaDelete;
@ -98,6 +99,20 @@ public class FolderRepository extends AbstractEntityRepository<Long, Folder> {
return query.getResultList(); return query.getResultList();
} }
@Transactional(Transactional.TxType.REQUIRED)
public Optional<Folder> 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<Folder> findByPath(final String path, public Optional<Folder> findByPath(final String path,
final FolderType type) { final FolderType type) {
if (path == null || path.isEmpty()) { if (path == null || path.isEmpty()) {

View File

@ -31,7 +31,6 @@ import javax.enterprise.context.RequestScoped;
import javax.inject.Inject; import javax.inject.Inject;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import static com.ctc.wstx.shaded.msv_core.datatype.xsd.NumberType.save;
/** /**
* Exporter/Importer for {@link Category} entities. * Exporter/Importer for {@link Category} entities.
@ -52,10 +51,9 @@ public class CategoryImExporter extends AbstractEntityImExporter<Category> {
@Override @Override
protected Set<Class<? extends Exportable>> getRequiredEntities() { protected Set<Class<? extends Exportable>> getRequiredEntities() {
final Set<Class<? extends Exportable>> entities = new HashSet<>(); return Set.of(
entities.add(Domain.class); Domain.class
);
return entities;
} }
@Override @Override

View File

@ -109,8 +109,8 @@ public class CategoryRepository extends AbstractEntityRepository<Long, Category>
*/ */
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
public Optional<Category> findByUuid(final String uuid) { public Optional<Category> findByUuid(final String uuid) {
final TypedQuery<Category> query = getEntityManager(). final TypedQuery<Category> query = getEntityManager()
createNamedQuery("Category.findByUuid", Category.class); .createNamedQuery("Category.findByUuid", Category.class);
query.setParameter("uuid", uuid); query.setParameter("uuid", uuid);
try { try {