Repository: karaf
Updated Branches:
  refs/heads/karaf-2.x 08cbaf434 -> 6f3015add


[KARAF-2104] Add regex support on features repositories management


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

Branch: refs/heads/karaf-2.x
Commit: 6f3015add1af87fca14f9c722af8033c0a227362
Parents: 08cbaf4
Author: Jean-Baptiste Onofré <[email protected]>
Authored: Fri Dec 19 08:03:24 2014 +0100
Committer: Jean-Baptiste Onofré <[email protected]>
Committed: Fri Dec 19 08:03:24 2014 +0100

----------------------------------------------------------------------
 .../command/RemoveRepositoryCommand.java        | 40 ++++++++++++--------
 .../features/command/RemoveUrlCommand.java      | 22 ++++++++++-
 .../management/FeaturesServiceMBean.java        |  4 ++
 .../internal/FeaturesServiceMBeanImpl.java      | 32 +++++++++++++++-
 4 files changed, 80 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/6f3015ad/features/command/src/main/java/org/apache/karaf/features/command/RemoveRepositoryCommand.java
----------------------------------------------------------------------
diff --git 
a/features/command/src/main/java/org/apache/karaf/features/command/RemoveRepositoryCommand.java
 
b/features/command/src/main/java/org/apache/karaf/features/command/RemoveRepositoryCommand.java
index efb6c71..878b4d8 100644
--- 
a/features/command/src/main/java/org/apache/karaf/features/command/RemoveRepositoryCommand.java
+++ 
b/features/command/src/main/java/org/apache/karaf/features/command/RemoveRepositoryCommand.java
@@ -16,7 +16,10 @@
  */
 package org.apache.karaf.features.command;
 
-import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.apache.felix.gogo.commands.Argument;
 import org.apache.felix.gogo.commands.Command;
@@ -26,22 +29,29 @@ import org.apache.karaf.features.Repository;
 @Command(scope = "features", name = "removeRepository", description = "Removes 
the specified repository features service.")
 public class RemoveRepositoryCommand extends FeaturesCommandSupport {
 
-    @Argument(index = 0, name = "repository", description = "Name of the 
repository to remove.", required = true, multiValued = false)
-    private String repository;
+    @Argument(index = 0, name = "repositories", description = "Name of the 
repositories to remove.", required = true, multiValued = false)
+    private List<String> repositories;
 
     protected void doExecute(FeaturesService admin) throws Exception {
-       URI uri = null;
-       for (Repository r :admin.listRepositories()) {
-               if (r.getName().equals(repository)) {
-                       uri = r.getURI();
-                       break;
-               }
-       }
+        ArrayList<Repository> repositoriesToRemove = new 
ArrayList<Repository>();
+        for (String repository : repositories) {
+            Pattern pattern = Pattern.compile(repository);
+            for (Repository r : admin.listRepositories()) {
+                Matcher matcher = pattern.matcher(r.getName());
+                if (matcher.matches()) {
+                    repositoriesToRemove.add(r);
+                }
+            }
+        }
+
+        for (Repository r : repositoriesToRemove) {
+            System.out.println("Removing repository " + r.getName() + " (" + 
r.getURI() + ")");
+            try {
+                admin.removeRepository(r.getURI());
+            } catch (Exception e) {
+                System.err.println("Can't remove repository " + r.getName() + 
" (" + r.getURI() + "): " + e.getMessage());
+            }
+        }
 
-       if (uri == null) {
-               System.out.println("Repository '" + repository + "' not 
found.") ;
-       } else {
-               admin.removeRepository(uri);
-       }
     }
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/6f3015ad/features/command/src/main/java/org/apache/karaf/features/command/RemoveUrlCommand.java
----------------------------------------------------------------------
diff --git 
a/features/command/src/main/java/org/apache/karaf/features/command/RemoveUrlCommand.java
 
b/features/command/src/main/java/org/apache/karaf/features/command/RemoveUrlCommand.java
index e592aad..0da4c9b 100644
--- 
a/features/command/src/main/java/org/apache/karaf/features/command/RemoveUrlCommand.java
+++ 
b/features/command/src/main/java/org/apache/karaf/features/command/RemoveUrlCommand.java
@@ -17,12 +17,16 @@
 package org.apache.karaf.features.command;
 
 import java.net.URI;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.apache.felix.gogo.commands.Argument;
 import org.apache.felix.gogo.commands.Command;
 import org.apache.felix.gogo.commands.Option;
 import org.apache.karaf.features.FeaturesService;
+import org.apache.karaf.features.Repository;
 
 @Command(scope = "features", name = "removeUrl", description = "Removes the 
given list of repository URLs from the features service")
 public class RemoveUrlCommand extends FeaturesCommandSupport {
@@ -34,8 +38,24 @@ public class RemoveUrlCommand extends FeaturesCommandSupport 
{
     boolean uninstall;
 
     protected void doExecute(FeaturesService admin) throws Exception {
+        ArrayList<URI> urisToRemove = new ArrayList<URI>();
         for (String url : urls) {
-            admin.removeRepository(new URI(url), uninstall);
+            Pattern pattern = Pattern.compile(url);
+            for (Repository r : admin.listRepositories()) {
+                Matcher matcher = pattern.matcher(r.getURI().toString());
+                if (matcher.matches()) {
+                    urisToRemove.add(r.getURI());
+                }
+            }
+        }
+
+        for (URI uri : urisToRemove) {
+            System.out.println("Removing repository URI " + uri);
+            try {
+                admin.removeRepository(uri, uninstall);
+            } catch (Exception e) {
+                System.err.println("Can't remove repository URI " + uri + ": " 
+ e.getMessage());
+            }
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/6f3015ad/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 4b9284b..30e3d9c 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
@@ -32,6 +32,10 @@ public interface FeaturesServiceMBean {
 
     void removeRepository(String url, boolean uninstall) throws Exception;
 
+    void removeRepositoryByName(String name) throws Exception;
+
+    void removeRepositoryByName(String name, boolean uninstall) throws 
Exception;
+
     void refreshRepository(String url) throws Exception;
 
     void installFeature(String name) throws Exception;

http://git-wip-us.apache.org/repos/asf/karaf/blob/6f3015ad/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 9a3397f..2cbfe81 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
@@ -144,11 +144,39 @@ 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);
+        Pattern pattern = Pattern.compile(uri);
+        ArrayList<URI> urisToRemove = new ArrayList<URI>();
+        for (Repository repository : featuresService.listRepositories()) {
+            Matcher matcher = pattern.matcher(repository.getURI().toString());
+            if (matcher.matches()) {
+                urisToRemove.add(repository.getURI());
+            }
+        }
+        for (URI uriToRemove : urisToRemove) {
+            featuresService.removeRepository(uriToRemove, uninstall);
+        }
+    }
+
+    public void removeRepositoryByName(String name) throws Exception {
+        removeRepositoryByName(name, false);
+    }
+    
+    public void removeRepositoryByName(String name, boolean uninstall) throws 
Exception {
+        Pattern pattern = Pattern.compile(name);
+        ArrayList<URI> urisToRemove = new ArrayList<URI>();
+        for (Repository repository : featuresService.listRepositories()) {
+            Matcher matcher = pattern.matcher(repository.getName());
+            if (matcher.matches()) {
+                urisToRemove.add(repository.getURI());
+            }
+        }
+        for (URI uriToRemove : urisToRemove) {
+            featuresService.removeRepository(uriToRemove, uninstall);
+        }
     }
 
     public void refreshRepository(String uri) throws Exception {

Reply via email to