From a539740f3c3f3b00d2c8d78644b9531f0e606618 Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Thu, 3 Dec 2020 21:10:14 +0100 Subject: [PATCH] Bugfix --- .../ContentSectionImExporter.java | 2 +- .../contenttypes/ArticleImExporter.java | 2 +- .../contenttypes/EventImExporter.java | 2 +- .../MultiPartArticleImExporter.java | 2 +- .../librecms/contenttypes/NewsImExporter.java | 2 +- .../CategorizationImExporter.java | 3 +- .../categorization/CategoryImExporter.java | 2 +- .../categorization/DomainImExporter.java | 2 +- .../DomainOwnershipImExporter.java | 2 +- .../libreccm/core/ResourceTypeImExporter.java | 3 +- .../imexport/AbstractEntityImExporter.java | 2 +- .../org/libreccm/imexport/ImportExport.java | 172 +++++++++--------- .../libreccm/security/GroupImExporter.java | 2 +- .../security/GroupMembershipImExporter.java | 3 +- .../security/PermissionImExporter.java | 2 +- .../org/libreccm/security/RoleImExporter.java | 3 +- .../security/RoleMembershipImExporter.java | 3 +- .../org/libreccm/security/UserImExporter.java | 2 +- .../workflow/AssignableTaskImExporter.java | 2 +- .../workflow/TaskAssignmentImExporter.java | 2 +- .../workflow/TaskCommentImExporter.java | 2 +- .../workflow/TaskDependencyImExporter.java | 2 +- .../libreccm/workflow/WorkflowImExporter.java | 2 +- 23 files changed, 109 insertions(+), 112 deletions(-) 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 78135dee8..a2cf7ecd0 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionImExporter.java @@ -29,7 +29,7 @@ public class ContentSectionImExporter private ContentSectionRepository sectionRepository; @Override - protected Class getEntityClass() { + public Class getEntityClass() { return ContentSection.class; } diff --git a/ccm-cms/src/main/java/org/librecms/contenttypes/ArticleImExporter.java b/ccm-cms/src/main/java/org/librecms/contenttypes/ArticleImExporter.java index d5110ffed..e2bbcce54 100644 --- a/ccm-cms/src/main/java/org/librecms/contenttypes/ArticleImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/contenttypes/ArticleImExporter.java @@ -19,7 +19,7 @@ import javax.enterprise.context.RequestScoped; public class ArticleImExporter extends AbstractContentItemImExporter
{ @Override - protected Class
getEntityClass() { + public Class
getEntityClass() { return Article.class; } diff --git a/ccm-cms/src/main/java/org/librecms/contenttypes/EventImExporter.java b/ccm-cms/src/main/java/org/librecms/contenttypes/EventImExporter.java index da919aa54..782d2d049 100644 --- a/ccm-cms/src/main/java/org/librecms/contenttypes/EventImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/contenttypes/EventImExporter.java @@ -19,7 +19,7 @@ import javax.enterprise.context.RequestScoped; public class EventImExporter extends AbstractContentItemImExporter { @Override - protected Class getEntityClass() { + public Class getEntityClass() { return Event.class; } diff --git a/ccm-cms/src/main/java/org/librecms/contenttypes/MultiPartArticleImExporter.java b/ccm-cms/src/main/java/org/librecms/contenttypes/MultiPartArticleImExporter.java index 204b2e053..ca3349900 100644 --- a/ccm-cms/src/main/java/org/librecms/contenttypes/MultiPartArticleImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/contenttypes/MultiPartArticleImExporter.java @@ -20,7 +20,7 @@ public class MultiPartArticleImExporter extends AbstractContentItemImExporter { @Override - protected Class getEntityClass() { + public Class getEntityClass() { return MultiPartArticle.class; } diff --git a/ccm-cms/src/main/java/org/librecms/contenttypes/NewsImExporter.java b/ccm-cms/src/main/java/org/librecms/contenttypes/NewsImExporter.java index 872082c64..42ee1d1b7 100644 --- a/ccm-cms/src/main/java/org/librecms/contenttypes/NewsImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/contenttypes/NewsImExporter.java @@ -19,7 +19,7 @@ import javax.enterprise.context.RequestScoped; public class NewsImExporter extends AbstractContentItemImExporter { @Override - protected Class getEntityClass() { + public Class getEntityClass() { return News.class; } 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 ebb62da5b..45b6a74b1 100644 --- a/ccm-core/src/main/java/org/libreccm/categorization/CategorizationImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/categorization/CategorizationImExporter.java @@ -48,8 +48,7 @@ public class CategorizationImExporter private Instance dependenciesProviders; @Override - protected Class getEntityClass() { - + public Class getEntityClass() { return Categorization.class; } 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 ad1b05a21..9012e6245 100644 --- a/ccm-core/src/main/java/org/libreccm/categorization/CategoryImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/categorization/CategoryImExporter.java @@ -42,7 +42,7 @@ public class CategoryImExporter extends AbstractEntityImExporter { private CategoryRepository categoryRepository; @Override - protected Class getEntityClass() { + public Class getEntityClass() { return Category.class; } 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 ef732de27..2dda0ebfc 100644 --- a/ccm-core/src/main/java/org/libreccm/categorization/DomainImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/categorization/DomainImExporter.java @@ -41,7 +41,7 @@ public class DomainImExporter extends AbstractEntityImExporter { private DomainRepository domainRepository; @Override - protected Class getEntityClass() { + public Class getEntityClass() { return Domain.class; } 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 124cc643f..1fda262bb 100644 --- a/ccm-core/src/main/java/org/libreccm/categorization/DomainOwnershipImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/categorization/DomainOwnershipImExporter.java @@ -46,7 +46,7 @@ public class DomainOwnershipImExporter private EntityManager entityManager; @Override - protected Class getEntityClass() { + public Class getEntityClass() { return DomainOwnership.class; } 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 db7767350..8262c43ed 100644 --- a/ccm-core/src/main/java/org/libreccm/core/ResourceTypeImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/core/ResourceTypeImExporter.java @@ -39,8 +39,7 @@ public class ResourceTypeImExporter private ResourceTypeRepository repository; @Override - protected Class getEntityClass() { - + public Class getEntityClass() { return ResourceType.class; } 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 b3ecd72b0..249801fca 100644 --- a/ccm-core/src/main/java/org/libreccm/imexport/AbstractEntityImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/imexport/AbstractEntityImExporter.java @@ -53,7 +53,7 @@ public abstract class AbstractEntityImExporter { * * @return The Entity class which is handled by the implementation. */ - protected abstract Class getEntityClass(); + public abstract Class getEntityClass(); /** * A set of entities which should be processed before this implementation is 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 1975136cc..e896ceb20 100644 --- a/ccm-core/src/main/java/org/libreccm/imexport/ImportExport.java +++ b/ccm-core/src/main/java/org/libreccm/imexport/ImportExport.java @@ -75,6 +75,23 @@ public class ImportExport { @Any private Instance> imExporters; + public List getExportableEntityTypes() { + try { + final EntityImExporterTreeManager treeManager + = new EntityImExporterTreeManager(); + final List tree = treeManager + .generateTree( + imExporters + .stream() + .collect(Collectors.toList()) + ); + + return tree; + } catch (DependencyException ex) { + throw new UnexpectedErrorException(ex); + } + } + /** * Exports the provided entities. The export will be written to a to the * {@code exports} directory in the CCM files directory. If {@code split} is @@ -151,84 +168,6 @@ public class ImportExport { entry.getValue()); } } - - public List getExportableEntityTypes() { - return imExporters - .stream() - .map(imexporter -> imexporter.getEntityClass().getName()) - .sorted() - .collect(Collectors.toList()); - } - - @SuppressWarnings("unchecked") - private JsonArrayBuilder createExportedEntities( - final String exportName, - final String type, - final List entities) { - - final JsonArrayBuilder filesArrayBuilder = Json.createArrayBuilder(); - - final Class clazz; - try { - clazz = (Class) Class.forName(type); - } catch (ClassNotFoundException ex) { - throw new UnexpectedErrorException(ex); - } - - final Instance> instance = imExporters - .select(new ProcessesLiteral(clazz)); - - final AbstractEntityImExporter imExporter; - if (instance.isUnsatisfied()) { - throw new UnexpectedErrorException(String.format( - "No EntityImExporter for entity type \"%s\" available.", - type)); - } else if (instance.isAmbiguous()) { - throw new UnexpectedErrorException(String.format( - "Instance reference for EntityImExporter for entity " - + "type \"%s\" is ambiguous.", - type)); - } else { - imExporter = instance.get(); - } - - for (Exportable entity : entities) { - - final String filename = String.format("%s.json", entity.getUuid()); - final OutputStream outputStream; - try { - outputStream = ccmFiles.createOutputStream(String.format( - "exports/%s/%s/%s", - exportName, - type, - filename)); - filesArrayBuilder.add(filename); - } catch (FileAccessException - | InsufficientPermissionsException ex) { - throw new UnexpectedErrorException(ex); - } - - final String exportedEntity; - try { - exportedEntity = imExporter.exportEntity(entity); - } catch (ExportException ex) { - throw new UnexpectedErrorException(ex); - } - try (final OutputStreamWriter writer = new OutputStreamWriter( - outputStream, StandardCharsets.UTF_8)) { - - writer.write(exportedEntity); - - } catch (IOException ex) { - throw new UnexpectedErrorException(ex); - } -// try (JsonWriter writer = Json.createWriter(outputStream)) { -// writer.writeObject(exportedEntity); -// } - } - - return filesArrayBuilder; - } /** * Imports all entities from the files in the {@link imports} directory @@ -261,15 +200,15 @@ public class ImportExport { throw new UnexpectedErrorException(ex); } - final List> imExportersList - = new ArrayList<>(); - imExporters.forEach(imExporter -> imExportersList.add(imExporter)); - try { final EntityImExporterTreeManager treeManager = new EntityImExporterTreeManager(); final List tree = treeManager - .generateTree(imExportersList); + .generateTree( + imExporters + .stream() + .collect(Collectors.toList()) + ); final List orderedNodes = treeManager .orderImExporters(tree); @@ -347,8 +286,6 @@ public class ImportExport { .lines() .collect(Collectors.joining("\n")); -// final JsonReader reader = Json.createReader(inputStream); -// final JsonObject data = reader.readObject(); imExporter.importEntity(data); } catch (IOException @@ -380,6 +317,71 @@ public class ImportExport { .collect(Collectors.toList()); } + @SuppressWarnings("unchecked") + private JsonArrayBuilder createExportedEntities( + final String exportName, + final String type, + final List entities) { + + final Class clazz; + try { + clazz = (Class) Class.forName(type); + } catch (ClassNotFoundException ex) { + throw new UnexpectedErrorException(ex); + } + + final Instance> instance = imExporters + .select(new ProcessesLiteral(clazz)); + + final AbstractEntityImExporter imExporter; + if (instance.isUnsatisfied()) { + throw new UnexpectedErrorException(String.format( + "No EntityImExporter for entity type \"%s\" available.", + type)); + } else if (instance.isAmbiguous()) { + throw new UnexpectedErrorException(String.format( + "Instance reference for EntityImExporter for entity " + + "type \"%s\" is ambiguous.", + type)); + } else { + imExporter = instance.get(); + } + + final JsonArrayBuilder filesArrayBuilder = Json.createArrayBuilder(); + for (Exportable entity : entities) { + final String filename = String.format("%s.json", entity.getUuid()); + final OutputStream outputStream; + try { + outputStream = ccmFiles.createOutputStream(String.format( + "exports/%s/%s/%s", + exportName, + type, + filename)); + filesArrayBuilder.add(filename); + } catch (FileAccessException + | InsufficientPermissionsException ex) { + throw new UnexpectedErrorException(ex); + } + + final String exportedEntity; + try { + exportedEntity = imExporter.exportEntity(entity); + } catch (ExportException ex) { + throw new UnexpectedErrorException(ex); + } + try (final OutputStreamWriter writer = new OutputStreamWriter( + outputStream, StandardCharsets.UTF_8)) { + + writer.write(exportedEntity); + + } catch (IOException ex) { + throw new UnexpectedErrorException(ex); + } + } + + return filesArrayBuilder; + } + private boolean isImportArchive(final String path) { final String manifestPath = String.format("imports/%s/ccm-export.json", 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 9d0253018..669c6bd45 100644 --- a/ccm-core/src/main/java/org/libreccm/security/GroupImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/security/GroupImExporter.java @@ -46,7 +46,7 @@ public class GroupImExporter extends AbstractEntityImExporter { private GroupRepository groupRepository; @Override - protected Class getEntityClass() { + public Class getEntityClass() { return Group.class; } 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 8f26d5c91..fdda99ce8 100644 --- a/ccm-core/src/main/java/org/libreccm/security/GroupMembershipImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/security/GroupMembershipImExporter.java @@ -43,8 +43,7 @@ public class GroupMembershipImExporter private EntityManager entityManager; @Override - protected Class getEntityClass() { - + public Class getEntityClass() { return GroupMembership.class; } 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 48275d0dc..f51633d09 100644 --- a/ccm-core/src/main/java/org/libreccm/security/PermissionImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/security/PermissionImExporter.java @@ -41,7 +41,7 @@ public class PermissionImExporter extends AbstractEntityImExporter{ private PermissionRepository permissionRepository; @Override - protected Class getEntityClass() { + public Class getEntityClass() { return Permission.class; } 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 05f6cdc45..f2a4d9bf2 100644 --- a/ccm-core/src/main/java/org/libreccm/security/RoleImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/security/RoleImExporter.java @@ -39,8 +39,7 @@ public class RoleImExporter extends AbstractEntityImExporter { private RoleRepository roleRepository; @Override - protected Class getEntityClass() { - + public Class getEntityClass() { return Role.class; } 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 a397299ce..0c9d82f10 100644 --- a/ccm-core/src/main/java/org/libreccm/security/RoleMembershipImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/security/RoleMembershipImExporter.java @@ -42,8 +42,7 @@ public class RoleMembershipImExporter private EntityManager entityManager; @Override - protected Class getEntityClass() { - + public Class getEntityClass() { return RoleMembership.class; } 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 bf34502ee..5f4e29943 100644 --- a/ccm-core/src/main/java/org/libreccm/security/UserImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/security/UserImExporter.java @@ -46,7 +46,7 @@ public class UserImExporter extends AbstractEntityImExporter { private UserRepository userRepository; @Override - protected Class getEntityClass() { + public Class getEntityClass() { return User.class; } 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 287b63237..13f346ae1 100644 --- a/ccm-core/src/main/java/org/libreccm/workflow/AssignableTaskImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/workflow/AssignableTaskImExporter.java @@ -45,7 +45,7 @@ public class AssignableTaskImExporter private AssignableTaskRepository assignableTaskRepository; @Override - protected Class getEntityClass() { + public Class getEntityClass() { return AssignableTask.class; } 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 bb8fb2933..f4bb4c704 100644 --- a/ccm-core/src/main/java/org/libreccm/workflow/TaskAssignmentImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/workflow/TaskAssignmentImExporter.java @@ -45,7 +45,7 @@ public class TaskAssignmentImExporter private EntityManager entityManager; @Override - protected Class getEntityClass() { + public Class getEntityClass() { return TaskAssignment.class; } 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 adec8de19..6ffe6a7c3 100644 --- a/ccm-core/src/main/java/org/libreccm/workflow/TaskCommentImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/workflow/TaskCommentImExporter.java @@ -43,7 +43,7 @@ public class TaskCommentImExporter extends AbstractEntityImExporter private TaskCommentRepository taskCommentRepository; @Override - protected Class getEntityClass() { + public Class getEntityClass() { return TaskComment.class; } 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 e66aac96b..15293c412 100644 --- a/ccm-core/src/main/java/org/libreccm/workflow/TaskDependencyImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/workflow/TaskDependencyImExporter.java @@ -45,7 +45,7 @@ public class TaskDependencyImExporter private EntityManager entityManager; @Override - protected Class getEntityClass() { + public Class getEntityClass() { return TaskDependency.class; } 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 bb0c24c71..de9549a1d 100644 --- a/ccm-core/src/main/java/org/libreccm/workflow/WorkflowImExporter.java +++ b/ccm-core/src/main/java/org/libreccm/workflow/WorkflowImExporter.java @@ -42,7 +42,7 @@ public class WorkflowImExporter extends AbstractEntityImExporter { private WorkflowRepository workflowRepository; @Override - protected Class getEntityClass() { + public Class getEntityClass() { return Workflow.class; }