From 66906c722b2c22eb1f339bfb61c984bd6585b820 Mon Sep 17 00:00:00 2001 From: jensp Date: Wed, 24 Oct 2018 17:18:34 +0000 Subject: [PATCH] Revised Exporter for migration to 7.x.y git-svn-id: https://svn.libreccm.org/ccm/trunk@5713 8810af33-2d31-482b-a856-94f89814c4df --- ...java => NgCmsFileAssetCollection.java.off} | 0 ...sion.java => FileAssetConversion.java.off} | 7 +- .../{FileAsset.java => FileAsset.java.off} | 3 +- ...ion.java => NgCmsImageCollection.java.off} | 0 ...nversion.java => ImageConversion.java.off} | 7 +- .../assets/{Image.java => Image.java.off} | 3 +- ....java => NgCmsSideNoteCollection.java.off} | 0 ...rsion.java => SideNoteConversion.java.off} | 7 +- .../{SideNote.java => SideNote.java.off} | 5 +- ...n.java => NgCmsArticleCollection.java.off} | 0 ...ersion.java => ArticleConversion.java.off} | 7 +- .../{Article.java => Article.java.off} | 5 +- ...ion.java => NgCmsEventCollection.java.off} | 0 ...nversion.java => EventConversion.java.off} | 7 +- .../{Event.java => Event.java.off} | 5 +- ...java => NgCmsMPArticleCollection.java.off} | 0 ...va => MultiPartArticleConversion.java.off} | 7 +- ...ultiPartArticleSectionConversion.java.off} | 7 +- ...Article.java => MultiPartArticle.java.off} | 5 +- ....java => MultiPartArticleSection.java.off} | 5 +- ...tion.java => NgCmsNewsCollection.java.off} | 0 ...onversion.java => NewsConversion.java.off} | 7 +- .../contenttypes/{News.java => News.java.off} | 5 +- .../src/com/arsdigita/cms/ContentType.java | 201 ++++++++------ ...msConverter.java => CmsConverter.java.off} | 5 +- ...llection.java => NgCmsCollection.java.off} | 0 ...java => ContentSectionConversion.java.off} | 28 +- ...on.java => ContentTypeConversion.java.off} | 7 +- ...version.java => FolderConversion.java.off} | 7 +- ...sion.java => LifecycleConversion.java.off} | 7 +- ...=> LifecycleDefinitionConversion.java.off} | 7 +- ...nversion.java => PhaseConversion.java.off} | 7 +- ...ava => PhaseDefinitionConversion.java.off} | 7 +- ...{CmsExporter.java => CmsExporter.java.off} | 4 +- ...{BinaryAsset.java => BinaryAsset.java.off} | 4 +- ...alMetadata.java => LegalMetadata.java.off} | 5 +- .../{Asset.java => Asset.java.off} | 7 +- ...hmentList.java => AttachmentList.java.off} | 5 +- ...{ContentItem.java => ContentItem.java.off} | 10 +- ...rsion.java => ContentItemVersion.java.off} | 0 ...ntSection.java => ContentSection.java.off} | 10 +- ...{ContentType.java => ContentType.java.off} | 12 +- ...TypeMode.java => ContentTypeMode.java.off} | 0 .../{Folder.java => Folder.java.off} | 7 +- .../{FolderType.java => FolderType.java.off} | 0 ...ttachment.java => ItemAttachment.java.off} | 3 +- ...java => ContentItemVersionMapper.java.off} | 0 ...er.java => ContentTypeModeMapper.java.off} | 0 ...eMapper.java => FolderTypeMapper.java.off} | 0 .../{Lifecycle.java => Lifecycle.java.off} | 3 +- ...tion.java => LifecycleDefinition.java.off} | 5 +- .../lifecycle/{Phase.java => Phase.java.off} | 3 +- ...finition.java => PhaseDefinition.java.off} | 5 +- .../src/com/arsdigita/core/Initializer.java | 224 +++++++++------ .../kernel/permissions/Permission.java | 2 +- .../portation/cmd/ExportCliTool.java | 191 ------------- .../conversion/NgCoreCollection.java | 94 ------- .../categorization/CategoriesExporter.java | 126 +++++++++ .../categorization/Categorization.java.off} | 43 ++- .../CategorizationIdGenerator.java.off} | 2 +- .../CategorizationMarshaller.java.off} | 14 +- .../CategorizationsExporter.java | 114 ++++++++ .../categorization/Category.java.off} | 19 +- .../CategoryIdResolver.java.off} | 2 +- .../CategoryMarshaller.java.off} | 14 +- .../libreccm/categorization/Domain.java.off} | 21 +- .../categorization/DomainIdResolver.java.off} | 2 +- .../categorization/DomainMarshaller.java.off} | 14 +- .../categorization/DomainOwnership.java.off} | 16 +- .../DomainOwnershipIdGenerator.java.off} | 2 +- .../DomainOwnershipMarshaller.java.off} | 14 +- .../core/AbstractCcmObjectsExporter.java | 77 ++++++ .../core/AbstractResourceTypesExporter.java | 79 ++++++ .../core/AbstractResourcesExporter.java | 58 ++++ .../libreccm/core/CcmObject.java.off} | 19 +- .../core/CcmObjectIdResolver.java.off} | 2 +- .../libreccm/core/EmailAddress.java.off} | 2 +- .../libreccm/core/Resource.java.off} | 15 +- .../core/ResourceIdResolver.java.off} | 2 +- .../libreccm/core/ResourceType.java.off} | 12 +- .../core/ResourceTypeIdResolver.java.off} | 2 +- .../core/ResourceTypeMarshaller.java.off} | 16 +- .../libreccm/core/ResourceTypesExporter.java | 38 +++ .../export/AbstractDomainObjectsExporter.java | 166 +++++++++++ .../org/libreccm/export/ExportException.java | 54 ++++ .../org/libreccm/export/ExportManager.java | 257 ++++++++++++++++++ .../src/org/libreccm/export/Exportable.java | 12 + .../src/org/libreccm/export/IdSequence.java | 26 ++ .../libreccm/export/cmd/ExportCliTool.java | 72 +++++ .../export/cmd/ExportLogger.java.off} | 2 +- .../export/cmd/RootConverter.java.off} | 2 +- .../export/cmd/RootExporter.java.off} | 8 +- .../AbstractDomainObjectConverter.java.off} | 6 +- .../AbstractDomainObjectsConverter.java.off} | 12 +- .../convert/AbstractExporterManager.java.off} | 7 +- .../convert/AbstractMarshaller.java.off} | 2 +- .../export/convert/CcmCoreEntities.java.off | 113 ++++++++ .../export/convert/CoreConverter.java.off} | 57 ++-- .../libreccm/export/convert/Format.java.off} | 2 +- .../export/convert/Portable.java.off} | 2 +- .../CategoriesConverter.java.off} | 150 +++++----- .../categorization/DomainsConverter.java.off} | 43 +-- .../util/CategoryInformation.java.off} | 4 +- .../core/ResourceTypesConverter.java.off} | 23 +- .../l10n/jaxb/LocalizedStringValue.java.off} | 4 +- .../l10n/jaxb/LocalizedStringValues.java.off} | 4 +- .../LocalizedStringValuesAdapter.java.off} | 5 +- .../security/GroupsConverter.java.off} | 87 +++--- .../security/PermissionsConverter.java.off} | 70 +++-- .../convert/security/RolesConverter.java.off} | 39 +-- .../convert/security/UsersConverter.java.off} | 22 +- .../web/CcmApplicationsConverter.java.off} | 52 ++-- .../AssignableTasksConverter.java.off} | 74 ++--- .../workflow/TaskCommentsConverter.java.off} | 34 ++- .../workflow/WorkflowsConverter.java.off} | 47 ++-- .../export/modules/CoreExporter.java.off} | 40 ++- .../security/util/PermissionIdMapper.java | 2 +- .../workflow/util/StateMapper.java.off} | 7 +- .../libreccm/l10n/L10NConstants.java.off} | 2 +- .../libreccm/l10n/LocalizedString.java.off} | 2 +- .../libreccm/security/Group.java.off} | 10 +- .../security/GroupIdResolver.java.off} | 2 +- .../security/GroupMarshaller.java.off} | 14 +- .../security/GroupMembership.java.off} | 29 +- .../GroupMembershipIdGenerator.java.off} | 2 +- .../GroupMembershipMarshaller.java.off} | 14 +- .../security/GroupMembershipsExporter.java | 106 ++++++++ .../org/libreccm/security/GroupsExporter.java | 66 +++++ .../libreccm/security/Party.java.off} | 34 ++- .../security/PartyIdResolver.java.off} | 2 +- .../libreccm/security/Permission.java.off} | 62 +++-- .../security/PermissionIdGenerator.java.off} | 2 +- .../security/PermissionIdResolver.java.off} | 2 +- .../security/PermissionMarshaller.java.off} | 14 +- .../security/PermissionsExporter.java | 146 ++++++++++ .../libreccm/security/Role.java.off} | 59 ++-- .../security/RoleIdResolver.java.off} | 2 +- .../security/RoleMarshaller.java.off} | 14 +- .../security/RoleMembership.java.off} | 11 +- .../RoleMembershipIdGenerator.java.off} | 2 +- .../RoleMembershipMarshaller.java.off} | 14 +- .../security/RoleMembershipsExporter.java | 106 ++++++++ .../org/libreccm/security/RolesExporter.java | 73 +++++ .../libreccm/security/User.java.off} | 12 +- .../security/UserIdResolver.java.off} | 2 +- .../security/UserMarshaller.java.off} | 14 +- .../org/libreccm/security/UsersExporter.java | 99 +++++++ .../web/AbstractCcmApplicationsExporter.java | 35 +++ .../libreccm/web/CcmApplication.java.off} | 17 +- .../web/CcmApplicationIdResolver.java.off} | 2 +- .../web/CcmApplicationMarshaller.java.off} | 14 +- .../workflow/AbstractTasksExporter.java | 95 +++++++ .../workflow/AssignableTask.java.off} | 12 +- .../AssignableTaskIdResolver.java.off} | 2 +- .../AssignableTaskMarshaller.java.off} | 14 +- .../workflow/AssignableTasksExporter.java | 64 +++++ .../libreccm/workflow/Task.java.off} | 13 +- .../workflow/TaskAssignment.java.off} | 12 +- .../TaskAssignmentIdGenerator.java.off} | 2 +- .../TaskAssignmentMarshaller.java.off} | 14 +- .../workflow/TaskAssignmentsExporter.java | 112 ++++++++ .../libreccm/workflow/TaskComment.java.off} | 12 +- .../workflow/TaskCommentIdResolver.java.off} | 2 +- .../workflow/TaskCommentMarshaller.java.off} | 14 +- .../workflow/TaskCommentsExporter.java | 73 +++++ .../workflow/TaskDependenciesExporter.java | 107 ++++++++ .../workflow/TaskDependency.java.off} | 10 +- .../TaskDependencyIdGenerator.java.off} | 4 +- .../TaskDependencyMarshaller.java.off} | 14 +- .../workflow/TaskIdResolver.java.off} | 2 +- .../libreccm/workflow/TaskState.java.off} | 2 +- .../org/libreccm/workflow/TasksExporter.java | 40 +++ .../libreccm/workflow/Workflow.java.off} | 19 +- .../workflow/WorkflowIdResolver.java.off} | 2 +- .../workflow/WorkflowMarshaller.java.off} | 14 +- .../libreccm/workflow/WorkflowState.java.off} | 2 +- .../libreccm/workflow/WorkflowsExporter.java | 97 +++++++ 177 files changed, 3753 insertions(+), 1180 deletions(-) rename ccm-cms-assets-fileattachment/src/com/arsdigita/cms/portation/conversion/{NgCmsFileAssetCollection.java => NgCmsFileAssetCollection.java.off} (100%) rename ccm-cms-assets-fileattachment/src/com/arsdigita/cms/portation/conversion/assets/{FileAssetConversion.java => FileAssetConversion.java.off} (92%) rename ccm-cms-assets-fileattachment/src/com/arsdigita/cms/portation/modules/assets/{FileAsset.java => FileAsset.java.off} (96%) rename ccm-cms-assets-imagestep/src/com/arsdigita/cms/portation/conversion/{NgCmsImageCollection.java => NgCmsImageCollection.java.off} (100%) rename ccm-cms-assets-imagestep/src/com/arsdigita/cms/portation/conversion/assets/{ImageConversion.java => ImageConversion.java.off} (93%) rename ccm-cms-assets-imagestep/src/com/arsdigita/cms/portation/modules/assets/{Image.java => Image.java.off} (97%) rename ccm-cms-assets-notes/src/com/arsdigita/cms/portation/conversion/{NgCmsSideNoteCollection.java => NgCmsSideNoteCollection.java.off} (100%) rename ccm-cms-assets-notes/src/com/arsdigita/cms/portation/conversion/assets/{SideNoteConversion.java => SideNoteConversion.java.off} (92%) rename ccm-cms-assets-notes/src/com/arsdigita/cms/portation/modules/assets/{SideNote.java => SideNote.java.off} (94%) rename ccm-cms-types-article/src/com/arsdigita/cms/portation/conversion/{NgCmsArticleCollection.java => NgCmsArticleCollection.java.off} (100%) rename ccm-cms-types-article/src/com/arsdigita/cms/portation/conversion/contenttypes/{ArticleConversion.java => ArticleConversion.java.off} (93%) rename ccm-cms-types-article/src/com/arsdigita/cms/portation/modules/contenttypes/{Article.java => Article.java.off} (96%) rename ccm-cms-types-event/src/com/arsdigita/cms/portation/conversion/{NgCmsEventCollection.java => NgCmsEventCollection.java.off} (100%) rename ccm-cms-types-event/src/com/arsdigita/cms/portation/conversion/contenttypes/{EventConversion.java => EventConversion.java.off} (92%) rename ccm-cms-types-event/src/com/arsdigita/cms/portation/modules/contenttypes/{Event.java => Event.java.off} (98%) rename ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/conversion/{NgCmsMPArticleCollection.java => NgCmsMPArticleCollection.java.off} (100%) rename ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/conversion/contenttypes/{MultiPartArticleConversion.java => MultiPartArticleConversion.java.off} (94%) rename ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/conversion/contenttypes/{MultiPartArticleSectionConversion.java => MultiPartArticleSectionConversion.java.off} (92%) rename ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/modules/contenttypes/{MultiPartArticle.java => MultiPartArticle.java.off} (97%) rename ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/modules/contenttypes/{MultiPartArticleSection.java => MultiPartArticleSection.java.off} (96%) rename ccm-cms-types-newsitem/src/com/arsdigita/cms/portation/conversion/{NgCmsNewsCollection.java => NgCmsNewsCollection.java.off} (100%) rename ccm-cms-types-newsitem/src/com/arsdigita/cms/portation/conversion/contenttypes/{NewsConversion.java => NewsConversion.java.off} (92%) rename ccm-cms-types-newsitem/src/com/arsdigita/cms/portation/modules/contenttypes/{News.java => News.java.off} (96%) rename ccm-cms/src/com/arsdigita/cms/portation/conversion/{CmsConverter.java => CmsConverter.java.off} (97%) rename ccm-cms/src/com/arsdigita/cms/portation/conversion/{NgCmsCollection.java => NgCmsCollection.java.off} (100%) rename ccm-cms/src/com/arsdigita/cms/portation/conversion/contentsection/{ContentSectionConversion.java => ContentSectionConversion.java.off} (93%) rename ccm-cms/src/com/arsdigita/cms/portation/conversion/contentsection/{ContentTypeConversion.java => ContentTypeConversion.java.off} (93%) rename ccm-cms/src/com/arsdigita/cms/portation/conversion/contentsection/{FolderConversion.java => FolderConversion.java.off} (93%) rename ccm-cms/src/com/arsdigita/cms/portation/conversion/lifecycle/{LifecycleConversion.java => LifecycleConversion.java.off} (94%) rename ccm-cms/src/com/arsdigita/cms/portation/conversion/lifecycle/{LifecycleDefinitionConversion.java => LifecycleDefinitionConversion.java.off} (95%) rename ccm-cms/src/com/arsdigita/cms/portation/conversion/lifecycle/{PhaseConversion.java => PhaseConversion.java.off} (94%) rename ccm-cms/src/com/arsdigita/cms/portation/conversion/lifecycle/{PhaseDefinitionConversion.java => PhaseDefinitionConversion.java.off} (93%) rename ccm-cms/src/com/arsdigita/cms/portation/modules/{CmsExporter.java => CmsExporter.java.off} (92%) rename ccm-cms/src/com/arsdigita/cms/portation/modules/assets/{BinaryAsset.java => BinaryAsset.java.off} (98%) rename ccm-cms/src/com/arsdigita/cms/portation/modules/assets/{LegalMetadata.java => LegalMetadata.java.off} (96%) rename ccm-cms/src/com/arsdigita/cms/portation/modules/contentsection/{Asset.java => Asset.java.off} (96%) rename ccm-cms/src/com/arsdigita/cms/portation/modules/contentsection/{AttachmentList.java => AttachmentList.java.off} (97%) rename ccm-cms/src/com/arsdigita/cms/portation/modules/contentsection/{ContentItem.java => ContentItem.java.off} (97%) rename ccm-cms/src/com/arsdigita/cms/portation/modules/contentsection/{ContentItemVersion.java => ContentItemVersion.java.off} (100%) rename ccm-cms/src/com/arsdigita/cms/portation/modules/contentsection/{ContentSection.java => ContentSection.java.off} (97%) rename ccm-cms/src/com/arsdigita/cms/portation/modules/contentsection/{ContentType.java => ContentType.java.off} (95%) rename ccm-cms/src/com/arsdigita/cms/portation/modules/contentsection/{ContentTypeMode.java => ContentTypeMode.java.off} (100%) rename ccm-cms/src/com/arsdigita/cms/portation/modules/contentsection/{Folder.java => Folder.java.off} (95%) rename ccm-cms/src/com/arsdigita/cms/portation/modules/contentsection/{FolderType.java => FolderType.java.off} (100%) rename ccm-cms/src/com/arsdigita/cms/portation/modules/contentsection/{ItemAttachment.java => ItemAttachment.java.off} (98%) rename ccm-cms/src/com/arsdigita/cms/portation/modules/contentsection/util/{ContentItemVersionMapper.java => ContentItemVersionMapper.java.off} (100%) rename ccm-cms/src/com/arsdigita/cms/portation/modules/contentsection/util/{ContentTypeModeMapper.java => ContentTypeModeMapper.java.off} (100%) rename ccm-cms/src/com/arsdigita/cms/portation/modules/contentsection/util/{FolderTypeMapper.java => FolderTypeMapper.java.off} (100%) rename ccm-cms/src/com/arsdigita/cms/portation/modules/lifecycle/{Lifecycle.java => Lifecycle.java.off} (98%) rename ccm-cms/src/com/arsdigita/cms/portation/modules/lifecycle/{LifecycleDefinition.java => LifecycleDefinition.java.off} (97%) rename ccm-cms/src/com/arsdigita/cms/portation/modules/lifecycle/{Phase.java => Phase.java.off} (98%) rename ccm-cms/src/com/arsdigita/cms/portation/modules/lifecycle/{PhaseDefinition.java => PhaseDefinition.java.off} (97%) delete mode 100644 ccm-core/src/com/arsdigita/portation/cmd/ExportCliTool.java delete mode 100644 ccm-core/src/com/arsdigita/portation/conversion/NgCoreCollection.java create mode 100644 ccm-core/src/org/libreccm/categorization/CategoriesExporter.java rename ccm-core/src/{com/arsdigita/portation/modules/core/categorization/Categorization.java => org/libreccm/categorization/Categorization.java.off} (75%) rename ccm-core/src/{com/arsdigita/portation/modules/core/categorization/CategorizationIdGenerator.java => org/libreccm/categorization/CategorizationIdGenerator.java.off} (97%) rename ccm-core/src/{com/arsdigita/portation/modules/core/categorization/CategorizationMarshaller.java => org/libreccm/categorization/CategorizationMarshaller.java.off} (86%) create mode 100644 ccm-core/src/org/libreccm/categorization/CategorizationsExporter.java rename ccm-core/src/{com/arsdigita/portation/modules/core/categorization/Category.java => org/libreccm/categorization/Category.java.off} (94%) rename ccm-core/src/{com/arsdigita/portation/modules/core/categorization/CategoryIdResolver.java => org/libreccm/categorization/CategoryIdResolver.java.off} (96%) rename ccm-core/src/{com/arsdigita/portation/modules/core/categorization/CategoryMarshaller.java => org/libreccm/categorization/CategoryMarshaller.java.off} (86%) rename ccm-core/src/{com/arsdigita/portation/modules/core/categorization/Domain.java => org/libreccm/categorization/Domain.java.off} (90%) rename ccm-core/src/{com/arsdigita/portation/modules/core/categorization/DomainIdResolver.java => org/libreccm/categorization/DomainIdResolver.java.off} (96%) rename ccm-core/src/{com/arsdigita/portation/modules/core/categorization/DomainMarshaller.java => org/libreccm/categorization/DomainMarshaller.java.off} (86%) rename ccm-core/src/{com/arsdigita/portation/modules/core/categorization/DomainOwnership.java => org/libreccm/categorization/DomainOwnership.java.off} (89%) rename ccm-core/src/{com/arsdigita/portation/modules/core/categorization/DomainOwnershipIdGenerator.java => org/libreccm/categorization/DomainOwnershipIdGenerator.java.off} (97%) rename ccm-core/src/{com/arsdigita/portation/modules/core/categorization/DomainOwnershipMarshaller.java => org/libreccm/categorization/DomainOwnershipMarshaller.java.off} (86%) create mode 100644 ccm-core/src/org/libreccm/core/AbstractCcmObjectsExporter.java create mode 100644 ccm-core/src/org/libreccm/core/AbstractResourceTypesExporter.java create mode 100644 ccm-core/src/org/libreccm/core/AbstractResourcesExporter.java rename ccm-core/src/{com/arsdigita/portation/modules/core/core/CcmObject.java => org/libreccm/core/CcmObject.java.off} (89%) rename ccm-core/src/{com/arsdigita/portation/modules/core/core/CcmObjectIdResolver.java => org/libreccm/core/CcmObjectIdResolver.java.off} (97%) rename ccm-core/src/{com/arsdigita/portation/modules/core/core/EmailAddress.java => org/libreccm/core/EmailAddress.java.off} (97%) rename ccm-core/src/{com/arsdigita/portation/modules/core/core/Resource.java => org/libreccm/core/Resource.java.off} (92%) rename ccm-core/src/{com/arsdigita/portation/modules/core/core/ResourceIdResolver.java => org/libreccm/core/ResourceIdResolver.java.off} (97%) rename ccm-core/src/{com/arsdigita/portation/modules/core/core/ResourceType.java => org/libreccm/core/ResourceType.java.off} (93%) rename ccm-core/src/{com/arsdigita/portation/modules/core/core/ResourceTypeIdResolver.java => org/libreccm/core/ResourceTypeIdResolver.java.off} (97%) rename ccm-core/src/{com/arsdigita/portation/modules/core/core/ResourceTypeMarshaller.java => org/libreccm/core/ResourceTypeMarshaller.java.off} (86%) create mode 100644 ccm-core/src/org/libreccm/core/ResourceTypesExporter.java create mode 100644 ccm-core/src/org/libreccm/export/AbstractDomainObjectsExporter.java create mode 100644 ccm-core/src/org/libreccm/export/ExportException.java create mode 100644 ccm-core/src/org/libreccm/export/ExportManager.java create mode 100644 ccm-core/src/org/libreccm/export/Exportable.java create mode 100644 ccm-core/src/org/libreccm/export/IdSequence.java create mode 100644 ccm-core/src/org/libreccm/export/cmd/ExportCliTool.java rename ccm-core/src/{com/arsdigita/portation/cmd/ExportLogger.java => org/libreccm/export/cmd/ExportLogger.java.off} (98%) rename ccm-core/src/{com/arsdigita/portation/cmd/RootConverter.java => org/libreccm/export/cmd/RootConverter.java.off} (97%) rename ccm-core/src/{com/arsdigita/portation/cmd/RootExporter.java => org/libreccm/export/cmd/RootExporter.java.off} (93%) rename ccm-core/src/{com/arsdigita/portation/AbstractConverter.java => org/libreccm/export/convert/AbstractDomainObjectConverter.java.off} (88%) rename ccm-core/src/{com/arsdigita/portation/AbstractConversion.java => org/libreccm/export/convert/AbstractDomainObjectsConverter.java.off} (78%) rename ccm-core/src/{com/arsdigita/portation/AbstractExporter.java => org/libreccm/export/convert/AbstractExporterManager.java.off} (88%) rename ccm-core/src/{com/arsdigita/portation/AbstractMarshaller.java => org/libreccm/export/convert/AbstractMarshaller.java.off} (99%) create mode 100644 ccm-core/src/org/libreccm/export/convert/CcmCoreEntities.java.off rename ccm-core/src/{com/arsdigita/portation/conversion/CoreConverter.java => org/libreccm/export/convert/CoreConverter.java.off} (51%) rename ccm-core/src/{com/arsdigita/portation/Format.java => org/libreccm/export/convert/Format.java.off} (96%) rename ccm-core/src/{com/arsdigita/portation/Portable.java => org/libreccm/export/convert/Portable.java.off} (96%) rename ccm-core/src/{com/arsdigita/portation/conversion/core/categorization/CategoryConversion.java => org/libreccm/export/convert/categorization/CategoriesConverter.java.off} (59%) rename ccm-core/src/{com/arsdigita/portation/conversion/core/categorization/DomainConversion.java => org/libreccm/export/convert/categorization/DomainsConverter.java.off} (85%) rename ccm-core/src/{com/arsdigita/portation/modules/core/categorization/util/CategoryInformation.java => org/libreccm/export/convert/categorization/util/CategoryInformation.java.off} (95%) rename ccm-core/src/{com/arsdigita/portation/conversion/core/core/ResourceTypeConversion.java => org/libreccm/export/convert/core/ResourceTypesConverter.java.off} (79%) rename ccm-core/src/{com/arsdigita/portation/modules/core/l10n/jaxb/LocalizedStringValue.java => org/libreccm/export/convert/l10n/jaxb/LocalizedStringValue.java.off} (95%) rename ccm-core/src/{com/arsdigita/portation/modules/core/l10n/jaxb/LocalizedStringValues.java => org/libreccm/export/convert/l10n/jaxb/LocalizedStringValues.java.off} (95%) rename ccm-core/src/{com/arsdigita/portation/modules/core/l10n/jaxb/LocalizedStringValuesAdapter.java => org/libreccm/export/convert/l10n/jaxb/LocalizedStringValuesAdapter.java.off} (95%) rename ccm-core/src/{com/arsdigita/portation/conversion/core/security/GroupConversion.java => org/libreccm/export/convert/security/GroupsConverter.java.off} (63%) rename ccm-core/src/{com/arsdigita/portation/conversion/core/security/PermissionConversion.java => org/libreccm/export/convert/security/PermissionsConverter.java.off} (86%) rename ccm-core/src/{com/arsdigita/portation/conversion/core/security/RoleConversion.java => org/libreccm/export/convert/security/RolesConverter.java.off} (82%) rename ccm-core/src/{com/arsdigita/portation/conversion/core/security/UserConversion.java => org/libreccm/export/convert/security/UsersConverter.java.off} (80%) rename ccm-core/src/{com/arsdigita/portation/conversion/core/web/CcmApplicationConversion.java => org/libreccm/export/convert/web/CcmApplicationsConverter.java.off} (82%) rename ccm-core/src/{com/arsdigita/portation/conversion/core/workflow/AssignableTaskConversion.java => org/libreccm/export/convert/workflow/AssignableTasksConverter.java.off} (85%) rename ccm-core/src/{com/arsdigita/portation/conversion/core/workflow/TaskCommentConversion.java => org/libreccm/export/convert/workflow/TaskCommentsConverter.java.off} (80%) rename ccm-core/src/{com/arsdigita/portation/conversion/core/workflow/WorkflowConversion.java => org/libreccm/export/convert/workflow/WorkflowsConverter.java.off} (83%) rename ccm-core/src/{com/arsdigita/portation/modules/CoreExporter.java => org/libreccm/export/modules/CoreExporter.java.off} (73%) rename ccm-core/src/{com/arsdigita/portation/modules/core => org/libreccm/export}/security/util/PermissionIdMapper.java (95%) rename ccm-core/src/{com/arsdigita/portation/modules/core/workflow/util/StateMapper.java => org/libreccm/export/workflow/util/StateMapper.java.off} (91%) rename ccm-core/src/{com/arsdigita/portation/modules/core/l10n/L10NConstants.java => org/libreccm/l10n/L10NConstants.java.off} (95%) rename ccm-core/src/{com/arsdigita/portation/modules/core/l10n/LocalizedString.java => org/libreccm/l10n/LocalizedString.java.off} (98%) rename ccm-core/src/{com/arsdigita/portation/modules/core/security/Group.java => org/libreccm/security/Group.java.off} (90%) rename ccm-core/src/{com/arsdigita/portation/modules/core/security/GroupIdResolver.java => org/libreccm/security/GroupIdResolver.java.off} (97%) rename ccm-core/src/{com/arsdigita/portation/modules/core/security/GroupMarshaller.java => org/libreccm/security/GroupMarshaller.java.off} (86%) rename ccm-core/src/{com/arsdigita/portation/modules/core/security/GroupMembership.java => org/libreccm/security/GroupMembership.java.off} (74%) rename ccm-core/src/{com/arsdigita/portation/modules/core/security/GroupMembershipIdGenerator.java => org/libreccm/security/GroupMembershipIdGenerator.java.off} (97%) rename ccm-core/src/{com/arsdigita/portation/modules/core/security/GroupMembershipMarshaller.java => org/libreccm/security/GroupMembershipMarshaller.java.off} (86%) create mode 100644 ccm-core/src/org/libreccm/security/GroupMembershipsExporter.java create mode 100644 ccm-core/src/org/libreccm/security/GroupsExporter.java rename ccm-core/src/{com/arsdigita/portation/modules/core/security/Party.java => org/libreccm/security/Party.java.off} (77%) rename ccm-core/src/{com/arsdigita/portation/modules/core/security/PartyIdResolver.java => org/libreccm/security/PartyIdResolver.java.off} (97%) rename ccm-core/src/{com/arsdigita/portation/modules/core/security/Permission.java => org/libreccm/security/Permission.java.off} (76%) rename ccm-core/src/{com/arsdigita/portation/modules/core/security/PermissionIdGenerator.java => org/libreccm/security/PermissionIdGenerator.java.off} (98%) rename ccm-core/src/{com/arsdigita/portation/modules/core/security/PermissionIdResolver.java => org/libreccm/security/PermissionIdResolver.java.off} (97%) rename ccm-core/src/{com/arsdigita/portation/modules/core/security/PermissionMarshaller.java => org/libreccm/security/PermissionMarshaller.java.off} (86%) create mode 100644 ccm-core/src/org/libreccm/security/PermissionsExporter.java rename ccm-core/src/{com/arsdigita/portation/modules/core/security/Role.java => org/libreccm/security/Role.java.off} (73%) rename ccm-core/src/{com/arsdigita/portation/modules/core/security/RoleIdResolver.java => org/libreccm/security/RoleIdResolver.java.off} (97%) rename ccm-core/src/{com/arsdigita/portation/modules/core/security/RoleMarshaller.java => org/libreccm/security/RoleMarshaller.java.off} (86%) rename ccm-core/src/{com/arsdigita/portation/modules/core/security/RoleMembership.java => org/libreccm/security/RoleMembership.java.off} (90%) rename ccm-core/src/{com/arsdigita/portation/modules/core/security/RoleMembershipIdGenerator.java => org/libreccm/security/RoleMembershipIdGenerator.java.off} (97%) rename ccm-core/src/{com/arsdigita/portation/modules/core/security/RoleMembershipMarshaller.java => org/libreccm/security/RoleMembershipMarshaller.java.off} (86%) create mode 100644 ccm-core/src/org/libreccm/security/RoleMembershipsExporter.java create mode 100644 ccm-core/src/org/libreccm/security/RolesExporter.java rename ccm-core/src/{com/arsdigita/portation/modules/core/security/User.java => org/libreccm/security/User.java.off} (94%) rename ccm-core/src/{com/arsdigita/portation/modules/core/security/UserIdResolver.java => org/libreccm/security/UserIdResolver.java.off} (97%) rename ccm-core/src/{com/arsdigita/portation/modules/core/security/UserMarshaller.java => org/libreccm/security/UserMarshaller.java.off} (86%) create mode 100644 ccm-core/src/org/libreccm/security/UsersExporter.java create mode 100644 ccm-core/src/org/libreccm/web/AbstractCcmApplicationsExporter.java rename ccm-core/src/{com/arsdigita/portation/modules/core/web/CcmApplication.java => org/libreccm/web/CcmApplication.java.off} (87%) rename ccm-core/src/{com/arsdigita/portation/modules/core/web/CcmApplicationIdResolver.java => org/libreccm/web/CcmApplicationIdResolver.java.off} (97%) rename ccm-core/src/{com/arsdigita/portation/modules/core/web/CcmApplicationMarshaller.java => org/libreccm/web/CcmApplicationMarshaller.java.off} (87%) create mode 100644 ccm-core/src/org/libreccm/workflow/AbstractTasksExporter.java rename ccm-core/src/{com/arsdigita/portation/modules/core/workflow/AssignableTask.java => org/libreccm/workflow/AssignableTask.java.off} (93%) rename ccm-core/src/{com/arsdigita/portation/modules/core/workflow/AssignableTaskIdResolver.java => org/libreccm/workflow/AssignableTaskIdResolver.java.off} (97%) rename ccm-core/src/{com/arsdigita/portation/modules/core/workflow/AssignableTaskMarshaller.java => org/libreccm/workflow/AssignableTaskMarshaller.java.off} (87%) create mode 100644 ccm-core/src/org/libreccm/workflow/AssignableTasksExporter.java rename ccm-core/src/{com/arsdigita/portation/modules/core/workflow/Task.java => org/libreccm/workflow/Task.java.off} (94%) rename ccm-core/src/{com/arsdigita/portation/modules/core/workflow/TaskAssignment.java => org/libreccm/workflow/TaskAssignment.java.off} (88%) rename ccm-core/src/{com/arsdigita/portation/modules/core/workflow/TaskAssignmentIdGenerator.java => org/libreccm/workflow/TaskAssignmentIdGenerator.java.off} (97%) rename ccm-core/src/{com/arsdigita/portation/modules/core/workflow/TaskAssignmentMarshaller.java => org/libreccm/workflow/TaskAssignmentMarshaller.java.off} (86%) create mode 100644 ccm-core/src/org/libreccm/workflow/TaskAssignmentsExporter.java rename ccm-core/src/{com/arsdigita/portation/modules/core/workflow/TaskComment.java => org/libreccm/workflow/TaskComment.java.off} (89%) rename ccm-core/src/{com/arsdigita/portation/modules/core/workflow/TaskCommentIdResolver.java => org/libreccm/workflow/TaskCommentIdResolver.java.off} (97%) rename ccm-core/src/{com/arsdigita/portation/modules/core/workflow/TaskCommentMarshaller.java => org/libreccm/workflow/TaskCommentMarshaller.java.off} (87%) create mode 100644 ccm-core/src/org/libreccm/workflow/TaskCommentsExporter.java create mode 100644 ccm-core/src/org/libreccm/workflow/TaskDependenciesExporter.java rename ccm-core/src/{com/arsdigita/portation/modules/core/workflow/TaskDependency.java => org/libreccm/workflow/TaskDependency.java.off} (90%) rename ccm-core/src/{com/arsdigita/portation/modules/core/workflow/TaskDependencyIdGenerator.java => org/libreccm/workflow/TaskDependencyIdGenerator.java.off} (94%) rename ccm-core/src/{com/arsdigita/portation/modules/core/workflow/TaskDependencyMarshaller.java => org/libreccm/workflow/TaskDependencyMarshaller.java.off} (86%) rename ccm-core/src/{com/arsdigita/portation/modules/core/workflow/TaskIdResolver.java => org/libreccm/workflow/TaskIdResolver.java.off} (97%) rename ccm-core/src/{com/arsdigita/portation/modules/core/workflow/TaskState.java => org/libreccm/workflow/TaskState.java.off} (94%) create mode 100644 ccm-core/src/org/libreccm/workflow/TasksExporter.java rename ccm-core/src/{com/arsdigita/portation/modules/core/workflow/Workflow.java => org/libreccm/workflow/Workflow.java.off} (91%) rename ccm-core/src/{com/arsdigita/portation/modules/core/workflow/WorkflowIdResolver.java => org/libreccm/workflow/WorkflowIdResolver.java.off} (97%) rename ccm-core/src/{com/arsdigita/portation/modules/core/workflow/WorkflowMarshaller.java => org/libreccm/workflow/WorkflowMarshaller.java.off} (87%) rename ccm-core/src/{com/arsdigita/portation/modules/core/workflow/WorkflowState.java => org/libreccm/workflow/WorkflowState.java.off} (94%) create mode 100644 ccm-core/src/org/libreccm/workflow/WorkflowsExporter.java diff --git a/ccm-cms-assets-fileattachment/src/com/arsdigita/cms/portation/conversion/NgCmsFileAssetCollection.java b/ccm-cms-assets-fileattachment/src/com/arsdigita/cms/portation/conversion/NgCmsFileAssetCollection.java.off similarity index 100% rename from ccm-cms-assets-fileattachment/src/com/arsdigita/cms/portation/conversion/NgCmsFileAssetCollection.java rename to ccm-cms-assets-fileattachment/src/com/arsdigita/cms/portation/conversion/NgCmsFileAssetCollection.java.off diff --git a/ccm-cms-assets-fileattachment/src/com/arsdigita/cms/portation/conversion/assets/FileAssetConversion.java b/ccm-cms-assets-fileattachment/src/com/arsdigita/cms/portation/conversion/assets/FileAssetConversion.java.off similarity index 92% rename from ccm-cms-assets-fileattachment/src/com/arsdigita/cms/portation/conversion/assets/FileAssetConversion.java rename to ccm-cms-assets-fileattachment/src/com/arsdigita/cms/portation/conversion/assets/FileAssetConversion.java.off index e990f3ba5..92dbdc6d4 100644 --- a/ccm-cms-assets-fileattachment/src/com/arsdigita/cms/portation/conversion/assets/FileAssetConversion.java +++ b/ccm-cms-assets-fileattachment/src/com/arsdigita/cms/portation/conversion/assets/FileAssetConversion.java.off @@ -20,8 +20,9 @@ package com.arsdigita.cms.portation.conversion.assets; import com.arsdigita.cms.contentassets.FileAttachment; import com.arsdigita.cms.portation.modules.assets.FileAsset; -import com.arsdigita.portation.AbstractConversion; -import com.arsdigita.portation.cmd.ExportLogger; + +import org.libreccm.export.convert.AbstractDomainObjectsConverter; +import org.libreccm.export.cmd.ExportLogger; import java.util.List; @@ -29,7 +30,7 @@ import java.util.List; * @author Tobias Osmers<\a> diff --git a/ccm-cms-assets-imagestep/src/com/arsdigita/cms/portation/conversion/NgCmsImageCollection.java b/ccm-cms-assets-imagestep/src/com/arsdigita/cms/portation/conversion/NgCmsImageCollection.java.off similarity index 100% rename from ccm-cms-assets-imagestep/src/com/arsdigita/cms/portation/conversion/NgCmsImageCollection.java rename to ccm-cms-assets-imagestep/src/com/arsdigita/cms/portation/conversion/NgCmsImageCollection.java.off diff --git a/ccm-cms-assets-imagestep/src/com/arsdigita/cms/portation/conversion/assets/ImageConversion.java b/ccm-cms-assets-imagestep/src/com/arsdigita/cms/portation/conversion/assets/ImageConversion.java.off similarity index 93% rename from ccm-cms-assets-imagestep/src/com/arsdigita/cms/portation/conversion/assets/ImageConversion.java rename to ccm-cms-assets-imagestep/src/com/arsdigita/cms/portation/conversion/assets/ImageConversion.java.off index 332f45906..2579b83c8 100644 --- a/ccm-cms-assets-imagestep/src/com/arsdigita/cms/portation/conversion/assets/ImageConversion.java +++ b/ccm-cms-assets-imagestep/src/com/arsdigita/cms/portation/conversion/assets/ImageConversion.java.off @@ -21,8 +21,9 @@ package com.arsdigita.cms.portation.conversion.assets; import com.arsdigita.cms.ImageAsset; import com.arsdigita.cms.portation.modules.assets.Image; import com.arsdigita.cms.portation.modules.assets.LegalMetadata; -import com.arsdigita.portation.AbstractConversion; -import com.arsdigita.portation.cmd.ExportLogger; + +import org.libreccm.export.convert.AbstractDomainObjectsConverter; +import org.libreccm.export.cmd.ExportLogger; import java.util.List; @@ -30,7 +31,7 @@ import java.util.List; * @author Tobias Osmers<\a> * @version created the 5/2/18 */ -public class SideNoteConversion extends AbstractConversion { +public class SideNoteConversion extends AbstractDomainObjectsConverter { /** * Retrieves all trunk-{@link com.arsdigita.cms.contentassets.Note}s from * the persistent storage and collects them in a list. Then calls for diff --git a/ccm-cms-assets-notes/src/com/arsdigita/cms/portation/modules/assets/SideNote.java b/ccm-cms-assets-notes/src/com/arsdigita/cms/portation/modules/assets/SideNote.java.off similarity index 94% rename from ccm-cms-assets-notes/src/com/arsdigita/cms/portation/modules/assets/SideNote.java rename to ccm-cms-assets-notes/src/com/arsdigita/cms/portation/modules/assets/SideNote.java.off index 9883608fc..83cbbdf29 100644 --- a/ccm-cms-assets-notes/src/com/arsdigita/cms/portation/modules/assets/SideNote.java +++ b/ccm-cms-assets-notes/src/com/arsdigita/cms/portation/modules/assets/SideNote.java.off @@ -21,8 +21,9 @@ package com.arsdigita.cms.portation.modules.assets; import com.arsdigita.cms.contentassets.Note; import com.arsdigita.cms.portation.conversion.NgCmsSideNoteCollection; import com.arsdigita.cms.portation.modules.contentsection.Asset; -import com.arsdigita.portation.Portable; -import com.arsdigita.portation.modules.core.l10n.LocalizedString; + +import org.libreccm.export.convert.Portable; +import org.libreccm.l10n.LocalizedString; import java.util.Locale; diff --git a/ccm-cms-types-article/src/com/arsdigita/cms/portation/conversion/NgCmsArticleCollection.java b/ccm-cms-types-article/src/com/arsdigita/cms/portation/conversion/NgCmsArticleCollection.java.off similarity index 100% rename from ccm-cms-types-article/src/com/arsdigita/cms/portation/conversion/NgCmsArticleCollection.java rename to ccm-cms-types-article/src/com/arsdigita/cms/portation/conversion/NgCmsArticleCollection.java.off diff --git a/ccm-cms-types-article/src/com/arsdigita/cms/portation/conversion/contenttypes/ArticleConversion.java b/ccm-cms-types-article/src/com/arsdigita/cms/portation/conversion/contenttypes/ArticleConversion.java.off similarity index 93% rename from ccm-cms-types-article/src/com/arsdigita/cms/portation/conversion/contenttypes/ArticleConversion.java rename to ccm-cms-types-article/src/com/arsdigita/cms/portation/conversion/contenttypes/ArticleConversion.java.off index 2880aaf87..be81fdc6e 100644 --- a/ccm-cms-types-article/src/com/arsdigita/cms/portation/conversion/contenttypes/ArticleConversion.java +++ b/ccm-cms-types-article/src/com/arsdigita/cms/portation/conversion/contenttypes/ArticleConversion.java.off @@ -19,8 +19,9 @@ package com.arsdigita.cms.portation.conversion.contenttypes; import com.arsdigita.cms.portation.modules.contenttypes.Article; -import com.arsdigita.portation.AbstractConversion; -import com.arsdigita.portation.cmd.ExportLogger; + +import org.libreccm.export.convert.AbstractDomainObjectsConverter; +import org.libreccm.export.cmd.ExportLogger; import java.util.List; @@ -28,7 +29,7 @@ import java.util.List; * @author Tobias Osmers<\a> * @version created the 4/19/18 */ -public class EventConversion extends AbstractConversion { +public class EventConversion extends AbstractDomainObjectsConverter { /** * Retrieves all trunk-{@link com.arsdigita.cms.contenttypes.Event}s from * the persistent storage and collects them in a list. Then calls for diff --git a/ccm-cms-types-event/src/com/arsdigita/cms/portation/modules/contenttypes/Event.java b/ccm-cms-types-event/src/com/arsdigita/cms/portation/modules/contenttypes/Event.java.off similarity index 98% rename from ccm-cms-types-event/src/com/arsdigita/cms/portation/modules/contenttypes/Event.java rename to ccm-cms-types-event/src/com/arsdigita/cms/portation/modules/contenttypes/Event.java.off index 26cb68add..64f0d4983 100644 --- a/ccm-cms-types-event/src/com/arsdigita/cms/portation/modules/contenttypes/Event.java +++ b/ccm-cms-types-event/src/com/arsdigita/cms/portation/modules/contenttypes/Event.java.off @@ -22,8 +22,9 @@ import com.arsdigita.cms.ContentBundle; import com.arsdigita.cms.ItemCollection; import com.arsdigita.cms.portation.conversion.NgCmsEventCollection; import com.arsdigita.cms.portation.modules.contentsection.ContentItem; -import com.arsdigita.portation.Portable; -import com.arsdigita.portation.modules.core.l10n.LocalizedString; + +import org.libreccm.export.convert.Portable; +import org.libreccm.l10n.LocalizedString; import java.util.Date; import java.util.Locale; diff --git a/ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/conversion/NgCmsMPArticleCollection.java b/ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/conversion/NgCmsMPArticleCollection.java.off similarity index 100% rename from ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/conversion/NgCmsMPArticleCollection.java rename to ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/conversion/NgCmsMPArticleCollection.java.off diff --git a/ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/conversion/contenttypes/MultiPartArticleConversion.java b/ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/conversion/contenttypes/MultiPartArticleConversion.java.off similarity index 94% rename from ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/conversion/contenttypes/MultiPartArticleConversion.java rename to ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/conversion/contenttypes/MultiPartArticleConversion.java.off index 1fb726893..58238d2e2 100644 --- a/ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/conversion/contenttypes/MultiPartArticleConversion.java +++ b/ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/conversion/contenttypes/MultiPartArticleConversion.java.off @@ -21,8 +21,9 @@ package com.arsdigita.cms.portation.conversion.contenttypes; import com.arsdigita.cms.contenttypes.ArticleSectionCollection; import com.arsdigita.cms.portation.conversion.NgCmsMPArticleCollection; import com.arsdigita.cms.portation.modules.contenttypes.MultiPartArticle; -import com.arsdigita.portation.AbstractConversion; -import com.arsdigita.portation.cmd.ExportLogger; + +import org.libreccm.export.convert.AbstractDomainObjectsConverter; +import org.libreccm.export.cmd.ExportLogger; import java.util.List; @@ -30,7 +31,7 @@ import java.util.List; * @author Tobias Osmers<\a> * @version created the 4/20/18 */ -public class MultiPartArticleSectionConversion extends AbstractConversion { +public class MultiPartArticleSectionConversion extends AbstractDomainObjectsConverter { /** * Retrieves all * trunk-{@link ArticleSection}s from the diff --git a/ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/modules/contenttypes/MultiPartArticle.java b/ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/modules/contenttypes/MultiPartArticle.java.off similarity index 97% rename from ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/modules/contenttypes/MultiPartArticle.java rename to ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/modules/contenttypes/MultiPartArticle.java.off index 42dadd855..bbc3dd2c0 100644 --- a/ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/modules/contenttypes/MultiPartArticle.java +++ b/ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/modules/contenttypes/MultiPartArticle.java.off @@ -22,8 +22,9 @@ import com.arsdigita.cms.ContentBundle; import com.arsdigita.cms.ItemCollection; import com.arsdigita.cms.portation.conversion.NgCmsMPArticleCollection; import com.arsdigita.cms.portation.modules.contentsection.ContentItem; -import com.arsdigita.portation.Portable; -import com.arsdigita.portation.modules.core.l10n.LocalizedString; + +import org.libreccm.export.convert.Portable; +import org.libreccm.l10n.LocalizedString; import com.fasterxml.jackson.annotation.JsonIdentityReference; import java.util.ArrayList; diff --git a/ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/modules/contenttypes/MultiPartArticleSection.java b/ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/modules/contenttypes/MultiPartArticleSection.java.off similarity index 96% rename from ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/modules/contenttypes/MultiPartArticleSection.java rename to ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/modules/contenttypes/MultiPartArticleSection.java.off index eaf2a48eb..f55612cc1 100644 --- a/ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/modules/contenttypes/MultiPartArticleSection.java +++ b/ccm-cms-types-mparticle/src/com/arsdigita/cms/portation/modules/contenttypes/MultiPartArticleSection.java.off @@ -22,8 +22,9 @@ import com.arsdigita.cms.ContentBundle; import com.arsdigita.cms.ItemCollection; import com.arsdigita.cms.contenttypes.ArticleSection; import com.arsdigita.cms.portation.conversion.NgCmsMPArticleCollection; -import com.arsdigita.portation.Portable; -import com.arsdigita.portation.modules.core.l10n.LocalizedString; + +import org.libreccm.export.convert.Portable; +import org.libreccm.l10n.LocalizedString; import java.util.Locale; diff --git a/ccm-cms-types-newsitem/src/com/arsdigita/cms/portation/conversion/NgCmsNewsCollection.java b/ccm-cms-types-newsitem/src/com/arsdigita/cms/portation/conversion/NgCmsNewsCollection.java.off similarity index 100% rename from ccm-cms-types-newsitem/src/com/arsdigita/cms/portation/conversion/NgCmsNewsCollection.java rename to ccm-cms-types-newsitem/src/com/arsdigita/cms/portation/conversion/NgCmsNewsCollection.java.off diff --git a/ccm-cms-types-newsitem/src/com/arsdigita/cms/portation/conversion/contenttypes/NewsConversion.java b/ccm-cms-types-newsitem/src/com/arsdigita/cms/portation/conversion/contenttypes/NewsConversion.java.off similarity index 92% rename from ccm-cms-types-newsitem/src/com/arsdigita/cms/portation/conversion/contenttypes/NewsConversion.java rename to ccm-cms-types-newsitem/src/com/arsdigita/cms/portation/conversion/contenttypes/NewsConversion.java.off index dd5e5d878..51ce355b4 100644 --- a/ccm-cms-types-newsitem/src/com/arsdigita/cms/portation/conversion/contenttypes/NewsConversion.java +++ b/ccm-cms-types-newsitem/src/com/arsdigita/cms/portation/conversion/contenttypes/NewsConversion.java.off @@ -20,8 +20,9 @@ package com.arsdigita.cms.portation.conversion.contenttypes; import com.arsdigita.cms.contenttypes.NewsItem; import com.arsdigita.cms.portation.modules.contenttypes.News; -import com.arsdigita.portation.AbstractConversion; -import com.arsdigita.portation.cmd.ExportLogger; + +import org.libreccm.export.convert.AbstractDomainObjectsConverter; +import org.libreccm.export.cmd.ExportLogger; import java.util.List; @@ -29,7 +30,7 @@ import java.util.List; * @author DataObject is retrieved from the persistent storage - * mechanism with an OID specified by oid. + * Constructor. The contained DataObject is retrieved from the + * persistent storage mechanism with an OID specified by + * oid. * - * @param oid The OID for the retrieved DataObject. + * @param oid The OID for the retrieved + * DataObject. * */ public ContentType(OID oid) throws DataObjectNotFoundException { @@ -126,9 +133,9 @@ public class ContentType extends ACSObject { } /** - * Constructor. The contained DataObject is retrieved from the persistent storage - * mechanism with an OID specified by id and - * ContentType.BASE_DATA_OBJECT_TYPE. + * Constructor. The contained DataObject is retrieved from the + * persistent storage mechanism with an OID specified by + * id and ContentType.BASE_DATA_OBJECT_TYPE. * * @param id The id for the retrieved DataObject. * @@ -146,8 +153,8 @@ public class ContentType extends ACSObject { } /** - * @return the base PDL object type for this item. Child classes should override this method to - * return the correct value + * @return the base PDL object type for this item. Child classes should + * override this method to return the correct value */ @Override public String getBaseDataObjectType() { @@ -163,9 +170,9 @@ public class ContentType extends ACSObject { } /** - * Returns the object type of the items of this content type. (For example: If I create a - * ContentType "foo". Then a I create an item "bar" of type foo. This associated object type is - * the same as bar.getObjectType()) + * Returns the object type of the items of this content type. (For example: + * If I create a ContentType "foo". Then a I create an item "bar" of type + * foo. This associated object type is the same as bar.getObjectType()) * * @return The data object type representation of this content type */ @@ -183,15 +190,17 @@ public class ContentType extends ACSObject { } /** - * Fetches the label for the content type. The label is a globalized notation displayed to the - * user to identify the content type. As an example a content type named "Article" (as in - * getName()) will be displayed in an english environment as the label "Article", in German as + * Fetches the label for the content type. The label is a globalized + * notation displayed to the user to identify the content type. As an + * example a content type named "Article" (as in getName()) will be + * displayed in an english environment as the label "Article", in German as * "Artikel", etc. * - * The label is retrieved from content type's resources. The message uses some convention to - * retrieve the message key and resource bundle. + * The label is retrieved from content type's resources. The message uses + * some convention to retrieve the message key and resource bundle. * - * Client classes may overwrite the method to provide a label from a different source. + * Client classes may overwrite the method to provide a label from a + * different source. * * @return The (globalized) label. */ @@ -225,7 +234,8 @@ public class ContentType extends ACSObject { // We assume the name of the key in resource bundle is the same as // the ObjectType minus the domain part ("com.arsdigita.") // and starting with "cms" and suffix ".type_label" appended - String labelKey = objectTypeName.substring(objectTypeName.indexOf("cms")) + String labelKey = objectTypeName + .substring(objectTypeName.indexOf("cms")) .concat(".type_label") .toLowerCase(); if (s_log.isDebugEnabled()) { @@ -234,7 +244,8 @@ public class ContentType extends ACSObject { // First try: check, if the resource file really exists, and if it does, // use it. - if (this.getClass().getClassLoader().getResource(bundleResourcePath) != null) { + if (this.getClass().getClassLoader().getResource(bundleResourcePath) + != null) { s_log.debug("Found resource file, using it."); // Property file exists, use it! final String bundleName = objectTypeName.concat("Resources"); @@ -243,7 +254,8 @@ public class ContentType extends ACSObject { } else { s_log.debug("No resource file found, using item's definition file"); // No property file found, try to use the item's definition file - final InputStream defFile = Thread.currentThread().getContextClassLoader() + final InputStream defFile = Thread.currentThread() + .getContextClassLoader() .getResourceAsStream(typeResourcePath); if (defFile == null) { @@ -266,17 +278,20 @@ public class ContentType extends ACSObject { // As a proper example: // /WEB-INF/content-types/com.arsditita.cms.contenttypes.Event.xml try { - final SAXParserFactory parserFactory = SAXParserFactory.newInstance(); + final SAXParserFactory parserFactory = SAXParserFactory + .newInstance(); final SAXParser parser = parserFactory.newSAXParser(); final BundleName bundleName = new BundleName(); parser.parse(defFile, bundleName); if (bundleName.getName() == null) { // Fallback to the non-globalized identifier (name) - s_log.warn("Failed to translate content type name. No bundle found."); + s_log.warn( + "Failed to translate content type name. No bundle found."); return new GlobalizedMessage(getName()); } else { - label = new GlobalizedMessage(labelKey, bundleName.getName()); + label = new GlobalizedMessage(labelKey, bundleName + .getName()); } } catch (ParserConfigurationException ex) { s_log.warn("Failed to translate content type name:", ex); @@ -337,10 +352,11 @@ public class ContentType extends ACSObject { } /** - * Fetches the name for the content type. The name is a fixed String, which 'names' a content - * type and is not localizible. It is stored in the database and a symbolic name for the formal - * ID. It may contain any characters but is preferable an english term. Examples are "FAQ item" - * or "Article" or "Multipart Article". It has to be unique system-wide. + * Fetches the name for the content type. The name is a fixed String, which + * 'names' a content type and is not localizible. It is stored in the + * database and a symbolic name for the formal ID. It may contain any + * characters but is preferable an english term. Examples are "FAQ item" or + * "Article" or "Multipart Article". It has to be unique system-wide. * * @return The name (ie. may be used as a non-localized label) */ @@ -353,8 +369,9 @@ public class ContentType extends ACSObject { * * @see getName() for additional details. * - * The name is stored in the database. In the database this property is stored under 'label', - * when globliation was not an issue. The Method is primarly used in the initial loading step. + * The name is stored in the database. In the database this property is + * stored under 'label', when globliation was not an issue. The Method is + * primarly used in the initial loading step. * * @param name The name */ @@ -400,19 +417,24 @@ public class ContentType extends ACSObject { /** *

