You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by ff...@apache.org on 2015/01/08 08:29:36 UTC

karaf git commit: [KARAF-3433]when OBR resolver to resolve the bundles in a given feature, it should also take the dependency feature bundles into account

Repository: karaf
Updated Branches:
  refs/heads/karaf-2.x d955e1c32 -> 910fedee7


[KARAF-3433]when OBR resolver to resolve the bundles in a given feature, it should also take the dependency feature bundles into account


Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/910fedee
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/910fedee
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/910fedee

Branch: refs/heads/karaf-2.x
Commit: 910fedee74832a15fca8a514c851ad3d979d1b0f
Parents: d955e1c
Author: Freeman Fang <fr...@gmail.com>
Authored: Thu Jan 8 15:29:15 2015 +0800
Committer: Freeman Fang <fr...@gmail.com>
Committed: Thu Jan 8 15:29:15 2015 +0800

----------------------------------------------------------------------
 .../features/obr/internal/ObrResolver.java      | 32 ++++++++++++++++++--
 .../OSGI-INF/blueprint/features-obr.xml         |  3 ++
 2 files changed, 33 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/910fedee/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java
----------------------------------------------------------------------
diff --git a/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java b/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java
index 2fd1eeb..1e04c6b 100644
--- a/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java
+++ b/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java
@@ -34,11 +34,13 @@ import org.apache.felix.bundlerepository.Requirement;
 import org.apache.felix.bundlerepository.Resource;
 import org.apache.karaf.features.BundleInfo;
 import org.apache.karaf.features.Feature;
+import org.apache.karaf.features.FeaturesService;
 import org.apache.karaf.features.Resolver;
 
 public class ObrResolver implements Resolver {
 
     private RepositoryAdmin repositoryAdmin;
+    private FeaturesService featuresService;
     private boolean resolveOptionalImports;
     private boolean startByDefault;
     private int startLevel;
@@ -78,8 +80,8 @@ public class ObrResolver implements Resolver {
         List<Resource> ress = new ArrayList<Resource>();
         List<Resource> featureDeploy = new ArrayList<Resource>();
         Map<Object, BundleInfo> infos = new HashMap<Object, BundleInfo>();
-        for (BundleInfo bundleInfo : feature.getBundles()) {
-        	URL url = null;
+        for (BundleInfo bundleInfo : getAllBundles(feature)) {
+            URL url = null;
             try {
                 url = new URL(bundleInfo.getLocation());
             } catch (MalformedURLException e) {
@@ -155,6 +157,7 @@ public class ObrResolver implements Resolver {
             }
             bundles.add(info);
         }
+        
         return bundles;
     }
 
@@ -166,6 +169,23 @@ public class ObrResolver implements Resolver {
         }
     }
 
+    /**
+     * get all bundles from a given feature, including the bundles from dependency
+     * features
+     *
+     * @param feature
+     */
+    public List<BundleInfo> getAllBundles(Feature feature) throws Exception {
+        List<BundleInfo> bundles = new ArrayList<BundleInfo>();
+        bundles.addAll(feature.getBundles());
+        for (Feature dependency : feature.getDependencies()) {
+            dependency = getFeaturesService().getFeature(dependency.getName(), dependency.getVersion());
+            bundles.addAll(getAllBundles(dependency));
+        }
+        return bundles;
+        
+    }
+    
     protected void printUnderline(PrintWriter out, int length) {
         for (int i = 0; i < length; i++) {
             out.print('-');
@@ -195,4 +215,12 @@ public class ObrResolver implements Resolver {
         }
         return repositoryAdmin.getHelper().requirement(name, filter);
     }
+
+    public FeaturesService getFeaturesService() {
+        return featuresService;
+    }
+
+    public void setFeaturesService(FeaturesService featuresService) {
+        this.featuresService = featuresService;
+    }
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/910fedee/features/obr/src/main/resources/OSGI-INF/blueprint/features-obr.xml
----------------------------------------------------------------------
diff --git a/features/obr/src/main/resources/OSGI-INF/blueprint/features-obr.xml b/features/obr/src/main/resources/OSGI-INF/blueprint/features-obr.xml
index 590258f..d709be2 100644
--- a/features/obr/src/main/resources/OSGI-INF/blueprint/features-obr.xml
+++ b/features/obr/src/main/resources/OSGI-INF/blueprint/features-obr.xml
@@ -34,12 +34,15 @@
 
     <bean id="obrResolver" class="org.apache.karaf.features.obr.internal.ObrResolver">
         <property name="repositoryAdmin" ref="repositoryAdmin" />
+        <property name="featuresService" ref="featuresService" />
         <property name="resolveOptionalImports" value="$[resolveOptionalImports]" />
         <property name="startByDefault" value="$[startByDefault]" />
         <property name="startLevel" value="$[startLevel]" />
     </bean>
 
     <reference id="repositoryAdmin" interface="org.apache.felix.bundlerepository.RepositoryAdmin" />
+ 
+    <reference id="featuresService" interface="org.apache.karaf.features.FeaturesService" />
 
     <service ref="obrResolver" interface="org.apache.karaf.features.Resolver">
         <service-properties>