You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by pa...@apache.org on 2020/11/30 14:42:50 UTC

[sling-org-apache-sling-feature-cpconverter] 01/01: SLING-9926: allow nested folders for config folders

This is an automated email from the ASF dual-hosted git repository.

pauls pushed a commit to branch issues/SLING-9926
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-cpconverter.git

commit 39174a367617ac65abbe1051152a0216b02e8f78
Author: Karl Pauls <ka...@gmail.com>
AuthorDate: Mon Nov 30 15:42:31 2020 +0100

    SLING-9926: allow nested folders for config folders
---
 .../AbstractConfigurationEntryHandler.java         |  6 +++-
 .../handlers/ConfigEntryHandlerTest.java           | 30 +++++++++++++++++++
 .../handlers/ConfigurationEntryHandlerTest.java    | 35 ++++++++++++----------
 3 files changed, 54 insertions(+), 17 deletions(-)

diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractConfigurationEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractConfigurationEntryHandler.java
index 1b71d29..571ca89 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractConfigurationEntryHandler.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractConfigurationEntryHandler.java
@@ -45,7 +45,11 @@ abstract class AbstractConfigurationEntryHandler extends AbstractRegexEntryHandl
         if (matcher.matches()) {
             
             String pid = matcher.group("pid");
-    
+
+            int idx = pid.lastIndexOf('/');
+            if (idx != -1) {
+                pid = pid.substring(idx + 1);
+            }
             String factoryPid = null;
             String id;
             int n = pid.indexOf('~');
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigEntryHandlerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigEntryHandlerTest.java
index 580df66..0bfe2a9 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigEntryHandlerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigEntryHandlerTest.java
@@ -28,9 +28,12 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
 import java.io.StringReader;
 import java.io.StringWriter;
 import java.util.Dictionary;
+import java.util.Hashtable;
 
 import org.apache.jackrabbit.vault.fs.io.Archive;
 import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
@@ -43,6 +46,8 @@ import org.apache.sling.feature.cpconverter.features.FeaturesManager;
 import org.apache.sling.feature.io.json.FeatureJSONReader;
 import org.apache.sling.feature.io.json.FeatureJSONWriter;
 import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.Mockito;
 
 public class ConfigEntryHandlerTest {
 
@@ -90,4 +95,29 @@ public class ConfigEntryHandlerTest {
         assertTrue((boolean) configurationProperties.get("user.disableMissing"));
     }
 
+
+
+    @Test
+    public void testConfigPathWithFolders() throws Exception {
+        Archive archive = mock(Archive.class);
+        Entry entry = mock(Entry.class);
+        FeaturesManager manager = mock(FeaturesManager.class);
+        ContentPackage2FeatureModelConverter converter = mock(ContentPackage2FeatureModelConverter.class);
+        when(converter.getFeaturesManager()).thenReturn(manager);
+
+        when(entry.getName()).thenReturn("/jcr_root/apps/foo/bar/config/baz/blub.cfg");
+        when(archive.openInputStream(entry)).thenReturn(new ByteArrayInputStream("{}".getBytes()));
+
+        AbstractConfigurationEntryHandler handler = new AbstractConfigurationEntryHandler("cfg") {
+            @Override
+            protected Dictionary<String, Object> parseConfiguration(String name, InputStream input) throws Exception {
+                return new Hashtable(){{put("foo", "bar");}};
+            }
+        };
+        handler.handle("/jcr_root/apps/foo/bar/config/baz/blub.cfg", archive, entry, converter);
+
+        Mockito.verify(manager).addConfiguration(null, "blub", new Hashtable(){{put("foo","bar");}});
+        Mockito.verify(manager).addConfiguration(Mockito.any(), Mockito.anyString(), Mockito.any());
+    }
+
 }
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigurationEntryHandlerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigurationEntryHandlerTest.java
index 38d95b9..4f5fcce 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigurationEntryHandlerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigurationEntryHandlerTest.java
@@ -26,10 +26,14 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
 import java.io.StringWriter;
 import java.io.Writer;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Dictionary;
+import java.util.Hashtable;
 
 import org.apache.jackrabbit.vault.fs.io.Archive;
 import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
@@ -134,24 +138,23 @@ public class ConfigurationEntryHandlerTest {
         }
 
         if (expectedConfigurationsSize != 0) {
-        Configuration configuration = configurations.get(0);
-
-        assertTrue(configuration.getPid(), configuration.getPid().startsWith(EXPECTED_PID));
-
-        if (configuration.getPid().contains(".empty")) {
-            assertTrue(configuration.getProperties().isEmpty());
-        } else {
-            assertEquals("Unmatching size: " + configuration.getProperties().size(), expectedConfigurationsEntrySize, configuration.getProperties().size());
-        }
-        // type & value check for typed configuration
-        if (this.resourceConfiguration.equals(TYPED_TESTCONFIG_PATH)) {
-            Writer writer = new StringWriter();
-            ConfigurationJSONWriter.write(writer, configurations);
-            assertEquals(EXPECTED_TYPED_CONFIG, writer.toString());
+            Configuration configuration = configurations.get(0);
+
+            assertTrue(configuration.getPid(), configuration.getPid().startsWith(EXPECTED_PID));
+
+            if (configuration.getPid().contains(".empty")) {
+                assertTrue(configuration.getProperties().isEmpty());
+            } else {
+                assertEquals("Unmatching size: " + configuration.getProperties().size(), expectedConfigurationsEntrySize, configuration.getProperties().size());
+            }
+            // type & value check for typed configuration
+            if (this.resourceConfiguration.equals(TYPED_TESTCONFIG_PATH)) {
+                Writer writer = new StringWriter();
+                ConfigurationJSONWriter.write(writer, configurations);
+                assertEquals(EXPECTED_TYPED_CONFIG, writer.toString());
+            }
         }
-
     }
-}
 
     @Parameters
     public static Collection<Object[]> data() {