Author: cziegeler
Date: Tue Jul  4 10:33:03 2017
New Revision: 1800750

URL: http://svn.apache.org/viewvc?rev=1800750&view=rev
Log:
Add title, description etc. to feature

Modified:
    sling/whiteboard/cziegeler/feature/readme.md
    
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Feature.java
    
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/FeatureJSONReader.java
    
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/FeatureJSONWriter.java
    
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/JSONConstants.java

Modified: sling/whiteboard/cziegeler/feature/readme.md
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/readme.md?rev=1800750&r1=1800749&r2=1800750&view=diff
==============================================================================
--- sling/whiteboard/cziegeler/feature/readme.md (original)
+++ sling/whiteboard/cziegeler/feature/readme.md Tue Jul  4 10:33:03 2017
@@ -184,8 +184,8 @@ This is a feature example:
               "id" : "org.apache.sling/security-server/2.2.0",
               "hash" : "4632463464363646436"
             },
-            "org.apache.sling"/application-bundle/2.0.0",
-            "org.apache.sling"/another-bundle/2.1.0"
+            "org.apache.sling/application-bundle/2.0.0",
+            "org.apache.sling/another-bundle/2.1.0"
           ]
         "2" : [
             "org.apache.sling/foo-xyz/1.2.3"
@@ -201,3 +201,29 @@ This is a feature example:
            "a.value" : "yeah"
         }
     }
+
+# Provisioning Applications
+
+An application jar can contain a set of features (including the listed 
artifacts).
+
+An optional application configuration further defines the possibilites:
+
+    {
+         features : [
+             "org.apache.sling/org.apache.sling.launchpad/10"
+         ],
+         options : [
+             "org.apache.sling/org.apache.sling.scripting.jsp/1.0.0",
+             {
+                 "id" : 
"org.apache.sling/org.apache.sling.scripting.htl/1.0.0",
+                 "tag": "htl"
+             }
+         ],
+         defaults : {
+             auto-add-options: true,
+             tags : ["htl"]
+         }
+    }
+
+Such a configuration is required for an application, at least one feature 
needs to be listed in either the features or the options section.
+All features listed in the features section will be added to the application, 
the ones listed in options are optional and depending on the settings and user 
input will either be added or left out. In addition all available features of 
an application will be used to make the application runnable (resolvable).

Modified: 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Feature.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Feature.java?rev=1800750&r1=1800749&r2=1800750&view=diff
==============================================================================
--- 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Feature.java
 (original)
+++ 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Feature.java
 Tue Jul  4 10:33:03 2017
@@ -49,9 +49,20 @@ public class Feature implements Comparab
 
     private final Extensions extensions = new Extensions();
 
-    /** The location. */
+    /** The optional location. */
     private String location;
 
