From 3fd3b4228e29fd4a2befeed68179f4215853ca9c Mon Sep 17 00:00:00 2001 From: jensp Date: Wed, 21 Nov 2018 19:01:58 +0000 Subject: [PATCH] CCM NG: Some fixes for the Im/Export system git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5744 8810af33-2d31-482b-a856-94f89814c4df --- .../categorization/DomainImExporter.java | 10 +++++ .../DomainOwnershipImExporter.java | 28 +++++++++---- .../libreccm/core/ResourceTypeImExporter.java | 10 +++++ .../java/org/libreccm/imexport/DependsOn.java | 42 ------------------- .../imexport/EntityImExporterTreeManager.java | 8 +--- .../libreccm/security/GroupImExporter.java | 10 +++++ .../security/PermissionImExporter.java | 15 ++++++- .../org/libreccm/security/RoleImExporter.java | 10 +++++ .../security/RoleMembershipImExporter.java | 27 ++++++++---- .../org/libreccm/security/UserImExporter.java | 10 +++++ .../libreccm/web/ApplicationImExporter.java | 10 +++++ .../workflow/TaskAssignmentMarshaller.java | 15 ++++++- .../workflow/TaskCommentImExporter.java | 17 +++++++- .../workflow/TaskDependencyMarshaller.java | 17 +++++++- .../libreccm/workflow/WorkflowImExporter.java | 10 +++++ 15 files changed, 168 insertions(+), 71 deletions(-) delete mode 100644 ccm-core/src/main/java/org/libreccm/imexport/DependsOn.java 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 697d259cb..13cf46d32 100644 --- a/ccm-core/src/main/java/org/libreccm/categorization/DomainImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/categorization/DomainImExporter.java @@ -19,8 +19,12 @@ package org.libreccm.categorization; import org.libreccm.imexport.AbstractEntityImExporter; +import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; +import java.util.Collections; +import java.util.Set; + import javax.enterprise.context.RequestScoped; import javax.inject.Inject; @@ -46,6 +50,12 @@ public class DomainImExporter extends AbstractEntityImExporter { domainRepository.save(entity); } + + @Override + protected Set> getRequiredEntities() { + + return Collections.emptySet(); + } 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 f0ae20cbd..f68029c00 100644 --- a/ccm-core/src/main/java/org/libreccm/categorization/DomainOwnershipImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/categorization/DomainOwnershipImExporter.java @@ -19,10 +19,13 @@ package org.libreccm.categorization; import org.libreccm.imexport.AbstractEntityImExporter; -import org.libreccm.imexport.DependsOn; +import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; import org.libreccm.web.CcmApplication; +import java.util.HashSet; +import java.util.Set; + import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.persistence.EntityManager; @@ -34,24 +37,33 @@ import javax.transaction.Transactional; */ @RequestScoped @Processes(DomainOwnership.class) -@DependsOn({CcmApplication.class, Domain.class}) -public class DomainOwnershipImExporter - extends AbstractEntityImExporter{ +public class DomainOwnershipImExporter + extends AbstractEntityImExporter { @Inject private EntityManager entityManager; - + @Override protected Class getEntityClass() { - + return DomainOwnership.class; } @Override @Transactional(Transactional.TxType.REQUIRED) protected void saveImportedEntity(final DomainOwnership entity) { - + entityManager.persist(entity); } - + + @Override + protected Set> getRequiredEntities() { + + final Set> classes = new HashSet<>(); + classes.add(CcmApplication.class); + classes.add(Domain.class); + + return classes; + } + } 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 4c5b87c74..db7767350 100644 --- a/ccm-core/src/main/java/org/libreccm/core/ResourceTypeImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/core/ResourceTypeImExporter.java @@ -19,8 +19,12 @@ package org.libreccm.core; import org.libreccm.imexport.AbstractEntityImExporter; +import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; +import java.util.Collections; +import java.util.Set; + import javax.inject.Inject; /** @@ -45,6 +49,12 @@ public class ResourceTypeImExporter repository.save(entity); } + + @Override + protected Set> getRequiredEntities() { + + return Collections.emptySet(); + } diff --git a/ccm-core/src/main/java/org/libreccm/imexport/DependsOn.java b/ccm-core/src/main/java/org/libreccm/imexport/DependsOn.java deleted file mode 100644 index a3c137bce..000000000 --- a/ccm-core/src/main/java/org/libreccm/imexport/DependsOn.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2018 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.imexport; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Used to describe dependencies of an {@link EntityImExporter} when importing - * entities. Used by {@link EntityImExporterTreeManager} to - * create a dependency tree and do topological sorting. - * - * @author Jens Pelzetter - */ -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.TYPE, - ElementType.PARAMETER, - ElementType.FIELD, - ElementType.METHOD}) -public @interface DependsOn { - - Class[] value(); - -} diff --git a/ccm-core/src/main/java/org/libreccm/imexport/EntityImExporterTreeManager.java b/ccm-core/src/main/java/org/libreccm/imexport/EntityImExporterTreeManager.java index 70806ea4f..c9c0c511f 100644 --- a/ccm-core/src/main/java/org/libreccm/imexport/EntityImExporterTreeManager.java +++ b/ccm-core/src/main/java/org/libreccm/imexport/EntityImExporterTreeManager.java @@ -196,11 +196,6 @@ final class EntityImExporterTreeManager { final Map nodes) throws DependencyException { - //Get the dependencies of the current EntityImExporter - final DependsOn dependsOn = imExporter - .getClass() - .getAnnotation(DependsOn.class); - //Get the name of the module from the module info. final String className = imExporter.getClass().getName(); LOGGER @@ -227,7 +222,8 @@ final class EntityImExporterTreeManager { className); //Process the EntityImExporter required by the current module and add //the dependency relations. - for (final Class clazz : dependsOn.value()) { + for (final Class clazz + : imExporter.getRequiredEntities()) { addDependencyRelation(nodes, node, clazz); } 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 090e0d875..156e93839 100644 --- a/ccm-core/src/main/java/org/libreccm/security/GroupImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/security/GroupImExporter.java @@ -19,8 +19,12 @@ package org.libreccm.security; import org.libreccm.imexport.AbstractEntityImExporter; +import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; +import java.util.Collections; +import java.util.Set; + import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.transaction.Transactional; @@ -47,5 +51,11 @@ public class GroupImExporter extends AbstractEntityImExporter{ groupRepository.save(entity); } + + @Override + protected Set> getRequiredEntities() { + + return Collections.emptySet(); + } } 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 fde80db45..50f1e29e9 100644 --- a/ccm-core/src/main/java/org/libreccm/security/PermissionImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/security/PermissionImExporter.java @@ -19,9 +19,12 @@ package org.libreccm.security; import org.libreccm.imexport.AbstractEntityImExporter; -import org.libreccm.imexport.DependsOn; +import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; +import java.util.HashSet; +import java.util.Set; + import javax.enterprise.context.RequestScoped; import javax.inject.Inject; @@ -31,7 +34,6 @@ import javax.inject.Inject; */ @RequestScoped @Processes(Permission.class) -@DependsOn({Role.class}) public class PermissionImExporter extends AbstractEntityImExporter{ @Inject @@ -47,6 +49,15 @@ public class PermissionImExporter extends AbstractEntityImExporter{ permissionRepository.save(entity); } + + @Override + protected Set> getRequiredEntities() { + + final Set> classes = new HashSet<>(); + classes.add(Role.class); + + return classes; + } 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 168b29485..f20f33bbd 100644 --- a/ccm-core/src/main/java/org/libreccm/security/RoleImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/security/RoleImExporter.java @@ -19,8 +19,12 @@ package org.libreccm.security; import org.libreccm.imexport.AbstractEntityImExporter; +import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; +import java.util.Collections; +import java.util.Set; + import javax.inject.Inject; /** @@ -44,5 +48,11 @@ public class RoleImExporter extends AbstractEntityImExporter { roleRepository.save(entity); } + + @Override + protected Set> getRequiredEntities() { + + return Collections.emptySet(); + } } 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 2bef0b326..df067996f 100644 --- a/ccm-core/src/main/java/org/libreccm/security/RoleMembershipImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/security/RoleMembershipImExporter.java @@ -19,9 +19,12 @@ package org.libreccm.security; import org.libreccm.imexport.AbstractEntityImExporter; -import org.libreccm.imexport.DependsOn; +import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; +import java.util.HashSet; +import java.util.Set; + import javax.inject.Inject; import javax.persistence.EntityManager; import javax.transaction.Transactional; @@ -31,16 +34,15 @@ import javax.transaction.Transactional; * @author Jens Pelzetter */ @Processes(RoleMembership.class) -@DependsOn({User.class, Group.class, Role.class}) -public class RoleMembershipImExporter - extends AbstractEntityImExporter{ +public class RoleMembershipImExporter + extends AbstractEntityImExporter { @Inject private EntityManager entityManager; - + @Override protected Class getEntityClass() { - + return RoleMembership.class; } @@ -50,5 +52,16 @@ public class RoleMembershipImExporter entityManager.persist(entity); } - + + @Override + protected Set> getRequiredEntities() { + + final Set> classes = new HashSet<>(); + classes.add(User.class); + classes.add(Group.class); + classes.add(Role.class); + + return classes; + } + } 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 148916d0f..34be05cbf 100644 --- a/ccm-core/src/main/java/org/libreccm/security/UserImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/security/UserImExporter.java @@ -19,8 +19,12 @@ package org.libreccm.security; import org.libreccm.imexport.AbstractEntityImExporter; +import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; +import java.util.Collections; +import java.util.Set; + import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.transaction.Transactional; @@ -48,4 +52,10 @@ public class UserImExporter extends AbstractEntityImExporter { userRepository.save(entity); } + @Override + protected Set> getRequiredEntities() { + + return Collections.emptySet(); + } + } 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 3c790cdfa..93c9ea187 100644 --- a/ccm-core/src/main/java/org/libreccm/web/ApplicationImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/web/ApplicationImExporter.java @@ -19,8 +19,12 @@ package org.libreccm.web; import org.libreccm.imexport.AbstractEntityImExporter; +import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; +import java.util.Collections; +import java.util.Set; + import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.transaction.Transactional; @@ -49,6 +53,12 @@ public class ApplicationImExporter applicationRepository.save(entity); } + + @Override + protected Set> getRequiredEntities() { + + return Collections.emptySet(); + } diff --git a/ccm-core/src/main/java/org/libreccm/workflow/TaskAssignmentMarshaller.java b/ccm-core/src/main/java/org/libreccm/workflow/TaskAssignmentMarshaller.java index f5dea4794..e381f0a74 100644 --- a/ccm-core/src/main/java/org/libreccm/workflow/TaskAssignmentMarshaller.java +++ b/ccm-core/src/main/java/org/libreccm/workflow/TaskAssignmentMarshaller.java @@ -19,9 +19,12 @@ package org.libreccm.workflow; import org.libreccm.imexport.AbstractEntityImExporter; -import org.libreccm.imexport.DependsOn; +import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; +import java.util.HashSet; +import java.util.Set; + import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.persistence.EntityManager; @@ -33,7 +36,6 @@ import javax.transaction.Transactional; */ @RequestScoped @Processes(TaskAssignment.class) -@DependsOn({AssignableTask.class}) public class TaskAssignmentMarshaller extends AbstractEntityImExporter { @@ -53,4 +55,13 @@ public class TaskAssignmentMarshaller entityManager.persist(entity); } + + @Override + protected Set> getRequiredEntities() { + + final Set> classes = new HashSet<>(); + classes.add(AssignableTask.class); + + return classes; + } } 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 0105fb960..28ac7b90e 100644 --- a/ccm-core/src/main/java/org/libreccm/workflow/TaskCommentImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/workflow/TaskCommentImExporter.java @@ -19,9 +19,12 @@ package org.libreccm.workflow; import org.libreccm.imexport.AbstractEntityImExporter; -import org.libreccm.imexport.DependsOn; +import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; +import java.util.HashSet; +import java.util.Set; + import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.transaction.Transactional; @@ -32,7 +35,6 @@ import javax.transaction.Transactional; */ @RequestScoped @Processes(TaskComment.class) -@DependsOn(AssignableTask.class) public class TaskCommentImExporter extends AbstractEntityImExporter { @Inject @@ -48,4 +50,15 @@ public class TaskCommentImExporter extends AbstractEntityImExporter protected void saveImportedEntity(TaskComment entity) { taskCommentRepository.save(entity); } + + @Override + protected Set> getRequiredEntities() { + + final Set> classes = new HashSet<>(); + classes.add(AssignableTask.class); + + return classes; + } + + } diff --git a/ccm-core/src/main/java/org/libreccm/workflow/TaskDependencyMarshaller.java b/ccm-core/src/main/java/org/libreccm/workflow/TaskDependencyMarshaller.java index 4ce096f71..33423d594 100644 --- a/ccm-core/src/main/java/org/libreccm/workflow/TaskDependencyMarshaller.java +++ b/ccm-core/src/main/java/org/libreccm/workflow/TaskDependencyMarshaller.java @@ -19,9 +19,12 @@ package org.libreccm.workflow; import org.libreccm.imexport.AbstractEntityImExporter; -import org.libreccm.imexport.DependsOn; +import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; +import java.util.HashSet; +import java.util.Set; + import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.persistence.EntityManager; @@ -33,7 +36,6 @@ import javax.transaction.Transactional; */ @RequestScoped @Processes(TaskDependency.class) -@DependsOn({AssignableTask.class}) public class TaskDependencyMarshaller extends AbstractEntityImExporter { @@ -52,4 +54,15 @@ public class TaskDependencyMarshaller entityManager.persist(entity); } + @Override + protected Set> getRequiredEntities() { + + final Set> classes = new HashSet<>(); + classes.add(AssignableTask.class); + + return classes; + } + + + } 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 c0ce60c70..ac83dd74a 100644 --- a/ccm-core/src/main/java/org/libreccm/workflow/WorkflowImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/workflow/WorkflowImExporter.java @@ -19,8 +19,12 @@ package org.libreccm.workflow; import org.libreccm.imexport.AbstractEntityImExporter; +import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Processes; +import java.util.Collections; +import java.util.Set; + import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.transaction.Transactional; @@ -49,4 +53,10 @@ public class WorkflowImExporter extends AbstractEntityImExporter { workflowRepository.save(entity); } + @Override + protected Set> getRequiredEntities() { + + return Collections.emptySet(); + } + }