diff --git a/CHANGELOG.md b/CHANGELOG.md index c999af0798..738cbfce38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com) - #2316 - @ChildResourceFromRequest uses incomplete request wrapper - #2383 - [trivial] fix exception message in MarketoFieldDataSource - #2384 - Fix resource service manager NPEs when service content nodes are missing +- #2386 - Make folder titles overwrite optional for asset ingestor ### Added diff --git a/bundle/src/main/java/com/adobe/acs/commons/mcp/impl/processes/asset/AssetIngestor.java b/bundle/src/main/java/com/adobe/acs/commons/mcp/impl/processes/asset/AssetIngestor.java index f998bdac22..294a28b3f6 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/mcp/impl/processes/asset/AssetIngestor.java +++ b/bundle/src/main/java/com/adobe/acs/commons/mcp/impl/processes/asset/AssetIngestor.java @@ -123,6 +123,13 @@ public AssetIngestor(MimeTypeService mimeTypeService) { options = "checked" ) boolean preserveFileName = true; + @FormField( + name = "Preserve Folder Titles", + description = "If checked, existing folder titles will not be changed.", + component = CheckboxComponent.class, + options = "checked" + ) + boolean preserveFolderTitles = true; @FormField( name = "Target JCR Folder", @@ -388,12 +395,12 @@ protected boolean createFolderNode(HierarchicalElement el, ResourceResolver r) t && folderContentNode.hasProperty(JcrConstants.JCR_TITLE) && folderContentNode.getProperty(JcrConstants.JCR_TITLE).getString().equals(name))) { return false; - } else { + } else if (!preserveFolderTitles) { setFolderTitle(folderNode, name); r.commit(); r.refresh(); - return true; } + return true; } else { HierarchicalElement parent = el.getParent(); String parentPath; diff --git a/bundle/src/test/java/com/adobe/acs/commons/mcp/impl/processes/asset/UrlAssetImportTest.java b/bundle/src/test/java/com/adobe/acs/commons/mcp/impl/processes/asset/UrlAssetImportTest.java index 4be2325098..ae83c5fd28 100644 --- a/bundle/src/test/java/com/adobe/acs/commons/mcp/impl/processes/asset/UrlAssetImportTest.java +++ b/bundle/src/test/java/com/adobe/acs/commons/mcp/impl/processes/asset/UrlAssetImportTest.java @@ -140,6 +140,38 @@ public void testImportFile() throws IOException, RepositoryException { assertEquals(1, importProcess.getCount(importProcess.createdFolders)); } + @Test + public void testFolderTitlePreserve() throws IOException, RepositoryException { + context.load().json("/com/adobe/acs/commons/mcp/impl/processes/asset-ingestor.json", "/content/dam/testfolder"); + importProcess.init(); + importProcess.preserveFolderTitles = true; + URL testImg = getClass().getResource("/img/test.png"); + addImportRow(testImg.toString(), "/content/dam/testfolder/test"); + addImportRow(testImg.toString(), "/content/dam/testfolder/test", "rendition", "test.png"); + importProcess.files = importProcess.extractFilesAndFolders(importProcess.fileData.getDataRowsAsCompositeVariants()); + importProcess.createFolders(actionManager); + assertEquals(1, importProcess.getCount(importProcess.createdFolders)); + context.currentResource("/content/dam/testfolder/jcr:content"); + ValueMap vm = context.currentResource().getValueMap(); + assertEquals("Test Folder", vm.get("jcr:title")); + } + + @Test + public void testFolderNoTitlePreserve() throws IOException, RepositoryException { + context.load().json("/com/adobe/acs/commons/mcp/impl/processes/asset-ingestor.json", "/content/dam/testfolder"); + importProcess.init(); + importProcess.preserveFolderTitles = false; + URL testImg = getClass().getResource("/img/test.png"); + addImportRow(testImg.toString(), "/content/dam/testfolder/test"); + addImportRow(testImg.toString(), "/content/dam/testfolder/test", "rendition", "test.png"); + importProcess.files = importProcess.extractFilesAndFolders(importProcess.fileData.getDataRowsAsCompositeVariants()); + importProcess.createFolders(actionManager); + assertEquals(1, importProcess.getCount(importProcess.createdFolders)); + context.currentResource("/content/dam/testfolder/jcr:content"); + ValueMap vm = context.currentResource().getValueMap(); + assertEquals("testfolder", vm.get("jcr:title")); + } + @Test public void testImportFile404() throws IOException, RepositoryException { importProcess.init(); diff --git a/bundle/src/test/resources/com/adobe/acs/commons/mcp/impl/processes/asset-ingestor.json b/bundle/src/test/resources/com/adobe/acs/commons/mcp/impl/processes/asset-ingestor.json new file mode 100644 index 0000000000..d78dcf47d8 --- /dev/null +++ b/bundle/src/test/resources/com/adobe/acs/commons/mcp/impl/processes/asset-ingestor.json @@ -0,0 +1,10 @@ +{ + "jcr:primaryType": "sling:Folder", + "jcr:createdBy": "admin", + "jcr:created": "Wed Aug 05 2020 14:22:27 GMT+0100", + "jcr:content": { + "jcr:primaryType": "nt:unstructured", + "jcr:title": "Test Folder", + "sourcing": "false" + } +} \ No newline at end of file