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);
}