You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2020/11/03 13:07:55 UTC

[sling-org-apache-sling-feature-extension-apiregions] branch SLING-9867 updated: Add required properties

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

cziegeler pushed a commit to branch SLING-9867
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/SLING-9867 by this push:
     new 3c6e7a2  Add required properties
3c6e7a2 is described below

commit 3c6e7a28dd056b30accca4a7dcaa9ef9608299f2
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Tue Nov 3 13:47:43 2020 +0100

    Add required properties
---
 .../apiregions/api/config/AttributeableEntity.java | 22 +++++++++++++++++-
 .../extension/apiregions/api/config/Constants.java |  2 ++
 .../extension/apiregions/api/config/Property.java  | 26 +++++++++++++++++++++-
 3 files changed, 48 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/AttributeableEntity.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/AttributeableEntity.java
index 3d421dd..0a81f0d 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/AttributeableEntity.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/AttributeableEntity.java
@@ -25,6 +25,7 @@ import javax.json.JsonException;
 import javax.json.JsonObject;
 import javax.json.JsonObjectBuilder;
 import javax.json.JsonValue;
+import javax.json.JsonValue.ValueType;
 
 import org.apache.felix.cm.json.Configurations;
 
@@ -133,11 +134,12 @@ public abstract class AttributeableEntity {
 			builder.add(attributeName, value);
 		}
 	}
+
 	/**
 	 * Helper method to get a integer value from an attribute
 	 * @param attributeName The attribute name
 	 * @param defaultValue default value
-	 * @return The integer value or
+	 * @return The integer value or the default value
 	 */
 	int getInteger(final String attributeName, final int defaultValue) {
 		final String val = this.getString(attributeName);
@@ -146,4 +148,22 @@ public abstract class AttributeableEntity {
 		}
 		return defaultValue;
 	}
+
+	/**
+	 * Helper method to get a boolean value from an attribute
+	 * @param attributeName The attribute name
+	 * @param defaultValue default value
+	 * @return The boolean value or the default value
+	 */
+	boolean getBoolean(final String attributeName, final boolean defaultValue) throws IOException {
+		final JsonValue val = this.getAttributes().remove(attributeName);
+		if ( val != null ) {
+			final Object obj = Configurations.convertToObject(val);
+			if ( obj instanceof Boolean ) {
+                return ((Boolean)obj).booleanValue();
+			}
+			throw new IOException("Invalid type for boolean value " + attributeName + " : " + val.getValueType().name());
+		}
+		return defaultValue;
+	}
 }
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Constants.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Constants.java
index 88f5788..d253419 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Constants.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Constants.java
@@ -62,4 +62,6 @@ public abstract class Constants {
     static final String KEY_REGEX = "regex";
 
     static final String KEY_VALUE = "value";
+
+    static final String KEY_REQUIRED = "required";
 }
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Property.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Property.java
index b06ed54..3579029 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Property.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Property.java
@@ -56,6 +56,9 @@ public class Property extends DescribableEntity {
 	/** The optional regex */
 	private String regex;
 
+	/** Required? */
+	private boolean required;
+	
     /**
      * Clear the object and remove all metadata
      */
@@ -63,6 +66,7 @@ public class Property extends DescribableEntity {
         super.clear();
 		this.setType(PropertyType.STRING);
 		this.setCardinality(1);
+		this.setRequired(false);
 		this.setVariable(null);
 		this.setRange(null);
 		this.setIncludes(null);
@@ -82,7 +86,8 @@ public class Property extends DescribableEntity {
         try {
 			this.setVariable(this.getString(Constants.KEY_VARIABLE));
 			this.setCardinality(this.getInteger(Constants.KEY_CARDINALITY, this.getCardinality()));
-
+			this.setRequired(this.getBoolean(Constants.KEY_REQUIRED, this.isRequired()));
+			
 			final String typeVal = this.getString(Constants.KEY_TYPE);
 			if ( typeVal != null ) {
                 this.setType(PropertyType.valueOf(typeVal.toUpperCase()));				
@@ -140,6 +145,9 @@ public class Property extends DescribableEntity {
 		if ( this.getCardinality() != 1 ) {
 			objectBuilder.add(Constants.KEY_CARDINALITY, this.getCardinality());
 		}
+		if ( this.isRequired() ) {
+			objectBuilder.add(Constants.KEY_REQUIRED, this.isRequired());
+		}
 	    this.setString(objectBuilder, Constants.KEY_VARIABLE, this.getVariable());
 		
 		if ( this.range != null ) {
@@ -298,4 +306,20 @@ public class Property extends DescribableEntity {
 	public void setRegex(final String regex) {
 		this.regex = regex;
 	}
+
+	/**
+	 * Is this property required?
+	 * @return {@code true} if it is required
+	 */
+	public boolean isRequired() {
+		return this.required;
+	}
+
+	/**
+	 * Set whether this property is required
+	 * @param flag The new value
+	 */
+	public void setRequired(final boolean flag) {
+		this.required = flag;
+	}
 }