This is an automated email from the ASF dual-hosted git repository.
cziegeler pushed a commit to branch master
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/master by this push:
new c3fcf01 SLING-10568 : Use configuration property origin for validation
c3fcf01 is described below
commit c3fcf015909b9121a3a6991ca07f563ef028e7b4
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Mon Jun 28 17:01:53 2021 +0200
SLING-10568 : Use configuration property origin for validation
---
pom.xml | 2 +-
.../config/validation/ConfigurationValidator.java | 15 +++++++++--
.../api/config/validation/FeatureValidator.java | 30 ++++++++++++++++++----
.../api/config/validation/PropertyValidator.java | 3 +++
.../api/config/validation/package-info.java | 2 +-
5 files changed, 43 insertions(+), 9 deletions(-)
diff --git a/pom.xml b/pom.xml
index e6ad546..e868332 100644
--- a/pom.xml
+++ b/pom.xml
@@ -62,7 +62,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.feature</artifactId>
- <version>1.2.24</version>
+ <version>1.2.25-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
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 ad1c176..867c217 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
@@ -19,9 +19,11 @@ package
org.apache.sling.feature.extension.apiregions.api.config.validation;
import java.util.Arrays;
import java.util.Dictionary;
import java.util.Enumeration;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.sling.feature.ArtifactId;
import org.apache.sling.feature.Configuration;
import
org.apache.sling.feature.extension.apiregions.api.config.ConfigurableEntity;
import
org.apache.sling.feature.extension.apiregions.api.config.ConfigurationDescription;
@@ -48,6 +50,8 @@ public class ConfigurationValidator {
private boolean liveValues = false;
+ private Map<ArtifactId, Region> cache = new HashMap<>();
+
/**
* Are live values validated?
* @return {@code true} if live values are validated
@@ -163,11 +167,14 @@ public class ConfigurationValidator {
while ( keyEnum.hasMoreElements() ) {
final String propName = keyEnum.nextElement();
if ( !desc.getPropertyDescriptions().containsKey(propName) ) {
+ // detect the region
+ final Region propRegion =
FeatureValidator.getRegionInfo(region, configuration, propName, this.cache);
+
final PropertyValidationResult result = new
PropertyValidationResult();
results.put(propName, result);
if ( desc.getInternalPropertyNames().contains(propName ) ) {
- if ( region != Region.INTERNAL ) {
+ if ( propRegion != Region.INTERNAL ) {
PropertyValidator.setResult(result, null, mode,
"Property is not allowed");
}
} else if (
Constants.SERVICE_RANKING.equalsIgnoreCase(propName) ) {
@@ -175,7 +182,7 @@ public class ConfigurationValidator {
if ( !(value instanceof Integer) ) {
PropertyValidator.setResult(result, 0, mode,
"service.ranking must be of type Integer");
}
- } else if ( !isAllowedProperty(propName) && region !=
Region.INTERNAL && !desc.isAllowAdditionalProperties() ) {
+ } else if ( !isAllowedProperty(propName) && propRegion !=
Region.INTERNAL && !desc.isAllowAdditionalProperties() ) {
PropertyValidator.setResult(result, null, mode, "Property
is not allowed");
}
}
@@ -201,4 +208,8 @@ public class ConfigurationValidator {
}
return false;
}
+
+ void setCache(Map<ArtifactId, Region> cache) {
+ this.cache = cache;
+ }
}
\ No newline at end of file
diff --git
a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidator.java
b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidator.java
index dcbb162..dfecf09 100644
---
a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidator.java
+++
b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidator.java
@@ -30,7 +30,6 @@ import
org.apache.sling.feature.extension.apiregions.api.config.ConfigurationApi
import
org.apache.sling.feature.extension.apiregions.api.config.ConfigurationDescription;
import
org.apache.sling.feature.extension.apiregions.api.config.FactoryConfigurationDescription;
import
org.apache.sling.feature.extension.apiregions.api.config.FrameworkPropertyDescription;
-import org.apache.sling.feature.extension.apiregions.api.config.Mode;
import org.apache.sling.feature.extension.apiregions.api.config.Operation;
import org.apache.sling.feature.extension.apiregions.api.config.Region;
@@ -47,6 +46,8 @@ public class FeatureValidator {
private boolean liveValues = false;
+ final Map<ArtifactId, Region> cache = new HashMap<>();
+
/**
* Get the current feature provider
* @return the feature provider or {@code null}
@@ -80,6 +81,7 @@ public class FeatureValidator {
public void setLiveValues(final boolean value) {
this.liveValues = value;
this.configurationValidator.setLiveValues(value);
+ this.configurationValidator.setCache(cache);
this.propertyValidator.setLiveValues(value);
}
@@ -106,8 +108,7 @@ public class FeatureValidator {
if ( api == null ) {
throw new IllegalArgumentException();
}
-
- final Map<ArtifactId, Region> cache = new
HashMap<>(api.getFeatureToRegionCache());
+ cache.putAll(api.getFeatureToRegionCache());
cache.put(feature.getId(), api.detectRegion());
for(final Configuration config : feature.getConfigurations()) {
@@ -235,7 +236,7 @@ public class FeatureValidator {
return changed;
}
- Region getConfigurationApiRegion(final ArtifactId id, final
Map<ArtifactId, Region> cache) {
+ static Region getConfigurationApiRegion(final ArtifactId id, final
Map<ArtifactId, Region> cache) {
Region result = cache.get(id);
if ( result == null ) {
result = Region.GLOBAL;
@@ -277,6 +278,25 @@ public class FeatureValidator {
return result;
}
+ static Region getRegionInfo(final Region cfgRegion, final Configuration
cfg, final String propertyName, final Map<ArtifactId, Region> cache) {
+ final List<ArtifactId> list = cfg.getFeatureOrigins(propertyName);
+ if ( !list.isEmpty() ) {
+ boolean global = false;
+ for(final ArtifactId id : list) {
+ final Region region = getConfigurationApiRegion(id, cache);
+ if ( region == null ) {
+ return null;
+ }
+ if ( region == Region.GLOBAL ) {
+ global = true;
+ break;
+ }
+ }
+ return global ? Region.GLOBAL : Region.INTERNAL;
+ }
+ return cfgRegion;
+ }
+
RegionInfo getRegionInfo(final Feature feature, final String
frameworkProperty, final Map<ArtifactId, Region> cache) {
final List<ArtifactId> list =
feature.getFeatureOrigins(feature.getFrameworkPropertyMetadata(frameworkProperty));
boolean global = false;
@@ -289,7 +309,7 @@ public class FeatureValidator {
global = true;
break;
}
- }
+ }
final RegionInfo result = new RegionInfo();
result.region = global ? Region.GLOBAL : Region.INTERNAL;
result.isUpdate = list.size() > 1;
diff --git
a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/PropertyValidator.java
b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/PropertyValidator.java
index 2e31db9..e881ba2 100644
---
a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/PropertyValidator.java
+++
b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/PropertyValidator.java
@@ -23,13 +23,16 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
+import java.util.Map;
import java.util.regex.Pattern;
+import org.apache.sling.feature.ArtifactId;
import org.apache.sling.feature.extension.apiregions.api.config.Mode;
import org.apache.sling.feature.extension.apiregions.api.config.Option;
import
org.apache.sling.feature.extension.apiregions.api.config.PlaceholderPolicy;
import
org.apache.sling.feature.extension.apiregions.api.config.PropertyDescription;
import org.apache.sling.feature.extension.apiregions.api.config.PropertyType;
+import org.apache.sling.feature.extension.apiregions.api.config.Region;
/**
* Validate a configuration property or framework property
diff --git
a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/package-info.java
b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/package-info.java
index 8e9b68a..4f6c6e4 100644
---
a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/package-info.java
+++
b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/package-info.java
@@ -17,7 +17,7 @@
* under the License.
*/
[email protected]("1.5.0")
[email protected]("1.5.1")
package org.apache.sling.feature.extension.apiregions.api.config.validation;