+    /** The optional title. */
+    private String title;
+
+    /** The optional description. */
+    private String description;
+
+    /** The optional vendor. */
+    private String vendor;
+
+    /** The optional license. */
+    private String license;
 
     /**
      * Construct a new feature.
@@ -123,6 +134,38 @@ public class Feature implements Comparab
         return this.extensions;
     }
 
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getVendor() {
+        return vendor;
+    }
+
+    public void setVendor(String vendor) {
+        this.vendor = vendor;
+    }
+
+    public String getLicense() {
+        return license;
+    }
+
+    public void setLicense(String license) {
+        this.license = license;
+    }
+
     @Override
     public int compareTo(final Feature o) {
         return this.id.compareTo(o.id);

Modified: 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/FeatureJSONReader.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/FeatureJSONReader.java?rev=1800750&r1=1800749&r2=1800750&view=diff
==============================================================================
--- 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/FeatureJSONReader.java
 (original)
+++ 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/FeatureJSONReader.java
 Tue Jul  4 10:33:03 2017
@@ -117,6 +117,12 @@ public class FeatureJSONReader extends J
         this.feature = new Feature(fId);
         this.feature.setLocation(this.location);
 
+        // title, description, vendor and license
+        this.feature.setTitle(getProperty(map, JSONConstants.FEATURE_TITLE));
+        this.feature.setDescription(getProperty(map, 
JSONConstants.FEATURE_DESCRIPTION));
+        this.feature.setVendor(getProperty(map, JSONConstants.FEATURE_VENDOR));
+        this.feature.setLicense(getProperty(map, 
JSONConstants.FEATURE_LICENSE));
+
         this.readBundles(map, feature.getBundles(), 
feature.getConfigurations());
         this.readFrameworkProperties(map, feature.getFrameworkProperties());
         this.readConfigurations(map, feature.getConfigurations());
@@ -132,6 +138,15 @@ public class FeatureJSONReader extends J
         return feature;
     }
 
+    private String getProperty(final Map<String, Object> map, final String 
key) throws IOException {
+        final Object val = map.get(key);
+        if ( val != null ) {
+            checkType(key, val, String.class);
+            return val.toString();
+        }
+        return null;
+    }
+
     private void readIncludes(final Map<String, Object> map) throws 
IOException {
         if ( map.containsKey(JSONConstants.FEATURE_INCLUDES)) {
             final Object includesObj = map.get(JSONConstants.FEATURE_INCLUDES);

Modified: 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/FeatureJSONWriter.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/FeatureJSONWriter.java?rev=1800750&r1=1800749&r2=1800750&view=diff
==============================================================================
--- 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/FeatureJSONWriter.java
 (original)
+++ 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/FeatureJSONWriter.java
 Tue Jul  4 10:33:03 2017
@@ -51,6 +51,12 @@ public class FeatureJSONWriter extends J
         w.writeFeature(writer, feature);
     }
 
+    private void writeProperty(final JsonGenerator w, final String key, final 
String value) {
+        if ( value != null ) {
+            w.write(key, value);
+        }
+    }
+
     private void writeFeature(final Writer writer, final Feature feature)
     throws IOException {
         final JsonGenerator w = Json.createGenerator(writer);
@@ -58,6 +64,12 @@ public class FeatureJSONWriter extends J
 
         w.write(JSONConstants.FEATURE_ID, feature.getId().toMvnId());
 
+        // title, description, vendor, license
+        writeProperty(w, JSONConstants.FEATURE_TITLE, feature.getTitle());
+        writeProperty(w, JSONConstants.FEATURE_DESCRIPTION, 
feature.getDescription());
+        writeProperty(w, JSONConstants.FEATURE_VENDOR, feature.getVendor());
+        writeProperty(w, JSONConstants.FEATURE_LICENSE, feature.getLicense());
+
         // includes
         if ( !feature.getIncludes().isEmpty() ) {
             w.writeStartArray(JSONConstants.FEATURE_INCLUDES);

Modified: 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/JSONConstants.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/JSONConstants.java?rev=1800750&r1=1800749&r2=1800750&view=diff
==============================================================================
--- 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/JSONConstants.java
 (original)
+++ 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/JSONConstants.java
 Tue Jul  4 10:33:03 2017
@@ -37,13 +37,25 @@ public abstract class JSONConstants {
 
     public static final String FEATURE_CAPABILITIES = "capabilities";
 
+    public static final String FEATURE_TITLE = "title";
+
+    public static final String FEATURE_DESCRIPTION = "description";
+
+    public static final String FEATURE_VENDOR = "vendor";
+
+    public static final String FEATURE_LICENSE = "license";
+
     public static final List<String> FEATURE_KNOWN_PROPERTIES = 
Arrays.asList(FEATURE_ID,
             FEATURE_BUNDLES,
             FEATURE_FRAMEWORK_PROPERTIES,
             FEATURE_CONFIGURATIONS,
             FEATURE_INCLUDES,
             FEATURE_REQUIREMENTS,
-            FEATURE_CAPABILITIES);
+            FEATURE_CAPABILITIES,
+            FEATURE_TITLE,
+            FEATURE_DESCRIPTION,
+            FEATURE_VENDOR,
+            FEATURE_LICENSE);
 
     public static final String ARTIFACT_ID = "id";
 


Reply via email to