Repository: karaf Updated Branches: refs/heads/master b079b93e5 -> a0d07a32c
[KARAF-2104] Add regex support on removeRepository() operation on the FeaturesMBean Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/a0d07a32 Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/a0d07a32 Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/a0d07a32 Branch: refs/heads/master Commit: a0d07a32c4eaaf4c3d23ce7bf9b45b83d43f1b70 Parents: b079b93 Author: Jean-Baptiste Onofré <[email protected]> Authored: Thu Dec 11 17:48:11 2014 +0100 Committer: Jean-Baptiste Onofré <[email protected]> Committed: Thu Dec 11 17:48:11 2014 +0100 ---------------------------------------------------------------------- .../management/FeaturesServiceMBeanImpl.java | 29 ++++++++++++++++++-- .../org/apache/karaf/itests/FeatureTest.java | 14 ++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/a0d07a32/features/core/src/main/java/org/apache/karaf/features/internal/management/FeaturesServiceMBeanImpl.java ---------------------------------------------------------------------- diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/management/FeaturesServiceMBeanImpl.java b/features/core/src/main/java/org/apache/karaf/features/internal/management/FeaturesServiceMBeanImpl.java index 35d6481..572765b 100644 --- a/features/core/src/main/java/org/apache/karaf/features/internal/management/FeaturesServiceMBeanImpl.java +++ b/features/core/src/main/java/org/apache/karaf/features/internal/management/FeaturesServiceMBeanImpl.java @@ -132,11 +132,36 @@ public class FeaturesServiceMBeanImpl extends StandardEmitterMBean implements } public void removeRepository(String uri) throws Exception { - featuresService.removeRepository(new URI(uri)); + removeRepository(uri, false); } public void removeRepository(String uri, boolean uninstall) throws Exception { - featuresService.removeRepository(new URI(uri), uninstall); + List<URI> uris = new ArrayList<>(); + Pattern pattern = Pattern.compile(uri); + for (Repository repository : featuresService.listRepositories()) { + if (repository.getName() != null && !repository.getName().isEmpty()) { + // first regex on the repository name + Matcher nameMatcher = pattern.matcher(repository.getName()); + if (nameMatcher.matches()) { + uris.add(repository.getURI()); + } else { + // fallback to repository URI regex + Matcher uriMatcher = pattern.matcher(repository.getURI().toString()); + if (uriMatcher.matches()) { + uris.add(repository.getURI()); + } + } + } else { + // repository name is not defined, fallback to repository URI regex + Matcher uriMatcher = pattern.matcher(repository.getURI().toString()); + if (uriMatcher.matches()) { + uris.add(repository.getURI()); + } + } + } + for (URI u : uris) { + featuresService.removeRepository(u, uninstall); + } } public void refreshRepository(String uri) throws Exception { http://git-wip-us.apache.org/repos/asf/karaf/blob/a0d07a32/itests/src/test/java/org/apache/karaf/itests/FeatureTest.java ---------------------------------------------------------------------- diff --git a/itests/src/test/java/org/apache/karaf/itests/FeatureTest.java b/itests/src/test/java/org/apache/karaf/itests/FeatureTest.java index 64efffc..5e9c13e 100644 --- a/itests/src/test/java/org/apache/karaf/itests/FeatureTest.java +++ b/itests/src/test/java/org/apache/karaf/itests/FeatureTest.java @@ -117,6 +117,20 @@ public class FeatureTest extends KarafTestSupport { } @Test + public void repoAddRemoveWithRegexViaMBean() throws Exception { + JMXConnector connector = null; + try { + connector = this.getJMXConnector(); + MBeanServerConnection connection = connector.getMBeanServerConnection(); + ObjectName name = new ObjectName("org.apache.karaf:type=feature,name=root"); + connection.invoke(name, "addRepository", new Object[] { "mvn:org.apache.karaf.cellar/apache-karaf-cellar/3.0.0/xml/features" }, new String[]{ "java.lang.String" }); + connection.invoke(name, "removeRepository", new Object[] { ".*apache-karaf-cellar.*" }, new String[]{ "java.lang.String" }); + } finally { + close(connector); + } + } + + @Test public void repoRefreshCommand() throws Exception { String refreshedRepo = executeCommand("feature:repo-refresh .*pax.*"); assertContains("pax-cdi", refreshedRepo);
