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) {