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

cziegeler pushed a commit to branch internalmode
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-extension-apiregions.git


The following commit(s) were added to refs/heads/internalmode by this push:
     new 58b0a0e  feat: Add internalMode to configuration and property for 
internal factory configurations
58b0a0e is described below

commit 58b0a0ed1e4402631e351442c33eff7c89b9a131
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Tue Oct 21 11:40:48 2025 +0200

    feat: Add internalMode to configuration and property for internal factory 
configurations
---
 .../config/FactoryConfigurationDescription.java    | 28 ++++++++++++++++++++
 .../apiregions/api/config/InternalConstants.java   |  2 ++
 .../apiregions/api/config/PropertyDescription.java | 30 ++++++++++++++++++++++
 .../config/validation/ConfigurationValidator.java  | 20 +++++++++++++--
 4 files changed, 78 insertions(+), 2 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescription.java
 
b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescription.java
index b5480c4..4072953 100644
--- 
a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescription.java
+++ 
b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescription.java
@@ -41,6 +41,8 @@ public class FactoryConfigurationDescription extends 
ConfigurableEntity {
 
     private final List<String> internalNames = new ArrayList<>();
 
+    private Mode internalMode;
+
     public FactoryConfigurationDescription() {
         this.setDefaults();
     }
@@ -58,6 +60,7 @@ public class FactoryConfigurationDescription extends 
ConfigurableEntity {
     public void clear() {
         super.clear();
         this.internalNames.clear();
+        this.internalMode = null;
     }
 
     /**
@@ -91,6 +94,11 @@ public class FactoryConfigurationDescription extends 
ConfigurableEntity {
                 }
             }
 
+            final String internalModeVal = 
this.getString(InternalConstants.KEY_INTERNAL_MODE);
+            if (internalModeVal != null) {
+                
this.setInternalMode(Mode.valueOf(internalModeVal.toUpperCase()));
+            }
+
         } catch (final JsonException | IllegalArgumentException e) {
             throw new IOException(e);
         }
@@ -112,6 +120,22 @@ public class FactoryConfigurationDescription extends 
ConfigurableEntity {
         return internalNames;
     }
 
+    /**
+     * Get the internal mode
+     * @return The internal mode
+     */
+    public Mode getInternalMode() {
+        return internalMode;
+    }
+
+    /**
+     * Set the internal mode
+     * @param internalMode The internal mode
+     */
+    public void setInternalMode(final Mode internalMode) {
+        this.internalMode = internalMode;
+    }
+
     /**
      * Convert this object into JSON
      *
@@ -136,6 +160,10 @@ public class FactoryConfigurationDescription extends 
ConfigurableEntity {
             }
             objBuilder.add(InternalConstants.KEY_INTERNAL_NAMES, arrayBuilder);
         }
+        if (this.getInternalMode() != null) {
+            objBuilder.add(
+                    InternalConstants.KEY_INTERNAL_MODE, 
this.getInternalMode().name());
+        }
         return objBuilder;
     }
 }
diff --git 
a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/InternalConstants.java
 
b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/InternalConstants.java
index 6f62bf4..4b03bf0 100644
--- 
a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/InternalConstants.java
+++ 
b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/InternalConstants.java
@@ -94,4 +94,6 @@ abstract class InternalConstants {
     static final String KEY_ALLOW_ADDITIONAL_PROPERTIES = 
"allow-additional-properties";
 
     static final String KEY_INTERNAL_PROPERTIES = "internal-property-names";
+
+    static final String KEY_INTERNAL_MODE = "internal-mode";
 }
diff --git 
a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescription.java
 
b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescription.java
index 496f7bc..6b9287c 100644
--- 
a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescription.java
+++ 
b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescription.java
@@ -76,6 +76,11 @@ public class PropertyDescription extends DescribableEntity {
      */
     private Mode mode;
 
+    /**
+     * The internal mode.
+     */
+    private Mode internalMode;
+
     /**
      * The placeholder policy
      * @since 1.3
@@ -117,6 +122,7 @@ public class PropertyDescription extends DescribableEntity {
         this.setRegex(null);
         this.setDefaultValue(null);
         this.setMode(null);
+        this.setInternalMode(null);
     }
 
     /**
@@ -178,6 +184,10 @@ public class PropertyDescription extends DescribableEntity 
{
             if (modeVal != null) {
                 this.setMode(Mode.valueOf(modeVal.toUpperCase()));
             }
+            final String internalModeVal = 
this.getString(InternalConstants.KEY_INTERNAL_MODE);
+            if (internalModeVal != null) {
+                
this.setInternalMode(Mode.valueOf(internalModeVal.toUpperCase()));
+            }
             final String policyVal = 
this.getString(InternalConstants.KEY_PLACEHOLDER_POLICY);
             if (policyVal != null) {
                 
this.setPlaceholderPolicy(PlaceholderPolicy.valueOf(policyVal.toUpperCase()));
@@ -241,6 +251,10 @@ public class PropertyDescription extends DescribableEntity 
{
         if (this.getMode() != null) {
             objectBuilder.add(InternalConstants.KEY_MODE, 
this.getMode().name());
         }
+        if (this.getInternalMode() != null) {
+            objectBuilder.add(
+                    InternalConstants.KEY_INTERNAL_MODE, 
this.getInternalMode().name());
+        }
         if (this.getPlaceholderPolicy() != PlaceholderPolicy.DEFAULT) {
             objectBuilder.add(
                     InternalConstants.KEY_PLACEHOLDER_POLICY,
@@ -452,6 +466,22 @@ public class PropertyDescription extends DescribableEntity 
{
         this.mode = value;
     }
 
+    /**
+     * Get the internal mode.
+     * @return The internal mode or {@code null}
+     */
+    public Mode getInternalMode() {
+        return this.internalMode;
+    }
+
+    /**
+     * Set the internal mode
+     * @param value The internal mode
+     */
+    public void setInternalMode(final Mode value) {
+        this.internalMode = value;
+    }
+
     /**
      * Get the placeholder policy.
      * @return The policy
diff --git 
a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/ConfigurationValidator.java
 
b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/ConfigurationValidator.java
index b653ed6..cae1b66 100644
--- 
a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/ConfigurationValidator.java
+++ 
b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/ConfigurationValidator.java
@@ -117,7 +117,15 @@ public class ConfigurationValidator {
                         setResult(result, validationMode, desc, "Factory 
configuration is not allowed");
                         markGlobalProperties(config, result, region);
                     } else {
-                        validateProperties(config, desc, 
result.getPropertyResults(), region, validationMode);
+                        // check for internal mode
+                        final FactoryConfigurationDescription fcd = 
(FactoryConfigurationDescription) desc;
+                        if (fcd.getInternalMode() != null
+                                && 
fcd.getInternalNames().contains(config.getName())) {
+                            validateProperties(
+                                    config, desc, result.getPropertyResults(), 
region, fcd.getInternalMode());
+                        } else {
+                            validateProperties(config, desc, 
result.getPropertyResults(), region, validationMode);
+                        }
                     }
                 }
             }
@@ -185,13 +193,21 @@ public class ConfigurationValidator {
             final Map<String, PropertyValidationResult> results,
             final Region region,
             final Mode mode) {
+        final boolean isInternalFactoryConfig = (desc instanceof 
FactoryConfigurationDescription)
+                && ((FactoryConfigurationDescription) 
desc).getInternalNames().contains(configuration.getName());
         final Dictionary<String, Object> properties = 
configuration.getConfigurationProperties();
 
         // validate the described properties
         for (final Map.Entry<String, PropertyDescription> propEntry :
                 desc.getPropertyDescriptions().entrySet()) {
             final Object value = properties.get(propEntry.getKey());
-            final PropertyValidationResult result = 
propertyValidator.validate(value, propEntry.getValue(), mode);
+            final Mode propMode;
+            if (isInternalFactoryConfig && 
propEntry.getValue().getInternalMode() != null) {
+                propMode = propEntry.getValue().getInternalMode();
+            } else {
+                propMode = mode;
+            }
+            final PropertyValidationResult result = 
propertyValidator.validate(value, propEntry.getValue(), propMode);
             results.put(propEntry.getKey(), result);
         }
 

Reply via email to