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 2017/05/30 08:23:51 UTC

svn commit: r1796785 - in /sling/whiteboard/cziegeler: feature-analyser/ feature/ feature/src/main/java/org/apache/sling/feature/ feature/src/main/java/org/apache/sling/feature/analyser/ feature/src/main/java/org/apache/sling/feature/json/

Author: cziegeler
Date: Tue May 30 08:23:51 2017
New Revision: 1796785

URL: http://svn.apache.org/viewvc?rev=1796785&view=rev
Log:
Move analyser into separate module

Removed:
    sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/analyser/
Modified:
    sling/whiteboard/cziegeler/feature-analyser/pom.xml
    sling/whiteboard/cziegeler/feature/pom.xml
    sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Extension.java
    sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/FeatureJSONReader.java

Modified: sling/whiteboard/cziegeler/feature-analyser/pom.xml
URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/pom.xml?rev=1796785&r1=1796784&r2=1796785&view=diff
==============================================================================
--- sling/whiteboard/cziegeler/feature-analyser/pom.xml (original)
+++ sling/whiteboard/cziegeler/feature-analyser/pom.xml Tue May 30 08:23:51 2017
@@ -48,6 +48,10 @@
                 <extensions>true</extensions>
                 <configuration>
                     <instructions>
+                        <Import-Package>
+                            !org.osgi.service.event,
+                            *
+                        </Import-Package>
                         <Conditional-Package>
                             org.apache.sling.commons.osgi                          
                         </Conditional-Package>

Modified: sling/whiteboard/cziegeler/feature/pom.xml
URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/pom.xml?rev=1796785&r1=1796784&r2=1796785&view=diff
==============================================================================
--- sling/whiteboard/cziegeler/feature/pom.xml (original)
+++ sling/whiteboard/cziegeler/feature/pom.xml Tue May 30 08:23:51 2017
@@ -81,12 +81,6 @@
             <version>0.0.1-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
-        <dependency>
-            <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.commons.osgi</artifactId>
-            <version>2.4.0</version>
-            <scope>provided</scope>
-        </dependency>
       <!-- Testing -->
         <dependency>
         	<groupId>junit</groupId>

Modified: sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Extension.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Extension.java?rev=1796785&r1=1796784&r2=1796785&view=diff
==============================================================================
--- sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Extension.java (original)
+++ sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Extension.java Tue May 30 08:23:51 2017
@@ -22,7 +22,7 @@ import java.util.List;
 /**
  * Extension
  */
-public abstract class Extension {
+public class Extension {
 
     private final ExtensionType type;
 

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=1796785&r1=1796784&r2=1796785&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 May 30 08:23:51 2017
@@ -39,6 +39,8 @@ import org.apache.sling.feature.Artifact
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Capability;
 import org.apache.sling.feature.Configuration;
+import org.apache.sling.feature.Extension;
+import org.apache.sling.feature.ExtensionType;
 import org.apache.sling.feature.Feature;
 import org.apache.sling.feature.Include;
 import org.apache.sling.feature.Requirement;
@@ -110,8 +112,6 @@ public class FeatureJSONReader {
         @SuppressWarnings("unchecked")
         final Map<String, Object> map = (Map<String, Object>) JSONUtil.getValue(json);
 
-        final Set<String> keySet = new HashSet<>(map.keySet());
-        keySet.removeAll(JSONConstants.FEATURE_KNOWN_PROPERTIES);
         if ( !map.containsKey(JSONConstants.FEATURE_ID) ) {
             throw new IOException(this.exceptionPrefix + "Feature id is missing");
         }
@@ -129,13 +129,63 @@ public class FeatureJSONReader {
         this.readRequirements(map);
         this.readIncludes(map);
 
-        // TODO - extensions
+        this.readExtensions(map);
 
-        // check duplicates in configurations, includes, extensions
+        // check duplicates in configurations, includes
         return feature;
     }
 
-    private void readIncludes(Map<String, Object> map) throws IOException {
+    private void readExtensions(final Map<String, Object> map) throws IOException {
+        final Set<String> keySet = new HashSet<>(map.keySet());
+        keySet.removeAll(JSONConstants.FEATURE_KNOWN_PROPERTIES);
+        // the remaining keys are considered extensions!
+        for(final String key : keySet) {
+            final int pos = key.indexOf(':');
+            final String postfix = pos == -1 ? null : key.substring(pos + 1);
+            final int sep = (postfix == null ? key.indexOf('|') : postfix.indexOf('|'));
+            final String name;
+            final String type;
+            final String optional;
+            if ( pos == -1 ) {
+                type = ExtensionType.ARTIFACTS.name();
+                if ( sep == -1 ) {
+                    name = key;
+                    optional = Boolean.FALSE.toString();
+                } else {
+                    name = key.substring(0, sep);
+                    optional = key.substring(sep + 1);
+                }
+            } else {
+                name = key.substring(0, pos);
+                if ( sep == -1 ) {
+                    type = postfix;
+                    optional = Boolean.FALSE.toString();
+                } else {
+                    type = postfix.substring(0, sep);
+                    optional = postfix.substring(sep + 1);
+                }
+            }
+            for(final Extension e : this.feature.getExtensions()) {
+                if ( e.getName().equals(name) ) {
+                    throw new IOException(exceptionPrefix + "Duplicate extension with name " + name);
+                }
+            }
+
+            final ExtensionType extType = ExtensionType.valueOf(type);
+            final boolean opt = Boolean.valueOf(optional).booleanValue();
+
+            final Extension ext = new Extension(extType, name, opt);
+            switch ( extType ) {
+                case ARTIFACTS : // TODO
+                case JSON : // TODO
+                case TEXT : // TODO
+            }
+
+            this.feature.getExtensions().add(ext);
+        }
+    }
+
+    private void readIncludes(final Map<String, Object> map) throws IOException {
         if ( map.containsKey(JSONConstants.FEATURE_INCLUDES)) {
             final Object includesObj = map.get(JSONConstants.FEATURE_INCLUDES);
             checkType(JSONConstants.FEATURE_INCLUDES, includesObj, List.class);