From c6eef005f35d84f95e899b4641c4996b6ad8b12f Mon Sep 17 00:00:00 2001 From: Alan Davis Date: Fri, 11 Mar 2016 22:32:08 +0000 Subject: [PATCH] Merged 5.1.N (5.1.1) to HEAD (5.2) 122735 adragoi: Merged 5.0.N (5.0.4) to 5.1.N (5.1.1) 122668 aleahu: Merged V4.2-BUG-FIX (4.2.7) to 5.0.N (5.0.4) 122625 aleahu: Merged V4.2.6 (4.2.6) to V4.2-BUG-FIX (4.2.7) 122548 rmunteanu: Merged DEV to V4.2.6 (4.2.6) 122546: MNT-14204: Enterprise bulkimport tool is not versioning for inplace import from two different batches - If only version files are imported, version history is no longer removed and the version number is incremented - Added new in-place import test and updated one streaming import test git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@123684 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/bulkimport/ImportableItem.java | 2 +- .../bulkimport/impl/AbstractNodeImporter.java | 35 +++++++++++-------- .../repo/bulkimport/impl/BulkImportTest.java | 21 +++++++++-- 3 files changed, 40 insertions(+), 18 deletions(-) diff --git a/source/java/org/alfresco/repo/bulkimport/ImportableItem.java b/source/java/org/alfresco/repo/bulkimport/ImportableItem.java index 11c51af7cd..8a8c6ff29f 100644 --- a/source/java/org/alfresco/repo/bulkimport/ImportableItem.java +++ b/source/java/org/alfresco/repo/bulkimport/ImportableItem.java @@ -58,7 +58,7 @@ public final class ImportableItem public boolean isValid() { - return(headRevision.contentFileExists() || headRevision.metadataFileExists()); + return(headRevision.contentFileExists() || headRevision.metadataFileExists() || hasVersionEntries()); } public ContentAndMetadata getHeadRevision() diff --git a/source/java/org/alfresco/repo/bulkimport/impl/AbstractNodeImporter.java b/source/java/org/alfresco/repo/bulkimport/impl/AbstractNodeImporter.java index 9fcd898141..100a0f3160 100644 --- a/source/java/org/alfresco/repo/bulkimport/impl/AbstractNodeImporter.java +++ b/source/java/org/alfresco/repo/bulkimport/impl/AbstractNodeImporter.java @@ -170,6 +170,13 @@ public abstract class AbstractNodeImporter implements NodeImporter } } + // Step 3: read the parent filename from the item itself + if (result == null && + importableItem != null) + { + result = importableItem.getHeadRevision().getContentFile().getName(); + } + return(result); } @@ -204,11 +211,7 @@ public abstract class AbstractNodeImporter implements NodeImporter //versionProperties.put(ContentModel.PROP_VERSION_LABEL.toPrefixString(), String.valueOf(versionEntry.getVersion())); versionProperties.put(VersionModel.PROP_VERSION_TYPE, VersionType.MAJOR); // Load every version as a major version for now - see http://code.google.com/p/alfresco-bulk-filesystem-import/issues/detail?id=84 - if(nodeState == NodeState.REPLACED) - { - versionService.deleteVersionHistory(nodeRef); - } - + // handle versions for (final ImportableItem.VersionedContentAndMetadata versionEntry : importableItem.getVersionEntries()) { MetadataLoader.Metadata metadata = loadMetadata(versionEntry); @@ -220,18 +223,20 @@ public abstract class AbstractNodeImporter implements NodeImporter result += metadata.getProperties().size() + 4; // Add 4 for "standard" metadata properties read from filesystem } - if (logger.isDebugEnabled()) logger.debug("Creating head revision of node " + nodeRef.toString()); - ImportableItem.ContentAndMetadata contentAndMetadata = importableItem.getHeadRevision(); - MetadataLoader.Metadata metadata = loadMetadata(contentAndMetadata); - - // If cm:versionable isn't listed as one of the aspects for this node, add it - cm:versionable is required for nodes that have versions - if (!metadata.getAspects().contains(ContentModel.ASPECT_VERSIONABLE)) + // handle head version, if exists + ImportableItem.ContentAndMetadata headRevContentAndMetadata = importableItem.getHeadRevision(); + if(headRevContentAndMetadata != null && (headRevContentAndMetadata.contentFileExists() + || headRevContentAndMetadata.metadataFileExists())) { - if (logger.isWarnEnabled()) logger.warn("Metadata for file '" + getFileName(importableItem.getHeadRevision().getContentFile()) + "' was missing the cm:versionable aspect, yet it has " + importableItem.getVersionEntries().size() + " versions. Adding cm:versionable."); - metadata.addAspect(ContentModel.ASPECT_VERSIONABLE); + if (logger.isDebugEnabled()) + { + logger.debug("Creating head revision of node " + nodeRef.toString()); + } + + MetadataLoader.Metadata metadata = loadMetadata(headRevContentAndMetadata); + importContentAndMetadata(nodeRef, headRevContentAndMetadata, metadata); + versionService.createVersion(nodeRef, versionProperties); } - importContentAndMetadata(nodeRef, importableItem.getHeadRevision(), metadata); - versionService.createVersion(nodeRef, versionProperties); return(result); } diff --git a/source/test-java/org/alfresco/repo/bulkimport/impl/BulkImportTest.java b/source/test-java/org/alfresco/repo/bulkimport/impl/BulkImportTest.java index bb4e49239e..9c7e2eccfb 100644 --- a/source/test-java/org/alfresco/repo/bulkimport/impl/BulkImportTest.java +++ b/source/test-java/org/alfresco/repo/bulkimport/impl/BulkImportTest.java @@ -462,9 +462,9 @@ public class BulkImportTest extends AbstractBulkImportTests assertNotNull(history); - assertEquals("Imported file should have 5 versions:", 5, history.getAllVersions().size()); + assertEquals("Imported file should have 9 versions:", 9, history.getAllVersions().size()); - Version[] versions = history.getAllVersions().toArray(new Version[5]); + Version[] versions = history.getAllVersions().toArray(new Version[9]); //compare the content of each version ContentReader contentReader; @@ -488,6 +488,23 @@ public class BulkImportTest extends AbstractBulkImportTests assertNotNull(contentReader); assertEquals("This is version 1 of replaced on import fileWithVersions.txt.", contentReader.getContentString()); + // versions from bulkimport3/initial + contentReader = this.contentService.getReader(versions[5].getFrozenStateNodeRef(), ContentModel.PROP_CONTENT); + assertNotNull(contentReader); + assertEquals("This is the final version of fileWithVersions.txt.", contentReader.getContentString()); + + contentReader = this.contentService.getReader(versions[6].getFrozenStateNodeRef(), ContentModel.PROP_CONTENT); + assertNotNull(contentReader); + assertEquals("This is version 3 of fileWithVersions.txt.", contentReader.getContentString()); + + contentReader = this.contentService.getReader(versions[7].getFrozenStateNodeRef(), ContentModel.PROP_CONTENT); + assertNotNull(contentReader); + assertEquals("This is version 2 of fileWithVersions.txt.", contentReader.getContentString()); + + contentReader = this.contentService.getReader(versions[8].getFrozenStateNodeRef(), ContentModel.PROP_CONTENT); + assertNotNull(contentReader); + assertEquals("This is version 1 of fileWithVersions.txt.", contentReader.getContentString()); + txn.commit(); txn = transactionService.getUserTransaction(); txn.begin();