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

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


The following commit(s) were added to refs/heads/master by this push:
     new ad14cfd  SLING-9926: allow nested folders for config folders (#37)
ad14cfd is described below

commit ad14cfd1be5f18f3f01d2eb54ec4f5e7c1ca3719
Author: Karl Pauls <[email protected]>
AuthorDate: Mon Dec 7 09:20:34 2020 +0100

    SLING-9926: allow nested folders for config folders (#37)
---
 .../AbstractConfigurationEntryHandler.java         |  6 ++++-
 .../handlers/ConfigEntryHandlerTest.java           | 29 ++++++++++++++++++++
 .../handlers/ConfigurationEntryHandlerTest.java    | 31 +++++++++++-----------
 3 files changed, 49 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..400b4fe 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,7 @@ 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.Mockito;
 
 public class ConfigEntryHandlerTest {
 
@@ -90,4 +94,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..ae5c08a 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
@@ -134,24 +134,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() {

Reply via email to