From 5f53db226d68278f534aeaa96a9cccc6ed3bb58b Mon Sep 17 00:00:00 2001 From: Alan Davis Date: Tue, 11 Feb 2014 18:49:38 +0000 Subject: [PATCH] Merged HEAD-BUG-FIX (4.3/Cloud) to HEAD (4.3/Cloud) 57038: Merged V4.2-BUG-FIX (4.2.1) to HEAD-BUG-FIX (Cloud/4.3) 56505: Merged HEAD-BUG-FIX to V4.2-BUG-FIX (4.2.1) 55928: <> Merged V4.1-BUG-FIX (4.1.7) to HEAD-BUG-FIX (4.2) 55811: Merged DEV to V4.1-BUG-FIX (4.1.7) 55751: MNT-9076: Penultimate version cannot be accessed from Share when uploading using bulkimport The changes related to creating a version for HEAD revision of imported file. Added unit test. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@61672 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../bulkimport/impl/AbstractNodeImporter.java | 30 +++++---- .../impl/AbstractBulkImportTests.java | 3 + .../repo/bulkimport/impl/BulkImportTest.java | 67 +++++++++++++++++++ .../bulkimport2/fileWithVersions.txt | 1 + .../bulkimport2/fileWithVersions.txt.v1 | 1 + .../bulkimport2/fileWithVersions.txt.v2 | 1 + .../bulkimport2/fileWithVersions.txt.v3 | 1 + 7 files changed, 91 insertions(+), 13 deletions(-) create mode 100644 source/test-resources/bulkimport2/fileWithVersions.txt create mode 100644 source/test-resources/bulkimport2/fileWithVersions.txt.v1 create mode 100644 source/test-resources/bulkimport2/fileWithVersions.txt.v2 create mode 100644 source/test-resources/bulkimport2/fileWithVersions.txt.v3 diff --git a/source/java/org/alfresco/repo/bulkimport/impl/AbstractNodeImporter.java b/source/java/org/alfresco/repo/bulkimport/impl/AbstractNodeImporter.java index 6ef072ee7f..9f26339719 100644 --- a/source/java/org/alfresco/repo/bulkimport/impl/AbstractNodeImporter.java +++ b/source/java/org/alfresco/repo/bulkimport/impl/AbstractNodeImporter.java @@ -188,10 +188,10 @@ public abstract class AbstractNodeImporter implements NodeImporter result = importContentVersions(nodeRef, importableItem); } - - if (logger.isDebugEnabled()) logger.debug("Creating head revision of node " + nodeRef.toString()); - - importContentAndMetadata(nodeRef, importableItem.getHeadRevision(), metadata); + else + { + importContentAndMetadata(nodeRef, importableItem.getHeadRevision(), metadata); + } return(result); } @@ -199,26 +199,30 @@ public abstract class AbstractNodeImporter implements NodeImporter protected final int importContentVersions(NodeRef nodeRef, ImportableItem importableItem) { int result = 0; + Map versionProperties = new HashMap(); + // Note: PROP_VERSION_LABEL is a "reserved" property, and cannot be modified by custom code. + // In other words, we can't use the version label on disk as the version label in Alfresco. :-( + // See: http://code.google.com/p/alfresco-bulk-filesystem-import/issues/detail?id=85 + //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 for (final ImportableItem.VersionedContentAndMetadata versionEntry : importableItem.getVersionEntries()) { - Map versionProperties = new HashMap(); - MetadataLoader.Metadata metadata = loadMetadata(versionEntry); - + MetadataLoader.Metadata metadata = loadMetadata(versionEntry); importContentAndMetadata(nodeRef, versionEntry, metadata); if (logger.isDebugEnabled()) logger.debug("Creating v" + String.valueOf(versionEntry.getVersion()) + " of node '" + nodeRef.toString() + "' (note: version label in Alfresco will not be the same - it is not currently possible to explicitly force a particular version label)."); - // Note: PROP_VERSION_LABEL is a "reserved" property, and cannot be modified by custom code. - // In other words, we can't use the version label on disk as the version label in Alfresco. :-( - // See: http://code.google.com/p/alfresco-bulk-filesystem-import/issues/detail?id=85 - //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 versionService.createVersion(nodeRef, versionProperties); - 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); + importContentAndMetadata(nodeRef, importableItem.getHeadRevision(), metadata); + versionService.createVersion(nodeRef, versionProperties); + return(result); } diff --git a/source/test-java/org/alfresco/repo/bulkimport/impl/AbstractBulkImportTests.java b/source/test-java/org/alfresco/repo/bulkimport/impl/AbstractBulkImportTests.java index 410ec724bd..bd2deaec8e 100644 --- a/source/test-java/org/alfresco/repo/bulkimport/impl/AbstractBulkImportTests.java +++ b/source/test-java/org/alfresco/repo/bulkimport/impl/AbstractBulkImportTests.java @@ -52,6 +52,7 @@ import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.rule.RuleService; +import org.alfresco.service.cmr.version.VersionService; import org.alfresco.service.namespace.QName; import org.alfresco.service.transaction.TransactionService; import org.alfresco.util.ApplicationContextHelper; @@ -74,6 +75,7 @@ public class AbstractBulkImportTests protected UserTransaction txn = null; protected RuleService ruleService; protected ActionService actionService; + protected VersionService versionService; protected MultiThreadedBulkFilesystemImporter bulkImporter; protected NodeRef rootNodeRef; @@ -107,6 +109,7 @@ public class AbstractBulkImportTests contentService = (ContentService)ctx.getBean("contentService"); actionService = (ActionService)ctx.getBean("actionService"); ruleService = (RuleService)ctx.getBean("ruleService"); + versionService = (VersionService)ctx.getBean("versionService"); AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); 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 0a16e05b80..3f0eb3172d 100644 --- a/source/test-java/org/alfresco/repo/bulkimport/impl/BulkImportTest.java +++ b/source/test-java/org/alfresco/repo/bulkimport/impl/BulkImportTest.java @@ -25,6 +25,8 @@ package org.alfresco.repo.bulkimport.impl; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.Serializable; @@ -45,9 +47,12 @@ import org.alfresco.repo.content.MimetypeMap; import org.alfresco.service.cmr.action.Action; import org.alfresco.service.cmr.action.ActionCondition; import org.alfresco.service.cmr.model.FileInfo; +import org.alfresco.service.cmr.repository.ContentReader; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.rule.Rule; import org.alfresco.service.cmr.rule.RuleType; +import org.alfresco.service.cmr.version.Version; +import org.alfresco.service.cmr.version.VersionHistory; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; @@ -308,4 +313,66 @@ public class BulkImportTest extends AbstractBulkImportTests }); } + /** + * MNT-9076: Penultimate version cannot be accessed from Share when uploading using bulkimport + * + * @throws Throwable + */ + @Test + public void testMNT9076() throws Throwable + { + txn = transactionService.getUserTransaction(); + txn.begin(); + + NodeRef folderNode = topLevelFolder.getNodeRef(); + + try + { + NodeImporter nodeImporter = streamingNodeImporterFactory.getNodeImporter(ResourceUtils.getFile("classpath:bulkimport2")); + BulkImportParameters bulkImportParameters = new BulkImportParameters(); + bulkImportParameters.setTarget(folderNode); + bulkImportParameters.setReplaceExisting(true); + bulkImportParameters.setDisableRulesService(true); + bulkImportParameters.setBatchSize(40); + bulkImporter.bulkImport(bulkImportParameters, nodeImporter); + } + catch(Throwable e) + { + fail(e.getMessage()); + } + + System.out.println(bulkImporter.getStatus()); + assertEquals(false, bulkImporter.getStatus().inProgress()); + + List files = getFiles(folderNode, null); + assertEquals("One file is expected to be imported:", 1, files.size()); + FileInfo file = files.get(0); + assertEquals("File name is not equal:", "fileWithVersions.txt", file.getName()); + + NodeRef file0NodeRef = file.getNodeRef(); + assertTrue("Imported file should be versioned:", versionService.isVersioned(file0NodeRef)); + + VersionHistory history = versionService.getVersionHistory(file0NodeRef); + assertEquals("Imported file should have 4 versions:", 4, history.getAllVersions().size()); + Version[] versions = history.getAllVersions().toArray(new Version[4]); + + //compare the content of each version + ContentReader contentReader; + contentReader = this.contentService.getReader(versions[0].getFrozenStateNodeRef(), ContentModel.PROP_CONTENT); + assertNotNull(contentReader); + assertEquals("This is the final version of fileWithVersions.txt.", contentReader.getContentString()); + + contentReader = this.contentService.getReader(versions[1].getFrozenStateNodeRef(), ContentModel.PROP_CONTENT); + assertNotNull(contentReader); + assertEquals("This is version 3 of fileWithVersions.txt.", contentReader.getContentString()); + + contentReader = this.contentService.getReader(versions[2].getFrozenStateNodeRef(), ContentModel.PROP_CONTENT); + assertNotNull(contentReader); + assertEquals("This is version 2 of fileWithVersions.txt.", contentReader.getContentString()); + + contentReader = this.contentService.getReader(versions[3].getFrozenStateNodeRef(), ContentModel.PROP_CONTENT); + assertNotNull(contentReader); + assertEquals("This is version 1 of fileWithVersions.txt.", contentReader.getContentString()); + } + } diff --git a/source/test-resources/bulkimport2/fileWithVersions.txt b/source/test-resources/bulkimport2/fileWithVersions.txt new file mode 100644 index 0000000000..26409c0858 --- /dev/null +++ b/source/test-resources/bulkimport2/fileWithVersions.txt @@ -0,0 +1 @@ +This is the final version of fileWithVersions.txt. \ No newline at end of file diff --git a/source/test-resources/bulkimport2/fileWithVersions.txt.v1 b/source/test-resources/bulkimport2/fileWithVersions.txt.v1 new file mode 100644 index 0000000000..443c2590e9 --- /dev/null +++ b/source/test-resources/bulkimport2/fileWithVersions.txt.v1 @@ -0,0 +1 @@ +This is version 1 of fileWithVersions.txt. \ No newline at end of file diff --git a/source/test-resources/bulkimport2/fileWithVersions.txt.v2 b/source/test-resources/bulkimport2/fileWithVersions.txt.v2 new file mode 100644 index 0000000000..6f7c5ea9a8 --- /dev/null +++ b/source/test-resources/bulkimport2/fileWithVersions.txt.v2 @@ -0,0 +1 @@ +This is version 2 of fileWithVersions.txt. \ No newline at end of file diff --git a/source/test-resources/bulkimport2/fileWithVersions.txt.v3 b/source/test-resources/bulkimport2/fileWithVersions.txt.v3 new file mode 100644 index 0000000000..9e50bb55a4 --- /dev/null +++ b/source/test-resources/bulkimport2/fileWithVersions.txt.v3 @@ -0,0 +1 @@ +This is version 3 of fileWithVersions.txt. \ No newline at end of file