Repository: karaf Updated Branches: refs/heads/karaf-2.x 65e6e3260 -> f369535c1
KARAF-1047 - Add recursive support on features uninstall Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/f369535c Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/f369535c Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/f369535c Branch: refs/heads/karaf-2.x Commit: f369535c17c7cfee26f0095ab0252a10e7e43876 Parents: 65e6e32 Author: Jean-Baptiste Onofré <[email protected]> Authored: Wed Jan 20 11:51:32 2016 +0100 Committer: Jean-Baptiste Onofré <[email protected]> Committed: Wed Jan 20 11:51:32 2016 +0100 ---------------------------------------------------------------------- .../command/UninstallFeatureCommand.java | 6 ++++++ .../apache/karaf/features/FeaturesService.java | 1 + .../features/internal/FeaturesServiceImpl.java | 10 +++++++++ .../karaf/features/FeaturesServiceTest.java | 2 -- .../management/FeaturesServiceMBean.java | 4 ++++ .../internal/FeaturesServiceMBeanImpl.java | 22 ++++++++++++++++++++ 6 files changed, 43 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/f369535c/features/command/src/main/java/org/apache/karaf/features/command/UninstallFeatureCommand.java ---------------------------------------------------------------------- diff --git a/features/command/src/main/java/org/apache/karaf/features/command/UninstallFeatureCommand.java b/features/command/src/main/java/org/apache/karaf/features/command/UninstallFeatureCommand.java index 154ffe9..b82e0be 100644 --- a/features/command/src/main/java/org/apache/karaf/features/command/UninstallFeatureCommand.java +++ b/features/command/src/main/java/org/apache/karaf/features/command/UninstallFeatureCommand.java @@ -33,6 +33,9 @@ public class UninstallFeatureCommand extends FeaturesCommandSupport { @Option(name = "-r", aliases = "--no-auto-refresh", description = "Do not automatically refresh bundles", required = false, multiValued = false) boolean noRefresh; + @Option(name = "--recursive", description = "Recursively uninstall features", required = false, multiValued = false) + boolean recursive; + @Option(name = "-v", aliases = "--verbose", description = "Explain what is being done", required = false, multiValued = false) boolean verbose; @@ -45,6 +48,9 @@ public class UninstallFeatureCommand extends FeaturesCommandSupport { if (verbose) { options.add(FeaturesService.Option.Verbose); } + if (recursive) { + options.add(FeaturesService.Option.Recursive); + } for (String feature : features) { String[] split = feature.split("/"); String name = split[0]; http://git-wip-us.apache.org/repos/asf/karaf/blob/f369535c/features/core/src/main/java/org/apache/karaf/features/FeaturesService.java ---------------------------------------------------------------------- diff --git a/features/core/src/main/java/org/apache/karaf/features/FeaturesService.java b/features/core/src/main/java/org/apache/karaf/features/FeaturesService.java index dd26698..d8c6bfc 100644 --- a/features/core/src/main/java/org/apache/karaf/features/FeaturesService.java +++ b/features/core/src/main/java/org/apache/karaf/features/FeaturesService.java @@ -31,6 +31,7 @@ public interface FeaturesService { NoAutoRefreshBundles, NoAutoStartBundles, ContinueBatchOnFailure, + Recursive, Verbose, Boot } http://git-wip-us.apache.org/repos/asf/karaf/blob/f369535c/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java ---------------------------------------------------------------------- diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java b/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java index a45d3e9..65f48fe 100644 --- a/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java +++ b/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java @@ -1153,6 +1153,13 @@ public class FeaturesServiceImpl implements FeaturesService { uninstallFeature(name, version, EnumSet.noneOf(Option.class)); } + private void recursiveFeatures(Feature feature, ArrayList<Feature> dependencyFeatures) { + for (Feature inner : feature.getDependencies()) { + dependencyFeatures.add(inner); + recursiveFeatures(inner, dependencyFeatures); + } + } + public void uninstallFeature(String name, String version, EnumSet<Option> options) throws Exception { ArrayList<Exception> exceptions = new ArrayList<Exception>(); Feature[] features = getFeatures(name, version); @@ -1160,6 +1167,9 @@ public class FeaturesServiceImpl implements FeaturesService { for (Feature feature : features) { if (installed.containsKey(feature)) { featuresToUninstall.add(feature); + if (options.contains(Option.Recursive)) { + recursiveFeatures(feature, featuresToUninstall); + } } } if (featuresToUninstall.isEmpty()) { http://git-wip-us.apache.org/repos/asf/karaf/blob/f369535c/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java ---------------------------------------------------------------------- diff --git a/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java b/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java index 5f6775c..c7399db 100644 --- a/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java +++ b/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java @@ -16,7 +16,6 @@ */ package org.apache.karaf.features; -import static org.easymock.EasyMock.aryEq; import static org.easymock.EasyMock.eq; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.isA; @@ -58,7 +57,6 @@ import org.osgi.framework.FrameworkEvent; import org.osgi.framework.FrameworkListener; import org.osgi.framework.wiring.FrameworkWiring; import org.osgi.service.log.LogService; -import org.osgi.service.packageadmin.PackageAdmin; import static org.easymock.EasyMock.*; http://git-wip-us.apache.org/repos/asf/karaf/blob/f369535c/features/management/src/main/java/org/apache/karaf/features/management/FeaturesServiceMBean.java ---------------------------------------------------------------------- diff --git a/features/management/src/main/java/org/apache/karaf/features/management/FeaturesServiceMBean.java b/features/management/src/main/java/org/apache/karaf/features/management/FeaturesServiceMBean.java index 30e3d9c..a4781c6 100644 --- a/features/management/src/main/java/org/apache/karaf/features/management/FeaturesServiceMBean.java +++ b/features/management/src/main/java/org/apache/karaf/features/management/FeaturesServiceMBean.java @@ -58,10 +58,14 @@ public interface FeaturesServiceMBean { void uninstallFeature(String name, boolean noRefresh) throws Exception; + void uninstallFeature(String name, boolean noRefresh, boolean recursive) throws Exception; + void uninstallFeature(String name, String version) throws Exception; void uninstallFeature(String name, String version, boolean noRefresh) throws Exception; + void uninstallFeature(String name, String version, boolean noRefresh, boolean recursive) throws Exception; + String FEATURE_NAME = "Name"; String FEATURE_VERSION = "Version"; http://git-wip-us.apache.org/repos/asf/karaf/blob/f369535c/features/management/src/main/java/org/apache/karaf/features/management/internal/FeaturesServiceMBeanImpl.java ---------------------------------------------------------------------- diff --git a/features/management/src/main/java/org/apache/karaf/features/management/internal/FeaturesServiceMBeanImpl.java b/features/management/src/main/java/org/apache/karaf/features/management/internal/FeaturesServiceMBeanImpl.java index 0e577ea..ab9919e 100644 --- a/features/management/src/main/java/org/apache/karaf/features/management/internal/FeaturesServiceMBeanImpl.java +++ b/features/management/src/main/java/org/apache/karaf/features/management/internal/FeaturesServiceMBeanImpl.java @@ -293,6 +293,17 @@ public class FeaturesServiceMBeanImpl extends StandardEmitterMBean implements featuresService.uninstallFeature(name, options); } + public void uninstallFeature(String name, boolean noRefresh, boolean recursive) throws Exception { + EnumSet<FeaturesService.Option> options = EnumSet.noneOf(FeaturesService.Option.class); + if (noRefresh) { + options.add(FeaturesService.Option.NoAutoRefreshBundles); + } + if (recursive) { + options.add(FeaturesService.Option.Recursive); + } + featuresService.uninstallFeature(name, options); + } + public void uninstallFeature(String name, String version) throws Exception { featuresService.uninstallFeature(name, version); } @@ -305,6 +316,17 @@ public class FeaturesServiceMBeanImpl extends StandardEmitterMBean implements featuresService.uninstallFeature(name, version, options); } + public void uninstallFeature(String name, String version, boolean noRefresh, boolean recursive) throws Exception { + EnumSet<FeaturesService.Option> options = EnumSet.noneOf(FeaturesService.Option.class); + if (noRefresh) { + options.add(FeaturesService.Option.NoAutoRefreshBundles); + } + if (recursive) { + options.add(FeaturesService.Option.Recursive); + } + featuresService.uninstallFeature(name, version, options); + } + public void setBundleContext(BundleContext bundleContext) { this.bundleContext = bundleContext; }