- * An internal content type is one that is not user-defined and maintained internally. A content - * type should be made internal under the following two conditions:

+ * An internal content type is one that is not user-defined and maintained + * internally. A content type should be made internal under the following + * two conditions:

* *
    - *
  1. The object type needs to take advantage of content type services (i.e., versioning, - * categorization, lifecycle, workflow) that are already implemented in CMS.
  2. - *
  3. The content type cannot be explicitly registered to a content section.
  4. + *
  5. The object type needs to take advantage of content type services + * (i.e., versioning, categorization, lifecycle, workflow) that are already + * implemented in CMS.
  6. + *
  7. The content type cannot be explicitly registered to a content + * section.
  8. *
* *

- * The {@link com.arsdigita.cms.Template} content type is one such internal content type.

+ * The {@link com.arsdigita.cms.Template} content type is one such internal + * content type.

* - * @return Boolean.TRUE if this content type is internal, Boolean.FALSE otherwise. + * @return Boolean.TRUE if this content type is internal, Boolean.FALSE + * otherwise. */ public Boolean isInternal() { return "I".equalsIgnoreCase((String) get(MODE)); @@ -420,11 +442,13 @@ public class ContentType extends ACSObject { /** *

- * A hidden content type is one that is not user-defined but not meant to be used directly (p. - * ex. GenericArticle). in contrast they provide some basic features for different kind of - * content type to be extended from. Also, they are legit perents for UDCTs. + * A hidden content type is one that is not user-defined but not meant to be + * used directly (p. ex. GenericArticle). in contrast they provide some + * basic features for different kind of content type to be extended from. + * Also, they are legit perents for UDCTs. * - * @return Boolean.TRUE if this content type is internal, Boolean.FALSE otherwise. + * @return Boolean.TRUE if this content type is internal, Boolean.FALSE + * otherwise. */ public Boolean isHidden() { return "H".equalsIgnoreCase((String) get(MODE)); @@ -462,18 +486,19 @@ public class ContentType extends ACSObject { } /** - * Create an authoring kit to this content type. To save this authoring kit, you need to call - * save() method on the returned AuthoringKit. + * Create an authoring kit to this content type. To save this authoring kit, + * you need to call save() method on the returned AuthoringKit. */ public AuthoringKit createAuthoringKit() { return createAuthoringKit(null); } /** - * Create an authoring kit to this content type. To save this authoring kit, you need to call - * save() method on the returned AuthoringKit. + * Create an authoring kit to this content type. To save this authoring kit, + * you need to call save() method on the returned AuthoringKit. * - * @param createComponent the create component class associated with the authoring kit + * @param createComponent the create component class associated with the + * authoring kit */ public AuthoringKit createAuthoringKit(String createComponent) { @@ -491,20 +516,22 @@ public class ContentType extends ACSObject { } /** - * Fetch the item creation form id of the Java domain object implementation. applies to - * user-defined types + * Fetch the item creation form id of the Java domain object implementation. + * applies to user-defined types * - * @return The id of the persistent form used to create an item of this content type + * @return The id of the persistent form used to create an item of this + * content type */ public BigDecimal getItemFormID() { return (BigDecimal) get(ITEM_FORM_ID); } /** - * Sets the item creation form id of the Java domain object implementation. applies to - * user-defined types + * Sets the item creation form id of the Java domain object implementation. + * applies to user-defined types * - * @param itemFormID The id of the persistent form used to create an item of this content type + * @param itemFormID The id of the persistent form used to create an item of + * this content type */ public void setItemFormID(BigDecimal itemFormID) { set(ITEM_FORM_ID, itemFormID); @@ -513,8 +540,8 @@ public class ContentType extends ACSObject { /** * Retrieve the persistent form of this content type * - * @return the persistent form used to create or edit content items of this type (only applies - * to user-defined types) + * @return the persistent form used to create or edit content items of this + * type (only applies to user-defined types) */ public PersistentForm getItemForm() throws DataObjectNotFoundException { @@ -692,7 +719,8 @@ public class ContentType extends ACSObject { } /** - * Fetches a collection of all content types, including internal content types. + * Fetches a collection of all content types, including internal content + * types. * * @return A collection of all content types */ @@ -701,9 +729,11 @@ public class ContentType extends ACSObject { } /** - * Fetches a collection of all content types, including internal content types. + * Fetches a collection of all content types, including internal content + * types. * - * @param hidden If false, fetch all content types, ecluding hidden content types + * @param hidden If false, fetch all content types, ecluding hidden content + * types * * @return A collection of all content types */ @@ -721,11 +751,15 @@ public class ContentType extends ACSObject { } /** - * @param internal If false, fetch all content types, excluding internal content types. - * @param hidden If false, fetch all content types, excluding hidden content types. + * @param internal If false, fetch all content types, excluding internal + * content types. + * @param hidden If false, fetch all content types, excluding hidden + * content types. */ - private static ContentTypeCollection getAllContentTypes(boolean internal, boolean hidden) { - DataCollection da = SessionManager.getSession().retrieve(BASE_DATA_OBJECT_TYPE); + private static ContentTypeCollection getAllContentTypes(boolean internal, + boolean hidden) { + DataCollection da = SessionManager.getSession().retrieve( + BASE_DATA_OBJECT_TYPE); ContentTypeCollection types = new ContentTypeCollection(da); if (!internal) { @@ -739,8 +773,8 @@ public class ContentType extends ACSObject { } /** - * Fetches a collection of content types that have been registered to at least one content - * section, excluding internal content types. + * Fetches a collection of content types that have been registered to at + * least one content section, excluding internal content types. * * @return A collection of registered content types */ @@ -771,9 +805,11 @@ public class ContentType extends ACSObject { // Or must be a descendant of the requested type try { - StringTokenizer strTok = new StringTokenizer(ct.getDescendants(), "/"); + StringTokenizer strTok = new StringTokenizer(ct.getDescendants(), + "/"); while (strTok.hasMoreElements()) { - or.addFilter(ff.equals(ContentType.ID, (String) strTok.nextElement())); + or.addFilter(ff.equals(ContentType.ID, (String) strTok + .nextElement())); } } catch (Exception ex) { // WTF? The selected content type does not exist in the table??? @@ -786,7 +822,8 @@ public class ContentType extends ACSObject { private static List s_xsl = new ArrayList(); /** - * Registers an XSL file against a content type. NB this interface is liable to change. + * Registers an XSL file against a content type. NB this interface is liable + * to change. * * @param type the content type * @param path the path relative to the server root @@ -796,7 +833,8 @@ public class ContentType extends ACSObject { } /** - * Unregisters an XSL file against a content type. NB this interface is liable to change. + * Unregisters an XSL file against a content type. NB this interface is + * liable to change. * * @param type the content type * @param path the path relative to the server root @@ -893,8 +931,8 @@ public class ContentType extends ACSObject { } /** - * Retrieves all objects of this type stored in the database. Very - * necessary for exporting all entities of the current work environment. + * Retrieves all objects of this type stored in the database. Very necessary + * for exporting all entities of the current work environment. * * @return List of all objects */ @@ -903,11 +941,11 @@ public class ContentType extends ACSObject { final Session session = SessionManager.getSession(); DomainCollection collection = new DomainCollection(session.retrieve( - ContentType.BASE_DATA_OBJECT_TYPE)); + ContentType.BASE_DATA_OBJECT_TYPE)); while (collection.next()) { ContentType object = (ContentType) collection - .getDomainObject(); + .getDomainObject(); if (object != null) { objectList.add(object); } @@ -916,4 +954,5 @@ public class ContentType extends ACSObject { collection.close(); return objectList; } + } diff --git a/ccm-cms/src/com/arsdigita/cms/portation/conversion/CmsConverter.java b/ccm-cms/src/com/arsdigita/cms/portation/conversion/CmsConverter.java.off similarity index 97% rename from ccm-cms/src/com/arsdigita/cms/portation/conversion/CmsConverter.java rename to ccm-cms/src/com/arsdigita/cms/portation/conversion/CmsConverter.java.off index 9558c3412..8272c7b58 100644 --- a/ccm-cms/src/com/arsdigita/cms/portation/conversion/CmsConverter.java +++ b/ccm-cms/src/com/arsdigita/cms/portation/conversion/CmsConverter.java.off @@ -25,7 +25,8 @@ import com.arsdigita.cms.portation.conversion.lifecycle.LifecycleConversion; import com.arsdigita.cms.portation.conversion.lifecycle.LifecycleDefinitionConversion; import com.arsdigita.cms.portation.conversion.lifecycle.PhaseConversion; import com.arsdigita.cms.portation.conversion.lifecycle.PhaseDefinitionConversion; -import com.arsdigita.portation.AbstractConverter; + +import org.libreccm.export.convert.AbstractDomainObjectConverter; import java.lang.reflect.Method; @@ -33,7 +34,7 @@ import java.lang.reflect.Method; * @author Tobias Osmers<\a> * @version created the 4/16/18 */ -public class ContentSectionConversion extends AbstractConversion { +public class ContentSectionConversion extends AbstractDomainObjectsConverter { private static ContentSectionConversion instance; static { @@ -107,12 +111,12 @@ public class ContentSectionConversion extends AbstractConversion { contentSection.setRootAssetsFolder(rootAssetsFolder); rootAssetsFolder.setSection(contentSection); - // set roles + // set ROLES RoleCollection roleCollection = trunkContentSection .getStaffGroup().getRoles(); while (roleCollection.next()) { - contentSection.addRole(NgCoreCollection - .roles + contentSection.addRole(CcmCoreEntities + .ROLES .get(roleCollection .getRole() .getID() @@ -156,8 +160,8 @@ public class ContentSectionConversion extends AbstractConversion { TaskCollection workflowTemplateCollection = trunkContentSection .getWorkflowTemplates(); while (workflowTemplateCollection.next()) { - final Workflow template = NgCoreCollection - .workflows + final Workflow template = CcmCoreEntities + .WORKFLOWS .get(workflowTemplateCollection .getTask() .getID() @@ -207,8 +211,8 @@ public class ContentSectionConversion extends AbstractConversion { ContentTypeWorkflowTemplate.getWorkflowTemplate( trunkContentSection, trunkContentType); if (trunkWorkflowTemplate != null) { - final Workflow defaultWorkflow = NgCoreCollection - .workflows + final Workflow defaultWorkflow = CcmCoreEntities + .WORKFLOWS .get(trunkWorkflowTemplate .getID() .longValue()); diff --git a/ccm-cms/src/com/arsdigita/cms/portation/conversion/contentsection/ContentTypeConversion.java b/ccm-cms/src/com/arsdigita/cms/portation/conversion/contentsection/ContentTypeConversion.java.off similarity index 93% rename from ccm-cms/src/com/arsdigita/cms/portation/conversion/contentsection/ContentTypeConversion.java rename to ccm-cms/src/com/arsdigita/cms/portation/conversion/contentsection/ContentTypeConversion.java.off index 5b3ef811d..aa97886f8 100644 --- a/ccm-cms/src/com/arsdigita/cms/portation/conversion/contentsection/ContentTypeConversion.java +++ b/ccm-cms/src/com/arsdigita/cms/portation/conversion/contentsection/ContentTypeConversion.java.off @@ -19,8 +19,9 @@ package com.arsdigita.cms.portation.conversion.contentsection; import com.arsdigita.cms.portation.modules.contentsection.ContentType; -import com.arsdigita.portation.AbstractConversion; -import com.arsdigita.portation.cmd.ExportLogger; + +import org.libreccm.export.convert.AbstractDomainObjectsConverter; +import org.libreccm.export.cmd.ExportLogger; import java.util.List; @@ -28,7 +29,7 @@ import java.util.List; * @author Tobias Osmers<\a> * @version created the 4/16/18 */ -public class FolderConversion extends AbstractConversion { +public class FolderConversion extends AbstractDomainObjectsConverter { private static FolderConversion instance; static { diff --git a/ccm-cms/src/com/arsdigita/cms/portation/conversion/lifecycle/LifecycleConversion.java b/ccm-cms/src/com/arsdigita/cms/portation/conversion/lifecycle/LifecycleConversion.java.off similarity index 94% rename from ccm-cms/src/com/arsdigita/cms/portation/conversion/lifecycle/LifecycleConversion.java rename to ccm-cms/src/com/arsdigita/cms/portation/conversion/lifecycle/LifecycleConversion.java.off index f27dcd9f9..e29e990e4 100644 --- a/ccm-cms/src/com/arsdigita/cms/portation/conversion/lifecycle/LifecycleConversion.java +++ b/ccm-cms/src/com/arsdigita/cms/portation/conversion/lifecycle/LifecycleConversion.java.off @@ -20,8 +20,9 @@ package com.arsdigita.cms.portation.conversion.lifecycle; import com.arsdigita.cms.portation.conversion.NgCmsCollection; import com.arsdigita.cms.portation.modules.lifecycle.Lifecycle; -import com.arsdigita.portation.AbstractConversion; -import com.arsdigita.portation.cmd.ExportLogger; + +import org.libreccm.export.convert.AbstractDomainObjectsConverter; +import org.libreccm.export.cmd.ExportLogger; import java.util.List; @@ -29,7 +30,7 @@ import java.util.List; * @author Tobias Osmers<\a> * @version created the 3/26/18 */ -public class LifecycleDefinitionConversion extends AbstractConversion { +public class LifecycleDefinitionConversion extends AbstractDomainObjectsConverter { private static LifecycleDefinitionConversion instance; static { diff --git a/ccm-cms/src/com/arsdigita/cms/portation/conversion/lifecycle/PhaseConversion.java b/ccm-cms/src/com/arsdigita/cms/portation/conversion/lifecycle/PhaseConversion.java.off similarity index 94% rename from ccm-cms/src/com/arsdigita/cms/portation/conversion/lifecycle/PhaseConversion.java rename to ccm-cms/src/com/arsdigita/cms/portation/conversion/lifecycle/PhaseConversion.java.off index 1d21fde5e..6d66aef49 100644 --- a/ccm-cms/src/com/arsdigita/cms/portation/conversion/lifecycle/PhaseConversion.java +++ b/ccm-cms/src/com/arsdigita/cms/portation/conversion/lifecycle/PhaseConversion.java.off @@ -21,8 +21,9 @@ package com.arsdigita.cms.portation.conversion.lifecycle; import com.arsdigita.cms.portation.conversion.NgCmsCollection; import com.arsdigita.cms.portation.modules.lifecycle.Lifecycle; import com.arsdigita.cms.portation.modules.lifecycle.Phase; -import com.arsdigita.portation.AbstractConversion; -import com.arsdigita.portation.cmd.ExportLogger; + +import org.libreccm.export.convert.AbstractDomainObjectsConverter; +import org.libreccm.export.cmd.ExportLogger; import java.util.List; @@ -30,7 +31,7 @@ import java.util.List; * @author Tobias Osmers<\a> * @version created the 3/26/18 */ -public class PhaseDefinitionConversion extends AbstractConversion { +public class PhaseDefinitionConversion extends AbstractDomainObjectsConverter { private static PhaseDefinitionConversion instance; static { diff --git a/ccm-cms/src/com/arsdigita/cms/portation/modules/CmsExporter.java b/ccm-cms/src/com/arsdigita/cms/portation/modules/CmsExporter.java.off similarity index 92% rename from ccm-cms/src/com/arsdigita/cms/portation/modules/CmsExporter.java rename to ccm-cms/src/com/arsdigita/cms/portation/modules/CmsExporter.java.off index e15082522..0688e1807 100644 --- a/ccm-cms/src/com/arsdigita/cms/portation/modules/CmsExporter.java +++ b/ccm-cms/src/com/arsdigita/cms/portation/modules/CmsExporter.java.off @@ -18,13 +18,13 @@ */ package com.arsdigita.cms.portation.modules; -import com.arsdigita.portation.AbstractExporter; +import org.libreccm.export.convert.AbstractExporterManager; /** * @author \n" + - "\n" + - "Available commands:\n" + - "\thelp" + - "\t\t\t\t\t Shows information on how to use this tool.\n" + - "\tconvert" + - "\t\t\t\t\t Converts all trunk objects to ng objects.\n" + - "\texport " + - "\t\t\t\t Exports the chosen module class to a file\n" + - "\t\t\t\t" + - "\t\t at the location specified by the given path." + - "\n" + - "\n" + - "Available module-classes for export:\n" + - /*" \t\t categories \t\t all categories of the system\n" + - " \t\t categorizations \t\t all categorizations of the system\n" + - " \t\t users \t\t all users of the system\n" + - " \t\t groups \t\t all groups of the system\n" + - " \t\t groupMemberships \t\t all groupsMemberships of the system\n" + - " \t\t roles \t\t all roles of the system\n" + - " \t\t roleMemberships \t\t all roleMemberships of the system\n" + - " \t\t workflowTemplates \t\t all workflowTemplates of the system\n" + - " \t\t workflows \t\t all workflows of the system\n" + - " \t\t assignableTasks \t\t all assignableTasks of the system\n" + - " \t\t taskAssignments \t\t all taskAssignments of the system\n" + - " \t\t permissions \t\t all permissions of the system\n" + - " \n" + - " \t\t default: \t\t all objects of the entire core module" + - */"\n" + - "\n" + - "Do use for exporting java objects of a specified class.\n" + - "\n" - ); - } -} diff --git a/ccm-core/src/com/arsdigita/portation/conversion/NgCoreCollection.java b/ccm-core/src/com/arsdigita/portation/conversion/NgCoreCollection.java deleted file mode 100644 index 89bc04a4f..000000000 --- a/ccm-core/src/com/arsdigita/portation/conversion/NgCoreCollection.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2015 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 com.arsdigita.portation.conversion; - -import com.arsdigita.portation.modules.core.categorization.Categorization; -import com.arsdigita.portation.modules.core.categorization.Category; -import com.arsdigita.portation.modules.core.categorization.Domain; -import com.arsdigita.portation.modules.core.categorization.DomainOwnership; -import com.arsdigita.portation.modules.core.core.CcmObject; -import com.arsdigita.portation.modules.core.core.Resource; -import com.arsdigita.portation.modules.core.core.ResourceType; -import com.arsdigita.portation.modules.core.security.Group; -import com.arsdigita.portation.modules.core.security.GroupMembership; -import com.arsdigita.portation.modules.core.security.Party; -import com.arsdigita.portation.modules.core.security.Permission; -import com.arsdigita.portation.modules.core.security.Role; -import com.arsdigita.portation.modules.core.security.RoleMembership; -import com.arsdigita.portation.modules.core.security.User; -import com.arsdigita.portation.modules.core.web.CcmApplication; -import com.arsdigita.portation.modules.core.workflow.AssignableTask; -import com.arsdigita.portation.modules.core.workflow.Task; -import com.arsdigita.portation.modules.core.workflow.TaskAssignment; -import com.arsdigita.portation.modules.core.workflow.TaskComment; -import com.arsdigita.portation.modules.core.workflow.TaskDependency; -import com.arsdigita.portation.modules.core.workflow.Workflow; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - -/** - * Storage class for all ng-objects after conversion. This also helps for an - * easier access for the restoration of the dependencies. - * - * @author Jens Pelzetter + */ +public class CategoriesExporter extends AbstractDomainObjectsExporter { + + @Override + public Class exportsType() { + return Category.class; + } + + @Override + public String exportsBaseDataObjectType() { + return Category.BASE_DATA_OBJECT_TYPE; + } + + @Override + public String convertsToType() { + return "org.libreccm.categorization.Category"; + } + + @Override + protected List exportDomainObject(final Category domainObject, + final Path targetDir) { + + final String uuid = generateUuid(domainObject); + + final Path targetFilePath = targetDir + .resolve("org.libreccm.categorization.Categorization") + .resolve(String.format("%s.json", uuid)); + final File targetFile = targetFilePath.toFile(); + + final JsonFactory jsonFactory = new JsonFactory(); + try (JsonGenerator jsonGenerator = jsonFactory + .createGenerator(targetFile, JsonEncoding.UTF8)) { + + jsonGenerator.writeStartObject(); + + jsonGenerator.writeNumberField("objectId", + IdSequence.getInstance().nextId()); + jsonGenerator.writeStringField("uuid", uuid); + jsonGenerator.writeStringField("uniqueId", uuid); + + jsonGenerator.writeStringField("name", domainObject.getName()); + + final CategoryLocalizationCollection localizations = domainObject + .getCategoryLocalizationCollection(); + final Map titles = new HashMap<>(); + final Map descriptions = new HashMap<>(); + while (localizations.next()) { + + final CategoryLocalization localization = localizations + .getCategoryLocalization(); + final Locale locale = new Locale(localization.getLocale()); + final String title = localization.getName(); + final String description = localization.getDescription(); + + titles.put(locale, title); + descriptions.put(locale, description); + } + + jsonGenerator.writeObjectFieldStart("title"); + for (Map.Entry title : titles.entrySet()) { + jsonGenerator.writeStringField(title.getKey().toString(), + title.getValue()); + } + jsonGenerator.writeEndObject(); + + jsonGenerator.writeObjectFieldStart("description"); + for (Map.Entry desc : descriptions.entrySet()) { + jsonGenerator.writeStringField(desc.getKey().toString(), + desc.getValue()); + } + jsonGenerator.writeEndObject(); + + jsonGenerator.writeBooleanField("enabled", + domainObject.isEnabled()); + jsonGenerator.writeBooleanField("visible", + domainObject.isVisible()); + jsonGenerator.writeBooleanField("abstractCategory", + domainObject.isAbstract()); + + jsonGenerator.writeStringField( + "parentCategory", + generateUuid(domainObject.getDefaultParentCategory())); + jsonGenerator.writeNumberField( + "categoryOrder", + domainObject + .getDefaultParentCategory() + .getSortKey(domainObject) + .longValue()); + + jsonGenerator.writeEndObject(); + + return Arrays.asList(new String[]{uuid}); + + } catch (IOException ex) { + + throw new UncheckedWrapperException(ex); + } + } + + +} diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/Categorization.java b/ccm-core/src/org/libreccm/categorization/Categorization.java.off similarity index 75% rename from ccm-core/src/com/arsdigita/portation/modules/core/categorization/Categorization.java rename to ccm-core/src/org/libreccm/categorization/Categorization.java.off index ad29aa9c8..e21d922d3 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/Categorization.java +++ b/ccm-core/src/org/libreccm/categorization/Categorization.java.off @@ -16,30 +16,37 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.categorization; +package org.libreccm.categorization; import com.arsdigita.kernel.ACSObject; -import com.arsdigita.portation.Portable; -import com.arsdigita.portation.conversion.NgCoreCollection; -import com.arsdigita.portation.modules.core.core.CcmObject; + +import org.libreccm.export.convert.Portable; +import org.libreccm.export.convert.CcmCoreEntities; + +import org.libreccm.core.CcmObject; import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIdentityReference; +import org.libreccm.export.Exportable; +import org.libreccm.export.convert.UuidGenerator; /** * Association class describing the association between a category and an * object. Instances of these class should not created manually. The methods * provided by the {@code CategoryManager} take care of that. * - * @author Tobias Osmers + * @author Jens Pelzetter */ @JsonIdentityInfo(generator = CategorizationIdGenerator.class, property = "customCatId") -public class Categorization implements Portable { +public class Categorization implements Exportable, Portable { private long categorizationId; + private String uuid; + @JsonIdentityReference(alwaysAsId = true) private Category category; + @JsonIdentityReference(alwaysAsId = true) private CcmObject categorizedObject; private boolean index; @@ -47,10 +54,14 @@ public class Categorization implements Portable { private long objectOrder; private String type; + public Categorization(final Category category, + final CcmObject categorizedObject) { - public Categorization(final Category category, final CcmObject - categorizedObject) { this.categorizationId = ACSObject.generateID().longValue(); + this.uuid = UuidGenerator + .getInstance() + .generateUuid(category.getName(), + categorizedObject.getDisplayName()); this.category = category; this.categorizedObject = categorizedObject; @@ -61,10 +72,9 @@ public class Categorization implements Portable { this.type = ""; - NgCoreCollection.categorizations.put(this.categorizationId, this); + CcmCoreEntities.CATEGORIZATIONS.put(this.categorizationId, this); } - public long getCategorizationId() { return categorizationId; } @@ -72,6 +82,16 @@ public class Categorization implements Portable { public void setCategorizationId(long categorizationId) { this.categorizationId = categorizationId; } + + @Override + public String getUuid() { + return uuid; + } + + @Override + public void setUuid(final String uuid) { + this.uuid = uuid; + } public Category getCategory() { return category; @@ -120,4 +140,5 @@ public class Categorization implements Portable { public void setType(String type) { this.type = type; } + } diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/CategorizationIdGenerator.java b/ccm-core/src/org/libreccm/categorization/CategorizationIdGenerator.java.off similarity index 97% rename from ccm-core/src/com/arsdigita/portation/modules/core/categorization/CategorizationIdGenerator.java rename to ccm-core/src/org/libreccm/categorization/CategorizationIdGenerator.java.off index 3a8ca31ed..f766e02b4 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/CategorizationIdGenerator.java +++ b/ccm-core/src/org/libreccm/categorization/CategorizationIdGenerator.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.categorization; +package org.libreccm.categorization; import com.fasterxml.jackson.annotation.ObjectIdGenerator; diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/CategorizationMarshaller.java b/ccm-core/src/org/libreccm/categorization/CategorizationMarshaller.java.off similarity index 86% rename from ccm-core/src/com/arsdigita/portation/modules/core/categorization/CategorizationMarshaller.java rename to ccm-core/src/org/libreccm/categorization/CategorizationMarshaller.java.off index eb2550897..71edc8c4d 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/CategorizationMarshaller.java +++ b/ccm-core/src/org/libreccm/categorization/CategorizationMarshaller.java.off @@ -16,12 +16,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.categorization; +package org.libreccm.categorization; -import com.arsdigita.portation.AbstractMarshaller; -import com.arsdigita.portation.Format; -import com.arsdigita.portation.cmd.ExportLogger; -import com.arsdigita.portation.conversion.NgCoreCollection; +import org.libreccm.export.convert.AbstractMarshaller; +import org.libreccm.export.convert.Format; + +import org.libreccm.export.cmd.ExportLogger; + +import org.libreccm.export.convert.CcmCoreEntities; import java.util.ArrayList; @@ -62,6 +64,6 @@ public class CategorizationMarshaller extends AbstractMarshaller final boolean indentation) { ExportLogger.exporting("categorizations"); prepare(format, pathName, "categorizations", indentation); - exportList(new ArrayList<>(NgCoreCollection.categorizations.values())); + exportList(new ArrayList<>(CcmCoreEntities.CATEGORIZATIONS.values())); } } diff --git a/ccm-core/src/org/libreccm/categorization/CategorizationsExporter.java b/ccm-core/src/org/libreccm/categorization/CategorizationsExporter.java new file mode 100644 index 000000000..0113d3dcd --- /dev/null +++ b/ccm-core/src/org/libreccm/categorization/CategorizationsExporter.java @@ -0,0 +1,114 @@ +package org.libreccm.categorization; + +import com.arsdigita.categorization.CategorizedCollection; +import com.arsdigita.categorization.Category; +import com.arsdigita.kernel.ACSObject; +import com.arsdigita.util.UncheckedWrapperException; +import com.arsdigita.web.WebConfig; + +import com.fasterxml.jackson.core.JsonEncoding; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; +import org.libreccm.export.AbstractDomainObjectsExporter; +import org.libreccm.export.IdSequence; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +/** + * + * @author Jens Pelzetter + */ +public class CategorizationsExporter + extends AbstractDomainObjectsExporter { + + @Override + public Class exportsType() { + return Category.class; + } + + @Override + public String exportsBaseDataObjectType() { + return Category.BASE_DATA_OBJECT_TYPE; + } + + @Override + public String convertsToType() { + return "org.libreccm.categorization.Categorization"; + } + + @Override + protected List exportDomainObject(final Category domainObject, + final Path targetDir) { + + final CategorizedCollection categorized = domainObject + .getObjects(ACSObject.BASE_DATA_OBJECT_TYPE); + final List uuids = new ArrayList<>(); + while (categorized.next()) { + + final String uuid = exportCategorization(targetDir, + domainObject, + categorized.getACSObject(), + categorized.getPosition()); + uuids.add(uuid); + } + + return uuids; + + } + + private String exportCategorization(final Path targetDir, + final Category category, + final ACSObject object, + final long position) { + + final String categoryUuid = generateUuid(category); + final String objectUuid = generateUuid(object); + + final byte[] uuidSource = String + .format("%s/%s-%s", + WebConfig.getInstanceOf().getSiteName(), + category.getOID().toString(), + object.getOID().toString()) + .getBytes(StandardCharsets.UTF_8); + final String uuid = UUID.nameUUIDFromBytes(uuidSource).toString(); + + final ACSObject indexObj = category.getIndexObject(); + boolean isIndex = object.equals(indexObj); + + final Path targetFilePath = targetDir + .resolve("org.libreccm.categorization.Categorization") + .resolve(String.format("%s.json", uuid)); + final File targetFile = targetFilePath.toFile(); + final JsonFactory jsonFactory = new JsonFactory(); + try (JsonGenerator jsonGenerator = jsonFactory + .createGenerator(targetFile, JsonEncoding.UTF8)) { + + jsonGenerator.writeStartObject(); + + jsonGenerator.writeNumberField("categorizationId", + IdSequence.getInstance().nextId()); + jsonGenerator.writeStringField("uuid", uuid); + jsonGenerator.writeStringField("category", categoryUuid); + jsonGenerator.writeStringField("categorizedObject", objectUuid); + + jsonGenerator.writeBooleanField("indexObject", isIndex); + jsonGenerator.writeNumberField("objectOrder", position); + + jsonGenerator.writeEndObject(); + + return uuid; + + } catch (IOException ex) { + throw new UncheckedWrapperException(ex); + } + + } + +} diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/Category.java b/ccm-core/src/org/libreccm/categorization/Category.java.off similarity index 94% rename from ccm-core/src/com/arsdigita/portation/modules/core/categorization/Category.java rename to ccm-core/src/org/libreccm/categorization/Category.java.off index 033ae7378..3a4b8dd2d 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/Category.java +++ b/ccm-core/src/org/libreccm/categorization/Category.java.off @@ -16,15 +16,20 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.categorization; +package org.libreccm.categorization; import com.arsdigita.categorization.CategoryLocalization; import com.arsdigita.categorization.CategoryLocalizationCollection; -import com.arsdigita.portation.Portable; -import com.arsdigita.portation.conversion.NgCoreCollection; -import com.arsdigita.portation.modules.core.categorization.util.CategoryInformation; -import com.arsdigita.portation.modules.core.core.CcmObject; -import com.arsdigita.portation.modules.core.l10n.LocalizedString; + +import org.libreccm.export.convert.Portable; +import org.libreccm.export.convert.CcmCoreEntities; + +import org.libreccm.export.convert.categorization.util.CategoryInformation; + +import org.libreccm.core.CcmObject; + +import org.libreccm.l10n.LocalizedString; + import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIdentityReference; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -110,7 +115,7 @@ public class Category extends CcmObject implements Portable { ? defaultParent.getNumberOfChildCategories() + 1 : 0; - NgCoreCollection.categories.put(this.getObjectId(), this); + CcmCoreEntities.CATEGORIES.put(this.getObjectId(), this); } /** diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/CategoryIdResolver.java b/ccm-core/src/org/libreccm/categorization/CategoryIdResolver.java.off similarity index 96% rename from ccm-core/src/com/arsdigita/portation/modules/core/categorization/CategoryIdResolver.java rename to ccm-core/src/org/libreccm/categorization/CategoryIdResolver.java.off index 1605188ce..56a3ea1ac 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/CategoryIdResolver.java +++ b/ccm-core/src/org/libreccm/categorization/CategoryIdResolver.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.categorization; +package org.libreccm.categorization; import com.fasterxml.jackson.annotation.ObjectIdGenerator; import com.fasterxml.jackson.annotation.ObjectIdResolver; diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/CategoryMarshaller.java b/ccm-core/src/org/libreccm/categorization/CategoryMarshaller.java.off similarity index 86% rename from ccm-core/src/com/arsdigita/portation/modules/core/categorization/CategoryMarshaller.java rename to ccm-core/src/org/libreccm/categorization/CategoryMarshaller.java.off index d0159bb14..859aeb0ad 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/CategoryMarshaller.java +++ b/ccm-core/src/org/libreccm/categorization/CategoryMarshaller.java.off @@ -16,12 +16,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.categorization; +package org.libreccm.categorization; -import com.arsdigita.portation.AbstractMarshaller; -import com.arsdigita.portation.Format; -import com.arsdigita.portation.cmd.ExportLogger; -import com.arsdigita.portation.conversion.NgCoreCollection; +import org.libreccm.export.convert.AbstractMarshaller; +import org.libreccm.export.convert.Format; + +import org.libreccm.export.cmd.ExportLogger; + +import org.libreccm.export.convert.CcmCoreEntities; /** * @author (); - NgCoreCollection.domains.put(this.getObjectId(), this); + CcmCoreEntities.DOMAINS.put(this.getObjectId(), this); } diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/DomainIdResolver.java b/ccm-core/src/org/libreccm/categorization/DomainIdResolver.java.off similarity index 96% rename from ccm-core/src/com/arsdigita/portation/modules/core/categorization/DomainIdResolver.java rename to ccm-core/src/org/libreccm/categorization/DomainIdResolver.java.off index 22246ecb1..02b47182d 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/DomainIdResolver.java +++ b/ccm-core/src/org/libreccm/categorization/DomainIdResolver.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.categorization; +package org.libreccm.categorization; import com.fasterxml.jackson.annotation.ObjectIdGenerator; import com.fasterxml.jackson.annotation.ObjectIdResolver; diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/DomainMarshaller.java b/ccm-core/src/org/libreccm/categorization/DomainMarshaller.java.off similarity index 86% rename from ccm-core/src/com/arsdigita/portation/modules/core/categorization/DomainMarshaller.java rename to ccm-core/src/org/libreccm/categorization/DomainMarshaller.java.off index 1a386e3ca..eb76b56c0 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/DomainMarshaller.java +++ b/ccm-core/src/org/libreccm/categorization/DomainMarshaller.java.off @@ -16,12 +16,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.categorization; +package org.libreccm.categorization; -import com.arsdigita.portation.AbstractMarshaller; -import com.arsdigita.portation.Format; -import com.arsdigita.portation.cmd.ExportLogger; -import com.arsdigita.portation.conversion.NgCoreCollection; +import org.libreccm.export.convert.AbstractMarshaller; +import org.libreccm.export.convert.Format; + +import org.libreccm.export.cmd.ExportLogger; + +import org.libreccm.export.convert.CcmCoreEntities; import java.util.ArrayList; @@ -62,6 +64,6 @@ public class DomainMarshaller extends AbstractMarshaller { final boolean indentation) { ExportLogger.exporting("domains"); prepare(format, pathName, "domains", indentation); - exportList(new ArrayList<>(NgCoreCollection.domains.values())); + exportList(new ArrayList<>(CcmCoreEntities.DOMAINS.values())); } } diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/DomainOwnership.java b/ccm-core/src/org/libreccm/categorization/DomainOwnership.java.off similarity index 89% rename from ccm-core/src/com/arsdigita/portation/modules/core/categorization/DomainOwnership.java rename to ccm-core/src/org/libreccm/categorization/DomainOwnership.java.off index 70d501ec7..1f2dc34f9 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/DomainOwnership.java +++ b/ccm-core/src/org/libreccm/categorization/DomainOwnership.java.off @@ -16,13 +16,17 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.categorization; +package org.libreccm.categorization; import com.arsdigita.kernel.ACSObject; -import com.arsdigita.portation.Portable; -import com.arsdigita.portation.conversion.NgCoreCollection; -import com.arsdigita.portation.modules.core.core.CcmObject; -import com.arsdigita.portation.modules.core.web.CcmApplication; + +import org.libreccm.export.convert.Portable; +import org.libreccm.export.convert.CcmCoreEntities; + +import org.libreccm.core.CcmObject; + +import org.libreccm.web.CcmApplication; + import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIdentityReference; @@ -59,7 +63,7 @@ public class DomainOwnership implements Portable { this.ownerOrder = 1; this.domainOrder = 1; - NgCoreCollection.domainOwnerships.put(this.getOwnershipId(), this); + CcmCoreEntities.DOMAIN_OWNERSHIPS.put(this.getOwnershipId(), this); } diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/DomainOwnershipIdGenerator.java b/ccm-core/src/org/libreccm/categorization/DomainOwnershipIdGenerator.java.off similarity index 97% rename from ccm-core/src/com/arsdigita/portation/modules/core/categorization/DomainOwnershipIdGenerator.java rename to ccm-core/src/org/libreccm/categorization/DomainOwnershipIdGenerator.java.off index 4ea2af677..d689c8e0b 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/DomainOwnershipIdGenerator.java +++ b/ccm-core/src/org/libreccm/categorization/DomainOwnershipIdGenerator.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.categorization; +package org.libreccm.categorization; import com.fasterxml.jackson.annotation.ObjectIdGenerator; diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/DomainOwnershipMarshaller.java b/ccm-core/src/org/libreccm/categorization/DomainOwnershipMarshaller.java.off similarity index 86% rename from ccm-core/src/com/arsdigita/portation/modules/core/categorization/DomainOwnershipMarshaller.java rename to ccm-core/src/org/libreccm/categorization/DomainOwnershipMarshaller.java.off index 0627ead31..e0a6b544b 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/DomainOwnershipMarshaller.java +++ b/ccm-core/src/org/libreccm/categorization/DomainOwnershipMarshaller.java.off @@ -16,12 +16,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.categorization; +package org.libreccm.categorization; -import com.arsdigita.portation.AbstractMarshaller; -import com.arsdigita.portation.Format; -import com.arsdigita.portation.cmd.ExportLogger; -import com.arsdigita.portation.conversion.NgCoreCollection; +import org.libreccm.export.convert.AbstractMarshaller; +import org.libreccm.export.convert.Format; + +import org.libreccm.export.cmd.ExportLogger; + +import org.libreccm.export.convert.CcmCoreEntities; import java.util.ArrayList; @@ -62,6 +64,6 @@ public class DomainOwnershipMarshaller extends AbstractMarshaller(NgCoreCollection.domainOwnerships.values())); + exportList(new ArrayList<>(CcmCoreEntities.DOMAIN_OWNERSHIPS.values())); } } diff --git a/ccm-core/src/org/libreccm/core/AbstractCcmObjectsExporter.java b/ccm-core/src/org/libreccm/core/AbstractCcmObjectsExporter.java new file mode 100644 index 000000000..a51967c7b --- /dev/null +++ b/ccm-core/src/org/libreccm/core/AbstractCcmObjectsExporter.java @@ -0,0 +1,77 @@ +package org.libreccm.core; + +import com.arsdigita.kernel.ACSObject; +import com.arsdigita.util.UncheckedWrapperException; + +import com.fasterxml.jackson.core.JsonEncoding; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; +import org.libreccm.export.AbstractDomainObjectsExporter; +import org.libreccm.export.IdSequence; +import org.libreccm.security.PermissionsExporter; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.List; + +/** + * Abstract class for exporting types which extend {@link ACSObject}. The + * implementation of + * {@link #exportDomainObject(com.arsdigita.kernel.ACSObject, java.nio.file.Path)} + * in this class takes care of the basic stuff for export an ACSObject/CcmObject + * including exporting the properties shared by all ACSObjects/CcmObjects. + * + * Please note that this exporter does not handle permissions and + * categorizations for the object. This is done by the + * {@link PermissionsExporter} and the {@link CategorizationsExporter}. + * + * @author Jens Pelzetter + * @param + */ +public abstract class AbstractCcmObjectsExporter + extends AbstractDomainObjectsExporter { + + /** + * Implement this method to export the properties specific for the type. + * + * @param ccmObject The {@link ACSObject} to export. + * @param jsonGenerator The {@link JsonGenerator} to use. + * @throws java.io.IOException + */ + protected abstract void exportObjectProperties( + T ccmObject, final JsonGenerator jsonGenerator) + throws IOException ; + + @Override + public final List exportDomainObject(final T domainObject, + final Path targetDir) { + + final String uuid = generateUuid(domainObject); + final Path targetFilePath = generateTargetFilePath( + targetDir, exportsType().getName(), uuid); + + final JsonFactory jsonFactory = new JsonFactory(); + try (JsonGenerator jsonGenerator = jsonFactory + .createGenerator(targetFilePath.toFile(), JsonEncoding.UTF8)) { + + jsonGenerator.writeStartObject(); + + jsonGenerator.writeNumberField("objectId", + IdSequence.getInstance().nextId()); + jsonGenerator.writeStringField("uuid", uuid); + jsonGenerator.writeStringField("displayName", + domainObject.getDisplayName()); + + exportObjectProperties(domainObject, jsonGenerator); + + jsonGenerator.writeEndObject(); + } catch (IOException ex) { + throw new UncheckedWrapperException(ex); + } + + return Arrays.asList(new String[]{uuid}); + + } + +} diff --git a/ccm-core/src/org/libreccm/core/AbstractResourceTypesExporter.java b/ccm-core/src/org/libreccm/core/AbstractResourceTypesExporter.java new file mode 100644 index 000000000..a6d9a6a6e --- /dev/null +++ b/ccm-core/src/org/libreccm/core/AbstractResourceTypesExporter.java @@ -0,0 +1,79 @@ +package org.libreccm.core; + +import com.arsdigita.kernel.KernelConfig; +import com.arsdigita.kernel.ResourceType; +import com.arsdigita.util.UncheckedWrapperException; + +import com.fasterxml.jackson.core.JsonEncoding; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; +import org.libreccm.export.AbstractDomainObjectsExporter; +import org.libreccm.export.IdSequence; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.List; + +/** + * + * @author Jens Pelzetter + * @param + */ +public abstract class AbstractResourceTypesExporter + extends AbstractDomainObjectsExporter { + + /** + * Implement this method to export the properties specific for the type. + * + * @param resourceType The {@link ResourceType} to export. + * @param jsonGenerator The {@link JsonGenerator} to use. + */ + protected abstract void exportResourceTypeProperties( + T resourceType, JsonGenerator jsonGenerator); + + @Override + public final List exportDomainObject(final T domainObject, + final Path targetDir) { + + final String uuid = generateUuid(domainObject); + final Path targetFilePath = generateTargetFilePath( + targetDir, exportsType().getName(), uuid); + + final JsonFactory jsonFactory = new JsonFactory(); + try (JsonGenerator jsonGenerator = jsonFactory + .createGenerator(targetFilePath.toFile(), JsonEncoding.UTF8)) { + + jsonGenerator.writeStartObject(); + + jsonGenerator.writeNumberField("resourceTypeId", + IdSequence.getInstance().nextId()); + jsonGenerator.writeStringField("uuid", uuid); + + jsonGenerator.writeObjectFieldStart("title"); + jsonGenerator.writeStringField( + KernelConfig.getConfig().getDefaultLanguage(), + domainObject.getTitle()); + jsonGenerator.writeEndObject(); + + jsonGenerator.writeObjectFieldStart("description"); + jsonGenerator.writeStringField( + KernelConfig.getConfig().getDefaultLanguage(), + domainObject.getDescription()); + jsonGenerator.writeEndObject(); + + jsonGenerator.writeBooleanField("workspaceApplication", false); + jsonGenerator.writeBooleanField("viewableAsFullPage", false); + jsonGenerator.writeBooleanField("workspaceAsEmbedded", false); + jsonGenerator.writeBooleanField("singleton", false); + + jsonGenerator.writeEndObject(); + + } catch (IOException ex) { + throw new UncheckedWrapperException(ex); + } + + return Arrays.asList(new String[]{uuid}); + } + +} diff --git a/ccm-core/src/org/libreccm/core/AbstractResourcesExporter.java b/ccm-core/src/org/libreccm/core/AbstractResourcesExporter.java new file mode 100644 index 000000000..3d702bd46 --- /dev/null +++ b/ccm-core/src/org/libreccm/core/AbstractResourcesExporter.java @@ -0,0 +1,58 @@ +package org.libreccm.core; + +import com.arsdigita.kernel.KernelConfig; +import com.arsdigita.kernel.Resource; +import com.arsdigita.kernel.ResourceType; + +import com.fasterxml.jackson.core.JsonGenerator; + +import java.io.IOException; + +/** + * + * @author Jens Pelzetter + * @param + */ +public abstract class AbstractResourcesExporter + extends AbstractCcmObjectsExporter { + + /** + * Implement this method to export the properties specific for the type. + * + * @param resource The {@link Resource} to export. + * @param jsonGenerator The {@link JsonGenerator} to use. + * @throws java.io.IOException + */ + @Override + protected final void exportObjectProperties( + final T resource, final JsonGenerator jsonGenerator) + throws IOException { + + jsonGenerator.writeObjectFieldStart("title"); + jsonGenerator.writeStringField( + KernelConfig.getConfig().getDefaultLanguage(), + resource.getTitle()); + jsonGenerator.writeEndObject(); + + jsonGenerator.writeObjectFieldStart("description"); + jsonGenerator.writeStringField( + KernelConfig.getConfig().getDefaultLanguage(), + resource.getDescription()); + jsonGenerator.writeEndObject(); + + final ResourceType type = resource.getResourceType(); + final String typeUuid = generateUuid(type); + jsonGenerator.writeStringField("resourceType", typeUuid); + + final Resource parent = resource.getParentResource(); + final String parentUuid = generateUuid(parent); + jsonGenerator.writeStringField("parent", parentUuid); + + exportResourceProperties(resource, jsonGenerator); + } + + protected abstract void exportResourceProperties( + T resource, JsonGenerator jsonGenerator) + throws IOException; + +} diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/core/CcmObject.java b/ccm-core/src/org/libreccm/core/CcmObject.java.off similarity index 89% rename from ccm-core/src/com/arsdigita/portation/modules/core/core/CcmObject.java rename to ccm-core/src/org/libreccm/core/CcmObject.java.off index d7142592f..33389ce11 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/core/CcmObject.java +++ b/ccm-core/src/org/libreccm/core/CcmObject.java.off @@ -16,14 +16,17 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.core; +package org.libreccm.core; import com.arsdigita.kernel.ACSObject; -import com.arsdigita.portation.conversion.NgCoreCollection; -import com.arsdigita.portation.modules.core.categorization.Categorization; -import com.arsdigita.portation.modules.core.categorization.Category; -import com.arsdigita.portation.modules.core.categorization.util.CategoryInformation; -import com.arsdigita.portation.modules.core.security.Permission; + +import org.libreccm.export.convert.CcmCoreEntities; +import org.libreccm.categorization.Categorization; +import org.libreccm.categorization.Category; + +import org.libreccm.export.convert.categorization.util.CategoryInformation; + +import org.libreccm.security.Permission; import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.ObjectIdGenerators; @@ -73,7 +76,7 @@ public class CcmObject { this.permissions = new ArrayList<>(); this.categories = new ArrayList<>(); - NgCoreCollection.ccmObjects.put(this.objectId, this); + CcmCoreEntities.CCM_OBJECTS.put(this.objectId, this); } // specific constructor for ldn-terms' Domain and LegalMetadata @@ -91,7 +94,7 @@ public class CcmObject { this.permissions = new ArrayList<>(); this.categories = new ArrayList<>(); - NgCoreCollection.ccmObjects.put(this.objectId, this); + CcmCoreEntities.CCM_OBJECTS.put(this.objectId, this); } public long getObjectId() { diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/core/CcmObjectIdResolver.java b/ccm-core/src/org/libreccm/core/CcmObjectIdResolver.java.off similarity index 97% rename from ccm-core/src/com/arsdigita/portation/modules/core/core/CcmObjectIdResolver.java rename to ccm-core/src/org/libreccm/core/CcmObjectIdResolver.java.off index a4c05a188..3547938c9 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/core/CcmObjectIdResolver.java +++ b/ccm-core/src/org/libreccm/core/CcmObjectIdResolver.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.core; +package org.libreccm.core; import com.fasterxml.jackson.annotation.ObjectIdGenerator; import com.fasterxml.jackson.annotation.ObjectIdResolver; diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/core/EmailAddress.java b/ccm-core/src/org/libreccm/core/EmailAddress.java.off similarity index 97% rename from ccm-core/src/com/arsdigita/portation/modules/core/core/EmailAddress.java rename to ccm-core/src/org/libreccm/core/EmailAddress.java.off index 2262b22a3..34a2a8e1c 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/core/EmailAddress.java +++ b/ccm-core/src/org/libreccm/core/EmailAddress.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.core; +package org.libreccm.core; /** * @author (NgCoreCollection.resourceTypes.values())); + exportList(new ArrayList<>(CcmCoreEntities.RESOURCE_TYPES.values())); } } diff --git a/ccm-core/src/org/libreccm/core/ResourceTypesExporter.java b/ccm-core/src/org/libreccm/core/ResourceTypesExporter.java new file mode 100644 index 000000000..93060b0ac --- /dev/null +++ b/ccm-core/src/org/libreccm/core/ResourceTypesExporter.java @@ -0,0 +1,38 @@ +package org.libreccm.core; + +import com.arsdigita.kernel.ResourceType; + +import com.fasterxml.jackson.core.JsonGenerator; + +import java.util.Arrays; +import java.util.List; + +/** + * + * @author Jens Pelzetter + */ +public class ResourceTypesExporter + extends AbstractResourceTypesExporter { + + @Override + public Class exportsType() { + return ResourceType.class; + } + + @Override + public String exportsBaseDataObjectType() { + return ResourceType.BASE_DATA_OBJECT_TYPE; + } + + @Override + public String convertsToType() { + return "org.libreccm.core.ResourceType"; + } + + protected void exportResourceTypeProperties( + final ResourceType resourceType, final JsonGenerator jsonGenerator) { + + //Nothing + } + +} diff --git a/ccm-core/src/org/libreccm/export/AbstractDomainObjectsExporter.java b/ccm-core/src/org/libreccm/export/AbstractDomainObjectsExporter.java new file mode 100644 index 000000000..8a2100c12 --- /dev/null +++ b/ccm-core/src/org/libreccm/export/AbstractDomainObjectsExporter.java @@ -0,0 +1,166 @@ +package org.libreccm.export; + +import com.arsdigita.domain.DomainObject; +import com.arsdigita.domain.DomainObjectFactory; +import com.arsdigita.persistence.DataCollection; +import com.arsdigita.persistence.DataObject; +import com.arsdigita.persistence.Session; +import com.arsdigita.persistence.SessionManager; +import com.arsdigita.web.WebConfig; + +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +/** + * Base class for exporters for migration to LibreCCM 7. + * + * @author Jens Pelzetter + * @param The subclass of {@link DomainObject} the implementation handles. + */ +public abstract class AbstractDomainObjectsExporter { + + final WebConfig webConfig = WebConfig.getInstanceOf(); + + /** + * Provides the class of the domain object which is handled by the + * implementation. + * + * @return + */ + public abstract Class exportsType(); + + /** + * Provides the base data object type of the domain object handled by the + * implementation. This information is used by + * {@link #exportDomainObjects(java.nio.file.Path)} to retrieve the domain + * objects to export. + * + * @return + */ + public abstract String exportsBaseDataObjectType(); + + /** + * Provides the fully qualified class name of the type to which the domain + * objects handled by the implementation are converted. + * + * @return + */ + public abstract String convertsToType(); + + /** + * The implementation of this method is supposed to do the export for a + * single entity. To generate the path of the target file + * {@link #generateTargetFilePath(java.nio.file.Path, java.lang.String)} can + * be used. A single domain object can be split into several objects by the + * exporter. + * + * @param domainObject The domain object to export. + * @param targetDir The target directory for the export + * + * @return The UUIDs of the exported objects. + */ + protected abstract List exportDomainObject(final T domainObject, + final Path targetDir); + + /** + * Helper for method for generating an UUID for an entity. In LibreCCM 7 + * UUIDs are used for identifying entities. To avoid collision are the keep + * the UUID the same for between runs of the export we use name based UUIDs + * (variant 3) here. The UUID is generated from the OID of the domain object + * to export. More exactly first a string containing the name of the site as + * returned by {@link WebConfig#getSiteName()} and the string representation + * of the OID, separated by {@code '/'} is created. From this string the + * UUID is generated. + * + * Exporter for association objects like + * {@code org.librecms.categorization.Categorization} should not use this + * method. Instead they should generate the UUID from the site name and the + * OIDs of the entities associated by the object. + * + * @param forDomainObject The {@link DomainObject} for which the UUID is + * generated. + * + * @return The UUID of the {@link DomainObject}. + */ + protected final String generateUuid(final DomainObject forDomainObject) { + + final String uuidSource = String.format( + "%s/%s", + webConfig.getSiteName(), + forDomainObject.getOID().toString()); + final byte[] uuidSourceBytes = uuidSource + .getBytes(StandardCharsets.UTF_8); + return UUID.nameUUIDFromBytes(uuidSourceBytes).toString(); + } + + /** + * Helper method for generating the target file path for the export of an + * entity. + * + * @param targetDir The target directory. + * @param uuid The UUID of the entity. + * + * @return The path for target file. + */ + protected final Path generateTargetFilePath(final Path targetDir, + final String uuid) { + + return generateTargetFilePath(targetDir, convertsToType(), uuid); + } + + protected final Path generateTargetFilePath(final Path targetDir, + final String targetType, + final String uuid) { + + return targetDir + .resolve(targetType) + .resolve(String.format("%s.json", uuid)); + } + + /** + * Retrieves all {@link DomainObject}s of the type returned by + * {@link #exportsBaseDataObjectType()} and calls + * {@link #exportDomainObject(com.arsdigita.domain.DomainObject, java.nio.file.Path)} + * for each of them. + * + * @param targetDir target directory for the export. + * @return The list of uuids of the the exported entites. + */ + @SuppressWarnings("unchecked") + public final List exportDomainObjects(final Path targetDir) { + + final Session session = SessionManager.getSession(); + final DataCollection dataCollection = session + .retrieve(exportsBaseDataObjectType()); + + final List domainObjects = new ArrayList<>(); + while (dataCollection.next()) { + + final DataObject dataObject = dataCollection.getDataObject(); + final DomainObject domainObject = DomainObjectFactory + .newInstance(dataObject); + + if (!(domainObject.getClass().isAssignableFrom(exportsType()))) { + throw new ExportException(String.format( + "DomainObject is not of type \"%s\" but of type \"%s\".", + exportsType().getName(), + domainObject.getClass().getName())); + } + + domainObjects.add((T) domainObject); + } + + final List uuids = new ArrayList<>(); + for (final T domainObject : domainObjects) { + final List createdUuids = exportDomainObject(domainObject, + targetDir); + uuids.addAll(createdUuids); + } + + return uuids; + } + +} diff --git a/ccm-core/src/org/libreccm/export/ExportException.java b/ccm-core/src/org/libreccm/export/ExportException.java new file mode 100644 index 000000000..3340bd9f3 --- /dev/null +++ b/ccm-core/src/org/libreccm/export/ExportException.java @@ -0,0 +1,54 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package org.libreccm.export; + +/** + * + * @author Jens Pelzetter + */ +public class ExportException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + /** + * Creates a new instance of ExportException without detail message. + */ + public ExportException() { + super(); + } + + + /** + * Constructs an instance of ExportException with the specified detail message. + * + * @param msg The detail message. + */ + public ExportException(final String msg) { + super(msg); + } + + /** + * Constructs an instance of ExportException which wraps the + * specified exception. + * + * @param exception The exception to wrap. + */ + public ExportException(final Exception exception) { + super(exception); + } + + /** + * Constructs an instance of ExportException with the specified message which also wraps the + * specified exception. + * + * @param msg The detail message. + * @param exception The exception to wrap. + */ + public ExportException(final String msg, final Exception exception) { + super(msg, exception); + } +} diff --git a/ccm-core/src/org/libreccm/export/ExportManager.java b/ccm-core/src/org/libreccm/export/ExportManager.java new file mode 100644 index 000000000..830d84864 --- /dev/null +++ b/ccm-core/src/org/libreccm/export/ExportManager.java @@ -0,0 +1,257 @@ +package org.libreccm.export; + +import com.arsdigita.util.UncheckedWrapperException; +import com.arsdigita.web.WebConfig; + +import com.fasterxml.jackson.core.JsonEncoding; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * + * @author Jens Pelzetter + */ +public final class ExportManager { + + private static final ExportManager INSTANCE = new ExportManager(); + + private List> exporters; + + private ExportManager() { + // Nothing + } + + public static ExportManager getInstance() { + return INSTANCE; + } + + public void exportData(final Path targetDirPath) { + + final Set types = exporters + .stream() + .map(exporter -> exporter.convertsToType()) + .collect(Collectors.toSet()); + for(final String type : types) { + try { + final Path typeDirPath = targetDirPath.resolve(type); + Files.createDirectories(typeDirPath); + } catch (IOException ex) { + throw new UncheckedWrapperException(ex); + } + } + + if (!Files.isDirectory(targetDirPath)) { + throw new IllegalArgumentException(String.format( + "Path %s does not point to a directory.", + targetDirPath)); + } + + if (!Files.isWritable(targetDirPath)) { + throw new IllegalArgumentException(String.format( + "Path %s is not writable.", + targetDirPath)); + } + + final Map> exportedEntities = new HashMap<>(); + for (final AbstractDomainObjectsExporter< ?> exporter : exporters) { + + final List uuids = exporter + .exportDomainObjects(targetDirPath); + exportedEntities.put(exporter.convertsToType(), uuids); + } + + final Path manifestFilePath = targetDirPath.resolve("ccm-export.json"); + final JsonFactory jsonFactory = new JsonFactory(); + try (final JsonGenerator manifestGenerator = jsonFactory + .createGenerator(manifestFilePath.toFile(), JsonEncoding.UTF8)) { + + manifestGenerator.writeStartObject(); + + manifestGenerator.writeStartObject(); + manifestGenerator.writeStringField( + "created", + LocalDateTime.now(ZoneId.of("UTC")).toString()); + manifestGenerator.writeStringField( + "onServer", + WebConfig.getInstanceOf().getSiteName()); + manifestGenerator.writeArrayFieldStart("types"); + + for (final String type : exportedEntities.keySet()) { + + manifestGenerator.writeString(type); + } + + manifestGenerator.writeEndObject(); + + manifestGenerator.writeObjectFieldStart("entities"); + + for (final Map.Entry> entities + : exportedEntities.entrySet()) { + + manifestGenerator.writeArrayFieldStart(entities.getKey()); + + for (final String uuid : entities.getValue()) { + manifestGenerator.writeString(uuid); + } + + manifestGenerator.writeEndArray(); + + } + + manifestGenerator.writeEndObject(); + + manifestGenerator.writeEndObject(); + } catch (IOException ex) { + throw new UncheckedWrapperException(ex); + } + + } + + public void registerExporter(final AbstractDomainObjectsExporter exporter) { + exporters.add(exporter); + } + +// public void exportEntities(final List entities, +// final String exportName, +// final String targetDir) { +// +// final Path targetDirPath = Paths.get(targetDir); +// +// final Set types = entities +// .stream() +// .map(entity -> entity.getClass().getName()) +// .collect(Collectors.toSet()); +// +// if (!Files.isDirectory(targetDirPath)) { +// throw new IllegalArgumentException(String.format( +// "Path %s does not point to a directory.", +// targetDir)); +// } +// +// if (!Files.isWritable(targetDirPath)) { +// throw new IllegalArgumentException(String.format( +// "Path %s is not writable.", +// targetDir)); +// } +// +// final Path exportDir = targetDirPath.resolve(exportName); +// final Path exportDirPath; +// try { +// exportDirPath = Files.createDirectory(exportDir); +// } catch (IOException ex) { +// throw new UncheckedWrapperException(ex); +// } +// final Path manifestFilePath = exportDirPath.resolve("ccm-export.json"); +// +// final JsonFactory factory = new JsonFactory(); +// final Map> typeEntityMap; +// try (final JsonGenerator manifestGenerator = factory +// .createGenerator(manifestFilePath.toFile(), +// JsonEncoding.UTF8)) { +// +// manifestGenerator.writeStartObject(); +// manifestGenerator.writeStringField( +// "created", +// LocalDateTime.now(ZoneId.of("UTC")).toString()); +// manifestGenerator.writeStringField( +// "onServer", +// WebConfig.getInstanceOf().getSiteName()); +// manifestGenerator.writeFieldName("types"); +// manifestGenerator.writeStartArray(); +// typeEntityMap = new HashMap<>(); +// for (final String type : types) { +// +// final Path typePath = exportDirPath.resolve(type); +// Files.createDirectory(typePath); +// manifestGenerator.writeString(type); +// +// final List entitiesOfType = entities +// .stream() +// .filter(entity -> entity.getClass().getName().equals(type)) +// .collect(Collectors.toList()); +// +// typeEntityMap.put(type, entitiesOfType); +// } +// +// manifestGenerator.writeEndArray(); +// +// manifestGenerator.writeFieldName("entities"); +// manifestGenerator.writeStartObject(); +// +// for (final Map.Entry> entry : typeEntityMap +// .entrySet()) { +// +// final String type = entry.getKey(); +// final List entitiesOfType = entry.getValue(); +// final Path typeDirPath = exportDirPath.resolve(type); +// Files.createDirectory(typeDirPath); +// final List exportedEntities = createExportedEntities( +// targetDirPath, type, entitiesOfType); +// +// manifestGenerator.writeFieldName(type); +// manifestGenerator.writeStartArray(); +// for (final String exportedEntity : exportedEntities) { +// manifestGenerator.writeString(exportedEntity); +// } +// manifestGenerator.writeEndArray(); +// } +// +// manifestGenerator.writeEndObject(); +// manifestGenerator.writeEndObject(); +// } catch (IOException ex) { +// throw new UncheckedWrapperException(ex); +// } +// } +// +// private List createExportedEntities( +// final Path targetDir, +// final String type, +// final List entities) { +// +// final List exportedEntites = new ArrayList<>(); +// +// for (final Exportable entity : entities) { +// +// exportEntity(targetDir, entity); +// exportedEntites.add(entity.getUuid()); +// } +// +// return exportedEntites; +// } +// +// private void exportEntity(final Path targetDir, +// final Exportable entity) { +// +//// if (EXPORTERS.containsKey(entity.getClass().getName())) { +//// throw new IllegalArgumentException(String.format( +//// "No exporter for type \"%s\" available.", +//// entity.getClass().getName())); +//// } +// final Path entityFilePath = targetDir +// .resolve(String.format("%s.json", entity.getUuid())); +// +//// final AbstractExporter exporter = EXPORTERS +//// .get(entity.getClass().getName()); +//// final String data = exporter.exportEntity(entity); +// try { +// final String data = objectMapper.writeValueAsString(entity); +// +// Files.write(entityFilePath, data.getBytes(StandardCharsets.UTF_8)); +// } catch (IOException ex) { +// throw new UncheckedWrapperException(ex); +// } +// } +} diff --git a/ccm-core/src/org/libreccm/export/Exportable.java b/ccm-core/src/org/libreccm/export/Exportable.java new file mode 100644 index 000000000..5f1c1c411 --- /dev/null +++ b/ccm-core/src/org/libreccm/export/Exportable.java @@ -0,0 +1,12 @@ +package org.libreccm.export; + +/** + * + * @author Jens Pelzetter + */ +public interface Exportable { + + String getUuid(); + + void setUuid(String uuid); +} diff --git a/ccm-core/src/org/libreccm/export/IdSequence.java b/ccm-core/src/org/libreccm/export/IdSequence.java new file mode 100644 index 000000000..381f507f4 --- /dev/null +++ b/ccm-core/src/org/libreccm/export/IdSequence.java @@ -0,0 +1,26 @@ +package org.libreccm.export; + +/** + * + * @author Jens Pelzetter + */ +public class IdSequence { + + private static final IdSequence INSTANCE = new IdSequence(); + + private long idSequence = 0; + + private IdSequence() { + // Nothing + } + + public static IdSequence getInstance() { + return INSTANCE; + } + + public long nextId() { + idSequence++; + return idSequence; + } + +} diff --git a/ccm-core/src/org/libreccm/export/cmd/ExportCliTool.java b/ccm-core/src/org/libreccm/export/cmd/ExportCliTool.java new file mode 100644 index 000000000..8d4cc47d2 --- /dev/null +++ b/ccm-core/src/org/libreccm/export/cmd/ExportCliTool.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2015 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.export.cmd; + +import com.arsdigita.util.cmd.Program; + +import org.apache.commons.cli.CommandLine; +import org.libreccm.export.ExportManager; + +import java.nio.file.Path; +import java.nio.file.Paths; + +/** + * A Commandline tool for exporting all the objects of specified classes to + * one or many specified file types. + * + * @author Tobias Osmers + * @author Jens Pelzetter + */ +public class ExportCliTool extends Program { + /** + * Constructor for the command line tool. + */ + private ExportCliTool() { + super("Export Commandline Tool", + "1.0.0", + "Export of all entities for reimport in LibreCCM 7"); + } + + /** + * Main method, which calls the {@code doRun}-method and hands the given + * arguments over to that method. + * + * @param args The command line arguments + */ + public static void main(final String[] args) { + new ExportCliTool().run(args); + } + + + @Override + protected void doRun(final CommandLine cmdLine) { + String[] args = cmdLine.getArgs(); + + if (args.length < 1) { + System.out.println("Usage ExportCliTool $targetDir"); + System.exit(-1); + } + + final String targetDir = args[0]; + final Path targetDirPath = Paths.get(targetDir); + + ExportManager.getInstance().exportData(targetDirPath); + } + +} diff --git a/ccm-core/src/com/arsdigita/portation/cmd/ExportLogger.java b/ccm-core/src/org/libreccm/export/cmd/ExportLogger.java.off similarity index 98% rename from ccm-core/src/com/arsdigita/portation/cmd/ExportLogger.java rename to ccm-core/src/org/libreccm/export/cmd/ExportLogger.java.off index 5c803e53f..93fafece1 100644 --- a/ccm-core/src/com/arsdigita/portation/cmd/ExportLogger.java +++ b/ccm-core/src/org/libreccm/export/cmd/ExportLogger.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.cmd; +package org.libreccm.export.cmd; /** * @author Tobias Osmers * @version created the 7/28/17 */ -public abstract class AbstractConverter { +public abstract class AbstractDomainObjectConverter { /** * Method, to start all the different converter classes in a specific * order, so that dependencies can only be set, where the objects have diff --git a/ccm-core/src/com/arsdigita/portation/AbstractConversion.java b/ccm-core/src/org/libreccm/export/convert/AbstractDomainObjectsConverter.java.off similarity index 78% rename from ccm-core/src/com/arsdigita/portation/AbstractConversion.java rename to ccm-core/src/org/libreccm/export/convert/AbstractDomainObjectsConverter.java.off index 27db4bfa4..a5c18027c 100644 --- a/ccm-core/src/com/arsdigita/portation/AbstractConversion.java +++ b/ccm-core/src/org/libreccm/export/convert/AbstractDomainObjectsConverter.java.off @@ -16,17 +16,21 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation; +package org.libreccm.export.convert; + +import com.arsdigita.domain.DomainObject; /** * Abstract class for converting all trunk objects of a certain class into * objects of their corresponding ng classes. * - * @author Tobias Osmers + * @author Jens Pelzetter */ -public abstract class AbstractConversion { +public abstract class AbstractDomainObjectsConverter { + public abstract String convertsType(); + /** * Retrieves all trunk objects of a certain class from the persistent * storage and collects them in a list. Then calls for creating the diff --git a/ccm-core/src/com/arsdigita/portation/AbstractExporter.java b/ccm-core/src/org/libreccm/export/convert/AbstractExporterManager.java.off similarity index 88% rename from ccm-core/src/com/arsdigita/portation/AbstractExporter.java rename to ccm-core/src/org/libreccm/export/convert/AbstractExporterManager.java.off index 2851a9434..38796a906 100644 --- a/ccm-core/src/com/arsdigita/portation/AbstractExporter.java +++ b/ccm-core/src/org/libreccm/export/convert/AbstractExporterManager.java.off @@ -16,13 +16,12 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation; +package org.libreccm.export.convert; /** - * @author Tobias Osmers */ -public abstract class AbstractExporter { +public abstract class AbstractExporterManager { protected static Format format; protected static String pathName; diff --git a/ccm-core/src/com/arsdigita/portation/AbstractMarshaller.java b/ccm-core/src/org/libreccm/export/convert/AbstractMarshaller.java.off similarity index 99% rename from ccm-core/src/com/arsdigita/portation/AbstractMarshaller.java rename to ccm-core/src/org/libreccm/export/convert/AbstractMarshaller.java.off index bcf668519..5cbadd60b 100644 --- a/ccm-core/src/com/arsdigita/portation/AbstractMarshaller.java +++ b/ccm-core/src/org/libreccm/export/convert/AbstractMarshaller.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation; +package org.libreccm.export.convert; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/ccm-core/src/org/libreccm/export/convert/CcmCoreEntities.java.off b/ccm-core/src/org/libreccm/export/convert/CcmCoreEntities.java.off new file mode 100644 index 000000000..43e1dea24 --- /dev/null +++ b/ccm-core/src/org/libreccm/export/convert/CcmCoreEntities.java.off @@ -0,0 +1,113 @@ +/* + * Copyright (C) 2015 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.export.convert; + +import org.libreccm.categorization.Categorization; +import org.libreccm.categorization.Category; +import org.libreccm.categorization.Domain; +import org.libreccm.categorization.DomainOwnership; + +import org.libreccm.core.CcmObject; + +import org.libreccm.core.Resource; + +import org.libreccm.core.ResourceType; + +import org.libreccm.security.Group; +import org.libreccm.security.GroupMembership; +import org.libreccm.security.Party; +import org.libreccm.security.Permission; +import org.libreccm.security.Role; +import org.libreccm.security.RoleMembership; +import org.libreccm.security.User; + +import org.libreccm.web.CcmApplication; + +import org.libreccm.workflow.AssignableTask; +import org.libreccm.workflow.Task; +import org.libreccm.workflow.TaskAssignment; +import org.libreccm.workflow.TaskComment; +import org.libreccm.workflow.TaskDependency; +import org.libreccm.workflow.Workflow; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Storage class for all ng-objects after conversion. This also helps for an + * easier access for the restoration of the dependencies. + * + * @author Tobias Osmers + * @author jens Pelzetter + */ +public class CcmCoreEntities { + + public final static Map PARTIES = new HashMap<>(); + public final static Map USERS = new HashMap<>(); + public final static Map GROUPS = new HashMap<>(); + public final static Map GROUP_MEMBERSHIPS + = new HashMap<>(); + + public final static Map ROLES = new HashMap<>(); + public final static Map ROLE_MEMBERSHIPS + = new HashMap<>(); + + public final static Map CCM_OBJECTS = new HashMap<>(); + public final static Map CATEGORIES = new HashMap<>(); + public final static Map CATEGORIZATIONS + = new HashMap<>(); + + public final static Map PERMISSIONS = new HashMap<>(); + + public final static Map WORKFLOWS = new HashMap<>(); + public final static Map TASK_COMMENTS = new HashMap<>(); + public final static Map TASKS = new HashMap<>(); + public final static Map ASSIGNABLE_TASKS + = new HashMap<>(); + public final static Map TASK_DEPENDENCIES + = new HashMap<>(); + public final static Map TASK_ASSIGNMENTS + = new HashMap<>(); + + public final static Map RESOURCE_TYPES = new HashMap<>(); + public final static Map resources = new HashMap<>(); + public final static Map CCM_APPLICATIONS + = new HashMap<>(); + + public final static Map DOMAINS = new HashMap<>(); + public final static Map DOMAIN_OWNERSHIPS + = new HashMap<>(); + + // in case maps need to be sorted for export + public static List SORTED_CATEGORIES = new ArrayList<>(); + public static List SORTED_WORKFLOWS = new ArrayList<>(); + public static List SORTED_ASSIGNABLE_TASKS + = new ArrayList<>(); + public static List SORTED_CCM_APPLICATIONS + = new ArrayList<>(); + + /** + * Private constructor to prevent the instantiation of this class. + */ + private CcmCoreEntities() { + } + +} diff --git a/ccm-core/src/com/arsdigita/portation/conversion/CoreConverter.java b/ccm-core/src/org/libreccm/export/convert/CoreConverter.java.off similarity index 51% rename from ccm-core/src/com/arsdigita/portation/conversion/CoreConverter.java rename to ccm-core/src/org/libreccm/export/convert/CoreConverter.java.off index 716ea2bed..5ea4388cd 100644 --- a/ccm-core/src/com/arsdigita/portation/conversion/CoreConverter.java +++ b/ccm-core/src/org/libreccm/export/convert/CoreConverter.java.off @@ -16,21 +16,26 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.conversion; +package org.libreccm.export.convert; -import com.arsdigita.portation.AbstractConverter; -import com.arsdigita.portation.conversion.core.categorization.CategoryConversion; -import com.arsdigita.portation.conversion.core.categorization.DomainConversion; -import com.arsdigita.portation.conversion.core.core.ResourceTypeConversion; -import com.arsdigita.portation.conversion.core.security.GroupConversion; -import com.arsdigita.portation.conversion.core.security.PermissionConversion; -import com.arsdigita.portation.conversion.core.security.RoleConversion; -import com.arsdigita.portation.conversion.core.security.UserConversion; -import com.arsdigita.portation.conversion.core.web.CcmApplicationConversion; -import com.arsdigita.portation.conversion.core.workflow.AssignableTaskConversion; -import com.arsdigita.portation.conversion.core.workflow.TaskCommentConversion; -import com.arsdigita.portation.conversion.core.workflow.WorkflowConversion; -import com.arsdigita.portation.modules.core.security.Permission; + +import org.libreccm.export.convert.categorization.CategoriesConverter; +import org.libreccm.export.convert.categorization.DomainsConverter; + +import org.libreccm.export.convert.core.ResourceTypesConverter; + +import org.libreccm.export.convert.security.GroupsConverter; +import org.libreccm.export.convert.security.PermissionsConverter; +import org.libreccm.export.convert.security.RolesConverter; +import org.libreccm.export.convert.security.UsersConverter; + +import org.libreccm.export.convert.web.CcmApplicationsConverter; + +import org.libreccm.export.convert.workflow.AssignableTasksConverter; +import org.libreccm.export.convert.workflow.TaskCommentsConverter; +import org.libreccm.export.convert.workflow.WorkflowsConverter; + +import org.libreccm.security.Permission; /** @@ -42,7 +47,7 @@ import com.arsdigita.portation.modules.core.security.Permission; * @author Tobias Osmers diff --git a/ccm-core/src/com/arsdigita/portation/Portable.java b/ccm-core/src/org/libreccm/export/convert/Portable.java.off similarity index 96% rename from ccm-core/src/com/arsdigita/portation/Portable.java rename to ccm-core/src/org/libreccm/export/convert/Portable.java.off index b2aab266f..94b9d27c5 100644 --- a/ccm-core/src/com/arsdigita/portation/Portable.java +++ b/ccm-core/src/org/libreccm/export/convert/Portable.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation; +package org.libreccm.export.convert; /** * Interface for the ex-/import routine. With this interface any object class diff --git a/ccm-core/src/com/arsdigita/portation/conversion/core/categorization/CategoryConversion.java b/ccm-core/src/org/libreccm/export/convert/categorization/CategoriesConverter.java.off similarity index 59% rename from ccm-core/src/com/arsdigita/portation/conversion/core/categorization/CategoryConversion.java rename to ccm-core/src/org/libreccm/export/convert/categorization/CategoriesConverter.java.off index 7e358fc0e..1a241b241 100644 --- a/ccm-core/src/com/arsdigita/portation/conversion/core/categorization/CategoryConversion.java +++ b/ccm-core/src/org/libreccm/export/convert/categorization/CategoriesConverter.java.off @@ -16,34 +16,37 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.conversion.core.categorization; +package org.libreccm.export.convert.categorization; import com.arsdigita.categorization.CategorizedCollection; import com.arsdigita.kernel.ACSObject; -import com.arsdigita.portation.AbstractConversion; -import com.arsdigita.portation.cmd.ExportLogger; -import com.arsdigita.portation.conversion.NgCoreCollection; -import com.arsdigita.portation.modules.core.categorization.Categorization; -import com.arsdigita.portation.modules.core.categorization.Category; -import com.arsdigita.portation.modules.core.core.CcmObject; + +import org.libreccm.export.convert.AbstractDomainObjectsConverter; +import org.libreccm.export.cmd.ExportLogger; + +import org.libreccm.export.convert.CcmCoreEntities; + +import org.libreccm.categorization.Categorization; +import org.libreccm.categorization.Category; + +import org.libreccm.core.CcmObject; import java.util.ArrayList; import java.util.List; /** - * Class for converting all - * trunk-{@link com.arsdigita.categorization.Category}s into - * ng-{@link Category}s as preparation for a successful export of all trunk + * Class for converting all trunk-{@link com.arsdigita.categorization.Category}s + * into ng-{@link Category}s as preparation for a successful export of all trunk * classes into the new ng-system. * - * @author Tobias Osmers */ -public class CategoryConversion extends AbstractConversion { - private static CategoryConversion instance; +public class CategoriesConverter extends AbstractDomainObjectsConverter { + + private static CategoriesConverter instance; static { - instance = new CategoryConversion(); + instance = new CategoriesConverter(); } /** @@ -54,9 +57,11 @@ public class CategoryConversion extends AbstractConversion { */ @Override public void convertAll() { + ExportLogger.fetching("categories"); - List trunkCategories = com - .arsdigita.categorization.Category.getAllObjectCategories(); + List trunkCategories + = com.arsdigita.categorization.Category + .getAllObjectCategories(); ExportLogger.converting("categories and categorizations"); createCategoriesAndSetAssociations(trunkCategories); @@ -69,67 +74,64 @@ public class CategoryConversion extends AbstractConversion { } /** - * Creates the equivalent ng-class of the {@link Category} and restores - * the associations to other classes. + * Creates the equivalent ng-class of the {@link Category} and restores the + * associations to other classes. * * @param trunkCategories List of all * {@link com.arsdigita.categorization.Category}s * from this old trunk-system. */ private void createCategoriesAndSetAssociations( - List trunkCategories) { + List trunkCategories) { int processedCategories = 0, processedCategorizations = 0; + for (com.arsdigita.categorization.Category trunkCategory + : trunkCategories) { - for (com.arsdigita.categorization.Category - trunkCategory : trunkCategories) { - - // create categories + // create CATEGORIES Category category = new Category(trunkCategory); // create categorizations only for category typed objects CategorizedCollection categorizedCollection = trunkCategory - .getObjects(com.arsdigita.categorization - .Category.BASE_DATA_OBJECT_TYPE); + .getObjects( + com.arsdigita.categorization.Category.BASE_DATA_OBJECT_TYPE); processedCategorizations += createCategorizations(category, - categorizedCollection); + categorizedCollection); processedCategories++; } ExportLogger.created("categories", - processedCategories); + processedCategories); ExportLogger.created("categorizations", - processedCategorizations); + processedCategorizations); } /** - * Method for creating {@link Categorization}s between {@link Category}s - * and {@link CcmObject}s which is an association-class and has not been + * Method for creating {@link Categorization}s between {@link Category}s and + * {@link CcmObject}s which is an association-class and has not been * existent in this old system. * - * @param category The {@link Category} - * @param categorizedObjects A collection of the {@code Categorization}s - * as they are represented in this trunk-system + * @param category The {@link Category} + * @param categorizedObjects A collection of the {@code Categorization}s as + * they are represented in this trunk-system * * @return Number of how many {@link Categorization}s have been processed. */ private long createCategorizations(Category category, - CategorizedCollection - categorizedObjects) { + CategorizedCollection categorizedObjects) { int processed = 0; while (categorizedObjects.next()) { - CcmObject categorizedObject = NgCoreCollection - .ccmObjects - .get(((ACSObject) categorizedObjects - .getDomainObject()) - .getID() - .longValue()); + CcmObject categorizedObject = CcmCoreEntities.CCM_OBJECTS + .get(((ACSObject) categorizedObjects + .getDomainObject()) + .getID() + .longValue()); if (category != null && categorizedObject != null) { // create categorizations Categorization categorization = new Categorization(category, - categorizedObject); + categorizedObject); // set opposed associations category.addObject(categorization); @@ -150,27 +152,27 @@ public class CategoryConversion extends AbstractConversion { * from this old trunk-system. */ private void setRingAssociations( - List trunkCategories) { - for (com.arsdigita.categorization.Category - trunkCategory : trunkCategories) { + List trunkCategories) { + for (com.arsdigita.categorization.Category trunkCategory + : trunkCategories) { - Category category = NgCoreCollection - .categories - .get(trunkCategory.getID().longValue()); + Category category = CcmCoreEntities.CATEGORIES + .get(trunkCategory.getID().longValue()); // set parent and opposed association Category parentCategory = null; try { - com.arsdigita.categorization.Category defaultParent = - trunkCategory.getDefaultParentCategory(); + com.arsdigita.categorization.Category defaultParent + = trunkCategory + .getDefaultParentCategory(); if (defaultParent != null) { - parentCategory = NgCoreCollection - .categories - .get( + parentCategory = CcmCoreEntities.CATEGORIES + .get( defaultParent.getID().longValue()); } - } catch (Exception ignored) {} + } catch (Exception ignored) { + } if (category != null && parentCategory != null) { category.setParentCategory(parentCategory); parentCategory.addSubCategory(category); @@ -179,45 +181,47 @@ public class CategoryConversion extends AbstractConversion { } /** - * Sorts values of category-map to ensure that the parent-categories will - * be listed before their childs in the export file. + * Sorts values of category-map to ensure that the parent-CATEGORIES will be + * listed before their childs in the export file. * - * Runs once over the unsorted map and iterates over each their parents - * to add them to the sorted list. + * Runs once over the unsorted map and iterates over each their parents to + * add them to the sorted list. */ private void sortCategoryMap() { ArrayList sortedList = new ArrayList<>(); int runs = 0; - for (Category category : NgCoreCollection.categories.values()) { + for (Category category : CcmCoreEntities.CATEGORIES.values()) { addParent(sortedList, category); - if (!sortedList.contains(category)) + if (!sortedList.contains(category)) { sortedList.add(category); + } runs++; } - NgCoreCollection.sortedCategories = sortedList; + + CcmCoreEntities.SORTED_CATEGORIES = sortedList; ExportLogger.ranSort("categories", runs); } /** - * Recursively adds the parents of the given category to the sorted list - * to guaranty that the parents will be imported before their childs. + * Recursively adds the parents of the given category to the sorted list to + * guaranty that the parents will be imported before their childs. * - * @param sortedList Map of already sorted categories - * @param category Current category + * @param sortedList Map of already sorted CATEGORIES + * @param category Current category */ - private void addParent(ArrayList sortedList, Category - category) { + private void addParent(ArrayList sortedList, Category category) { Category parent = category.getParentCategory(); if (parent != null) { addParent(sortedList, parent); - if (!sortedList.contains(parent)) + if (!sortedList.contains(parent)) { sortedList.add(parent); + } } } @@ -226,7 +230,13 @@ public class CategoryConversion extends AbstractConversion { * * @return instance of this singleton */ - public static CategoryConversion getInstance() { + public static CategoriesConverter getInstance() { return instance; } + + @Override + public String convertsType() { + return com.arsdigita.categorization.Category.class.getName(); + } + } diff --git a/ccm-core/src/com/arsdigita/portation/conversion/core/categorization/DomainConversion.java b/ccm-core/src/org/libreccm/export/convert/categorization/DomainsConverter.java.off similarity index 85% rename from ccm-core/src/com/arsdigita/portation/conversion/core/categorization/DomainConversion.java rename to ccm-core/src/org/libreccm/export/convert/categorization/DomainsConverter.java.off index 933e103b4..dcad66fa2 100644 --- a/ccm-core/src/com/arsdigita/portation/conversion/core/categorization/DomainConversion.java +++ b/ccm-core/src/org/libreccm/export/convert/categorization/DomainsConverter.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.conversion.core.categorization; +package org.libreccm.export.convert.categorization; import com.arsdigita.domain.DomainCollection; import com.arsdigita.domain.DomainObject; @@ -24,13 +24,18 @@ import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.persistence.DataCollection; import com.arsdigita.persistence.DataObject; import com.arsdigita.persistence.SessionManager; -import com.arsdigita.portation.AbstractConversion; -import com.arsdigita.portation.cmd.ExportLogger; -import com.arsdigita.portation.conversion.NgCoreCollection; -import com.arsdigita.portation.modules.core.categorization.Category; -import com.arsdigita.portation.modules.core.categorization.Domain; -import com.arsdigita.portation.modules.core.categorization.DomainOwnership; -import com.arsdigita.portation.modules.core.web.CcmApplication; + +import org.libreccm.export.convert.AbstractDomainObjectsConverter; +import org.libreccm.export.cmd.ExportLogger; + +import org.libreccm.export.convert.CcmCoreEntities; + +import org.libreccm.categorization.Category; +import org.libreccm.categorization.Domain; +import org.libreccm.categorization.DomainOwnership; + +import org.libreccm.web.CcmApplication; + import com.arsdigita.web.Application; /** @@ -38,16 +43,20 @@ import com.arsdigita.web.Application; * into ng-{@link Domain}s as preparation for a successful export of all trunk * classes into the new ng-system. * - * @author Tobias Osmers * @version created the 7/27/17 */ -public class DomainConversion extends AbstractConversion { - private static DomainConversion instance; +public class DomainsConverter extends AbstractDomainObjectsConverter { + private static DomainsConverter instance; static { - instance = new DomainConversion(); + instance = new DomainsConverter(); } + public String convertsType() { + return "com.arsdigita.london.terms.Domain"; + } + /** * Retrieves all trunk-{@link com.arsdigita.london.terms.Domain}s from * the persistent storage and collects them in a list. Then calls for @@ -89,8 +98,8 @@ public class DomainConversion extends AbstractConversion { .get("model")); if (trunkModel != null) { // set root (category) association - Category root = NgCoreCollection - .categories + Category root = CcmCoreEntities + .CATEGORIES .get(trunkModel.getID().longValue()); domain.setRoot(root); @@ -134,8 +143,8 @@ public class DomainConversion extends AbstractConversion { .getDomainObject() .get("categoryOwner")); if (obj instanceof Application) { - CcmApplication owner = NgCoreCollection - .ccmApplications + CcmApplication owner = CcmCoreEntities + .CCM_APPLICATIONS .get(((Application) obj).getID().longValue()); String context = (String) useContexts .getDomainObject() @@ -162,7 +171,7 @@ public class DomainConversion extends AbstractConversion { * * @return instance of this singleton */ - public static DomainConversion getInstance() { + public static DomainsConverter getInstance() { return instance; } } diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/util/CategoryInformation.java b/ccm-core/src/org/libreccm/export/convert/categorization/util/CategoryInformation.java.off similarity index 95% rename from ccm-core/src/com/arsdigita/portation/modules/core/categorization/util/CategoryInformation.java rename to ccm-core/src/org/libreccm/export/convert/categorization/util/CategoryInformation.java.off index 8aa429b6c..7f81e81f5 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/categorization/util/CategoryInformation.java +++ b/ccm-core/src/org/libreccm/export/convert/categorization/util/CategoryInformation.java.off @@ -16,9 +16,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.categorization.util; +package org.libreccm.export.convert.categorization.util; -import com.arsdigita.portation.modules.core.l10n.LocalizedString; +import org.libreccm.l10n.LocalizedString; import java.math.BigDecimal; import java.util.Locale; diff --git a/ccm-core/src/com/arsdigita/portation/conversion/core/core/ResourceTypeConversion.java b/ccm-core/src/org/libreccm/export/convert/core/ResourceTypesConverter.java.off similarity index 79% rename from ccm-core/src/com/arsdigita/portation/conversion/core/core/ResourceTypeConversion.java rename to ccm-core/src/org/libreccm/export/convert/core/ResourceTypesConverter.java.off index 47f8f2c5a..35f2eaa95 100644 --- a/ccm-core/src/com/arsdigita/portation/conversion/core/core/ResourceTypeConversion.java +++ b/ccm-core/src/org/libreccm/export/convert/core/ResourceTypesConverter.java.off @@ -16,11 +16,13 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.conversion.core.core; +package org.libreccm.export.convert.core; -import com.arsdigita.portation.AbstractConversion; -import com.arsdigita.portation.cmd.ExportLogger; -import com.arsdigita.portation.modules.core.core.ResourceType; +import org.libreccm.export.convert.AbstractDomainObjectsConverter; + +import org.libreccm.export.cmd.ExportLogger; + +import org.libreccm.core.ResourceType; import java.util.List; @@ -32,11 +34,16 @@ import java.util.List; * @author Tobias Osmers * @version created on 4.7.16 */ -public class GroupConversion extends AbstractConversion { - private static GroupConversion instance; - +public class GroupsConverter extends AbstractDomainObjectsConverter { + + private static GroupsConverter INSTANCE; + static { - instance = new GroupConversion(); + INSTANCE = new GroupsConverter(); + } + + public String convertsType() { + return com.arsdigita.kernel.Group.class.getName(); } /** * Retrieves all trunk-{@link com.arsdigita.kernel.Group}s from the - * persistent storage, collects them in a list and removes all groups + * persistent storage, collects them in a list and removes all GROUPS * representing actually a {@link com.arsdigita.kernel.Role} in the * trunk-system. Then calls for creating the equivalent ng-{@link Group}s * focusing on keeping all the associations in tact. @@ -53,8 +61,9 @@ public class GroupConversion extends AbstractConversion { @Override public void convertAll() { ExportLogger.fetching("groups"); - List trunkGroups = com.arsdigita.kernel - .Group.getAllObjectGroups(); + List trunkGroups + = com.arsdigita.kernel.Group + .getAllObjectGroups(); ExportLogger.converting("groups and group memberships"); createGroupsAndSetAssociations(trunkGroups); @@ -63,21 +72,21 @@ public class GroupConversion extends AbstractConversion { } /** - * Creates the equivalent ng-class of the {@code Category} and restores - * the associations to other classes. + * Creates the equivalent ng-class of the {@code Category} and restores the + * associations to other classes. * - * @param trunkGroups List of all {@link com.arsdigita.kernel.Group}s - * from this old trunk-system. + * @param trunkGroups List of all {@link com.arsdigita.kernel.Group}s from + * this old trunk-system. */ private void createGroupsAndSetAssociations( - List trunkGroups) { + List trunkGroups) { int pGroups = 0, pMemberships = 0; for (com.arsdigita.kernel.Group trunkGroup : trunkGroups) { - // create groups + // create GROUPS Group group = new Group(trunkGroup); - // groupMemberships + // GROUP_MEMBERSHIPS UserCollection userCollection = trunkGroup.getMemberUsers(); pMemberships += createGroupMemberships(group, userCollection); @@ -88,28 +97,27 @@ public class GroupConversion extends AbstractConversion { } /** - * Method for creating {@link GroupMembership}s between {@link Group}s - * and {@link User}s which is an association-class and has not been - * existent in this old trunk-system. + * Method for creating {@link GroupMembership}s between {@link Group}s and + * {@link User}s which is an association-class and has not been existent in + * this old trunk-system. * - * @param group The {@link Group} + * @param group The {@link Group} * @param userCollection A collection of the - * {@link com.arsdigita.kernel.User}s belonging to - * the given group + * {@link com.arsdigita.kernel.User}s belonging to the + * given group */ - private long createGroupMemberships(Group group, UserCollection - userCollection) { + private long createGroupMemberships(Group group, + UserCollection userCollection) { int processed = 0; while (userCollection.next()) { - User member = NgCoreCollection - .users - .get(userCollection.getUser().getID().longValue()); + User member = CcmCoreEntities.USERS + .get(userCollection.getUser().getID().longValue()); if (group != null && member != null) { // create groupMemeberships GroupMembership groupMembership = new GroupMembership(group, - member); + member); // set opposed associations group.addMembership(groupMembership); @@ -122,11 +130,12 @@ public class GroupConversion extends AbstractConversion { } /** - * Getter for the instance of the singleton. + * Getter for the INSTANCE of the singleton. * - * @return instance of this singleton + * @return INSTANCE of this singleton */ - public static GroupConversion getInstance() { - return instance; + public static GroupsConverter getInstance() { + return INSTANCE; } + } diff --git a/ccm-core/src/com/arsdigita/portation/conversion/core/security/PermissionConversion.java b/ccm-core/src/org/libreccm/export/convert/security/PermissionsConverter.java.off similarity index 86% rename from ccm-core/src/com/arsdigita/portation/conversion/core/security/PermissionConversion.java rename to ccm-core/src/org/libreccm/export/convert/security/PermissionsConverter.java.off index a8fe0fd50..8994deecf 100644 --- a/ccm-core/src/com/arsdigita/portation/conversion/core/security/PermissionConversion.java +++ b/ccm-core/src/org/libreccm/export/convert/security/PermissionsConverter.java.off @@ -16,15 +16,25 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.conversion.core.security; +package org.libreccm.export.convert.security; + +import org.libreccm.security.RoleMembership; +import org.libreccm.security.Permission; +import org.libreccm.security.Role; +import org.libreccm.security.User; +import org.libreccm.security.Group; +import org.libreccm.security.Party; import com.arsdigita.kernel.RoleCollection; -import com.arsdigita.portation.AbstractConversion; -import com.arsdigita.portation.cmd.ExportLogger; -import com.arsdigita.portation.conversion.NgCoreCollection; -import com.arsdigita.portation.modules.core.core.CcmObject; -import com.arsdigita.portation.modules.core.security.*; -import com.arsdigita.portation.modules.core.security.util.PermissionIdMapper; + +import org.libreccm.export.convert.AbstractDomainObjectsConverter; +import org.libreccm.export.cmd.ExportLogger; + +import org.libreccm.export.convert.CcmCoreEntities; + +import org.libreccm.core.CcmObject; + +import org.libreccm.export.security.util.PermissionIdMapper; import java.math.BigDecimal; import java.util.ArrayList; @@ -41,12 +51,16 @@ import java.util.stream.Collectors; * @author allTrunkParties = @@ -205,17 +219,17 @@ public class PermissionConversion extends AbstractConversion { for (com.arsdigita.kernel.Party trunkGranteeParty : trunkGranteeParties) { - // grantee instance of Group, possibly multiple roles or none + // grantee instance of Group, possibly multiple ROLES or none if (trunkGranteeParty instanceof com.arsdigita.kernel.Group) { final com.arsdigita.kernel.Group trunkGranteeGroup = (com.arsdigita.kernel.Group) trunkGranteeParty; final RoleCollection roleCollection = trunkGranteeGroup .getRoles(); - // if group contains 1 or more roles + // if group contains 1 or more ROLES if (!roleCollection.isEmpty()) { while (roleCollection.next()) { - final Role grantee = NgCoreCollection.roles.get( + final Role grantee = CcmCoreEntities.ROLES.get( roleCollection.getRole().getID().longValue()); // duplicate permission for found role as grantee @@ -234,8 +248,8 @@ public class PermissionConversion extends AbstractConversion { } } // new Role for this group - final Group member = NgCoreCollection - .groups.get(trunkGranteeGroup.getID().longValue()); + final Group member = CcmCoreEntities + .GROUPS.get(trunkGranteeGroup.getID().longValue()); final Role granteeRole = getRoleIfExists(member); // set grantee and opposed association @@ -247,8 +261,8 @@ public class PermissionConversion extends AbstractConversion { // new Role for this user final com.arsdigita.kernel.User trunkGranteeUser = (com .arsdigita.kernel.User) trunkGranteeParty; - final User member = NgCoreCollection - .users.get(trunkGranteeUser.getID().longValue()); + final User member = CcmCoreEntities + .USERS.get(trunkGranteeUser.getID().longValue()); final Role granteeRole = getRoleIfExists(member); // set grantee and opposed association @@ -283,7 +297,7 @@ public class PermissionConversion extends AbstractConversion { // task assignments are missing String roleName = member.getName() + "_role"; - List roles = new ArrayList<>(NgCoreCollection.roles.values()); + List roles = new ArrayList<>(CcmCoreEntities.ROLES.values()); for (Role role : roles) { if (role.getName().equals(roleName)) return role; @@ -304,7 +318,7 @@ public class PermissionConversion extends AbstractConversion { * * @return instance of this singleton */ - public static PermissionConversion getInstance() { + public static PermissionsConverter getInstance() { return instance; } } diff --git a/ccm-core/src/com/arsdigita/portation/conversion/core/security/RoleConversion.java b/ccm-core/src/org/libreccm/export/convert/security/RolesConverter.java.off similarity index 82% rename from ccm-core/src/com/arsdigita/portation/conversion/core/security/RoleConversion.java rename to ccm-core/src/org/libreccm/export/convert/security/RolesConverter.java.off index 845b50bc1..fda8fb508 100644 --- a/ccm-core/src/com/arsdigita/portation/conversion/core/security/RoleConversion.java +++ b/ccm-core/src/org/libreccm/export/convert/security/RolesConverter.java.off @@ -16,16 +16,19 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.conversion.core.security; +package org.libreccm.export.convert.security; import com.arsdigita.kernel.PartyCollection; -import com.arsdigita.portation.AbstractConversion; -import com.arsdigita.portation.cmd.ExportLogger; -import com.arsdigita.portation.conversion.NgCoreCollection; -import com.arsdigita.portation.modules.core.security.Party; -import com.arsdigita.portation.modules.core.security.Role; -import com.arsdigita.portation.modules.core.security.RoleMembership; + +import org.libreccm.export.convert.AbstractDomainObjectsConverter; +import org.libreccm.export.cmd.ExportLogger; + +import org.libreccm.export.convert.CcmCoreEntities; + +import org.libreccm.security.Party; +import org.libreccm.security.Role; +import org.libreccm.security.RoleMembership; import java.util.List; @@ -37,11 +40,15 @@ import java.util.List; * @author Tobias Osmers * @version created on 4.7.16 */ -public class UserConversion extends AbstractConversion { - private static UserConversion instance; +public class UsersConverter extends AbstractDomainObjectsConverter { + private static UsersConverter instance; static { - instance = new UserConversion(); + instance = new UsersConverter(); } + public String convertsType() { + return com.arsdigita.kernel.User.class.getName(); + } + /** * Retrieves all trunk-{@link com.arsdigita.kernel.User}s from the * persistent storage and collects them in a list. Then calls for @@ -67,7 +73,7 @@ public class UserConversion extends AbstractConversion { * * @return instance of this singleton */ - public static UserConversion getInstance() { + public static UsersConverter getInstance() { return instance; } } diff --git a/ccm-core/src/com/arsdigita/portation/conversion/core/web/CcmApplicationConversion.java b/ccm-core/src/org/libreccm/export/convert/web/CcmApplicationsConverter.java.off similarity index 82% rename from ccm-core/src/com/arsdigita/portation/conversion/core/web/CcmApplicationConversion.java rename to ccm-core/src/org/libreccm/export/convert/web/CcmApplicationsConverter.java.off index 7dc89f673..20ec698c3 100644 --- a/ccm-core/src/com/arsdigita/portation/conversion/core/web/CcmApplicationConversion.java +++ b/ccm-core/src/org/libreccm/export/convert/web/CcmApplicationsConverter.java.off @@ -16,15 +16,21 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.conversion.core.web; +package org.libreccm.export.convert.web; -import com.arsdigita.portation.AbstractConversion; -import com.arsdigita.portation.cmd.ExportLogger; -import com.arsdigita.portation.conversion.NgCoreCollection; -import com.arsdigita.portation.modules.core.core.Resource; -import com.arsdigita.portation.modules.core.core.ResourceType; -import com.arsdigita.portation.modules.core.web.CcmApplication; +import org.libreccm.export.convert.AbstractDomainObjectsConverter; + +import org.libreccm.export.cmd.ExportLogger; + +import org.libreccm.export.convert.CcmCoreEntities; + +import org.libreccm.core.Resource; + +import org.libreccm.core.ResourceType; + +import org.libreccm.web.CcmApplication; + import com.arsdigita.web.Application; import java.util.ArrayList; @@ -35,16 +41,22 @@ import java.util.List; * ng-{@link CcmApplication}s as preparation for a successful export of all * trunkclasses into the new ng-system. * - * @author Tobias Osmers * @version created the 8/2/17 */ -public class CcmApplicationConversion extends AbstractConversion { - private static CcmApplicationConversion instance; +public class CcmApplicationsConverter extends AbstractDomainObjectsConverter { + + private static CcmApplicationsConverter instance; static { - instance = new CcmApplicationConversion(); + instance = new CcmApplicationsConverter(); } + @Override + public String convertsType() { + return Application.class.getName(); + } + /** * Retrieves all trunk-{@link com.arsdigita.kernel.ResourceType}s from * the persistent storage and collects them in a list. Then calls for @@ -87,8 +99,8 @@ public class CcmApplicationConversion extends AbstractConversion { com.arsdigita.kernel.ResourceType trunkResourceType = trunkApplication .getResourceType(); if (trunkResourceType != null) { - ResourceType resourceType = NgCoreCollection - .resourceTypes + ResourceType resourceType = CcmCoreEntities + .RESOURCE_TYPES .get(trunkResourceType.getID().longValue()); ccmApplication.setResourceType(resourceType); } @@ -108,8 +120,8 @@ public class CcmApplicationConversion extends AbstractConversion { */ private void setRingAssociations(List trunkApplications) { for (Application trunkApplication : trunkApplications) { - CcmApplication ccmApplication = NgCoreCollection - .ccmApplications + CcmApplication ccmApplication = CcmCoreEntities + .CCM_APPLICATIONS .get(trunkApplication.getID().longValue()); // set parent Resource and opposed association @@ -118,8 +130,8 @@ public class CcmApplicationConversion extends AbstractConversion { Application trunkParent = trunkApplication .getParentApplication(); if (trunkParent != null) { - parentResource = NgCoreCollection - .ccmApplications + parentResource = CcmCoreEntities + .CCM_APPLICATIONS .get(trunkParent.getID().longValue()); ccmApplication.setParent(parentResource); @@ -140,7 +152,7 @@ public class CcmApplicationConversion extends AbstractConversion { int runs = 0; for (CcmApplication application : - NgCoreCollection.ccmApplications.values()) { + CcmCoreEntities.CCM_APPLICATIONS.values()) { addResourceParent(sortedList, application); if (!sortedList.contains(application)) @@ -148,7 +160,7 @@ public class CcmApplicationConversion extends AbstractConversion { runs++; } - NgCoreCollection.sortedCcmApplications = sortedList; + CcmCoreEntities.SORTED_CCM_APPLICATIONS = sortedList; ExportLogger.ranSort("ccm applications", runs); } @@ -178,7 +190,7 @@ public class CcmApplicationConversion extends AbstractConversion { * * @return instance of this singleton */ - public static CcmApplicationConversion getInstance() { + public static CcmApplicationsConverter getInstance() { return instance; } } diff --git a/ccm-core/src/com/arsdigita/portation/conversion/core/workflow/AssignableTaskConversion.java b/ccm-core/src/org/libreccm/export/convert/workflow/AssignableTasksConverter.java.off similarity index 85% rename from ccm-core/src/com/arsdigita/portation/conversion/core/workflow/AssignableTaskConversion.java rename to ccm-core/src/org/libreccm/export/convert/workflow/AssignableTasksConverter.java.off index abe465064..0fb7392b2 100644 --- a/ccm-core/src/com/arsdigita/portation/conversion/core/workflow/AssignableTaskConversion.java +++ b/ccm-core/src/org/libreccm/export/convert/workflow/AssignableTasksConverter.java.off @@ -16,21 +16,25 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.conversion.core.workflow; +package org.libreccm.export.convert.workflow; import com.arsdigita.kernel.GroupCollection; import com.arsdigita.kernel.RoleCollection; -import com.arsdigita.portation.AbstractConversion; -import com.arsdigita.portation.cmd.ExportLogger; -import com.arsdigita.portation.conversion.NgCoreCollection; -import com.arsdigita.portation.modules.core.security.Role; -import com.arsdigita.portation.modules.core.security.User; -import com.arsdigita.portation.modules.core.workflow.AssignableTask; -import com.arsdigita.portation.modules.core.workflow.TaskAssignment; -import com.arsdigita.portation.modules.core.workflow.TaskComment; -import com.arsdigita.portation.modules.core.workflow.TaskDependency; -import com.arsdigita.portation.modules.core.workflow.Workflow; + +import org.libreccm.export.convert.AbstractDomainObjectsConverter; +import org.libreccm.export.cmd.ExportLogger; + +import org.libreccm.export.convert.CcmCoreEntities; + +import org.libreccm.security.Role; +import org.libreccm.security.User; + +import org.libreccm.workflow.AssignableTask; +import org.libreccm.workflow.TaskAssignment; +import org.libreccm.workflow.TaskComment; +import org.libreccm.workflow.TaskDependency; +import org.libreccm.workflow.Workflow; import java.util.ArrayList; import java.util.Iterator; @@ -45,12 +49,18 @@ import java.util.List; * @author Tobias Osmers + * @author Tobias Osmers * @version created on 27.6.16 */ -public class WorkflowConversion extends AbstractConversion { - private static WorkflowConversion instance; +public class WorkflowsConverter extends AbstractDomainObjectsConverter { + private static WorkflowsConverter instance; static { - instance = new WorkflowConversion(); + instance = new WorkflowsConverter(); + } + + public String convertsType() { + return com.arsdigita.workflow.simple.Workflow.class.getName(); } /** @@ -86,8 +95,8 @@ public class WorkflowConversion extends AbstractConversion { // set object association ACSObject trunkObject = trunkWorkflow.getObject(); if (trunkObject != null) { - CcmObject object = NgCoreCollection - .ccmObjects + CcmObject object = CcmCoreEntities + .CCM_OBJECTS .get(trunkObject.getID().longValue()); workflow.setObject(object); } @@ -116,12 +125,12 @@ public class WorkflowConversion extends AbstractConversion { WorkflowTemplate trunkWorkflowTemplate = trunkWorkflow .getWorkflowTemplate(); if (trunkWorkflowTemplate != null) { - Workflow workflow = NgCoreCollection - .workflows + Workflow workflow = CcmCoreEntities + .WORKFLOWS .get(trunkWorkflow.getID().longValue()); - Workflow template = NgCoreCollection - .workflows + Workflow template = CcmCoreEntities + .WORKFLOWS .get(trunkWorkflowTemplate.getID().longValue()); workflow.setTemplate(template); template.setAbstractWorkflow(true); @@ -143,7 +152,7 @@ public class WorkflowConversion extends AbstractConversion { ArrayList sortedList = new ArrayList<>(); int runs = 0; - for (Workflow workflow : NgCoreCollection.workflows.values()) { + for (Workflow workflow : CcmCoreEntities.WORKFLOWS.values()) { addTemplate(sortedList, workflow); @@ -153,7 +162,7 @@ public class WorkflowConversion extends AbstractConversion { runs++; } - NgCoreCollection.sortedWorkflows = sortedList; + CcmCoreEntities.SORTED_WORKFLOWS = sortedList; ExportLogger.ranSort("workflows", runs); } @@ -182,7 +191,7 @@ public class WorkflowConversion extends AbstractConversion { * * @return instance of this singleton */ - public static WorkflowConversion getInstance() { + public static WorkflowsConverter getInstance() { return instance; } } diff --git a/ccm-core/src/com/arsdigita/portation/modules/CoreExporter.java b/ccm-core/src/org/libreccm/export/modules/CoreExporter.java.off similarity index 73% rename from ccm-core/src/com/arsdigita/portation/modules/CoreExporter.java rename to ccm-core/src/org/libreccm/export/modules/CoreExporter.java.off index 8967d8887..c5d1e15ba 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/CoreExporter.java +++ b/ccm-core/src/org/libreccm/export/modules/CoreExporter.java.off @@ -16,19 +16,33 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules; +package org.libreccm.export.modules; -import com.arsdigita.portation.AbstractExporter; -import com.arsdigita.portation.Format; -import com.arsdigita.portation.conversion.NgCoreCollection; -import com.arsdigita.portation.modules.core.categorization.CategorizationMarshaller; -import com.arsdigita.portation.modules.core.categorization.CategoryMarshaller; -import com.arsdigita.portation.modules.core.categorization.DomainMarshaller; -import com.arsdigita.portation.modules.core.categorization.DomainOwnershipMarshaller; -import com.arsdigita.portation.modules.core.core.ResourceTypeMarshaller; -import com.arsdigita.portation.modules.core.security.*; -import com.arsdigita.portation.modules.core.web.CcmApplicationMarshaller; -import com.arsdigita.portation.modules.core.workflow.*; +import org.libreccm.workflow.TaskDependencyMarshaller; +import org.libreccm.workflow.AssignableTaskMarshaller; +import org.libreccm.workflow.TaskAssignmentMarshaller; +import org.libreccm.workflow.WorkflowMarshaller; +import org.libreccm.workflow.TaskCommentMarshaller; +import org.libreccm.security.GroupMarshaller; +import org.libreccm.security.RoleMembershipMarshaller; +import org.libreccm.security.RoleMarshaller; +import org.libreccm.security.UserMarshaller; +import org.libreccm.security.PermissionMarshaller; +import org.libreccm.security.GroupMembershipMarshaller; + +import org.libreccm.export.convert.AbstractExporterManager; +import org.libreccm.export.convert.Format; + +import org.libreccm.export.convert.CcmCoreEntities; + +import org.libreccm.categorization.CategorizationMarshaller; +import org.libreccm.categorization.CategoryMarshaller; +import org.libreccm.categorization.DomainMarshaller; +import org.libreccm.categorization.DomainOwnershipMarshaller; + +import org.libreccm.core.ResourceTypeMarshaller; + +import org.libreccm.web.CcmApplicationMarshaller; import java.util.ArrayList; @@ -39,7 +53,7 @@ import java.util.ArrayList; * @author (NgCoreCollection.groups.values())); + exportList(new ArrayList<>(CcmCoreEntities.GROUPS.values())); } } diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/security/GroupMembership.java b/ccm-core/src/org/libreccm/security/GroupMembership.java.off similarity index 74% rename from ccm-core/src/com/arsdigita/portation/modules/core/security/GroupMembership.java rename to ccm-core/src/org/libreccm/security/GroupMembership.java.off index 3bc090cf4..7c1731a5c 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/security/GroupMembership.java +++ b/ccm-core/src/org/libreccm/security/GroupMembership.java.off @@ -16,13 +16,17 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.security; +package org.libreccm.security; import com.arsdigita.kernel.ACSObject; -import com.arsdigita.portation.Portable; -import com.arsdigita.portation.conversion.NgCoreCollection; + +import org.libreccm.export.convert.Portable; +import org.libreccm.export.convert.CcmCoreEntities; + import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIdentityReference; +import org.libreccm.export.Exportable; +import org.libreccm.export.convert.UuidGenerator; /** * @author (NgCoreCollection.groupMemberships.values())); + exportList(new ArrayList<>(CcmCoreEntities.GROUP_MEMBERSHIPS.values())); } } diff --git a/ccm-core/src/org/libreccm/security/GroupMembershipsExporter.java b/ccm-core/src/org/libreccm/security/GroupMembershipsExporter.java new file mode 100644 index 000000000..ec61b58e7 --- /dev/null +++ b/ccm-core/src/org/libreccm/security/GroupMembershipsExporter.java @@ -0,0 +1,106 @@ +package org.libreccm.security; + +import com.arsdigita.kernel.Group; +import com.arsdigita.kernel.User; +import com.arsdigita.kernel.UserCollection; + +import com.arsdigita.util.UncheckedWrapperException; +import com.arsdigita.web.WebConfig; + +import com.fasterxml.jackson.core.JsonEncoding; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; +import org.libreccm.export.AbstractDomainObjectsExporter; +import org.libreccm.export.IdSequence; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +/** + * + * @author Jens Pelzetter + */ +public class GroupMembershipsExporter + extends AbstractDomainObjectsExporter { + + @Override + public Class exportsType() { + return Group.class; + } + + @Override + public String exportsBaseDataObjectType() { + return Group.BASE_DATA_OBJECT_TYPE; + } + + @Override + public String convertsToType() { + return "org.libreccm.security.GroupMembership"; + } + + private String exportGroupMembership(final Group group, + final User member, + final Path targetDir) { + + final String groupUuid = generateUuid(group); + final String memberUuid = generateUuid(member); + + final byte[] membershipUuidSource = String + .format("%s/%s-%s", + WebConfig.getInstanceOf().getSiteName(), + group.getOID().toString(), + member.getOID().toString()) + .getBytes(StandardCharsets.UTF_8); + final String membershipUuid = UUID + .nameUUIDFromBytes(membershipUuidSource) + .toString(); + + final Path targetFilePath = generateTargetFilePath( + targetDir, + "org.libreccm.security.GroupMembership", + membershipUuid); + + final JsonFactory jsonFactory = new JsonFactory(); + try (final JsonGenerator jsonGenerator = jsonFactory + .createGenerator(targetFilePath.toFile(), JsonEncoding.UTF8)) { + + jsonGenerator.writeStartObject(); + jsonGenerator.writeNumberField("membershipId", + IdSequence.getInstance().nextId()); + jsonGenerator.writeStringField("uuid", membershipUuid); + jsonGenerator.writeStringField("group", groupUuid); + jsonGenerator.writeStringField("member", memberUuid); + jsonGenerator.writeEndObject(); + + } catch (IOException ex) { + throw new UncheckedWrapperException(ex); + } + + return membershipUuid; + + } + + @Override + protected List exportDomainObject(final Group domainObject, + final Path targetDir) { + + final List uuids = new ArrayList<>(); + final UserCollection members = domainObject.getAllMemberUsers(); +// + while (members.next()) { + final User member = members.getUser(); + final String uuid = exportGroupMembership(domainObject, + member, + targetDir); + uuids.add(uuid); + } + + return uuids; + } + +} diff --git a/ccm-core/src/org/libreccm/security/GroupsExporter.java b/ccm-core/src/org/libreccm/security/GroupsExporter.java new file mode 100644 index 000000000..da5b8f732 --- /dev/null +++ b/ccm-core/src/org/libreccm/security/GroupsExporter.java @@ -0,0 +1,66 @@ +package org.libreccm.security; + +import com.arsdigita.kernel.Group; +import com.arsdigita.util.UncheckedWrapperException; + +import com.fasterxml.jackson.core.JsonEncoding; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; +import org.libreccm.export.AbstractDomainObjectsExporter; +import org.libreccm.export.IdSequence; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.List; + +/** + * + * @author Jens Pelzetter + */ +public class GroupsExporter extends AbstractDomainObjectsExporter { + + @Override + public Class exportsType() { + return Group.class; + } + + @Override + public String exportsBaseDataObjectType() { + return Group.BASE_DATA_OBJECT_TYPE; + } + + @Override + public String convertsToType() { + return "org.libreccm.security.Group"; + } + + @Override + protected List exportDomainObject(final Group domainObject, + final Path targetDir) { + + final JsonFactory jsonFactory = new JsonFactory(); + final String uuid = generateUuid(domainObject); + final Path targetFilePath = generateTargetFilePath( + targetDir, "org.libreccm.security.Group", uuid); + final File targetFile = targetFilePath.toFile(); + + try (final JsonGenerator jsonGenerator = jsonFactory + .createGenerator(targetFile, JsonEncoding.UTF8)) { + + jsonGenerator.writeStartObject(); + jsonGenerator.writeNumberField("partyId", + IdSequence.getInstance().nextId()); + jsonGenerator.writeStringField("uuid", uuid); + jsonGenerator.writeStringField("name", domainObject.getName()); + jsonGenerator.writeEndObject(); + + } catch (IOException ex) { + throw new UncheckedWrapperException(ex); + } + + return Arrays.asList(new String[]{uuid}); + } + +} diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/security/Party.java b/ccm-core/src/org/libreccm/security/Party.java.off similarity index 77% rename from ccm-core/src/com/arsdigita/portation/modules/core/security/Party.java rename to ccm-core/src/org/libreccm/security/Party.java.off index 823d8cfcf..d004e4eef 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/security/Party.java +++ b/ccm-core/src/org/libreccm/security/Party.java.off @@ -16,12 +16,15 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.security; +package org.libreccm.security; + +import org.libreccm.export.convert.CcmCoreEntities; -import com.arsdigita.portation.conversion.NgCoreCollection; import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import org.libreccm.export.Exportable; +import org.libreccm.export.convert.UuidGenerator; import java.util.HashSet; import java.util.Set; @@ -33,25 +36,28 @@ import java.util.Set; @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, resolver = PartyIdResolver.class, property = "name") -public class Party { +public class Party implements Exportable { private long partyId; + private String uuid; private String name; @JsonIgnore private Set roleMemberships; public Party(final com.arsdigita.kernel.Party trunkParty) { + this.partyId = trunkParty.getID().longValue(); + uuid = UuidGenerator.getInstance().generateUuid(trunkParty); this.name = trunkParty.getName(). - replace(" ", "_"). - replace(".", "_"). - replace("/", "\\"). - replace("(", "_"). - replace(")", "_"); + replace(" ", "_"). + replace(".", "_"). + replace("/", "\\"). + replace("(", "_"). + replace(")", "_"); this.roleMemberships = new HashSet<>(); - NgCoreCollection.parties.put(this.partyId, this); + CcmCoreEntities.PARTIES.put(this.partyId, this); } public long getPartyId() { @@ -62,6 +68,15 @@ public class Party { this.partyId = partyId; } + @Override + public String getUuid() { + return uuid; + } + + public void setUuid(final String uuid) { + this.uuid = uuid; + } + public String getName() { return name; } @@ -85,4 +100,5 @@ public class Party { public void removeRoleMembership(final RoleMembership roleMembership) { roleMemberships.remove(roleMembership); } + } diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/security/PartyIdResolver.java b/ccm-core/src/org/libreccm/security/PartyIdResolver.java.off similarity index 97% rename from ccm-core/src/com/arsdigita/portation/modules/core/security/PartyIdResolver.java rename to ccm-core/src/org/libreccm/security/PartyIdResolver.java.off index e8a5fa327..0b3f9a6a6 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/security/PartyIdResolver.java +++ b/ccm-core/src/org/libreccm/security/PartyIdResolver.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.security; +package org.libreccm.security; import com.fasterxml.jackson.annotation.ObjectIdGenerator; import com.fasterxml.jackson.annotation.ObjectIdResolver; diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/security/Permission.java b/ccm-core/src/org/libreccm/security/Permission.java.off similarity index 76% rename from ccm-core/src/com/arsdigita/portation/modules/core/security/Permission.java rename to ccm-core/src/org/libreccm/security/Permission.java.off index 1009d50cc..9eda4c23b 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/security/Permission.java +++ b/ccm-core/src/org/libreccm/security/Permission.java.off @@ -16,15 +16,20 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.security; +package org.libreccm.security; import com.arsdigita.kernel.ACSObject; -import com.arsdigita.portation.Portable; -import com.arsdigita.portation.conversion.NgCoreCollection; -import com.arsdigita.portation.modules.core.core.CcmObject; -import com.arsdigita.portation.modules.core.security.util.PermissionIdMapper; + +import org.libreccm.export.convert.Portable; +import org.libreccm.export.convert.CcmCoreEntities; + +import org.libreccm.core.CcmObject; + +import org.libreccm.export.security.util.PermissionIdMapper; + import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIdentityReference; +import org.libreccm.export.Exportable; import java.util.Date; @@ -35,9 +40,10 @@ import java.util.Date; @JsonIdentityInfo(generator = PermissionIdGenerator.class, resolver = PermissionIdResolver.class, property = "customPermId") -public class Permission implements Portable { +public class Permission implements Exportable, Portable { private long permissionId; + private String uuid; private String grantedPrivilege; @JsonIdentityReference(alwaysAsId = true) private CcmObject object; @@ -48,7 +54,8 @@ public class Permission implements Portable { private Date creationDate; private String creationIp; - public Permission(final com.arsdigita.kernel.permissions.Permission trunkPermission) { + public Permission( + final com.arsdigita.kernel.permissions.Permission trunkPermission) { final String oldId = genOldId(trunkPermission); this.permissionId = ACSObject.generateID().longValue(); PermissionIdMapper.map.put(oldId, this.permissionId); @@ -57,12 +64,11 @@ public class Permission implements Portable { //this.object; //this.grantee; - //this.creationUser this.creationDate = trunkPermission.getCreationDate(); this.creationIp = trunkPermission.getCreationIP(); - NgCoreCollection.permissions.put(this.permissionId, this); + CcmCoreEntities.PERMISSIONS.put(this.permissionId, this); } /** @@ -72,28 +78,31 @@ public class Permission implements Portable { * * @return String with the generated old id */ - public static String genOldId(com.arsdigita.kernel.permissions.Permission - permission) { + public static String genOldId( + com.arsdigita.kernel.permissions.Permission permission) { + return String.join("_", - permission.getPrivilege().getName(), - permission.getACSObject().get("id").toString(), - permission.getPartyOID().get("id").toString()); + permission.getPrivilege().getName(), + permission.getACSObject().get("id").toString(), + permission.getPartyOID().get("id").toString()); } public static String genOldId(Permission permission) { + long objectId = 0; - if (permission.getObject() != null) + if (permission.getObject() != null) { objectId = permission.getObject().getObjectId(); + } return String.format("%s_%d_%d", - permission.getGrantedPrivilege(), - objectId, - permission.getGrantee().getRoleId()); + permission.getGrantedPrivilege(), + objectId, + permission.getGrantee().getRoleId()); } /** - * Constructor to copy a given Permission. Needed for purposes of - * creating permissions for multiple grantees from the trunk object. + * Constructor to copy a given Permission. Needed for purposes of creating + * permissions for multiple grantees from the trunk object. * * @param ngPermission The Permission to be copied. */ @@ -108,11 +117,10 @@ public class Permission implements Portable { this.creationDate = ngPermission.getCreationDate(); this.creationIp = ngPermission.getCreationIp(); - NgCoreCollection.permissions.put(this.permissionId, this); + CcmCoreEntities.PERMISSIONS.put(this.permissionId, this); } - public long getPermissionId() { return permissionId; } @@ -120,6 +128,15 @@ public class Permission implements Portable { public void setPermissionId(final long permissionId) { this.permissionId = permissionId; } + + @Override + public String getUuid() { + return uuid; + } + + public void setUuid(final String uuid) { + this.uuid = uuid; + } public String getGrantedPrivilege() { return grantedPrivilege; @@ -171,4 +188,5 @@ public class Permission implements Portable { public void setCreationIp(final String creationIp) { this.creationIp = creationIp; } + } diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/security/PermissionIdGenerator.java b/ccm-core/src/org/libreccm/security/PermissionIdGenerator.java.off similarity index 98% rename from ccm-core/src/com/arsdigita/portation/modules/core/security/PermissionIdGenerator.java rename to ccm-core/src/org/libreccm/security/PermissionIdGenerator.java.off index 427762519..a5eadc00f 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/security/PermissionIdGenerator.java +++ b/ccm-core/src/org/libreccm/security/PermissionIdGenerator.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.security; +package org.libreccm.security; import com.fasterxml.jackson.annotation.ObjectIdGenerator; diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/security/PermissionIdResolver.java b/ccm-core/src/org/libreccm/security/PermissionIdResolver.java.off similarity index 97% rename from ccm-core/src/com/arsdigita/portation/modules/core/security/PermissionIdResolver.java rename to ccm-core/src/org/libreccm/security/PermissionIdResolver.java.off index 63f81b085..16eecfac5 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/security/PermissionIdResolver.java +++ b/ccm-core/src/org/libreccm/security/PermissionIdResolver.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.security; +package org.libreccm.security; import com.fasterxml.jackson.annotation.ObjectIdGenerator; import com.fasterxml.jackson.annotation.ObjectIdResolver; diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/security/PermissionMarshaller.java b/ccm-core/src/org/libreccm/security/PermissionMarshaller.java.off similarity index 86% rename from ccm-core/src/com/arsdigita/portation/modules/core/security/PermissionMarshaller.java rename to ccm-core/src/org/libreccm/security/PermissionMarshaller.java.off index c76ebd0d1..03aa3dc7a 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/security/PermissionMarshaller.java +++ b/ccm-core/src/org/libreccm/security/PermissionMarshaller.java.off @@ -16,12 +16,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.security; +package org.libreccm.security; -import com.arsdigita.portation.AbstractMarshaller; -import com.arsdigita.portation.Format; -import com.arsdigita.portation.cmd.ExportLogger; -import com.arsdigita.portation.conversion.NgCoreCollection; +import org.libreccm.export.convert.AbstractMarshaller; +import org.libreccm.export.convert.Format; + +import org.libreccm.export.cmd.ExportLogger; + +import org.libreccm.export.convert.CcmCoreEntities; import java.util.ArrayList; @@ -62,6 +64,6 @@ public class PermissionMarshaller extends AbstractMarshaller { final boolean indentation) { ExportLogger.exporting("permissions"); prepare(format, pathName, "permissions", indentation); - exportList(new ArrayList<>(NgCoreCollection.permissions.values())); + exportList(new ArrayList<>(CcmCoreEntities.PERMISSIONS.values())); } } diff --git a/ccm-core/src/org/libreccm/security/PermissionsExporter.java b/ccm-core/src/org/libreccm/security/PermissionsExporter.java new file mode 100644 index 000000000..f1c150cb0 --- /dev/null +++ b/ccm-core/src/org/libreccm/security/PermissionsExporter.java @@ -0,0 +1,146 @@ +package org.libreccm.security; + +import com.arsdigita.domain.DomainObject; +import com.arsdigita.domain.DomainObjectFactory; +import com.arsdigita.kernel.Group; +import com.arsdigita.kernel.RoleCollection; +import com.arsdigita.kernel.permissions.Permission; +import com.arsdigita.persistence.OID; +import com.arsdigita.util.UncheckedWrapperException; +import com.arsdigita.web.WebConfig; + +import com.fasterxml.jackson.core.JsonEncoding; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; +import org.libreccm.export.AbstractDomainObjectsExporter; +import org.libreccm.export.IdSequence; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +/** + * + * @author Jens Pelzetter + */ +public class PermissionsExporter extends AbstractDomainObjectsExporter { + + @Override + public Class exportsType() { + return Permission.class; + } + + @Override + public String exportsBaseDataObjectType() { + return Permission.BASE_DATA_OBJECT_TYPE; + } + + @Override + public String convertsToType() { + return "org.libreccm.security.Permission"; + } + + private String exportPermission(final String privilege, + final OID roleOid, + final OID objectOid, + final Path targetDir) { + + final byte[] uuidSource = String.format( + "%s/%s-%s-%s", + WebConfig.getInstanceOf().getSiteName(), + privilege, + roleOid.toString(), + objectOid.toString()) + .getBytes(StandardCharsets.UTF_8); + final String uuid = UUID.nameUUIDFromBytes(uuidSource).toString(); + + final byte[] roleUuidSource = String.format( + "%s/%s", + WebConfig.getInstanceOf().getSiteName(), + roleOid.toString()) + .getBytes(StandardCharsets.UTF_8); + final String roleUuid = UUID + .nameUUIDFromBytes(roleUuidSource) + .toString(); + + final byte[] objectUuidSource = String.format( + "%s/%s", + WebConfig.getInstanceOf().getSiteName(), + objectOid.toString()) + .getBytes(StandardCharsets.UTF_8); + final String objectUuid = UUID + .nameUUIDFromBytes(objectUuidSource).toString(); + + final Path targetFilePath = generateTargetFilePath( + targetDir, "org.libreccm.security.Permission", uuid); + + final JsonFactory jsonFactory = new JsonFactory(); + try (JsonGenerator jsonGenerator = jsonFactory + .createGenerator(targetFilePath.toFile(), JsonEncoding.UTF8)) { + + jsonGenerator.writeStartObject(); + + jsonGenerator.writeNumber(IdSequence.getInstance().nextId()); + jsonGenerator.writeStringField("uuid", uuid); + + jsonGenerator.writeStringField("grantedPrivilege", privilege); + + jsonGenerator.writeStringField("grantee", roleUuid); + jsonGenerator.writeStringField("object", objectUuid); + + jsonGenerator.writeEndObject(); + + } catch (IOException ex) { + throw new UncheckedWrapperException(ex); + } + + return uuid; + } + + @Override + protected List exportDomainObject(final Permission domainObject, + final Path targetDir) { + + final long partyId = ((Number) domainObject + .getPartyOID() + .get("id")).longValue(); + if (-204 == partyId || -300 == partyId || -200 == partyId) { + // Skip internal permissions + return Collections.emptyList(); + } + + final OID objectOid = domainObject.getACSObject(); + + final OID granteeOid = domainObject.getPartyOID(); + final DomainObject granteeDomainObj = DomainObjectFactory + .newInstance(granteeOid); + + final List permissionUuids = new ArrayList<>(); + if (granteeDomainObj instanceof Group) { + + final Group group = (Group) granteeDomainObj; + final RoleCollection roles = group.getRoles(); + + final String privilege = domainObject.getPrivilege().getName(); + + while (roles.next()) { + + final OID roleOid = roles.getRole().getOID(); + + final String permissionUuid = exportPermission(privilege, + objectOid, + roleOid, + targetDir); + permissionUuids.add(permissionUuid); + } + } + + return permissionUuids; + } + +} diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/security/Role.java b/ccm-core/src/org/libreccm/security/Role.java.off similarity index 73% rename from ccm-core/src/com/arsdigita/portation/modules/core/security/Role.java rename to ccm-core/src/org/libreccm/security/Role.java.off index 7dc08743e..08218f042 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/security/Role.java +++ b/ccm-core/src/org/libreccm/security/Role.java.off @@ -16,16 +16,22 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.security; +package org.libreccm.security; import com.arsdigita.kernel.ACSObject; -import com.arsdigita.portation.Portable; -import com.arsdigita.portation.conversion.NgCoreCollection; -import com.arsdigita.portation.modules.core.l10n.LocalizedString; -import com.arsdigita.portation.modules.core.workflow.TaskAssignment; + +import org.libreccm.export.convert.Portable; +import org.libreccm.export.convert.CcmCoreEntities; + +import org.libreccm.l10n.LocalizedString; + +import org.libreccm.workflow.TaskAssignment; + import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import org.libreccm.export.Exportable; +import org.libreccm.export.convert.UuidGenerator; import java.util.*; @@ -36,9 +42,10 @@ import java.util.*; @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, resolver = RoleIdResolver.class, property = "name") -public class Role implements Portable { +public class Role implements Exportable, Portable { private long roleId; + private String uuid; private String name; private LocalizedString description; @JsonIgnore @@ -49,33 +56,35 @@ public class Role implements Portable { private List assignedTasks; public Role(final com.arsdigita.kernel.Role trunkRole) { - this.roleId = trunkRole.getID().longValue(); - this.name = trunkRole.getName(); + + roleId = trunkRole.getID().longValue(); + uuid = UuidGenerator.getInstance().generateUuid(trunkRole); + name = trunkRole.getName(); - this.memberships = new HashSet<>(); + memberships = new HashSet<>(); - this.permissions = new ArrayList<>(); - this.assignedTasks = new ArrayList<>(); + permissions = new ArrayList<>(); + assignedTasks = new ArrayList<>(); Locale local = Locale.getDefault(); - this.description = new LocalizedString(); - this.description.addValue(local, trunkRole.getDescription()); + description = new LocalizedString(); + description.addValue(local, trunkRole.getDescription()); - NgCoreCollection.roles.put(this.roleId, this); + CcmCoreEntities.ROLES.put(roleId, this); } public Role(final String name) { - this.roleId = ACSObject.generateID().longValue(); + roleId = ACSObject.generateID().longValue(); this.name = name; - this.memberships = new HashSet<>(); + memberships = new HashSet<>(); - this.permissions = new ArrayList<>(); - this.assignedTasks = new ArrayList<>(); + permissions = new ArrayList<>(); + assignedTasks = new ArrayList<>(); - this.description = new LocalizedString(); + description = new LocalizedString(); - NgCoreCollection.roles.put(this.roleId, this); + CcmCoreEntities.ROLES.put(this.roleId, this); } @@ -86,6 +95,16 @@ public class Role implements Portable { public void setRoleId(final long roleId) { this.roleId = roleId; } + + @Override + public String getUuid() { + return uuid; + } + + @Override + public void setUuid(final String uuid) { + this.uuid = uuid; + } public String getName() { return name; diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/security/RoleIdResolver.java b/ccm-core/src/org/libreccm/security/RoleIdResolver.java.off similarity index 97% rename from ccm-core/src/com/arsdigita/portation/modules/core/security/RoleIdResolver.java rename to ccm-core/src/org/libreccm/security/RoleIdResolver.java.off index df1318d4f..5a318d535 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/security/RoleIdResolver.java +++ b/ccm-core/src/org/libreccm/security/RoleIdResolver.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.security; +package org.libreccm.security; import com.fasterxml.jackson.annotation.ObjectIdGenerator; import com.fasterxml.jackson.annotation.ObjectIdResolver; diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/security/RoleMarshaller.java b/ccm-core/src/org/libreccm/security/RoleMarshaller.java.off similarity index 86% rename from ccm-core/src/com/arsdigita/portation/modules/core/security/RoleMarshaller.java rename to ccm-core/src/org/libreccm/security/RoleMarshaller.java.off index 325e0f4a1..8b5ab5995 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/security/RoleMarshaller.java +++ b/ccm-core/src/org/libreccm/security/RoleMarshaller.java.off @@ -16,12 +16,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.security; +package org.libreccm.security; -import com.arsdigita.portation.AbstractMarshaller; -import com.arsdigita.portation.Format; -import com.arsdigita.portation.cmd.ExportLogger; -import com.arsdigita.portation.conversion.NgCoreCollection; +import org.libreccm.export.convert.AbstractMarshaller; +import org.libreccm.export.convert.Format; + +import org.libreccm.export.cmd.ExportLogger; + +import org.libreccm.export.convert.CcmCoreEntities; import java.util.ArrayList; @@ -62,6 +64,6 @@ public class RoleMarshaller extends AbstractMarshaller { final boolean indentation) { ExportLogger.exporting("roles"); prepare(format, pathName, "roles", indentation); - exportList(new ArrayList<>(NgCoreCollection.roles.values())); + exportList(new ArrayList<>(CcmCoreEntities.ROLES.values())); } } diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/security/RoleMembership.java b/ccm-core/src/org/libreccm/security/RoleMembership.java.off similarity index 90% rename from ccm-core/src/com/arsdigita/portation/modules/core/security/RoleMembership.java rename to ccm-core/src/org/libreccm/security/RoleMembership.java.off index ab559e754..47aab4fb9 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/security/RoleMembership.java +++ b/ccm-core/src/org/libreccm/security/RoleMembership.java.off @@ -16,11 +16,13 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.security; +package org.libreccm.security; import com.arsdigita.kernel.ACSObject; -import com.arsdigita.portation.Portable; -import com.arsdigita.portation.conversion.NgCoreCollection; + +import org.libreccm.export.convert.Portable; +import org.libreccm.export.convert.CcmCoreEntities; + import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIdentityReference; @@ -39,12 +41,13 @@ public class RoleMembership implements Portable { private Party member; public RoleMembership(final Role role, final Party member) { + this.membershipId = ACSObject.generateID().longValue(); this.role = role; this.member = member; - NgCoreCollection.roleMemberships.put(this.membershipId, this); + CcmCoreEntities.ROLE_MEMBERSHIPS.put(this.membershipId, this); } diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/security/RoleMembershipIdGenerator.java b/ccm-core/src/org/libreccm/security/RoleMembershipIdGenerator.java.off similarity index 97% rename from ccm-core/src/com/arsdigita/portation/modules/core/security/RoleMembershipIdGenerator.java rename to ccm-core/src/org/libreccm/security/RoleMembershipIdGenerator.java.off index 0cebea7a6..17c688c20 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/security/RoleMembershipIdGenerator.java +++ b/ccm-core/src/org/libreccm/security/RoleMembershipIdGenerator.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.security; +package org.libreccm.security; import com.fasterxml.jackson.annotation.ObjectIdGenerator; diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/security/RoleMembershipMarshaller.java b/ccm-core/src/org/libreccm/security/RoleMembershipMarshaller.java.off similarity index 86% rename from ccm-core/src/com/arsdigita/portation/modules/core/security/RoleMembershipMarshaller.java rename to ccm-core/src/org/libreccm/security/RoleMembershipMarshaller.java.off index e138cd86b..cea656095 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/security/RoleMembershipMarshaller.java +++ b/ccm-core/src/org/libreccm/security/RoleMembershipMarshaller.java.off @@ -16,12 +16,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.security; +package org.libreccm.security; -import com.arsdigita.portation.AbstractMarshaller; -import com.arsdigita.portation.Format; -import com.arsdigita.portation.cmd.ExportLogger; -import com.arsdigita.portation.conversion.NgCoreCollection; +import org.libreccm.export.convert.AbstractMarshaller; +import org.libreccm.export.convert.Format; + +import org.libreccm.export.cmd.ExportLogger; + +import org.libreccm.export.convert.CcmCoreEntities; import java.util.ArrayList; @@ -62,6 +64,6 @@ public class RoleMembershipMarshaller extends AbstractMarshaller final boolean indentation) { ExportLogger.exporting("role memberships"); prepare(format, pathName, "roleMemberships", indentation); - exportList(new ArrayList<>(NgCoreCollection.roleMemberships.values())); + exportList(new ArrayList<>(CcmCoreEntities.ROLE_MEMBERSHIPS.values())); } } diff --git a/ccm-core/src/org/libreccm/security/RoleMembershipsExporter.java b/ccm-core/src/org/libreccm/security/RoleMembershipsExporter.java new file mode 100644 index 000000000..e626d852d --- /dev/null +++ b/ccm-core/src/org/libreccm/security/RoleMembershipsExporter.java @@ -0,0 +1,106 @@ +package org.libreccm.security; + +import com.arsdigita.kernel.Party; +import com.arsdigita.kernel.PartyCollection; +import com.arsdigita.kernel.Role; +import com.arsdigita.util.UncheckedWrapperException; +import com.arsdigita.web.WebConfig; + +import com.fasterxml.jackson.core.JsonEncoding; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; +import org.libreccm.export.AbstractDomainObjectsExporter; +import org.libreccm.export.IdSequence; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +/** + * + * @author Jens Pelzetter + */ +public class RoleMembershipsExporter + extends AbstractDomainObjectsExporter { + + @Override + public Class exportsType() { + return Role.class; + } + + @Override + public String exportsBaseDataObjectType() { + return Role.BASE_DATA_OBJECT_TYPE; + } + + @Override + public String convertsToType() { + return "org.libreccm.security.RoleMembership"; + } + + private String exportRoleMembership(final Role role, + final Party member, + final Path targetDir) { + + final String roleUuid = generateUuid(role); + final String memberUuid = generateUuid(member); + + final byte[] membershipUuidSource = String + .format("%s/%s-%s", + WebConfig.getInstanceOf().getSiteName(), + role.getOID().toString(), + member.getOID().toString()) + .getBytes(StandardCharsets.UTF_8); + final String membershipUuid = UUID + .nameUUIDFromBytes(membershipUuidSource) + .toString(); + + final Path targetFilePath = generateTargetFilePath( + targetDir, + "org.libreccm.security.RoleMembership", + membershipUuid); + + final JsonFactory jsonFactory = new JsonFactory(); + try(final JsonGenerator jsonGenerator = jsonFactory + .createGenerator(targetFilePath.toFile(), JsonEncoding.UTF8)) { + + jsonGenerator.writeStartObject(); + jsonGenerator.writeNumberField("membershipId", + IdSequence.getInstance().nextId()); + jsonGenerator.writeStringField("uuid", membershipUuid); + jsonGenerator.writeStringField("role", roleUuid); + jsonGenerator.writeStringField("member", memberUuid); + jsonGenerator.writeEndObject(); + jsonGenerator.writeEndObject(); + + } catch(IOException ex) { + throw new UncheckedWrapperException(ex); + } + + return membershipUuid; + } + + @Override + protected List exportDomainObject(final Role domainObject, + final Path targetDir) { + + final List uuids = new ArrayList<>(); + final PartyCollection members = domainObject.getContainedParties(); + + while (members.next()) { + final Party member = members.getParty(); + final String uuid = exportRoleMembership(domainObject, + member, + targetDir); + uuids.add(uuid); + } + + return uuids; + + } + +} diff --git a/ccm-core/src/org/libreccm/security/RolesExporter.java b/ccm-core/src/org/libreccm/security/RolesExporter.java new file mode 100644 index 000000000..778ffaa5d --- /dev/null +++ b/ccm-core/src/org/libreccm/security/RolesExporter.java @@ -0,0 +1,73 @@ +package org.libreccm.security; + +import com.arsdigita.kernel.KernelConfig; +import com.arsdigita.kernel.Role; +import com.arsdigita.util.UncheckedWrapperException; + +import com.fasterxml.jackson.core.JsonEncoding; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; +import org.libreccm.export.AbstractDomainObjectsExporter; +import org.libreccm.export.IdSequence; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.List; + +/** + * + * @author Jens Pelzetter + */ +public class RolesExporter extends AbstractDomainObjectsExporter { + + @Override + public Class exportsType() { + return Role.class; + } + + @Override + public String exportsBaseDataObjectType() { + return Role.BASE_DATA_OBJECT_TYPE; + } + + @Override + public String convertsToType() { + return "org.libreccm.security.Role"; + } + + @Override + protected List exportDomainObject(final Role domainObject, + final Path targetDir) { + + final JsonFactory jsonFactory = new JsonFactory(); + final String uuid = generateUuid(domainObject); + final Path targetFilePath = generateTargetFilePath( + targetDir, "org.libreccm.security.Role", uuid); + + try (final JsonGenerator jsonGenerator = jsonFactory + .createGenerator(targetFilePath.toFile(), JsonEncoding.UTF8)) { + + jsonGenerator.writeStartObject(); + + jsonGenerator.writeNumberField("roleId", + IdSequence.getInstance().nextId()); + jsonGenerator.writeStringField("uuid", uuid); + jsonGenerator.writeStringField("name", domainObject.getName()); + + jsonGenerator.writeFieldName("description"); + jsonGenerator.writeStartObject(); + jsonGenerator + .writeStringField(KernelConfig.getConfig().getDefaultLanguage(), + domainObject.getDescription()); + + jsonGenerator.writeEndObject(); + + } catch (IOException ex) { + throw new UncheckedWrapperException(ex); + } + + return Arrays.asList(new String[]{uuid}); + } + +} diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/security/User.java b/ccm-core/src/org/libreccm/security/User.java.off similarity index 94% rename from ccm-core/src/com/arsdigita/portation/modules/core/security/User.java rename to ccm-core/src/org/libreccm/security/User.java.off index f73e19ffa..4a2d4c3a0 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/security/User.java +++ b/ccm-core/src/org/libreccm/security/User.java.off @@ -16,11 +16,13 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.security; +package org.libreccm.security; -import com.arsdigita.portation.Portable; -import com.arsdigita.portation.conversion.NgCoreCollection; -import com.arsdigita.portation.modules.core.core.EmailAddress; +import org.libreccm.export.convert.Portable; + +import org.libreccm.export.convert.CcmCoreEntities; + +import org.libreccm.core.EmailAddress; import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.ObjectIdGenerators; @@ -67,7 +69,7 @@ public class User extends Party implements Portable { this.groupMemberships = new HashSet<>(); - NgCoreCollection.users.put(this.getPartyId(), this); + CcmCoreEntities.USERS.put(this.getPartyId(), this); } diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/security/UserIdResolver.java b/ccm-core/src/org/libreccm/security/UserIdResolver.java.off similarity index 97% rename from ccm-core/src/com/arsdigita/portation/modules/core/security/UserIdResolver.java rename to ccm-core/src/org/libreccm/security/UserIdResolver.java.off index 51755155d..40d0b808a 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/security/UserIdResolver.java +++ b/ccm-core/src/org/libreccm/security/UserIdResolver.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.security; +package org.libreccm.security; import com.fasterxml.jackson.annotation.ObjectIdGenerator; import com.fasterxml.jackson.annotation.ObjectIdResolver; diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/security/UserMarshaller.java b/ccm-core/src/org/libreccm/security/UserMarshaller.java.off similarity index 86% rename from ccm-core/src/com/arsdigita/portation/modules/core/security/UserMarshaller.java rename to ccm-core/src/org/libreccm/security/UserMarshaller.java.off index f58400526..a1b76a951 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/security/UserMarshaller.java +++ b/ccm-core/src/org/libreccm/security/UserMarshaller.java.off @@ -16,12 +16,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.security; +package org.libreccm.security; -import com.arsdigita.portation.AbstractMarshaller; -import com.arsdigita.portation.Format; -import com.arsdigita.portation.cmd.ExportLogger; -import com.arsdigita.portation.conversion.NgCoreCollection; +import org.libreccm.export.convert.AbstractMarshaller; +import org.libreccm.export.convert.Format; + +import org.libreccm.export.cmd.ExportLogger; + +import org.libreccm.export.convert.CcmCoreEntities; import java.util.ArrayList; @@ -61,6 +63,6 @@ public class UserMarshaller extends AbstractMarshaller { final boolean indentation) { ExportLogger.exporting("users"); prepare(format, pathName, "users", indentation); - exportList(new ArrayList<>(NgCoreCollection.users.values())); + exportList(new ArrayList<>(CcmCoreEntities.USERS.values())); } } diff --git a/ccm-core/src/org/libreccm/security/UsersExporter.java b/ccm-core/src/org/libreccm/security/UsersExporter.java new file mode 100644 index 000000000..cd302bf57 --- /dev/null +++ b/ccm-core/src/org/libreccm/security/UsersExporter.java @@ -0,0 +1,99 @@ +package org.libreccm.security; + +import com.arsdigita.kernel.User; +import com.arsdigita.util.UncheckedWrapperException; + +import com.fasterxml.jackson.core.JsonEncoding; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; +import org.libreccm.export.AbstractDomainObjectsExporter; +import org.libreccm.export.IdSequence; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.List; + +/** + * + * @author Jens Pelzetter + */ +public class UsersExporter extends AbstractDomainObjectsExporter { + + @Override + public Class exportsType() { + return com.arsdigita.kernel.User.class; + } + + @Override + public String exportsBaseDataObjectType() { + return com.arsdigita.kernel.User.BASE_DATA_OBJECT_TYPE; + } + + @Override + public String convertsToType() { + + return "org.libreccm.security.User"; + } + + @Override + protected List exportDomainObject(final User domainObject, + final Path targetDir) { + + final String uuid = generateUuid(domainObject); + final Path targetFilePath = generateTargetFilePath( + targetDir, + "org.libreccm.security.User", + uuid); + final JsonFactory jsonFactory = new JsonFactory(); + + try (final JsonGenerator jsonGenerator = jsonFactory + .createGenerator(targetFilePath.toFile(), + JsonEncoding.UTF8)) { + + jsonGenerator.writeStartObject(); + + jsonGenerator.writeNumberField("partyId", + IdSequence.getInstance().nextId()); + + jsonGenerator.writeStringField("uuid", uuid); + + jsonGenerator.writeStringField("name", domainObject.getName()); + + jsonGenerator.writeStringField( + "givenName", + domainObject.getPersonName().getGivenName()); + + jsonGenerator.writeStringField( + "familyName", + domainObject.getPersonName().getFamilyName()); + + jsonGenerator.writeFieldName("primaryEmailAddress"); + jsonGenerator.writeStartObject(); + jsonGenerator.writeStringField( + "address", + domainObject.getPrimaryEmail().getEmailAddress()); + jsonGenerator.writeBooleanField( + "bouncing", + domainObject.getPrimaryEmail().isBouncing()); + jsonGenerator.writeBooleanField( + "verified", + domainObject.getPrimaryEmail().isBouncing()); + jsonGenerator.writeEndObject(); + + jsonGenerator.writeBooleanField("banned", domainObject.isBanned()); + + jsonGenerator.writeStringField("password", ""); + + jsonGenerator.writeBooleanField("passwordResetRequired", true); + + jsonGenerator.writeEndObject(); + + } catch (IOException ex) { + throw new UncheckedWrapperException(ex); + } + + return Arrays.asList(new String[]{uuid}); + } + +} diff --git a/ccm-core/src/org/libreccm/web/AbstractCcmApplicationsExporter.java b/ccm-core/src/org/libreccm/web/AbstractCcmApplicationsExporter.java new file mode 100644 index 000000000..54ebf290b --- /dev/null +++ b/ccm-core/src/org/libreccm/web/AbstractCcmApplicationsExporter.java @@ -0,0 +1,35 @@ +package org.libreccm.web; + +import com.arsdigita.web.Application; + +import com.fasterxml.jackson.core.JsonGenerator; +import org.libreccm.core.AbstractResourcesExporter; + +import java.io.IOException; + +/** + * + * @author Jens Pelzetter + * @param + */ +public abstract class AbstractCcmApplicationsExporter + extends AbstractResourcesExporter { + + @Override + protected final void exportResourceProperties( + final T resource, final JsonGenerator jsonGenerator) + throws IOException { + + jsonGenerator.writeStringField("applicationType", + resource.getApplicationType().getName()); + jsonGenerator.writeStringField("primaryUrl", + resource.getPath()); + + exportApplicationProperties(resource, jsonGenerator); + } + + protected abstract void exportApplicationProperties( + T application, JsonGenerator jsonGenerator) + throws IOException; + +} diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/web/CcmApplication.java b/ccm-core/src/org/libreccm/web/CcmApplication.java.off similarity index 87% rename from ccm-core/src/com/arsdigita/portation/modules/core/web/CcmApplication.java rename to ccm-core/src/org/libreccm/web/CcmApplication.java.off index fff679f7c..aa7270ae2 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/web/CcmApplication.java +++ b/ccm-core/src/org/libreccm/web/CcmApplication.java.off @@ -16,13 +16,18 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.web; +package org.libreccm.web; + +import org.libreccm.export.convert.Portable; + +import org.libreccm.export.convert.CcmCoreEntities; + +import org.libreccm.categorization.DomainOwnership; + +import org.libreccm.core.Resource; -import com.arsdigita.portation.Portable; -import com.arsdigita.portation.conversion.NgCoreCollection; -import com.arsdigita.portation.modules.core.categorization.DomainOwnership; -import com.arsdigita.portation.modules.core.core.Resource; import com.arsdigita.web.Application; + import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.ObjectIdGenerators; @@ -53,7 +58,7 @@ public class CcmApplication extends Resource implements Portable { this.domains = new ArrayList<>(); - NgCoreCollection.ccmApplications.put(getObjectId(), this); + CcmCoreEntities.CCM_APPLICATIONS.put(getObjectId(), this); } diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/web/CcmApplicationIdResolver.java b/ccm-core/src/org/libreccm/web/CcmApplicationIdResolver.java.off similarity index 97% rename from ccm-core/src/com/arsdigita/portation/modules/core/web/CcmApplicationIdResolver.java rename to ccm-core/src/org/libreccm/web/CcmApplicationIdResolver.java.off index cb66825fd..bef2ce8f8 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/web/CcmApplicationIdResolver.java +++ b/ccm-core/src/org/libreccm/web/CcmApplicationIdResolver.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.web; +package org.libreccm.web; import com.fasterxml.jackson.annotation.ObjectIdGenerator; import com.fasterxml.jackson.annotation.ObjectIdResolver; diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/web/CcmApplicationMarshaller.java b/ccm-core/src/org/libreccm/web/CcmApplicationMarshaller.java.off similarity index 87% rename from ccm-core/src/com/arsdigita/portation/modules/core/web/CcmApplicationMarshaller.java rename to ccm-core/src/org/libreccm/web/CcmApplicationMarshaller.java.off index 99d63b945..ddefbfc15 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/web/CcmApplicationMarshaller.java +++ b/ccm-core/src/org/libreccm/web/CcmApplicationMarshaller.java.off @@ -16,12 +16,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.web; +package org.libreccm.web; -import com.arsdigita.portation.AbstractMarshaller; -import com.arsdigita.portation.Format; -import com.arsdigita.portation.cmd.ExportLogger; -import com.arsdigita.portation.conversion.NgCoreCollection; +import org.libreccm.export.convert.AbstractMarshaller; +import org.libreccm.export.convert.Format; + +import org.libreccm.export.cmd.ExportLogger; + +import org.libreccm.export.convert.CcmCoreEntities; /** * @author Jens Pelzetter + * @param + */ + + +public abstract class AbstractTasksExporter + extends AbstractDomainObjectsExporter { + + protected abstract void exportTaskProperties( + T task, JsonGenerator jsonGenerator) + throws IOException; + + @Override + public final List exportDomainObject(final T domainObject, + final Path targetDir) { + + final String uuid = generateUuid(domainObject); + final Path targetFilePath = generateTargetFilePath( + targetDir, exportsType().getName(), uuid); + + final JsonFactory jsonFactory = new JsonFactory(); + try (JsonGenerator jsonGenerator = jsonFactory + .createGenerator(targetFilePath.toFile(), JsonEncoding.UTF8)) { + + jsonGenerator.writeStartObject(); + + jsonGenerator.writeNumberField("taskId", + IdSequence.getInstance().nextId()); + jsonGenerator.writeStringField("uuid", uuid); + + jsonGenerator.writeObjectFieldStart("label"); + jsonGenerator.writeStringField( + KernelConfig.getConfig().getDefaultLanguage(), + domainObject.getLabel()); + jsonGenerator.writeEndObject(); + + jsonGenerator.writeObjectFieldStart("description"); + jsonGenerator.writeStringField( + KernelConfig.getConfig().getDefaultLanguage(), + domainObject.getDescription()); + jsonGenerator.writeEndObject(); + + jsonGenerator.writeBooleanField("active", domainObject.isActive()); + + jsonGenerator.writeStringField("taskState", + domainObject.getStateString()); + + final Workflow workflow = domainObject.getWorkflow(); + final String workflowUuid = generateUuid(workflow); + jsonGenerator.writeStringField("workflow", workflowUuid); + + jsonGenerator.writeArrayFieldStart("comments"); + final Iterator comments = domainObject.getComments(); + while (comments.hasNext()) { + + final TaskComment comment = (TaskComment) comments.next(); + final String commentUuid = generateUuid(comment); + jsonGenerator.writeString(commentUuid); + } + jsonGenerator.writeEndArray(); + + exportTaskProperties(domainObject, jsonGenerator); + + jsonGenerator.writeEndObject(); + + } catch (IOException ex) { + throw new UncheckedWrapperException(ex); + } + + return Arrays.asList(new String[]{uuid}); + } + +} diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/AssignableTask.java b/ccm-core/src/org/libreccm/workflow/AssignableTask.java.off similarity index 93% rename from ccm-core/src/com/arsdigita/portation/modules/core/workflow/AssignableTask.java rename to ccm-core/src/org/libreccm/workflow/AssignableTask.java.off index 3c98987ea..f8b8f133d 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/AssignableTask.java +++ b/ccm-core/src/org/libreccm/workflow/AssignableTask.java.off @@ -16,11 +16,13 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.workflow; +package org.libreccm.workflow; -import com.arsdigita.portation.Portable; -import com.arsdigita.portation.conversion.NgCoreCollection; -import com.arsdigita.portation.modules.core.security.User; +import org.libreccm.export.convert.Portable; + +import org.libreccm.export.convert.CcmCoreEntities; + +import org.libreccm.security.User; import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIdentityReference; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -66,7 +68,7 @@ public class AssignableTask extends Task implements Portable { this.assignments = new ArrayList<>(); - NgCoreCollection.assignableTasks.put(this.getTaskId(), this); + CcmCoreEntities.ASSIGNABLE_TASKS.put(this.getTaskId(), this); } diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/AssignableTaskIdResolver.java b/ccm-core/src/org/libreccm/workflow/AssignableTaskIdResolver.java.off similarity index 97% rename from ccm-core/src/com/arsdigita/portation/modules/core/workflow/AssignableTaskIdResolver.java rename to ccm-core/src/org/libreccm/workflow/AssignableTaskIdResolver.java.off index 506eec5cc..5574c60d4 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/AssignableTaskIdResolver.java +++ b/ccm-core/src/org/libreccm/workflow/AssignableTaskIdResolver.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.workflow; +package org.libreccm.workflow; import com.fasterxml.jackson.annotation.ObjectIdGenerator; import com.fasterxml.jackson.annotation.ObjectIdResolver; diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/AssignableTaskMarshaller.java b/ccm-core/src/org/libreccm/workflow/AssignableTaskMarshaller.java.off similarity index 87% rename from ccm-core/src/com/arsdigita/portation/modules/core/workflow/AssignableTaskMarshaller.java rename to ccm-core/src/org/libreccm/workflow/AssignableTaskMarshaller.java.off index 712a4224b..67e209b8c 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/AssignableTaskMarshaller.java +++ b/ccm-core/src/org/libreccm/workflow/AssignableTaskMarshaller.java.off @@ -16,12 +16,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.workflow; +package org.libreccm.workflow; -import com.arsdigita.portation.AbstractMarshaller; -import com.arsdigita.portation.Format; -import com.arsdigita.portation.cmd.ExportLogger; -import com.arsdigita.portation.conversion.NgCoreCollection; +import org.libreccm.export.convert.AbstractMarshaller; +import org.libreccm.export.convert.Format; + +import org.libreccm.export.cmd.ExportLogger; + +import org.libreccm.export.convert.CcmCoreEntities; /** * @author Jens Pelzetter + */ +public class AssignableTasksExporter extends AbstractTasksExporter { + + @Override + public Class exportsType() { + return UserTask.class; + } + + @Override + public String exportsBaseDataObjectType() { + + return UserTask.BASE_DATA_OBJECT_TYPE; + + } + + @Override + public String convertsToType() { + return "org.libreccm.workflow.AssignableTask"; + } + + @Override + protected void exportTaskProperties(final UserTask task, + final JsonGenerator jsonGenerator) + throws IOException { + + jsonGenerator.writeBooleanField("locked", task.isLocked()); + + final User lockingUser = task.getLockedUser(); + final String lockingUserUuid = generateUuid(lockingUser); + jsonGenerator.writeStringField("lockingUser", lockingUserUuid); + + final SimpleDateFormat dateFormat = new SimpleDateFormat( + "yyyy-MM-dd'T'HH:mm:ssZ", Locale.ROOT); + jsonGenerator.writeStringField("startDate", + dateFormat.format(task.getStartDate())); + jsonGenerator.writeStringField("dueDate", + dateFormat.format(task.getDueDate())); + jsonGenerator.writeNumberField("durationMinutes", + task.getDuration().getDuration()); + + final Party notificationSender = task.getNotificationSender(); + final String notificationSenderUuid = generateUuid(notificationSender); + jsonGenerator.writeStringField("notificationSender", + notificationSenderUuid); + } + +} diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/Task.java b/ccm-core/src/org/libreccm/workflow/Task.java.off similarity index 94% rename from ccm-core/src/com/arsdigita/portation/modules/core/workflow/Task.java rename to ccm-core/src/org/libreccm/workflow/Task.java.off index 9a13752a6..53f69c877 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/Task.java +++ b/ccm-core/src/org/libreccm/workflow/Task.java.off @@ -16,11 +16,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.workflow; +package org.libreccm.workflow; + +import org.libreccm.export.convert.CcmCoreEntities; + +import org.libreccm.l10n.LocalizedString; + +import org.libreccm.export.workflow.util.StateMapper; -import com.arsdigita.portation.conversion.NgCoreCollection; -import com.arsdigita.portation.modules.core.l10n.LocalizedString; -import com.arsdigita.portation.modules.core.workflow.util.StateMapper; import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIdentityReference; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -74,7 +77,7 @@ public class Task { this.blockingTasks = new ArrayList<>(); this.comments = new ArrayList<>(); - NgCoreCollection.tasks.put(this.getTaskId(), this); + CcmCoreEntities.TASKS.put(this.getTaskId(), this); } public long getTaskId() { diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskAssignment.java b/ccm-core/src/org/libreccm/workflow/TaskAssignment.java.off similarity index 88% rename from ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskAssignment.java rename to ccm-core/src/org/libreccm/workflow/TaskAssignment.java.off index 3fb3a7476..c26fea277 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskAssignment.java +++ b/ccm-core/src/org/libreccm/workflow/TaskAssignment.java.off @@ -16,12 +16,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.workflow; +package org.libreccm.workflow; import com.arsdigita.kernel.ACSObject; -import com.arsdigita.portation.Portable; -import com.arsdigita.portation.conversion.NgCoreCollection; -import com.arsdigita.portation.modules.core.security.Role; + +import org.libreccm.export.convert.Portable; +import org.libreccm.export.convert.CcmCoreEntities; + +import org.libreccm.security.Role; import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIdentityReference; @@ -46,7 +48,7 @@ public class TaskAssignment implements Portable { this.task = task; this.role = role; - NgCoreCollection.taskAssignments.put(this.taskAssignmentId, this); + CcmCoreEntities.TASK_ASSIGNMENTS.put(this.taskAssignmentId, this); } diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskAssignmentIdGenerator.java b/ccm-core/src/org/libreccm/workflow/TaskAssignmentIdGenerator.java.off similarity index 97% rename from ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskAssignmentIdGenerator.java rename to ccm-core/src/org/libreccm/workflow/TaskAssignmentIdGenerator.java.off index 66bf20a31..11915bd14 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskAssignmentIdGenerator.java +++ b/ccm-core/src/org/libreccm/workflow/TaskAssignmentIdGenerator.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.workflow; +package org.libreccm.workflow; import com.fasterxml.jackson.annotation.ObjectIdGenerator; diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskAssignmentMarshaller.java b/ccm-core/src/org/libreccm/workflow/TaskAssignmentMarshaller.java.off similarity index 86% rename from ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskAssignmentMarshaller.java rename to ccm-core/src/org/libreccm/workflow/TaskAssignmentMarshaller.java.off index e12f8981a..289340cc3 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskAssignmentMarshaller.java +++ b/ccm-core/src/org/libreccm/workflow/TaskAssignmentMarshaller.java.off @@ -16,12 +16,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.workflow; +package org.libreccm.workflow; -import com.arsdigita.portation.AbstractMarshaller; -import com.arsdigita.portation.Format; -import com.arsdigita.portation.cmd.ExportLogger; -import com.arsdigita.portation.conversion.NgCoreCollection; +import org.libreccm.export.convert.AbstractMarshaller; +import org.libreccm.export.convert.Format; + +import org.libreccm.export.cmd.ExportLogger; + +import org.libreccm.export.convert.CcmCoreEntities; import java.util.ArrayList; @@ -62,6 +64,6 @@ public class TaskAssignmentMarshaller extends AbstractMarshaller final boolean indentation) { ExportLogger.exporting("task assignments"); prepare(format, pathName, "taskAssignments", indentation); - exportList(new ArrayList<>(NgCoreCollection.taskAssignments.values())); + exportList(new ArrayList<>(CcmCoreEntities.TASK_ASSIGNMENTS.values())); } } diff --git a/ccm-core/src/org/libreccm/workflow/TaskAssignmentsExporter.java b/ccm-core/src/org/libreccm/workflow/TaskAssignmentsExporter.java new file mode 100644 index 000000000..63122a77f --- /dev/null +++ b/ccm-core/src/org/libreccm/workflow/TaskAssignmentsExporter.java @@ -0,0 +1,112 @@ +package org.libreccm.workflow; + +import com.arsdigita.kernel.GroupCollection; +import com.arsdigita.kernel.Role; +import com.arsdigita.kernel.RoleCollection; +import com.arsdigita.util.UncheckedWrapperException; +import com.arsdigita.web.WebConfig; +import com.arsdigita.workflow.simple.UserTask; + +import com.fasterxml.jackson.core.JsonEncoding; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; +import org.libreccm.export.AbstractDomainObjectsExporter; +import org.libreccm.export.IdSequence; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +/** + * + * @author Jens Pelzetter + */ +public class TaskAssignmentsExporter + extends AbstractDomainObjectsExporter { + + @Override + public Class exportsType() { + return UserTask.class; + } + + @Override + public String exportsBaseDataObjectType() { + return UserTask.BASE_DATA_OBJECT_TYPE; + } + + @Override + public String convertsToType() { + return "org.libreccm.workflow.TaskAssignment"; + } + + @Override + protected List exportDomainObject(final UserTask domainObject, + final Path targetDir) { + + final GroupCollection groups = domainObject.getAssignedGroupCollection(); + final List uuids = new ArrayList<>(); + while (groups.next()) { + + final RoleCollection roles = groups.getGroup().getRoles(); + + while (roles.next()) { + + final String uuid = exportTaskAssignment(domainObject, + roles.getRole(), + targetDir); + uuids.add(uuid); + } + } + + return uuids; + } + + private String exportTaskAssignment(final UserTask task, + final Role role, + final Path targetDir) { + + final byte[] uuidSource = String.format( + "%s/%s-%s", + WebConfig.getInstanceOf().getSiteName(), + task.getOID().toString(), + role.getOID().toString()) + .getBytes(StandardCharsets.UTF_8); + final String uuid = UUID.nameUUIDFromBytes(uuidSource).toString(); + + final Path targetFilePath = targetDir + .resolve("org.libreccm.workflow.TaskAssignments") + .resolve(String.format("%s.json", uuid)); + final File targetFile = targetFilePath.toFile(); + + final JsonFactory jsonFactory = new JsonFactory(); + try (final JsonGenerator jsonGenerator = jsonFactory + .createGenerator(targetFile, JsonEncoding.UTF8)) { + + jsonGenerator.writeStartObject(); + + jsonGenerator.writeNumberField("taskAssignmentId", + IdSequence.getInstance().nextId()); + jsonGenerator.writeStringField("uuid", uuid); + + final String taskUuid = generateUuid(task); + jsonGenerator.writeStringField("task", taskUuid); + + final String roleUuid = generateUuid(role); + jsonGenerator.writeStringField("role", roleUuid); + + jsonGenerator.writeEndObject(); + + } catch (IOException ex) { + throw new UncheckedWrapperException(ex); + } + + return uuid; + + } + +} diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskComment.java b/ccm-core/src/org/libreccm/workflow/TaskComment.java.off similarity index 89% rename from ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskComment.java rename to ccm-core/src/org/libreccm/workflow/TaskComment.java.off index fce55bc48..1c90c9e6b 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskComment.java +++ b/ccm-core/src/org/libreccm/workflow/TaskComment.java.off @@ -16,11 +16,13 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.workflow; +package org.libreccm.workflow; -import com.arsdigita.portation.Portable; -import com.arsdigita.portation.conversion.NgCoreCollection; -import com.arsdigita.portation.modules.core.security.User; +import org.libreccm.export.convert.Portable; + +import org.libreccm.export.convert.CcmCoreEntities; + +import org.libreccm.security.User; import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIdentityReference; import com.fasterxml.jackson.annotation.ObjectIdGenerators; @@ -50,7 +52,7 @@ public class TaskComment implements Portable { this.comment = trunkTaskComment.getComment(); //this.author - NgCoreCollection.taskComments.put(this.getCommentId(), this); + CcmCoreEntities.TASK_COMMENTS.put(this.getCommentId(), this); } public long getCommentId() { diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskCommentIdResolver.java b/ccm-core/src/org/libreccm/workflow/TaskCommentIdResolver.java.off similarity index 97% rename from ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskCommentIdResolver.java rename to ccm-core/src/org/libreccm/workflow/TaskCommentIdResolver.java.off index d4aed2399..8e36fdf2e 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskCommentIdResolver.java +++ b/ccm-core/src/org/libreccm/workflow/TaskCommentIdResolver.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.workflow; +package org.libreccm.workflow; import com.fasterxml.jackson.annotation.ObjectIdGenerator; import com.fasterxml.jackson.annotation.ObjectIdResolver; diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskCommentMarshaller.java b/ccm-core/src/org/libreccm/workflow/TaskCommentMarshaller.java.off similarity index 87% rename from ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskCommentMarshaller.java rename to ccm-core/src/org/libreccm/workflow/TaskCommentMarshaller.java.off index c53f54a35..d9522356b 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskCommentMarshaller.java +++ b/ccm-core/src/org/libreccm/workflow/TaskCommentMarshaller.java.off @@ -16,12 +16,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.workflow; +package org.libreccm.workflow; -import com.arsdigita.portation.AbstractMarshaller; -import com.arsdigita.portation.Format; -import com.arsdigita.portation.cmd.ExportLogger; -import com.arsdigita.portation.conversion.NgCoreCollection; +import org.libreccm.export.convert.AbstractMarshaller; +import org.libreccm.export.convert.Format; + +import org.libreccm.export.cmd.ExportLogger; + +import org.libreccm.export.convert.CcmCoreEntities; import java.util.ArrayList; @@ -62,6 +64,6 @@ public class TaskCommentMarshaller extends AbstractMarshaller { final boolean indentation) { ExportLogger.exporting("task comments"); prepare(format, pathName, "taskComments", indentation); - exportList(new ArrayList<>(NgCoreCollection.taskComments.values())); + exportList(new ArrayList<>(CcmCoreEntities.TASK_COMMENTS.values())); } } diff --git a/ccm-core/src/org/libreccm/workflow/TaskCommentsExporter.java b/ccm-core/src/org/libreccm/workflow/TaskCommentsExporter.java new file mode 100644 index 000000000..4505dbcf6 --- /dev/null +++ b/ccm-core/src/org/libreccm/workflow/TaskCommentsExporter.java @@ -0,0 +1,73 @@ +package org.libreccm.workflow; + +import com.arsdigita.util.UncheckedWrapperException; +import com.arsdigita.workflow.simple.TaskComment; + +import com.fasterxml.jackson.core.JsonEncoding; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; +import org.libreccm.export.AbstractDomainObjectsExporter; +import org.libreccm.export.IdSequence; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.List; + +/** + * + * @author Jens Pelzetter + */ +public class TaskCommentsExporter + extends AbstractDomainObjectsExporter { + + @Override + public Class exportsType() { + return TaskComment.class; + } + + @Override + public String exportsBaseDataObjectType() { + return TaskComment.BASE_DATA_OBJECT_TYPE; + } + + @Override + public String convertsToType() { + return "org.libreccm.workflow.TaskComment"; + } + + @Override + protected List exportDomainObject(final TaskComment domainObject, + final Path targetDir) { + + final String uuid = generateUuid(domainObject); + final Path targetFilePath = targetDir + .resolve("org.libreccm.workflow.TaskComment") + .resolve(String.format("%s.json", uuid)); + final File targetFile = targetFilePath.toFile(); + + final JsonFactory jsonFactory = new JsonFactory(); + try (JsonGenerator jsonGenerator = jsonFactory + .createGenerator(targetFile, JsonEncoding.UTF8)) { + + jsonGenerator.writeStartObject(); + + jsonGenerator.writeNumberField( + "taskCommentId", + IdSequence.getInstance().nextId()); + jsonGenerator.writeStringField("uuid", uuid); + + jsonGenerator.writeStringField("comment", + domainObject.getComment()); + + jsonGenerator.writeEndObject(); + + } catch (IOException ex) { + throw new UncheckedWrapperException(ex); + } + + return Arrays.asList(new String[]{uuid}); + } + +} diff --git a/ccm-core/src/org/libreccm/workflow/TaskDependenciesExporter.java b/ccm-core/src/org/libreccm/workflow/TaskDependenciesExporter.java new file mode 100644 index 000000000..75b81bc5c --- /dev/null +++ b/ccm-core/src/org/libreccm/workflow/TaskDependenciesExporter.java @@ -0,0 +1,107 @@ +package org.libreccm.workflow; + +import com.arsdigita.util.UncheckedWrapperException; +import com.arsdigita.web.WebConfig; +import com.arsdigita.workflow.simple.Task; +import com.arsdigita.workflow.simple.TaskCollection; + +import com.fasterxml.jackson.core.JsonEncoding; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; +import org.libreccm.export.AbstractDomainObjectsExporter; +import org.libreccm.export.IdSequence; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +/** + * + * @author Jens Pelzetter + */ +public class TaskDependenciesExporter + extends AbstractDomainObjectsExporter { + + @Override + public Class exportsType() { + return Task.class; + } + + @Override + public String exportsBaseDataObjectType() { + return Task.BASE_DATA_OBJECT_TYPE; + } + + @Override + public String convertsToType() { + return "org.libreccm.workflow.TaskDependency"; + } + + @Override + protected List exportDomainObject(final Task domainObject, + final Path targetDir) { + + final TaskCollection blockingTasks = domainObject.getRequiredTasks(); + final List uuids = new ArrayList<>(); + while (blockingTasks.next()) { + + final Task blockingTask = blockingTasks.getTask(); + + final String uuid = exportTaskDependency(domainObject, + blockingTask, + targetDir); + uuids.add(uuid); + + } + + return uuids; + } + + private String exportTaskDependency(final Task task, + final Task blockingTask, + final Path targetDir) { + + final byte[] uuidSource = String.format( + "%s/%s-%s", + WebConfig.getInstanceOf().getSiteName(), + task.getOID().toString(), + blockingTask.getOID().toString()) + .getBytes(StandardCharsets.UTF_8); + final String uuid = UUID.nameUUIDFromBytes(uuidSource).toString(); + + final Path targetFilePath = targetDir + .resolve("org.libreccm.workflow.TaskDependency") + .resolve(String.format("%s.json", uuid)); + final File targetFile = targetFilePath.toFile(); + + final JsonFactory jsonFactory = new JsonFactory(); + try (final JsonGenerator jsonGenerator = jsonFactory + .createGenerator(targetFile, JsonEncoding.UTF8)) { + + jsonGenerator.writeStartObject(); + + jsonGenerator.writeNumberField("taskDependencyId", + IdSequence.getInstance().nextId()); + jsonGenerator.writeStringField("uuid", uuid); + + final String taskUuid = generateUuid(task); + jsonGenerator.writeStringField("blockedTask", taskUuid); + + final String blockingTaskUuid = generateUuid(blockingTask); + jsonGenerator.writeStringField("blockingTask", blockingTaskUuid); + + jsonGenerator.writeEndObject(); + + } catch (IOException ex) { + throw new UncheckedWrapperException(ex); + } + + return uuid; + } + +} diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskDependency.java b/ccm-core/src/org/libreccm/workflow/TaskDependency.java.off similarity index 90% rename from ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskDependency.java rename to ccm-core/src/org/libreccm/workflow/TaskDependency.java.off index d37671057..9aab59af9 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskDependency.java +++ b/ccm-core/src/org/libreccm/workflow/TaskDependency.java.off @@ -16,11 +16,13 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.workflow; +package org.libreccm.workflow; import com.arsdigita.kernel.ACSObject; -import com.arsdigita.portation.Portable; -import com.arsdigita.portation.conversion.NgCoreCollection; + +import org.libreccm.export.convert.Portable; +import org.libreccm.export.convert.CcmCoreEntities; + import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIdentityReference; @@ -44,7 +46,7 @@ public class TaskDependency implements Portable { this.blockedTask = blockedTask; this.blockingTask = blockingTask; - NgCoreCollection.taskDependencies.put(this.taskDependencyId, this); + CcmCoreEntities.TASK_DEPENDENCIES.put(this.taskDependencyId, this); } public long getTaskDependencyId() { diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskDependencyIdGenerator.java b/ccm-core/src/org/libreccm/workflow/TaskDependencyIdGenerator.java.off similarity index 94% rename from ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskDependencyIdGenerator.java rename to ccm-core/src/org/libreccm/workflow/TaskDependencyIdGenerator.java.off index 198b14510..022c7939d 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskDependencyIdGenerator.java +++ b/ccm-core/src/org/libreccm/workflow/TaskDependencyIdGenerator.java.off @@ -16,9 +16,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.workflow; +package org.libreccm.workflow; -import com.arsdigita.portation.modules.core.security.GroupMembership; +import org.libreccm.security.GroupMembership; import com.fasterxml.jackson.annotation.ObjectIdGenerator; /** diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskDependencyMarshaller.java b/ccm-core/src/org/libreccm/workflow/TaskDependencyMarshaller.java.off similarity index 86% rename from ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskDependencyMarshaller.java rename to ccm-core/src/org/libreccm/workflow/TaskDependencyMarshaller.java.off index 959e3bf49..469eac8b5 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskDependencyMarshaller.java +++ b/ccm-core/src/org/libreccm/workflow/TaskDependencyMarshaller.java.off @@ -16,12 +16,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.workflow; +package org.libreccm.workflow; -import com.arsdigita.portation.AbstractMarshaller; -import com.arsdigita.portation.Format; -import com.arsdigita.portation.cmd.ExportLogger; -import com.arsdigita.portation.conversion.NgCoreCollection; +import org.libreccm.export.convert.AbstractMarshaller; +import org.libreccm.export.convert.Format; + +import org.libreccm.export.cmd.ExportLogger; + +import org.libreccm.export.convert.CcmCoreEntities; import java.util.ArrayList; @@ -63,6 +65,6 @@ public class TaskDependencyMarshaller extends final boolean indentation) { ExportLogger.exporting("task dependencies"); prepare(format, pathName, "taskDependencies", indentation); - exportList(new ArrayList<>(NgCoreCollection.taskDependencies.values())); + exportList(new ArrayList<>(CcmCoreEntities.TASK_DEPENDENCIES.values())); } } diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskIdResolver.java b/ccm-core/src/org/libreccm/workflow/TaskIdResolver.java.off similarity index 97% rename from ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskIdResolver.java rename to ccm-core/src/org/libreccm/workflow/TaskIdResolver.java.off index 0d3fe58e1..6f3317ce4 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskIdResolver.java +++ b/ccm-core/src/org/libreccm/workflow/TaskIdResolver.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.workflow; +package org.libreccm.workflow; import com.fasterxml.jackson.annotation.ObjectIdGenerator; import com.fasterxml.jackson.annotation.ObjectIdResolver; diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskState.java b/ccm-core/src/org/libreccm/workflow/TaskState.java.off similarity index 94% rename from ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskState.java rename to ccm-core/src/org/libreccm/workflow/TaskState.java.off index 4fbbce991..64c7b8c6f 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/TaskState.java +++ b/ccm-core/src/org/libreccm/workflow/TaskState.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.workflow; +package org.libreccm.workflow; /** * The possible states of a {@link Task}. diff --git a/ccm-core/src/org/libreccm/workflow/TasksExporter.java b/ccm-core/src/org/libreccm/workflow/TasksExporter.java new file mode 100644 index 000000000..20f837e34 --- /dev/null +++ b/ccm-core/src/org/libreccm/workflow/TasksExporter.java @@ -0,0 +1,40 @@ +package org.libreccm.workflow; + +import com.arsdigita.workflow.simple.Task; + +import com.fasterxml.jackson.core.JsonGenerator; + +import java.util.Arrays; +import java.util.List; + +/** + * + * @author Jens Pelzetter + */ +public class TasksExporter extends AbstractTasksExporter { + + @Override + public Class exportsType() { + return Task.class; + } + + @Override + public String exportsBaseDataObjectType() { + + return Task.BASE_DATA_OBJECT_TYPE; + + } + + @Override + public String convertsToType() { + return "org.libreccm.workflow.Task"; + } + + @Override + protected void exportTaskProperties(final Task task, + final JsonGenerator jsonGenerator) { + + // Nothing + } + +} diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/Workflow.java b/ccm-core/src/org/libreccm/workflow/Workflow.java.off similarity index 91% rename from ccm-core/src/com/arsdigita/portation/modules/core/workflow/Workflow.java rename to ccm-core/src/org/libreccm/workflow/Workflow.java.off index d15f668c3..159cdc1c9 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/Workflow.java +++ b/ccm-core/src/org/libreccm/workflow/Workflow.java.off @@ -16,13 +16,18 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.workflow; +package org.libreccm.workflow; + +import org.libreccm.export.convert.Portable; + +import org.libreccm.export.convert.CcmCoreEntities; + +import org.libreccm.core.CcmObject; + +import org.libreccm.l10n.LocalizedString; + +import org.libreccm.export.workflow.util.StateMapper; -import com.arsdigita.portation.Portable; -import com.arsdigita.portation.conversion.NgCoreCollection; -import com.arsdigita.portation.modules.core.core.CcmObject; -import com.arsdigita.portation.modules.core.l10n.LocalizedString; -import com.arsdigita.portation.modules.core.workflow.util.StateMapper; import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIdentityReference; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -80,7 +85,7 @@ public class Workflow implements Portable { this.tasks = new ArrayList<>(); - NgCoreCollection.workflows.put(this.workflowId, this); + CcmCoreEntities.WORKFLOWS.put(this.workflowId, this); } diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/WorkflowIdResolver.java b/ccm-core/src/org/libreccm/workflow/WorkflowIdResolver.java.off similarity index 97% rename from ccm-core/src/com/arsdigita/portation/modules/core/workflow/WorkflowIdResolver.java rename to ccm-core/src/org/libreccm/workflow/WorkflowIdResolver.java.off index 9f957290b..7e4a1601e 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/WorkflowIdResolver.java +++ b/ccm-core/src/org/libreccm/workflow/WorkflowIdResolver.java.off @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.workflow; +package org.libreccm.workflow; import com.fasterxml.jackson.annotation.ObjectIdGenerator; import com.fasterxml.jackson.annotation.ObjectIdResolver; diff --git a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/WorkflowMarshaller.java b/ccm-core/src/org/libreccm/workflow/WorkflowMarshaller.java.off similarity index 87% rename from ccm-core/src/com/arsdigita/portation/modules/core/workflow/WorkflowMarshaller.java rename to ccm-core/src/org/libreccm/workflow/WorkflowMarshaller.java.off index 1708cf9c6..b337fa70a 100644 --- a/ccm-core/src/com/arsdigita/portation/modules/core/workflow/WorkflowMarshaller.java +++ b/ccm-core/src/org/libreccm/workflow/WorkflowMarshaller.java.off @@ -16,12 +16,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package com.arsdigita.portation.modules.core.workflow; +package org.libreccm.workflow; -import com.arsdigita.portation.AbstractMarshaller; -import com.arsdigita.portation.Format; -import com.arsdigita.portation.cmd.ExportLogger; -import com.arsdigita.portation.conversion.NgCoreCollection; +import org.libreccm.export.convert.AbstractMarshaller; +import org.libreccm.export.convert.Format; + +import org.libreccm.export.cmd.ExportLogger; + +import org.libreccm.export.convert.CcmCoreEntities; /** * @author Jens Pelzetter + */ +public class WorkflowsExporter extends AbstractDomainObjectsExporter { + + @Override + public Class exportsType() { + + return Workflow.class; + } + + @Override + public String exportsBaseDataObjectType() { + + return Workflow.BASE_DATA_OBJECT_TYPE; + } + + @Override + public String convertsToType() { + + return "org.libreccm.workflow.Workflow"; + } + + @Override + protected List exportDomainObject( + final Workflow domainObject, final Path targetDir) { + + final String uuid = generateUuid(domainObject); + final Path targetFilePath = targetDir + .resolve("org.libreccm.workflow.Workflow") + .resolve(String.format("%s.json", uuid)); + final File targetFile = targetFilePath.toFile(); + + final JsonFactory jsonFactory = new JsonFactory(); + try (JsonGenerator jsonGenerator = jsonFactory + .createGenerator(targetFile, JsonEncoding.UTF8)) { + + jsonGenerator.writeStartObject(); + + jsonGenerator.writeNumberField("workflowId", + IdSequence.getInstance().nextId()); + jsonGenerator.writeStringField("uuid", uuid); + jsonGenerator.writeBooleanField( + "abstractWorkflow", + domainObject instanceof WorkflowTemplate); + + jsonGenerator.writeObjectFieldStart("name"); + jsonGenerator.writeStringField( + KernelConfig.getConfig().getDefaultLanguage(), + domainObject.getDisplayName()); + jsonGenerator.writeEndObject(); + + jsonGenerator.writeObjectFieldStart("description"); + jsonGenerator.writeStringField( + KernelConfig.getConfig().getDefaultLanguage(), + domainObject.getDescription()); + jsonGenerator.writeEndObject(); + + jsonGenerator.writeStringField("state", + domainObject.getStateString()); + + jsonGenerator.writeBooleanField("active", domainObject.isActive()); + + final ACSObject object = domainObject.getObject(); + final String objectUuid = generateUuid(object); + jsonGenerator.writeStringField("object", objectUuid); + + jsonGenerator.writeEndObject(); + + } catch (IOException ex) { + + } + + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + +}