SLING-10090 : Add default value to property description
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 f742eb6..e126581 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
@@ -72,4 +72,6 @@
static final String KEY_REGION = "region";
static final String KEY_REGION_CACHE = "region-cache";
+
+ static final String KEY_DEFAULT = "default";
}
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 93b9e19..56bb7e1 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
@@ -28,6 +28,8 @@
import javax.json.JsonObjectBuilder;
import javax.json.JsonValue;
+import org.apache.felix.cm.json.Configurations;
+
/**
* Instances of this class represent a single configuration property
* This class is not thread safe.
@@ -61,6 +63,12 @@
/** Required? */
private boolean required;
+ /**
+ * The optional default value
+ * @since 1.2
+ */
+ private Object defaultValue;
+
/**
* Create a new description
*/
@@ -87,6 +95,7 @@
this.setExcludes(null);
this.setOptions(null);
this.setRegex(null);
+ this.setDefaultValue(null);
}
/**
@@ -140,6 +149,10 @@
this.setOptions(list);
}
this.setRegex(this.getString(InternalConstants.KEY_REGEX));
+ final JsonValue dv = this.getAttributes().remove(InternalConstants.KEY_DEFAULT);
+ if ( dv != null ) {
+ this.setDefaultValue(Configurations.convertToObject(dv));
+ }
} catch (final JsonException | IllegalArgumentException e) {
throw new IOException(e);
}
@@ -166,32 +179,34 @@
}
this.setString(objectBuilder, InternalConstants.KEY_VARIABLE, this.getVariable());
- if ( this.range != null ) {
- objectBuilder.add(InternalConstants.KEY_RANGE, this.range.toJSONObject());
+ if ( this.getRange() != null ) {
+ objectBuilder.add(InternalConstants.KEY_RANGE, this.getRange().toJSONObject());
}
- if ( this.includes != null && this.includes.length > 0 ) {
+ if ( this.getIncludes() != null && this.getIncludes().length > 0 ) {
final JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();
- for(final String v : this.includes) {
+ for(final String v : this.getIncludes()) {
arrayBuilder.add(v);
}
objectBuilder.add(InternalConstants.KEY_INCLUDES, arrayBuilder);
}
- if ( this.excludes != null && this.excludes.length > 0 ) {
+ if ( this.getExcludes() != null && this.getExcludes().length > 0 ) {
final JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();
- for(final String v : this.excludes) {
+ for(final String v : this.getExcludes()) {
arrayBuilder.add(v);
}
objectBuilder.add(InternalConstants.KEY_EXCLUDES, arrayBuilder);
}
- if ( this.options != null && !this.options.isEmpty()) {
+ if ( this.getOptions() != null && !this.getOptions().isEmpty()) {
final JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();
- for(final Option o : this.options) {
+ for(final Option o : this.getOptions()) {
arrayBuilder.add(o.toJSONObject());
}
objectBuilder.add(InternalConstants.KEY_OPTIONS, arrayBuilder);
}
this.setString(objectBuilder, InternalConstants.KEY_REGEX, this.getRegex());
-
+ if ( this.getDefaultValue() != null ) {
+ objectBuilder.add(InternalConstants.KEY_DEFAULT, Configurations.convertToJsonValue(this.getDefaultValue()));
+ }
return objectBuilder;
}
@@ -359,4 +374,22 @@
public void setRequired(final boolean flag) {
this.required = flag;
}
+
+ /**
+ * Get the optional default value.
+ * @return The default value or {@code null}
+ * @since 1.2
+ */
+ public Object getDefaultValue() {
+ return this.defaultValue;
+ }
+
+ /**
+ * Set the optional default value.
+ * @param val The default value
+ * @since 1.2
+ */
+ public void setDefaultValue(final Object val) {
+ this.defaultValue = val;
+ }
}
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 b788a51..6ac6f43 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.1.0")
+@org.osgi.annotation.versioning.Version("1.2.0")
package org.apache.sling.feature.extension.apiregions.api.config;
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescriptionTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescriptionTest.java
index 5e64e62..4fa0583 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescriptionTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescriptionTest.java
@@ -51,6 +51,7 @@
entity.setRequired(true);
entity.setVariable("var");
entity.setType(PropertyType.BYTE);
+ entity.setDefaultValue("default");
entity.clear();
assertTrue(entity.getAttributes().isEmpty());
assertNull(entity.getDeprecated());
@@ -66,12 +67,14 @@
assertNull(entity.getVariable());
assertFalse(entity.isRequired());
assertEquals(PropertyType.STRING, entity.getType());
+ assertNull(entity.getDefaultValue());
}
@Test public void testFromJSONObject() throws IOException {
final Extension ext = new Extension(ExtensionType.JSON, "a", ExtensionState.OPTIONAL);
ext.setJSON("{ \"type\" : \"BYTE\", \"cardinality\": 5, \"required\" : true, \"variable\" : \"var\"," +
- "\"range\" : {}, \"includes\" : [\"in\"], \"excludes\" : [\"ex\"] , \"options\": [{}], \"regex\": \".\"}");
+ "\"range\" : {}, \"includes\" : [\"in\"], \"excludes\" : [\"ex\"] , \"options\": [{}], \"regex\": \".\"," +
+ "\"default\" : \"def\"}");
final PropertyDescription entity = new PropertyDescription();
entity.fromJSONObject(ext.getJSONStructure().asJsonObject());
@@ -86,6 +89,7 @@
assertEquals(1, entity.getOptions().size());
assertEquals(".", entity.getRegex());
assertNotNull(entity.getRegexPattern());
+ assertEquals("def", entity.getDefaultValue());
// test defaults and empty values
ext.setJSON("{ \"variable\" : \"var\", \"regex\": \".\"}");
@@ -114,10 +118,12 @@
entity.setRequired(true);
entity.setVariable("var");
entity.setType(PropertyType.BYTE);
+ entity.setDefaultValue("def");
final Extension ext = new Extension(ExtensionType.JSON, "a", ExtensionState.OPTIONAL);
ext.setJSON("{ \"type\" : \"BYTE\", \"cardinality\": 5, \"required\" : true, \"variable\" : \"var\"," +
- "\"range\" : {}, \"includes\" : [\"in\"], \"excludes\" : [\"ex\"] , \"options\": [{}], \"regex\": \".\"}");
+ "\"range\" : {}, \"includes\" : [\"in\"], \"excludes\" : [\"ex\"] , \"options\": [{}], \"regex\": \".\"," +
+ "\"default\" : \"def\"}");
assertEquals(ext.getJSONStructure().asJsonObject(), entity.toJSONObject());
@@ -129,7 +135,8 @@
entity.setOptions(null);
entity.setExcludes(null);
entity.setIncludes(null);
-
+ entity.setDefaultValue(null);
+
ext.setJSON("{ \"variable\" : \"var\", \"regex\": \".\"}");
assertEquals(ext.getJSONStructure().asJsonObject(), entity.toJSONObject());