Author: cziegeler
Date: Tue Jul  4 14:20:12 2017
New Revision: 1800796

URL: http://svn.apache.org/viewvc?rev=1800796&view=rev
Log:
Continue implementing application handling

Modified:
    
sling/whiteboard/cziegeler/osgifeature-maven-plugin/src/main/java/org/apache/sling/feature/maven/ApplicationProjectInfo.java
    
sling/whiteboard/cziegeler/osgifeature-maven-plugin/src/main/java/org/apache/sling/feature/maven/Preprocessor.java
    
sling/whiteboard/cziegeler/osgifeature-maven-plugin/src/main/java/org/apache/sling/feature/maven/ProjectHelper.java

Modified: 
sling/whiteboard/cziegeler/osgifeature-maven-plugin/src/main/java/org/apache/sling/feature/maven/ApplicationProjectInfo.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/osgifeature-maven-plugin/src/main/java/org/apache/sling/feature/maven/ApplicationProjectInfo.java?rev=1800796&r1=1800795&r2=1800796&view=diff
==============================================================================
--- 
sling/whiteboard/cziegeler/osgifeature-maven-plugin/src/main/java/org/apache/sling/feature/maven/ApplicationProjectInfo.java
 (original)
+++ 
sling/whiteboard/cziegeler/osgifeature-maven-plugin/src/main/java/org/apache/sling/feature/maven/ApplicationProjectInfo.java
 Tue Jul  4 14:20:12 2017
@@ -25,13 +25,7 @@ public class ApplicationProjectInfo exte
     public List<Feature> features;
     public List<Feature> testFeatures;
 
-    public List<Feature> featureRefs;
-    public List<Feature> testFeatureRefs;
-
     public List<Feature> assembledFeatures;
-    public List<Feature> assembledtestFeatures;
-
-    public List<Feature> assembledFeatureRefs;
-    public List<Feature> assembledTestFeatureRefs;
+    public List<Feature> assembledTestFeatures;
 }
 

Modified: 
sling/whiteboard/cziegeler/osgifeature-maven-plugin/src/main/java/org/apache/sling/feature/maven/Preprocessor.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/osgifeature-maven-plugin/src/main/java/org/apache/sling/feature/maven/Preprocessor.java?rev=1800796&r1=1800795&r2=1800796&view=diff
==============================================================================
--- 
sling/whiteboard/cziegeler/osgifeature-maven-plugin/src/main/java/org/apache/sling/feature/maven/Preprocessor.java
 (original)
+++ 
sling/whiteboard/cziegeler/osgifeature-maven-plugin/src/main/java/org/apache/sling/feature/maven/Preprocessor.java
 Tue Jul  4 14:20:12 2017
@@ -220,7 +220,7 @@ public class Preprocessor {
         }
         if ( config.isTestConfig() ) {
             info.testFeatures = featureList;
-            info.assembledtestFeatures = assembledFeatureList;
+            info.assembledTestFeatures = assembledFeatureList;
         } else {
             info.features = featureList;
             info.assembledFeatures = assembledFeatureList;
@@ -267,11 +267,11 @@ public class Preprocessor {
             assembledFeatureRefList.add(assembledFeature);
         }
         if ( config.isTestConfig() ) {
-            info.testFeatureRefs = featureRefList;
-            info.assembledTestFeatureRefs = assembledFeatureRefList;
+            info.testFeatures.addAll(featureRefList);
+            info.assembledTestFeatures.addAll(assembledFeatureRefList);
         } else {
-            info.featureRefs = featureRefList;
-            info.assembledFeatureRefs = assembledFeatureRefList;
+            info.features.addAll(featureRefList);
+            info.assembledFeatures.addAll(assembledFeatureRefList);
         }
 
         if ( config.isSkipAddDependencies() ) {
@@ -280,9 +280,6 @@ public class Preprocessor {
             for(final Feature feature : assembledFeatureList) {
                 addDependenciesFromFeature(env, info, feature, 
config.getScope());
             }
-            for(final Feature feature : assembledFeatureRefList) {
-                addDependenciesFromFeature(env, info, feature, 
config.getScope());
-            }
         }
     }
 

Modified: 
sling/whiteboard/cziegeler/osgifeature-maven-plugin/src/main/java/org/apache/sling/feature/maven/ProjectHelper.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/osgifeature-maven-plugin/src/main/java/org/apache/sling/feature/maven/ProjectHelper.java?rev=1800796&r1=1800795&r2=1800796&view=diff
==============================================================================
--- 
sling/whiteboard/cziegeler/osgifeature-maven-plugin/src/main/java/org/apache/sling/feature/maven/ProjectHelper.java
 (original)
+++ 
sling/whiteboard/cziegeler/osgifeature-maven-plugin/src/main/java/org/apache/sling/feature/maven/ProjectHelper.java
 Tue Jul  4 14:20:12 2017
@@ -19,7 +19,9 @@ package org.apache.sling.feature.maven;
 import java.io.IOException;
 import java.io.StringReader;
 import java.io.StringWriter;
+import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 import org.apache.maven.artifact.Artifact;
@@ -64,7 +66,24 @@ public abstract class ProjectHelper {
         }
     }
 
