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-analyser.git


The following commit(s) were added to refs/heads/master by this push:
     new ab6312e  SLING-9617 : Allow to specify api generation parameters 
through feature extension
ab6312e is described below

commit ab6312e067e154ec589dc04527e403abe5e4f685
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Thu Jul 30 07:25:59 2020 +0200

    SLING-9617 : Allow to specify api generation parameters through feature 
extension
---
 pom.xml                                            |   2 +-
 .../task/impl/CheckApisJarsProperties.java         | 121 +++++++++++++++++++++
 2 files changed, 122 insertions(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index ce678e4..f362ff4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -116,7 +116,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.feature</artifactId>
-            <version>1.2.4</version>
+            <version>1.2.5-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
diff --git 
a/src/main/java/org/apache/sling/feature/analyser/task/impl/CheckApisJarsProperties.java
 
b/src/main/java/org/apache/sling/feature/analyser/task/impl/CheckApisJarsProperties.java
index 086179c..e1a138e 100644
--- 
a/src/main/java/org/apache/sling/feature/analyser/task/impl/CheckApisJarsProperties.java
+++ 
b/src/main/java/org/apache/sling/feature/analyser/task/impl/CheckApisJarsProperties.java
@@ -20,8 +20,14 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Arrays;
 
+import javax.json.JsonObject;
+import javax.json.JsonValue;
+import javax.json.JsonValue.ValueType;
+
 import org.apache.sling.feature.Artifact;
 import org.apache.sling.feature.ArtifactId;
+import org.apache.sling.feature.Extension;
+import org.apache.sling.feature.ExtensionType;
 import org.apache.sling.feature.analyser.task.AnalyserTask;
 import org.apache.sling.feature.analyser.task.AnalyserTaskContext;
 
@@ -56,6 +62,38 @@ public class CheckApisJarsProperties implements AnalyserTask 
{
     /** Additional artifacts for javadoc classpath */
     private static final String JAVADOC_CLASSPATH = "javadoc-classpath";
 
+    private static final String EXTENSION_NAME = "apis-jar-config";
+
+    private static final String PROP_API_VERSION = "api-version";
+
+    private static final String PROP_JAVADOC_SOURCE_LEVEL = 
"javadoc-source-level";
+
+    private static final String PROP_LICENSE_REPORT = "license-report";
+
+    private static final String PROP_MANIFEST_ENTRIES = "manifest-entries";
+
+    private static final String PROP_CLASSIFIER_MAPPINGS = 
"classifier-mappings";
+
+    private static final String PROP_REGION_MAPPINGS = "region-mappings";
+
+    private static final String PROP_BUNDLE_RESOURCES = "bundle-resources";
+
+    private static final String PROP_BUNDLE_RESOURCE_FOLDERS = 
"bundle-resource-folders";
+
+    private static final String PROP_JAVADOC_CLASSPATH_TOPS = 
"javadoc-classpath-tops";
+
+    private static final String PROP_JAVADOC_CLASSPATH_HIGHEST_VERSIONS = 
"javadoc-classpath-highest-versions";
+
+    private static final String PROP_JAVADOC_CLASSPATH_REMOVALS = 
"javadoc-classpath-removals";
+
+    private static final String PROP_JAVADOC_LINKS = "javadoc-links";
+
+    private static final String PROP_LICENSE_DEFAULTS = "license-defaults";
+
+    private static final String PROP_LICENSE_FOOTER = "license-footer";
+
+    private static final String PROP_LICENSE_HEADER = "license-header";
+
     @Override
     public String getId() {
         return "apis-jar";
@@ -75,6 +113,89 @@ public class CheckApisJarsProperties implements 
AnalyserTask {
             checkIdValidity(ctx, artifact, JAVADOC_CLASSPATH);
             checkJavadocLinks(ctx, artifact);
         }
+        checkExtension(ctx);
+    }
+
+    private void checkExtension(final AnalyserTaskContext ctx) {
+        final Extension ext = 
ctx.getFeature().getExtensions().getByName(EXTENSION_NAME);
+        if ( ext != null ) {
+            if ( ext.getType() != ExtensionType.JSON ) {
+                ctx.reportError("Extension ".concat(EXTENSION_NAME).concat(" 
is not of type JSON"));
+            } else {
+                final JsonObject obj = ext.getJSONStructure().asJsonObject();
+                checkStringType(ctx, obj, PROP_API_VERSION);
+                checkStringType(ctx, obj, PROP_JAVADOC_SOURCE_LEVEL);
+                checkStringType(ctx, obj, PROP_LICENSE_REPORT);
+                checkStringArrayType(ctx, obj, PROP_BUNDLE_RESOURCES);
+                checkStringArrayType(ctx, obj, PROP_BUNDLE_RESOURCE_FOLDERS);
+                checkStringArrayType(ctx, obj, PROP_JAVADOC_CLASSPATH_TOPS);
+                checkStringArrayType(ctx, obj, 
PROP_JAVADOC_CLASSPATH_HIGHEST_VERSIONS);
+                checkStringArrayType(ctx, obj, 
PROP_JAVADOC_CLASSPATH_REMOVALS);
+                checkStringArrayType(ctx, obj, PROP_JAVADOC_LINKS);
+                checkStringArrayType(ctx, obj, PROP_LICENSE_DEFAULTS);
+                checkStringMapType(ctx, obj, PROP_MANIFEST_ENTRIES);
+                checkStringMapType(ctx, obj, PROP_CLASSIFIER_MAPPINGS);
+                checkStringMapType(ctx, obj, PROP_REGION_MAPPINGS);
+                checkStringOrStringArrayType(ctx, obj, PROP_LICENSE_FOOTER);
+                checkStringOrStringArrayType(ctx, obj, PROP_LICENSE_HEADER);
+            }
+        }
+    }
+
+    private void checkStringType(final AnalyserTaskContext ctx, final 
JsonObject obj, final String propName) {
+        if ( obj.containsKey(propName) ) {
+            final JsonValue val = obj.get(propName);
+            if ( val.getValueType() != ValueType.STRING ) {
+                ctx.reportError("Extension ".concat(EXTENSION_NAME).concat(" : 
property ").concat(propName).concat(" is not of type String"));
+            }
+        }
+    }
+
+    private void checkStringArrayType(final AnalyserTaskContext ctx, final 
JsonObject obj, final String propName) {
+        if ( obj.containsKey(propName) ) {
+            final JsonValue val = obj.get(propName);
+            if ( val.getValueType() != ValueType.ARRAY ) {
+                ctx.reportError("Extension ".concat(EXTENSION_NAME).concat(" : 
property ").concat(propName).concat(" is not of type Array"));
+            } else {
+                boolean hasNonStringValue = false;
+                for(final JsonValue v : val.asJsonArray()) {
+                    if ( v.getValueType() != ValueType.STRING ) {
+                        hasNonStringValue = true;
+                    }
+                }
+                if ( hasNonStringValue ) {
+                    ctx.reportError("Extension 
".concat(EXTENSION_NAME).concat(" : array ").concat(propName).concat(" contains 
non string values"));
+                }
+            }
+        }
+    }
+
+    private void checkStringOrStringArrayType(final AnalyserTaskContext ctx, 
final JsonObject obj, final String propName) {
+        if ( obj.containsKey(propName) ) {
+            final JsonValue val = obj.get(propName);
+            if ( val.getValueType() != ValueType.STRING ) {
+                checkStringArrayType(ctx, obj, propName);
+            }
+        }
+    }
+
+    private void checkStringMapType(final AnalyserTaskContext ctx, final 
JsonObject obj, final String propName) {
+        if ( obj.containsKey(propName) ) {
+            final JsonValue val = obj.get(propName);
+            if ( val.getValueType() != ValueType.OBJECT ) {
+                ctx.reportError("Extension ".concat(EXTENSION_NAME).concat(" : 
property ").concat(propName).concat(" is not of type Object"));
+            } else {
+                boolean hasNonStringValue = false;
+                for(final JsonValue v : val.asJsonObject().values()) {
+                    if ( v.getValueType() != ValueType.STRING ) {
+                        hasNonStringValue = true;
+                   }
+                }
+                if ( hasNonStringValue ) {
+                    ctx.reportError("Extension 
".concat(EXTENSION_NAME).concat(" : object ").concat(propName).concat(" 
contains non string values"));
+                }
+            }
+        }
     }
 
     private void checkIdValidity(final AnalyserTaskContext ctx, final Artifact 
a, final String propName) {

Reply via email to