Repository: karaf Updated Branches: refs/heads/karaf-3.0.x 3ca841c2b -> aea27bc77
[KARAF-3433]when OBR resolver to resolve the bundles in a given feature, it should also take the dependency feature bundles into account (cherry picked from commit 910fedee74832a15fca8a514c851ad3d979d1b0f) Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/d68bb493 Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/d68bb493 Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/d68bb493 Branch: refs/heads/karaf-3.0.x Commit: d68bb493799fcf145402c47eed74ceaa304525c0 Parents: 3ca841c Author: Freeman Fang <[email protected]> Authored: Thu Jan 8 15:29:15 2015 +0800 Committer: Freeman Fang <[email protected]> Committed: Thu Jan 8 15:30:47 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/d68bb493/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 2823e88..1473290 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,12 +34,14 @@ 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; import org.osgi.framework.InvalidSyntaxException; public class ObrResolver implements Resolver { private RepositoryAdmin repositoryAdmin; + private FeaturesService featuresService; private boolean resolveOptionalImports; private boolean startByDefault; private int startLevel; @@ -79,8 +81,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) { @@ -156,6 +158,7 @@ public class ObrResolver implements Resolver { } bundles.add(info); } + return bundles; } @@ -167,6 +170,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('-'); @@ -196,4 +216,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/d68bb493/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>
