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);

Reply via email to