SLING-8973 - fixing runmode handling for repoinit configuration handling
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/acl/DefaultAclManager.java b/src/main/java/org/apache/sling/feature/cpconverter/acl/DefaultAclManager.java
index 3ba81a5..cb6e8e9 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/acl/DefaultAclManager.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/acl/DefaultAclManager.java
@@ -134,7 +134,7 @@
             String text = formatter.toString();
 
             if (!text.isEmpty()) {
-                featureManager.addOrAppendRepoInitExtension(text);
+                featureManager.addOrAppendRepoInitExtension(text, null);
             }
         } finally {
             if (formatter != null) {
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java b/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java
index 1841244..ecf3b15 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java
@@ -35,6 +35,7 @@
 import org.apache.sling.feature.Artifacts;
 import org.apache.sling.feature.Configuration;
 import org.apache.sling.feature.Extension;
+import org.apache.sling.feature.ExtensionState;
 import org.apache.sling.feature.ExtensionType;
 import org.apache.sling.feature.Extensions;
 import org.apache.sling.feature.Feature;
@@ -278,15 +279,16 @@
         targetAPIRegions.addAll(regions);
         return this;
     }
-
+    
     @Override
-    public void addOrAppendRepoInitExtension(String text) {
+    public void addOrAppendRepoInitExtension(String text, String runMode) {
         
-        Extension repoInitExtension = getTargetFeature().getExtensions().getByName(Extension.EXTENSION_NAME_REPOINIT);
+        logger.info("Adding/Appending RepoInitExtension for runMode: {}", runMode );
+        Extension repoInitExtension = getRunMode(runMode).getExtensions().getByName(Extension.EXTENSION_NAME_REPOINIT);
         
         if (repoInitExtension == null) {
-            repoInitExtension = new Extension(ExtensionType.TEXT, Extension.EXTENSION_NAME_REPOINIT, true);
-            getTargetFeature().getExtensions().add(repoInitExtension);
+            repoInitExtension = new Extension(ExtensionType.TEXT, Extension.EXTENSION_NAME_REPOINIT, ExtensionState.REQUIRED);
+            getRunMode(runMode).getExtensions().add(repoInitExtension);
             repoInitExtension.setText(text);
         } else {
             repoInitExtension.setText(repoInitExtension.getText() + "\n " + text);
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/features/FeaturesManager.java b/src/main/java/org/apache/sling/feature/cpconverter/features/FeaturesManager.java
index be1b5ff..b247ca2 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/features/FeaturesManager.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/features/FeaturesManager.java
@@ -37,6 +37,6 @@
 
     void serialize() throws Exception;
 
-    void addOrAppendRepoInitExtension(String text);
+    void addOrAppendRepoInitExtension(String text, String runMode);
 
 }
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 0c3dfda..59413cd 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
@@ -80,7 +80,7 @@
             String[] scripts = (String[]) configurationProperties.get("scripts");
             if (scripts != null) {
                 String text = String.join("\n", scripts);
-                converter.getFeaturesManager().addOrAppendRepoInitExtension(text);
+                converter.getFeaturesManager().addOrAppendRepoInitExtension(text, runMode);
             } else {
                 // any repoinit configuration with empty scripts may be igored - filereferences are not supported at that point
             }
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 d9a2215..f71cc2d 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
@@ -65,13 +65,16 @@
     private final int expectedConfigurationsSize;
 
     private final AbstractConfigurationEntryHandler configurationEntryHandler;
+    private final String expectedRunMode;
 
     public ConfigurationEntryHandlerTest(String resourceConfiguration,
                                          int expectedConfigurationsSize,
-                                         AbstractConfigurationEntryHandler configurationEntryHandler) {
+                                         AbstractConfigurationEntryHandler configurationEntryHandler, 
+                                         String expectedRunMode) {
         this.resourceConfiguration = resourceConfiguration;
         this.expectedConfigurationsSize = expectedConfigurationsSize;
         this.configurationEntryHandler = configurationEntryHandler;
+        this.expectedRunMode = expectedRunMode;
     }
 
     @Test
@@ -102,13 +105,12 @@
 
         configurationEntryHandler.handle(resourceConfiguration, archive, entry, converter);
 
-        Configurations configurations = featuresManager.getTargetFeature().getConfigurations();
+        Configurations configurations = featuresManager.getRunMode(expectedRunMode).getConfigurations();
 
         assertEquals(expectedConfigurationsSize, configurations.size());
 
-        
         if (this.resourceConfiguration.equals(REPOINIT_TESTCONFIG_PATH)) {
-            assertEquals(EXPECTED_REPOINIT, featuresManager.getTargetFeature().getExtensions().getByName(Extension.EXTENSION_NAME_REPOINIT).getText());
+            assertEquals(EXPECTED_REPOINIT, featuresManager.getRunMode(expectedRunMode).getExtensions().getByName(Extension.EXTENSION_NAME_REPOINIT).getText());
         }
 
         if (expectedConfigurationsSize != 0) {
@@ -129,25 +131,25 @@
         String path = "/jcr_root/apps/asd/config/";
 
         return Arrays.asList(new Object[][] {
-            { path + EXPECTED_PID + ".empty.cfg", 1, new PropertiesConfigurationEntryHandler() },
-            { path + EXPECTED_PID + ".cfg", 1, new PropertiesConfigurationEntryHandler() },
+            { path + EXPECTED_PID + ".empty.cfg", 1, new PropertiesConfigurationEntryHandler(), null },
+            { path + EXPECTED_PID + ".cfg", 1, new PropertiesConfigurationEntryHandler(), null },
 
-            { path + EXPECTED_PID + ".empty.cfg.json", 1, new JsonConfigurationEntryHandler() },
-            { path + EXPECTED_PID + ".cfg.json", 1, new JsonConfigurationEntryHandler() },
+            { path + EXPECTED_PID + ".empty.cfg.json", 1, new JsonConfigurationEntryHandler(), null },
+            { path + EXPECTED_PID + ".cfg.json", 1, new JsonConfigurationEntryHandler(), null },
 
-            { path + EXPECTED_PID + ".empty.config", 1, new ConfigurationEntryHandler() },
-            { path + EXPECTED_PID + ".config", 1, new ConfigurationEntryHandler() },
+            { path + EXPECTED_PID + ".empty.config", 1, new ConfigurationEntryHandler(), null },
+            { path + EXPECTED_PID + ".config", 1, new ConfigurationEntryHandler(), null },
 
-            { path + EXPECTED_PID + ".empty.xml", 1, new XmlConfigurationEntryHandler() },
-            { path + EXPECTED_PID + ".xml", 1, new XmlConfigurationEntryHandler() },
+            { path + EXPECTED_PID + ".empty.xml", 1, new XmlConfigurationEntryHandler(), null },
+            { path + EXPECTED_PID + ".xml", 1, new XmlConfigurationEntryHandler(), null },
 
-            { path + EXPECTED_PID + ".empty.xml.cfg", 1, new PropertiesConfigurationEntryHandler() },
-            { path + EXPECTED_PID + ".xml.cfg", 1, new PropertiesConfigurationEntryHandler() },
+            { path + EXPECTED_PID + ".empty.xml.cfg", 1, new PropertiesConfigurationEntryHandler(), null },
+            { path + EXPECTED_PID + ".xml.cfg", 1, new PropertiesConfigurationEntryHandler(), null },
 
             // runmode aware folders
-            { "/jcr_root/apps/asd/config.author/" + EXPECTED_PID + ".config", 1, new ConfigurationEntryHandler() },
-            { REPOINIT_TESTCONFIG_PATH, 0, new ConfigurationEntryHandler() },
-            { "/jcr_root/apps/asd/config.publish/" + EXPECTED_PID + ".config", 1, new ConfigurationEntryHandler() },
+            { "/jcr_root/apps/asd/config.author/" + EXPECTED_PID + ".config", 1, new ConfigurationEntryHandler(), "author" },
+            { REPOINIT_TESTCONFIG_PATH, 0, new ConfigurationEntryHandler() , "author"},
+            { "/jcr_root/apps/asd/config.publish/" + EXPECTED_PID + ".config", 1, new ConfigurationEntryHandler(), "publish" }
         });
     }