diff --git a/ccm-cms/package-lock.json b/ccm-cms/package-lock.json index a86ac1a90..48464e36d 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-31T082859", + "version": "7.0.0-SNAPSHOT.2022-11-07T181703", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@librecms/ccm-cms", - "version": "7.0.0-SNAPSHOT.2022-10-31T082859", + "version": "7.0.0-SNAPSHOT.2022-11-07T181703", "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 da60c7f81..ff68de440 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-31T082859", + "version": "7.0.0-SNAPSHOT.2022-11-07T181703", "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/AbstractContentItemImExporter.java b/ccm-cms/src/main/java/org/librecms/contentsection/AbstractContentItemImExporter.java index a51812713..4d18bfb94 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/AbstractContentItemImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/AbstractContentItemImExporter.java @@ -18,14 +18,17 @@ */ package org.librecms.contentsection; +import org.libreccm.categorization.CategorizationImExporter; import org.libreccm.categorization.Category; import org.libreccm.imexport.AbstractEntityImExporter; import org.libreccm.imexport.Exportable; +import org.libreccm.security.PermissionImExporter; import java.util.HashSet; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.inject.Inject; import javax.transaction.Transactional; @@ -39,17 +42,29 @@ public abstract class AbstractContentItemImExporter @Inject private ContentItemRepository itemRepository; - + + @Inject + private CategorizationImExporter categorizationImExporter; + + @Inject + private PermissionImExporter permissionImExporter; + + @PostConstruct @Override - protected Set> getRequiredEntities() { - final Set> entities = new HashSet<>(); - entities.add(Category.class); - entities.add(ContentSection.class); - entities.add(ContentType.class); - - return entities; + protected void init() { + addRequiredEntities( + Set.of( + Category.class, + ContentSection.class, + ContentType.class + ) + ); + categorizationImExporter.addRequiredEntities(Set.of(getEntityClass())); + permissionImExporter.addRequiredEntities(Set.of(getEntityClass())); } + + @Override @Transactional(Transactional.TxType.REQUIRED) public void saveImportedEntity(final T entity) { diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionImExporter.java b/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionImExporter.java index bfcbc5639..263ea1bda 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionImExporter.java @@ -29,6 +29,7 @@ import org.librecms.lifecycle.LifecycleDefinition; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.transaction.Transactional; @@ -45,19 +46,22 @@ public class ContentSectionImExporter @Inject private ContentSectionRepository sectionRepository; + @PostConstruct @Override - public Class getEntityClass() { - return ContentSection.class; + protected void init() { + addRequiredEntities( + Set.of( + Category.class, + ResourceType.class, + LifecycleDefinition.class, + Workflow.class + ) + ); } @Override - protected Set> getRequiredEntities() { - return Set.of( - Category.class, - ResourceType.class, - LifecycleDefinition.class, - Workflow.class - ); + public Class getEntityClass() { + return ContentSection.class; } @Override diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/ContentTypeImExporter.java b/ccm-cms/src/main/java/org/librecms/contentsection/ContentTypeImExporter.java index 9d6816cae..22eca6839 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/ContentTypeImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/ContentTypeImExporter.java @@ -25,6 +25,7 @@ import org.libreccm.imexport.Processes; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.transaction.Transactional; @@ -41,16 +42,19 @@ public class ContentTypeImExporter @Inject private ContentTypeRepository contentTypeRepo; + @PostConstruct @Override - public Class getEntityClass() { - return ContentType.class; + protected void init() { + addRequiredEntities( + Set.of( + ContentSection.class + ) + ); } @Override - protected Set> getRequiredEntities() { - return Set.of( - ContentSection.class - ); + public Class getEntityClass() { + return ContentType.class; } @Override diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/FolderImExporter.java b/ccm-cms/src/main/java/org/librecms/contentsection/FolderImExporter.java index 1f16e973d..24ca7ea18 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/FolderImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/FolderImExporter.java @@ -10,6 +10,7 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.transaction.Transactional; @@ -43,18 +44,21 @@ public class FolderImExporter extends AbstractEntityImExporter { @Inject private FolderRepository folderRepo; + @PostConstruct @Override - public Class getEntityClass() { - return Folder.class; + protected void init() { + addRequiredEntities( + Set.of( + ContentSection.class, + Category.class, + Domain.class + ) + ); } @Override - protected Set> getRequiredEntities() { - return Set.of( - ContentSection.class, - Category.class, - Domain.class - ); + public Class getEntityClass() { + return Folder.class; } @Override diff --git a/ccm-cms/src/main/java/org/librecms/lifecycle/LifecycleDefinitionImExporter.java b/ccm-cms/src/main/java/org/librecms/lifecycle/LifecycleDefinitionImExporter.java index 636b6eaf9..437366d3e 100644 --- a/ccm-cms/src/main/java/org/librecms/lifecycle/LifecycleDefinitionImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/lifecycle/LifecycleDefinitionImExporter.java @@ -25,6 +25,7 @@ import org.libreccm.imexport.Processes; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; @@ -40,16 +41,19 @@ public class LifecycleDefinitionImExporter @Inject private LifecycleDefinitionRepository lifecycleDefRepo; + @PostConstruct @Override - public Class getEntityClass() { - return LifecycleDefinition.class; + protected void init() { + addRequiredEntities( + Set.of( + PhaseDefinition.class + ) + ); } @Override - protected Set> getRequiredEntities() { - return Set.of( - PhaseDefinition.class - ); + public Class getEntityClass() { + return LifecycleDefinition.class; } @Override diff --git a/ccm-cms/src/main/java/org/librecms/lifecycle/LifecycleImExporter.java b/ccm-cms/src/main/java/org/librecms/lifecycle/LifecycleImExporter.java index 6d37889ab..f8c2c1542 100644 --- a/ccm-cms/src/main/java/org/librecms/lifecycle/LifecycleImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/lifecycle/LifecycleImExporter.java @@ -22,10 +22,10 @@ import org.libreccm.imexport.AbstractEntityImExporter; import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; -import java.util.Collections; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.transaction.Transactional; @@ -41,17 +41,20 @@ public class LifecycleImExporter extends AbstractEntityImExporter { @Inject private LifecycleRepository lifecycleRepo; + @PostConstruct @Override - public Class getEntityClass() { - return Lifecycle.class; + protected void init() { + addRequiredEntities( + Set.of( + LifecycleDefinition.class, + Phase.class + ) + ); } @Override - protected Set> getRequiredEntities() { - return Set.of( - LifecycleDefinition.class, - Phase.class - ); + public Class getEntityClass() { + return Lifecycle.class; } @Override diff --git a/ccm-cms/src/main/java/org/librecms/lifecycle/PhaseDefinitionImExporter.java b/ccm-cms/src/main/java/org/librecms/lifecycle/PhaseDefinitionImExporter.java index 3fd7a52c6..e38af3e3d 100644 --- a/ccm-cms/src/main/java/org/librecms/lifecycle/PhaseDefinitionImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/lifecycle/PhaseDefinitionImExporter.java @@ -26,6 +26,7 @@ import java.util.Collections; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; @@ -41,14 +42,15 @@ public class PhaseDefinitionImExporter @Inject private PhaseDefinititionRepository phaseDefinitionRepo; + @PostConstruct @Override - public Class getEntityClass() { - return PhaseDefinition.class; + protected void init() { + // Nothing } @Override - protected Set> getRequiredEntities() { - return Collections.emptySet(); + public Class getEntityClass() { + return PhaseDefinition.class; } @Override diff --git a/ccm-cms/src/main/java/org/librecms/lifecycle/PhaseImExporter.java b/ccm-cms/src/main/java/org/librecms/lifecycle/PhaseImExporter.java index 110b08842..ec10b06c2 100644 --- a/ccm-cms/src/main/java/org/librecms/lifecycle/PhaseImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/lifecycle/PhaseImExporter.java @@ -26,6 +26,7 @@ import java.util.Collections; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; @@ -41,14 +42,15 @@ public class PhaseImExporter @Inject private PhaseRepository phaseRepo; + @PostConstruct @Override - public Class getEntityClass() { - return Phase.class; + protected void init() { + // Nothing } @Override - protected Set> getRequiredEntities() { - return Collections.emptySet(); + public Class getEntityClass() { + return Phase.class; } @Override @@ -69,4 +71,5 @@ public class PhaseImExporter ) ); } + } diff --git a/ccm-core/src/main/java/org/libreccm/categorization/CategorizationImExporter.java b/ccm-core/src/main/java/org/libreccm/categorization/CategorizationImExporter.java index 58512ec9e..bd6993126 100644 --- a/ccm-core/src/main/java/org/libreccm/categorization/CategorizationImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/categorization/CategorizationImExporter.java @@ -19,19 +19,16 @@ package org.libreccm.categorization; import org.libreccm.imexport.AbstractEntityImExporter; -import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; -import java.util.HashSet; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; -import javax.enterprise.inject.Instance; import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.NoResultException; -import javax.persistence.TypedQuery; import javax.transaction.Transactional; /** @@ -47,26 +44,21 @@ public class CategorizationImExporter @Inject private EntityManager entityManager; - @Inject - private Instance dependenciesProviders; + @PostConstruct + @Override + protected void init() { + addRequiredEntities( + Set.of( + Category.class + ) + ); + } @Override public Class getEntityClass() { return Categorization.class; } - @Override - protected Set> getRequiredEntities() { - final Set> entities = new HashSet<>(); - entities.add(Category.class); - - dependenciesProviders.forEach( - provider -> entities.addAll(provider.getCategorizableEntities()) - ); - - return entities; - } - @Override @Transactional(Transactional.TxType.REQUIRED) protected void saveImportedEntity(final Categorization entity) { diff --git a/ccm-core/src/main/java/org/libreccm/categorization/CategorizationImExporterDependenciesProvider.java b/ccm-core/src/main/java/org/libreccm/categorization/CategorizationImExporterDependenciesProvider.java deleted file mode 100644 index 83ec0bc07..000000000 --- a/ccm-core/src/main/java/org/libreccm/categorization/CategorizationImExporterDependenciesProvider.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2021 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 - */ -package org.libreccm.categorization; - -import org.libreccm.imexport.Exportable; - -import java.util.Set; - -/** - * - * @author Jens Pelzetter - */ -public interface CategorizationImExporterDependenciesProvider { - - Set> getCategorizableEntities(); - -} 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 790412b08..facd6ebc3 100644 --- a/ccm-core/src/main/java/org/libreccm/categorization/CategoryImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/categorization/CategoryImExporter.java @@ -26,14 +26,14 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.transaction.Transactional; - /** * Exporter/Importer for {@link Category} entities. - * + * * @author Jens Pelzetter */ @RequestScoped @@ -44,15 +44,18 @@ public class CategoryImExporter extends AbstractEntityImExporter { private CategoryRepository categoryRepository; @Override - public Class getEntityClass() { - return Category.class; + @PostConstruct + protected void init() { + addRequiredEntities( + Set.of( + Domain.class + ) + ); } @Override - protected Set> getRequiredEntities() { - return Set.of( - Domain.class - ); + public Class getEntityClass() { + return Category.class; } @Override @@ -61,22 +64,22 @@ public class CategoryImExporter extends AbstractEntityImExporter { final Optional result = categoryRepository.findByUuid( entity.getUuid() ); - + final Category category; if (result.isPresent()) { - category = result.get(); - category.setAbstractCategory(entity.isAbstractCategory()); - category.setCategoryOrder(entity.getCategoryOrder()); - category.setDescription(entity.getDescription()); - category.setDisplayName(entity.getDisplayName()); - category.setEnabled(entity.isEnabled()); - category.setName(entity.getName()); - category.setObjects(entity.getObjects()); - category.setParentCategory(entity.getParentCategory()); - category.setSubCategories(entity.getSubCategories()); - category.setTitle(entity.getTitle()); - category.setUniqueId(entity.getUniqueId()); - category.setVisible(entity.isVisible()); + category = result.get(); + category.setAbstractCategory(entity.isAbstractCategory()); + category.setCategoryOrder(entity.getCategoryOrder()); + category.setDescription(entity.getDescription()); + category.setDisplayName(entity.getDisplayName()); + category.setEnabled(entity.isEnabled()); + category.setName(entity.getName()); + category.setObjects(entity.getObjects()); + category.setParentCategory(entity.getParentCategory()); + category.setSubCategories(entity.getSubCategories()); + category.setTitle(entity.getTitle()); + category.setUniqueId(entity.getUniqueId()); + category.setVisible(entity.isVisible()); } else { category = entity; } diff --git a/ccm-core/src/main/java/org/libreccm/categorization/DomainImExporter.java b/ccm-core/src/main/java/org/libreccm/categorization/DomainImExporter.java index 33c475539..7416aaebf 100644 --- a/ccm-core/src/main/java/org/libreccm/categorization/DomainImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/categorization/DomainImExporter.java @@ -26,6 +26,7 @@ import java.util.Collections; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; @@ -41,6 +42,12 @@ public class DomainImExporter extends AbstractEntityImExporter { @Inject private DomainRepository domainRepository; + @Override + @PostConstruct + protected void init() { + //Nothing + } + @Override public Class getEntityClass() { @@ -53,12 +60,6 @@ public class DomainImExporter extends AbstractEntityImExporter { domainRepository.save(entity); } - @Override - protected Set> getRequiredEntities() { - - return Collections.emptySet(); - } - @Override protected Domain reloadEntity(final Domain entity) { return domainRepository diff --git a/ccm-core/src/main/java/org/libreccm/categorization/DomainOwnershipImExporter.java b/ccm-core/src/main/java/org/libreccm/categorization/DomainOwnershipImExporter.java index 65dd84feb..07f9660a3 100644 --- a/ccm-core/src/main/java/org/libreccm/categorization/DomainOwnershipImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/categorization/DomainOwnershipImExporter.java @@ -27,6 +27,7 @@ import java.util.HashSet; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.persistence.EntityManager; @@ -47,6 +48,17 @@ public class DomainOwnershipImExporter @Inject private EntityManager entityManager; + @Override + @PostConstruct + protected void init() { + addRequiredEntities( + Set.of( + CcmApplication.class, + Domain.class + ) + ); + } + @Override public Class getEntityClass() { return DomainOwnership.class; @@ -58,15 +70,6 @@ public class DomainOwnershipImExporter entityManager.persist(entity); } - @Override - protected Set> getRequiredEntities() { - final Set> classes = new HashSet<>(); - classes.add(CcmApplication.class); - classes.add(Domain.class); - - return classes; - } - @Override protected DomainOwnership reloadEntity(final DomainOwnership entity) { try { diff --git a/ccm-core/src/main/java/org/libreccm/core/ResourceTypeImExporter.java b/ccm-core/src/main/java/org/libreccm/core/ResourceTypeImExporter.java index 771e3d05a..cde6f980f 100644 --- a/ccm-core/src/main/java/org/libreccm/core/ResourceTypeImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/core/ResourceTypeImExporter.java @@ -26,6 +26,7 @@ import java.util.Collections; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.inject.Inject; /** @@ -33,12 +34,18 @@ import javax.inject.Inject; * @author Jens Pelzetter */ @Processes(ResourceType.class) -public class ResourceTypeImExporter - extends AbstractEntityImExporter{ - +public class ResourceTypeImExporter + extends AbstractEntityImExporter { + @Inject private ResourceTypeRepository repository; + @PostConstruct + @Override + protected void init() { + // Nothing + } + @Override public Class getEntityClass() { return ResourceType.class; @@ -49,11 +56,6 @@ public class ResourceTypeImExporter repository.save(entity); } - @Override - protected Set> getRequiredEntities() { - return Collections.emptySet(); - } - @Override protected ResourceType reloadEntity(final ResourceType entity) { return repository @@ -70,7 +72,5 @@ public class ResourceTypeImExporter ) ); } - - - + } diff --git a/ccm-core/src/main/java/org/libreccm/imexport/AbstractEntityImExporter.java b/ccm-core/src/main/java/org/libreccm/imexport/AbstractEntityImExporter.java index 0a1b6200a..e0f3147d6 100644 --- a/ccm-core/src/main/java/org/libreccm/imexport/AbstractEntityImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/imexport/AbstractEntityImExporter.java @@ -23,8 +23,11 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import java.io.IOException; +import java.util.Collections; +import java.util.HashSet; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.transaction.Transactional; @@ -42,12 +45,35 @@ public abstract class AbstractEntityImExporter { private final ObjectMapper objectMapper; + /** + * A set of entities which should be processed before this implementation is + * used. We can't use an annotation for this because we can't access the + * annotations in a portable way in the rest of the code because CDI + * containers usually create a {@link java.lang.reflect.Proxy} class and + * there is no portable way to unproxy a class. + * + * The required entities for implementation of + * {@code AbstractEntityImExporter} should be added in the implementation of + * this class using {@link #addRequiredEntities(java.util.Set)}. Other + * implementations of {@code AbstractEntityImExporter} may also add themself + * to the list of required entities of another implementation of + * {@code AbstractEnitityImExporter}. For this, {@link #getEntityClass()} + * should be used, to add the concrete implementation. + */ + private final Set> requiredEntities; + public AbstractEntityImExporter() { objectMapper = new ObjectMapper() .registerModule(new JavaTimeModule()); - + requiredEntities = new HashSet<>(); } + /** + * Abstract init method. Implementations MUST be annotated with + * {@link PostConstruct}. Th + */ + protected abstract void init(); + /** * Returns the Entity class which is handled by the implementation. This * should be the same values than the class in the {@link Proceesses} @@ -71,10 +97,24 @@ public abstract class AbstractEntityImExporter { * * @return A {@link Set} of exportable entity classes which should be * processed before the entities which are processed by this - * implementation. If the implementation has no dependencies an - * empty {@link Set} should be returned. + * implementation. */ - protected abstract Set> getRequiredEntities(); + public final Set> getRequiredEntities() { + return Collections.unmodifiableSet(requiredEntities); + } + + /** + * Add entities that have be processed before this implementation is used. + * This method should only be called by the implementation of the + * {@link #init()} method. + * + * @param requiredEntities The additional required entities. + */ + public final void addRequiredEntities( + final Set> requiredEntities + ) { + this.requiredEntities.addAll(requiredEntities); + } @Transactional(Transactional.TxType.REQUIRED) public T importEntity(final String data) throws ImportExpection { @@ -119,7 +159,7 @@ public abstract class AbstractEntityImExporter { /** * Reloads the entity to export. Entities become detacted for several - * reasons before they are passed to the null null null {@link #exportEntity(org.libreccm.imexport.Exportable) method. The + * reasons before they are passed to the null null null null null null null {@link #exportEntity(org.libreccm.imexport.Exportable) method. The * implementation of this should reload the passed entity. * * @param entity The entity to reload. 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 519662a4d..acfcc7695 100644 --- a/ccm-core/src/main/java/org/libreccm/imexport/ImportExport.java +++ b/ccm-core/src/main/java/org/libreccm/imexport/ImportExport.java @@ -230,48 +230,6 @@ 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 - ) - ) - .findAny() - .orElseThrow( - () -> new UnexpectedErrorException( - String.format( - "There should be an ImExporter in the tree for " - + "%s, but it is not.", - Permission.class.getName() - ) - ) - ); - orderedNodes.remove(permissionsNode); - orderedNodes.add(permissionsNode); final ImportManifest manifest = createImportManifest(importName); @@ -562,6 +520,7 @@ public class ImportExport { public Class value() { return value; } + } } diff --git a/ccm-core/src/main/java/org/libreccm/security/GroupImExporter.java b/ccm-core/src/main/java/org/libreccm/security/GroupImExporter.java index f3185f2ee..a06d3e328 100644 --- a/ccm-core/src/main/java/org/libreccm/security/GroupImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/security/GroupImExporter.java @@ -26,6 +26,7 @@ import java.util.Collections; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.persistence.EntityManager; @@ -46,6 +47,12 @@ public class GroupImExporter extends AbstractEntityImExporter { @Inject private GroupRepository groupRepository; + @PostConstruct + @Override + protected void init() { + // Nothing + } + @Override public Class getEntityClass() { return Group.class; @@ -58,11 +65,6 @@ public class GroupImExporter extends AbstractEntityImExporter { entityManager.persist(entity); } - @Override - protected Set> getRequiredEntities() { - return Collections.emptySet(); - } - @Override protected Group reloadEntity(final Group entity) { return groupRepository diff --git a/ccm-core/src/main/java/org/libreccm/security/GroupMembershipImExporter.java b/ccm-core/src/main/java/org/libreccm/security/GroupMembershipImExporter.java index a9a513591..0a80d3f51 100644 --- a/ccm-core/src/main/java/org/libreccm/security/GroupMembershipImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/security/GroupMembershipImExporter.java @@ -19,13 +19,12 @@ package org.libreccm.security; import org.libreccm.imexport.AbstractEntityImExporter; -import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; -import java.util.HashSet; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.NoResultException; @@ -44,18 +43,20 @@ public class GroupMembershipImExporter @Inject private EntityManager entityManager; + @PostConstruct @Override - public Class getEntityClass() { - return GroupMembership.class; + protected void init() { + addRequiredEntities( + Set.of( + User.class, + Group.class + ) + ); } @Override - protected Set> getRequiredEntities() { - final Set> entities = new HashSet<>(); - entities.add(User.class); - entities.add(Group.class); - - return entities; + public Class getEntityClass() { + return GroupMembership.class; } @Override diff --git a/ccm-core/src/main/java/org/libreccm/security/PermissionImExporter.java b/ccm-core/src/main/java/org/libreccm/security/PermissionImExporter.java index 86653960f..9cd5dd796 100644 --- a/ccm-core/src/main/java/org/libreccm/security/PermissionImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/security/PermissionImExporter.java @@ -18,7 +18,6 @@ */ package org.libreccm.security; -import org.libreccm.core.CcmObject; import org.libreccm.imexport.AbstractEntityImExporter; import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; @@ -26,6 +25,7 @@ import org.libreccm.imexport.Processes; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; @@ -41,6 +41,16 @@ public class PermissionImExporter extends AbstractEntityImExporter { @Inject private PermissionRepository permissionRepository; + @PostConstruct + @Override + protected void init() { + addRequiredEntities( + Set.of( + Role.class + ) + ); + } + @Override public Class getEntityClass() { return Permission.class; @@ -51,13 +61,6 @@ public class PermissionImExporter extends AbstractEntityImExporter { permissionRepository.save(entity); } - @Override - protected Set> getRequiredEntities() { - return Set.of( - Role.class - ); - } - @Override protected Permission reloadEntity(final Permission entity) { return permissionRepository diff --git a/ccm-core/src/main/java/org/libreccm/security/RoleImExporter.java b/ccm-core/src/main/java/org/libreccm/security/RoleImExporter.java index c21fec3d5..d999079f3 100644 --- a/ccm-core/src/main/java/org/libreccm/security/RoleImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/security/RoleImExporter.java @@ -30,6 +30,7 @@ import java.util.Collections; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.Dependent; import javax.inject.Inject; import javax.persistence.EntityManager; @@ -53,6 +54,12 @@ public class RoleImExporter extends AbstractEntityImExporter { @Inject private RoleRepository roleRepository; + @PostConstruct + @Override + protected void init() { + // Nothing + } + @Override public Class getEntityClass() { return Role.class; @@ -82,11 +89,6 @@ public class RoleImExporter extends AbstractEntityImExporter { roleRepository.save(entity); } - @Override - protected Set> getRequiredEntities() { - return Collections.emptySet(); - } - @Override protected Role reloadEntity(final Role entity) { return roleRepository 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 68f8f6298..0d15cbfc0 100644 --- a/ccm-core/src/main/java/org/libreccm/security/RoleMembershipImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/security/RoleMembershipImExporter.java @@ -23,17 +23,13 @@ import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; import java.util.HashSet; -import java.util.List; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.NoResultException; -import javax.persistence.TypedQuery; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Root; import javax.transaction.Transactional; /** @@ -48,6 +44,18 @@ public class RoleMembershipImExporter @Inject private EntityManager entityManager; + @PostConstruct + @Override + protected void init() { + addRequiredEntities( + Set.of( + User.class, + Group.class, + Role.class + ) + ); + } + @Override public Class getEntityClass() { return RoleMembership.class; @@ -56,37 +64,7 @@ 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 { @@ -94,16 +72,6 @@ public class RoleMembershipImExporter } } - @Override - protected Set> getRequiredEntities() { - final Set> classes = new HashSet<>(); - classes.add(User.class); - classes.add(Group.class); - classes.add(Role.class); - - return classes; - } - @Override protected RoleMembership reloadEntity(final RoleMembership entity) { try { diff --git a/ccm-core/src/main/java/org/libreccm/security/UserImExporter.java b/ccm-core/src/main/java/org/libreccm/security/UserImExporter.java index 9abe63a00..f51b42e7e 100644 --- a/ccm-core/src/main/java/org/libreccm/security/UserImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/security/UserImExporter.java @@ -26,6 +26,7 @@ import java.util.Collections; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.persistence.EntityManager; @@ -46,6 +47,12 @@ public class UserImExporter extends AbstractEntityImExporter { @Inject private UserRepository userRepository; + @PostConstruct + @Override + protected void init() { + // Nothing + } + @Override public Class getEntityClass() { return User.class; @@ -60,11 +67,6 @@ public class UserImExporter extends AbstractEntityImExporter { entityManager.persist(entity); } - @Override - protected Set> getRequiredEntities() { - return Collections.emptySet(); - } - @Override protected User reloadEntity(final User entity) { return userRepository diff --git a/ccm-core/src/main/java/org/libreccm/web/ApplicationImExporter.java b/ccm-core/src/main/java/org/libreccm/web/ApplicationImExporter.java index cb2a296cd..acd4ae54b 100644 --- a/ccm-core/src/main/java/org/libreccm/web/ApplicationImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/web/ApplicationImExporter.java @@ -26,6 +26,7 @@ import java.util.Collections; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.transaction.Transactional; @@ -43,6 +44,12 @@ public class ApplicationImExporter @Inject private ApplicationRepository applicationRepository; + @PostConstruct + @Override + protected void init() { + // Nothing + } + @Override public Class getEntityClass() { return CcmApplication.class; @@ -54,11 +61,6 @@ public class ApplicationImExporter applicationRepository.save(entity); } - @Override - protected Set> getRequiredEntities() { - return Collections.emptySet(); - } - @Override protected CcmApplication reloadEntity(final CcmApplication entity) { return applicationRepository diff --git a/ccm-core/src/main/java/org/libreccm/workflow/AssignableTaskImExporter.java b/ccm-core/src/main/java/org/libreccm/workflow/AssignableTaskImExporter.java index 2d80a0e56..0d6d0923f 100644 --- a/ccm-core/src/main/java/org/libreccm/workflow/AssignableTaskImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/workflow/AssignableTaskImExporter.java @@ -22,10 +22,10 @@ import org.libreccm.imexport.AbstractEntityImExporter; import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; -import java.util.HashSet; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.transaction.Transactional; @@ -45,17 +45,20 @@ public class AssignableTaskImExporter @Inject private AssignableTaskRepository assignableTaskRepository; + @PostConstruct @Override - public Class getEntityClass() { - return AssignableTask.class; + protected void init() { + addRequiredEntities( + Set.of( + TaskComment.class, + Workflow.class + ) + ); } @Override - protected Set> getRequiredEntities() { - return Set.of( - TaskComment.class, - Workflow.class - ); + public Class getEntityClass() { + return AssignableTask.class; } @Override diff --git a/ccm-core/src/main/java/org/libreccm/workflow/TaskAssignmentImExporter.java b/ccm-core/src/main/java/org/libreccm/workflow/TaskAssignmentImExporter.java index 3576cb132..7cfef06ee 100644 --- a/ccm-core/src/main/java/org/libreccm/workflow/TaskAssignmentImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/workflow/TaskAssignmentImExporter.java @@ -26,6 +26,7 @@ import java.util.HashSet; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.persistence.EntityManager; @@ -46,6 +47,16 @@ public class TaskAssignmentImExporter @Inject private EntityManager entityManager; + @PostConstruct + @Override + protected void init() { + addRequiredEntities( + Set.of( + AssignableTask.class + ) + ); + } + @Override public Class getEntityClass() { return TaskAssignment.class; @@ -58,14 +69,6 @@ public class TaskAssignmentImExporter } - @Override - protected Set> getRequiredEntities() { - final Set> classes = new HashSet<>(); - classes.add(AssignableTask.class); - - return classes; - } - @Override protected TaskAssignment reloadEntity(final TaskAssignment entity) { try { diff --git a/ccm-core/src/main/java/org/libreccm/workflow/TaskCommentImExporter.java b/ccm-core/src/main/java/org/libreccm/workflow/TaskCommentImExporter.java index 9bf17b268..673cc51ac 100644 --- a/ccm-core/src/main/java/org/libreccm/workflow/TaskCommentImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/workflow/TaskCommentImExporter.java @@ -26,13 +26,14 @@ import java.util.Collections; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.transaction.Transactional; /** * Importer/Exporter for {@link TaskComment}s. - * + * * @author Tobias Osmers * @author Jens Pelzetter */ @@ -43,6 +44,12 @@ public class TaskCommentImExporter extends AbstractEntityImExporter @Inject private TaskCommentRepository taskCommentRepository; + @PostConstruct + @Override + protected void init() { + // Nothing + } + @Override public Class getEntityClass() { return TaskComment.class; @@ -54,11 +61,6 @@ public class TaskCommentImExporter extends AbstractEntityImExporter taskCommentRepository.save(entity); } - @Override - protected Set> getRequiredEntities() { - return Collections.emptySet(); - } - @Override protected TaskComment reloadEntity(final TaskComment entity) { return taskCommentRepository @@ -72,6 +74,5 @@ public class TaskCommentImExporter extends AbstractEntityImExporter ) ); } - - + } diff --git a/ccm-core/src/main/java/org/libreccm/workflow/TaskDependencyImExporter.java b/ccm-core/src/main/java/org/libreccm/workflow/TaskDependencyImExporter.java index 705fe1256..cb8ad1533 100644 --- a/ccm-core/src/main/java/org/libreccm/workflow/TaskDependencyImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/workflow/TaskDependencyImExporter.java @@ -26,6 +26,7 @@ import java.util.HashSet; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.persistence.EntityManager; @@ -46,6 +47,16 @@ public class TaskDependencyImExporter @Inject private EntityManager entityManager; + @PostConstruct + @Override + protected void init() { + addRequiredEntities( + Set.of( + AssignableTask.class + ) + ); + } + @Override public Class getEntityClass() { return TaskDependency.class; @@ -54,18 +65,9 @@ public class TaskDependencyImExporter @Override @Transactional(Transactional.TxType.REQUIRED) protected void saveImportedEntity(final TaskDependency entity) { -// entityManager.persist(entity); entityManager.merge(entity); } - @Override - protected Set> getRequiredEntities() { - final Set> classes = new HashSet<>(); - classes.add(AssignableTask.class); - - return classes; - } - @Override protected TaskDependency reloadEntity(final TaskDependency entity) { try { diff --git a/ccm-core/src/main/java/org/libreccm/workflow/WorkflowImExporter.java b/ccm-core/src/main/java/org/libreccm/workflow/WorkflowImExporter.java index 03b38bfc6..318938116 100644 --- a/ccm-core/src/main/java/org/libreccm/workflow/WorkflowImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/workflow/WorkflowImExporter.java @@ -26,6 +26,7 @@ import java.util.Collections; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.transaction.Transactional; @@ -42,6 +43,12 @@ public class WorkflowImExporter extends AbstractEntityImExporter { @Inject private WorkflowRepository workflowRepository; + @PostConstruct + @Override + protected void init() { + // Nothing + } + @Override public Class getEntityClass() { @@ -54,11 +61,6 @@ public class WorkflowImExporter extends AbstractEntityImExporter { workflowRepository.save(entity); } - @Override - protected Set> getRequiredEntities() { - return Collections.emptySet(); - } - @Override protected Workflow reloadEntity(final Workflow entity) { return workflowRepository diff --git a/ccm-docrepo/src/main/java/org/libreccm/docrepo/BlobObjectImExporter.java b/ccm-docrepo/src/main/java/org/libreccm/docrepo/BlobObjectImExporter.java index 8c2fc4082..cd94e3ff2 100644 --- a/ccm-docrepo/src/main/java/org/libreccm/docrepo/BlobObjectImExporter.java +++ b/ccm-docrepo/src/main/java/org/libreccm/docrepo/BlobObjectImExporter.java @@ -19,13 +19,11 @@ package org.libreccm.docrepo; import org.libreccm.imexport.AbstractEntityImExporter; -import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; -import java.util.Collections; import java.util.Objects; -import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.transaction.Transactional; @@ -45,6 +43,12 @@ public class BlobObjectImExporter extends AbstractEntityImExporter { @Inject private BlobObjectRepository blobObjectRepository; + @PostConstruct + @Override + protected void init() { + // Nothing + } + @Override public Class getEntityClass() { return BlobObject.class; @@ -57,11 +61,6 @@ public class BlobObjectImExporter extends AbstractEntityImExporter { blobObjectRepository.save(entity); } - @Override - protected Set> getRequiredEntities() { - return Collections.emptySet(); - } - @Override protected BlobObject reloadEntity(final BlobObject entity) { return blobObjectRepository diff --git a/ccm-docrepo/src/main/java/org/libreccm/docrepo/FileImExporter.java b/ccm-docrepo/src/main/java/org/libreccm/docrepo/FileImExporter.java index afe03f913..0abb2a1c9 100644 --- a/ccm-docrepo/src/main/java/org/libreccm/docrepo/FileImExporter.java +++ b/ccm-docrepo/src/main/java/org/libreccm/docrepo/FileImExporter.java @@ -26,6 +26,7 @@ import java.util.Collections; import java.util.Objects; import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; @@ -45,6 +46,12 @@ public class FileImExporter extends AbstractEntityImExporter { @Inject private FileRepository fileRepository; + @PostConstruct + @Override + protected void init() { + // Nothing + } + @Override public Class getEntityClass() { return File.class; @@ -56,11 +63,6 @@ public class FileImExporter extends AbstractEntityImExporter { fileRepository.save(portableObject); } - @Override - protected Set> getRequiredEntities() { - return Collections.emptySet(); - } - @Override protected File reloadEntity(final File entity) { return fileRepository diff --git a/ccm-docrepo/src/main/java/org/libreccm/docrepo/FolderImExporter.java b/ccm-docrepo/src/main/java/org/libreccm/docrepo/FolderImExporter.java index 7645f8307..9c9e6e95b 100644 --- a/ccm-docrepo/src/main/java/org/libreccm/docrepo/FolderImExporter.java +++ b/ccm-docrepo/src/main/java/org/libreccm/docrepo/FolderImExporter.java @@ -18,13 +18,11 @@ */ package org.libreccm.docrepo; -import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; -import java.util.Collections; import java.util.Objects; -import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.transaction.Transactional; @@ -43,6 +41,12 @@ public class FolderImExporter extends AbstractResourceImExporter { @Inject private FolderRepository folderRepository; + @PostConstruct + @Override + protected void init() { + // Nothing + } + @Override public Class getEntityClass() { return Folder.class; @@ -54,11 +58,6 @@ public class FolderImExporter extends AbstractResourceImExporter { folderRepository.save(entity); } - @Override - protected Set> getRequiredEntities() { - return Collections.emptySet(); - } - @Override protected Folder reloadEntity(final Folder entity) { return folderRepository diff --git a/ccm-docrepo/src/main/java/org/libreccm/docrepo/RepositoryImExporter.java b/ccm-docrepo/src/main/java/org/libreccm/docrepo/RepositoryImExporter.java index c159f7ea9..c7c375fe0 100644 --- a/ccm-docrepo/src/main/java/org/libreccm/docrepo/RepositoryImExporter.java +++ b/ccm-docrepo/src/main/java/org/libreccm/docrepo/RepositoryImExporter.java @@ -19,13 +19,11 @@ package org.libreccm.docrepo; import org.libreccm.imexport.AbstractEntityImExporter; -import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; -import java.util.Collections; import java.util.Objects; -import java.util.Set; +import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; @@ -40,6 +38,12 @@ public class RepositoryImExporter extends AbstractEntityImExporter { @Inject private RepositoryRepository repositoryRepository; + @PostConstruct + @Override + protected void init() { + // Nothing + } + @Override public Class getEntityClass() { return Repository.class; @@ -50,11 +54,6 @@ public class RepositoryImExporter extends AbstractEntityImExporter { repositoryRepository.save(portableObject); } - @Override - protected Set> getRequiredEntities() { - return Collections.emptySet(); - } - @Override protected Repository reloadEntity(final Repository entity) { return repositoryRepository