SLING-11314 : Enhance API with methods to simply check if a configuration is private
diff --git a/pom.xml b/pom.xml
index d136e35..388ea3b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -19,7 +19,7 @@
<artifactId>org.apache.sling.feature.extension.apiregions</artifactId>
<version>1.5.1-SNAPSHOT</version>
- <name>Sling Featuremodel - API Regions Exension</name>
+ <name>Apache Sling Feature Model - API Regions Extension</name>
<scm>
<connection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-extension-apiregions.git</connection>
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApi.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApi.java
index efd3807..dccf6b4 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApi.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApi.java
@@ -292,7 +292,45 @@
return internalFactories;
}
- /**
+ /**
+ * Check if the configuration is an internal configuration
+ * @param pid The pid
+ * @return {@code true} if it is an internal configuration
+ * @since 1.7.0
+ */
+ public boolean isInternalConfiguration(final String pid) {
+ boolean result = this.internalConfigurations.contains(pid);
+ if ( !result ) {
+ final ConfigurationDescription desc = this.configurations.get(pid);
+ if ( desc != null ) {
+ result = desc.getPropertyDescriptions().isEmpty();
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Check if the factory configuration is an internal configuration
+ * @param factoryPid The factory pid
+ * @param name Optional name of the configuration
+ * @return {@code true} if it is an internal factory configuration
+ * @since 1.7.0
+ */
+ public boolean isInternalFactoryConfiguration(final String factoryPid, final String name) {
+ boolean result = this.internalFactories.contains(factoryPid);
+ if ( !result ) {
+ final FactoryConfigurationDescription desc = this.factories.get(factoryPid);
+ if ( desc != null ) {
+ result = desc.getPropertyDescriptions().isEmpty();
+ if ( !result && name != null ) {
+ result = desc.getInternalNames().contains(name);
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
* Get the internal framework property names
* @return Mutable set of internal framework property names
*/
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/package-info.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/package-info.java
index 0c44f4f..1db8dcc 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/package-info.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/package-info.java
@@ -17,7 +17,7 @@
* under the License.
*/
-@org.osgi.annotation.versioning.Version("1.6.0")
+@org.osgi.annotation.versioning.Version("1.7.0")
package org.apache.sling.feature.extension.apiregions.api.config;
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApiTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApiTest.java
index ff16509..ce21bd3 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApiTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApiTest.java
@@ -17,6 +17,7 @@
package org.apache.sling.feature.extension.apiregions.api.config;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@@ -158,4 +159,79 @@
entity.setRegion(Region.INTERNAL);
assertEquals(Region.INTERNAL, entity.detectRegion());
}
+
+ @Test public void testIsInternalConfiguration() {
+ final String PID = "org.apache.sling.configuration";
+ final ConfigurationApi api = new ConfigurationApi();
+ // ootb nothing is internal
+ assertFalse(api.isInternalConfiguration(PID));
+
+ // adding a normal description with a property does not change this
+ final ConfigurationDescription desc = new ConfigurationDescription();
+ final PropertyDescription propDesc = new PropertyDescription();
+ desc.getPropertyDescriptions().put("foo", propDesc);
+ api.getConfigurationDescriptions().put(PID, desc);
+ assertFalse(api.isInternalConfiguration(PID));
+
+ // a description without properties makes it internal
+ desc.getPropertyDescriptions().clear();
+ assertTrue(api.isInternalConfiguration(PID));
+
+ // and deprecated variant
+ api.getConfigurationDescriptions().clear();
+ api.getInternalConfigurations().add(PID);
+ assertTrue(api.isInternalConfiguration(PID));
+ }
+
+ @Test public void testIsInternalFactoryConfigurationNoName() {
+ final String FACTORYPID = "org.apache.sling.configuration";
+ final ConfigurationApi api = new ConfigurationApi();
+ // ootb nothing is internal
+ assertFalse(api.isInternalFactoryConfiguration(FACTORYPID, null));
+
+ // adding a normal description with a property does not change this
+ final FactoryConfigurationDescription desc = new FactoryConfigurationDescription();
+ final PropertyDescription propDesc = new PropertyDescription();
+ desc.getPropertyDescriptions().put("foo", propDesc);
+ api.getFactoryConfigurationDescriptions().put(FACTORYPID, desc);
+ assertFalse(api.isInternalFactoryConfiguration(FACTORYPID, null));
+
+ // a description without properties makes it internal
+ desc.getPropertyDescriptions().clear();
+ assertTrue(api.isInternalFactoryConfiguration(FACTORYPID, null));
+
+ // and deprecated variant
+ api.getFactoryConfigurationDescriptions().clear();
+ api.getInternalFactoryConfigurations().add(FACTORYPID);
+ assertTrue(api.isInternalFactoryConfiguration(FACTORYPID, null));
+ }
+
+ @Test public void testIsInternalFactoryConfigurationWithName() {
+ final String FACTORYPID = "org.apache.sling.configuration";
+ final String NAME = "bar";
+ final ConfigurationApi api = new ConfigurationApi();
+ // ootb nothing is internal
+ assertFalse(api.isInternalFactoryConfiguration(FACTORYPID, NAME));
+
+ // adding a normal description with a property does not change this
+ final FactoryConfigurationDescription desc = new FactoryConfigurationDescription();
+ final PropertyDescription propDesc = new PropertyDescription();
+ desc.getPropertyDescriptions().put("foo", propDesc);
+ api.getFactoryConfigurationDescriptions().put(FACTORYPID, desc);
+ assertFalse(api.isInternalFactoryConfiguration(FACTORYPID, NAME));
+
+ // name can be added to internal names
+ desc.getInternalNames().add(NAME);
+ assertTrue(api.isInternalFactoryConfiguration(FACTORYPID, NAME));
+
+ // a description without properties makes it internal
+ desc.getInternalNames().clear();
+ desc.getPropertyDescriptions().clear();
+ assertTrue(api.isInternalFactoryConfiguration(FACTORYPID, NAME));
+
+ // and deprecated variant
+ api.getFactoryConfigurationDescriptions().clear();
+ api.getInternalFactoryConfigurations().add(FACTORYPID);
+ assertTrue(api.isInternalFactoryConfiguration(FACTORYPID, NAME));
+ }
}