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();