-    private static Feature get(final MavenProject project, final String key) {
+    private static void store(final MavenProject project, final String key, 
final List<Feature> features) {
+        if ( features != null && !features.isEmpty()) {
+            project.setContextValue(key, features.size());
+            // we have to serialize as the dependency lifecycle participant 
uses a different class loader (!)
+            int index = 0;
+            for(final Feature f : features) {
+                try ( final StringWriter w1 = new StringWriter() ) {
+                    FeatureJSONWriter.write(w1, f);
+                    project.setContextValue(key + "_" + String.valueOf(index), 
w1.toString());
+                    index++;
+                } catch ( final IOException ioe) {
+                    throw new RuntimeException(ioe.getMessage(), ioe);
+                }
+            }
+        }
+    }
+
+    private static Feature getFeature(final MavenProject project, final String 
key) {
         final String cacheKey = key + "-cache";
         Feature result = null;
         try {
@@ -77,11 +96,9 @@ public abstract class ProjectHelper {
             if ( text == null ) {
                 result = null;
             } else {
-                try {
-                    try ( final StringReader r = new StringReader(text) ) {
-                        result = FeatureJSONReader.read(r, project.getId());
-                        project.setContextValue(cacheKey, result);
-                    }
+                try ( final StringReader r = new StringReader(text) ) {
+                    result = FeatureJSONReader.read(r, project.getId());
+                    project.setContextValue(cacheKey, result);
                 } catch ( final IOException ioe) {
                     throw new RuntimeException(ioe.getMessage(), ioe);
                 }
@@ -90,6 +107,37 @@ public abstract class ProjectHelper {
         return result;
     }
 
+    @SuppressWarnings("unchecked")
+    private static List<Feature> getFeatures(final MavenProject project, final 
String key) {
+        final String cacheKey = key + "-cache";
+        List<Feature> result = null;
+        try {
+            result = (List<Feature>) project.getContextValue(cacheKey);
+        } catch ( final Exception e) {
+            // if we get a class cast exception, we read again
+        }
+        if ( result == null ) {
+            final Integer size = (Integer)project.getContextValue(key);
+            if ( size != null ) {
+                result = new ArrayList<>();
+                for(int i=0; i<size;i++) {
+                    final String text = (String)project.getContextValue(key + 
"_" + String.valueOf(i));
+                    if ( text == null ) {
+                        throw new RuntimeException("Unable to get feature from 
internal store.");
+                    }
+                    try ( final StringReader r = new StringReader(text) ) {
+                        final Feature feature = FeatureJSONReader.read(r, 
project.getId());
+                        result.add(feature);
+                    } catch ( final IOException ioe) {
+                        throw new RuntimeException(ioe.getMessage(), ioe);
+                    }
+                }
+                project.setContextValue(cacheKey, result);
+            }
+        }
+        return result;
+    }
+
     /**
      * Store all relevant information about the project for plugins to be
      * retrieved
@@ -103,21 +151,12 @@ public abstract class ProjectHelper {
     }
 
     /**
-     * Store all relevant information about the project for plugins to be
-     * retrieved
-     * @param info The project info
-     */
-    public static void storeProjectInfo(final ApplicationProjectInfo info) {
-        // TODO
-    }
-
-    /**
      * Get the assembled feature from the project
      * @param project The maven projet
      * @return The assembled feature or {@code null}
      */
     public static Feature getAssembledFeature(final MavenProject project) {
-        return get(project, ASSEMBLED_FEATURE_JSON);
+        return getFeature(project, ASSEMBLED_FEATURE_JSON);
     }
 
     /**
@@ -126,7 +165,7 @@ public abstract class ProjectHelper {
      * @return The raw feature or {@code null}
      */
     public static Feature getFeature(final MavenProject project) {
-        return get(project, RAW_FEATURE_JSON);
+        return getFeature(project, RAW_FEATURE_JSON);
     }
 
     /**
@@ -135,7 +174,7 @@ public abstract class ProjectHelper {
      * @return The assembled feature or {@code null}
      */
     public static Feature getAssembledTestFeature(final MavenProject project) {
-        return get(project, ASSEMBLED_TEST_FEATURE_JSON);
+        return getFeature(project, ASSEMBLED_TEST_FEATURE_JSON);
     }
 
     /**
@@ -144,7 +183,55 @@ public abstract class ProjectHelper {
      * @return The raw feature or {@code null}
      */
     public static Feature getTestFeature(final MavenProject project) {
-        return get(project, RAW_TEST_FEATURE_JSON);
+        return getFeature(project, RAW_TEST_FEATURE_JSON);
+    }
+
+    /**
+     * Store all relevant information about the project for plugins to be
+     * retrieved
+     * @param info The project info
+     */
+    public static void storeProjectInfo(final ApplicationProjectInfo info) {
+        store(info.project, RAW_FEATURE_JSON, info.features);
+        store(info.project, RAW_TEST_FEATURE_JSON, info.testFeatures);
+        store(info.project, ASSEMBLED_FEATURE_JSON, info.assembledFeatures);
+        store(info.project, ASSEMBLED_TEST_FEATURE_JSON, 
info.assembledTestFeatures);
+    }
+
+    /**
+     * Get the assembled features from the project
+     * @param project The maven projet
+     * @return The assembled features or {@code null}
+     */
+    public static List<Feature> getAssembledFeatures(final MavenProject 
project) {
+        return getFeatures(project, ASSEMBLED_FEATURE_JSON);
+    }
+
+    /**
+     * Get the raw feature from the project
+     * @param project The maven projet
+     * @return The raw features or {@code null}
+     */
+    public static List<Feature> getFeatures(final MavenProject project) {
+        return getFeatures(project, RAW_FEATURE_JSON);
+    }
+
+    /**
+     * Get the assembled test feature from the project
+     * @param project The maven projet
+     * @return The assembled features or {@code null}
+     */
+    public static List<Feature> getAssembledTestFeatures(final MavenProject 
project) {
+        return getFeatures(project, ASSEMBLED_TEST_FEATURE_JSON);
+    }
+
+    /**
+     * Get the raw test feature from the project
+     * @param project The maven projet
+     * @return The raw features or {@code null}
+     */
+    public static List<Feature> getTestFeatures(final MavenProject project) {
+        return getFeatures(project, RAW_TEST_FEATURE_JSON);
     }
 
     /**


Reply via email to