You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2012/11/26 10:29:41 UTC

svn commit: r1413526 - in /karaf/cellar/branches/cellar-2.3.x: bundle/src/main/java/org/apache/karaf/cellar/bundle/ bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/ features/src/main/java/org/apache/karaf/cellar/features/shell/ management/src...

Author: jbonofre
Date: Mon Nov 26 09:29:40 2012
New Revision: 1413526

URL: http://svn.apache.org/viewvc?rev=1413526&view=rev
Log:
[KARAF-2031] Use Bundle-Name and Bundle-SymbolicName and mimic Karaf bundle:* commands

Modified:
    karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java
    karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleState.java
    karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java
    karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/BundleCommandSupport.java
    karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/InstallBundleCommand.java
    karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/ListBundleCommand.java
    karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StartBundleCommand.java
    karaf/cellar/branches/cellar-2.3.x/features/src/main/java/org/apache/karaf/cellar/features/shell/FeatureCommandSupport.java
    karaf/cellar/branches/cellar-2.3.x/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarBundleMBeanImpl.java

Modified: karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java?rev=1413526&r1=1413525&r2=1413526&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java (original)
+++ karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java Mon Nov 26 09:29:40 2012
@@ -54,9 +54,6 @@ public class BundleEventHandler extends 
         try {
             //Check if the pid is marked as local.
             if (isAllowed(event.getSourceGroup(), Constants.CATEGORY, event.getLocation(), EventType.INBOUND)) {
-                BundleState state = new BundleState();
-                state.setStatus(event.getType());
-
                 if (event.getType() == BundleEvent.INSTALLED) {
                     LOGGER.debug("CELLAR BUNDLE: installing bundle {} from {}", event.getId(), event.getLocation());
                     installBundleFromLocation(event.getLocation());

Modified: karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleState.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleState.java?rev=1413526&r1=1413525&r2=1413526&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleState.java (original)
+++ karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleState.java Mon Nov 26 09:29:40 2012
@@ -19,9 +19,18 @@ public class BundleState implements Seri
 
     private static final long serialVersionUID = 5933673686648413918L;
 
+    private String name;
     private String location;
     private int status;
 
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
     public String getLocation() {
         return location;
     }

Modified: karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java?rev=1413526&r1=1413525&r2=1413526&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java (original)
+++ karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java Mon Nov 26 09:29:40 2012
@@ -59,6 +59,7 @@ public class LocalBundleListener extends
             if (groups != null && !groups.isEmpty()) {
                 for (Group group : groups) {
 
+                    String name = (String) event.getBundle().getHeaders().get(org.osgi.framework.Constants.BUNDLE_NAME);
                     String symbolicName = event.getBundle().getSymbolicName();
                     String version = event.getBundle().getVersion().toString();
                     String bundleLocation = event.getBundle().getLocation();
@@ -78,6 +79,7 @@ public class LocalBundleListener extends
                                 if (state == null) {
                                     state = new BundleState();
                                 }
+                                state.setName(name);
                                 state.setStatus(type);
                                 state.setLocation(bundleLocation);
                                 bundles.put(symbolicName + "/" + version, state);

Modified: karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/BundleCommandSupport.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/BundleCommandSupport.java?rev=1413526&r1=1413525&r2=1413526&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/BundleCommandSupport.java (original)
+++ karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/BundleCommandSupport.java Mon Nov 26 09:29:40 2012
@@ -14,17 +14,20 @@
 package org.apache.karaf.cellar.bundle.shell;
 
 import org.apache.felix.gogo.commands.Argument;
+import org.apache.felix.gogo.commands.Option;
 import org.apache.karaf.cellar.bundle.BundleState;
 import org.apache.karaf.cellar.core.shell.CellarCommandSupport;
 
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 public abstract class BundleCommandSupport extends CellarCommandSupport {
 
     @Argument(index = 0, name = "group", description = "The cluster group name.", required = true, multiValued = false)
     String groupName;
 
-    @Argument(index = 1, name = "id", description = "The bundle ID or symbolic name.", required = true, multiValued = false)
+    @Argument(index = 1, name = "id", description = "The bundle ID or name.", required = true, multiValued = false)
     String name;
 
     @Argument(index = 2, name = "version", description = "The bundle version.", required = false, multiValued = false)
@@ -56,17 +59,74 @@ public abstract class BundleCommandSuppo
                 // ignore
             }
             if (id == -1) {
+
+                // add regex support
+                Pattern namePattern = Pattern.compile(name);
+
                 // looking for bundle using only the name
                 for (String bundle : distributedBundles.keySet()) {
-                    if (bundle.startsWith(name)) {
-                        key = bundle;
-                        break;
+                    BundleState state = distributedBundles.get(bundle);
+                    if (state.getName() != null) {
+                        // bundle name is populated, check if it matches the regex
+                        Matcher matcher = namePattern.matcher(state.getName());
+                        if (matcher.find()) {
+                            key = bundle;
+                            break;
+                        } else {
+                            // not matched on bundle name, fall back to symbolic name and check if it matches the regex
+                            String split[] = bundle.split("/");
+                            matcher = namePattern.matcher(split[0]);
+                            if (matcher.find()) {
+                                key = bundle;
+                                break;
+                            }
+                        }
+                    } else {
+                        // no bundle name, fall back to symbolic name and check if it matches the regex
+                        String split[] = bundle.split("/");
+                        System.out.println("Bundle-SymbolicName: " + split[0]);
+                        Matcher matcher = namePattern.matcher(split[0]);
+                        if (matcher.find()) {
+                            key = bundle;
+                            break;
+                        }
                     }
                 }
             }
         } else {
             // looking for the bundle using name and version
-            key = name + "/" + version;
+
+            // add regex support of the name
+            Pattern namePattern = Pattern.compile(name);
+
+            for (String bundle : distributedBundles.keySet()) {
+                String[] split = bundle.split("/");
+                BundleState state = distributedBundles.get(bundle);
+                if (split[1].equals(version)) {
+                    if (state.getName() != null) {
+                        // bundle name is populated, check if it matches the regex
+                        Matcher matcher = namePattern.matcher(state.getName());
+                        if (matcher.find()) {
+                            key = bundle;
+                            break;
+                        } else {
+                            // no match on bundle name, fall back to symbolic name and check if it matches the regex
+                            matcher = namePattern.matcher(split[0]);
+                            if (matcher.find()) {
+                                key = bundle;
+                                break;
+                            }
+                        }
+                    } else {
+                        // no bundle name, fall back to symbolic name and check if it matches the regex
+                        Matcher matcher = namePattern.matcher(split[0]);
+                        if (matcher.find()) {
+                            key = bundle;
+                            break;
+                        }
+                    }
+                }
+            }
         }
         return key;
     }

Modified: karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/InstallBundleCommand.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/InstallBundleCommand.java?rev=1413526&r1=1413525&r2=1413526&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/InstallBundleCommand.java (original)
+++ karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/InstallBundleCommand.java Mon Nov 26 09:29:40 2012
@@ -75,7 +75,11 @@ public class InstallBundleCommand extend
                 // get the name and version in the location MANIFEST
                 JarInputStream jarInputStream = new JarInputStream(new URL(url).openStream());
                 Manifest manifest = jarInputStream.getManifest();
-                String name = manifest.getMainAttributes().getValue("Bundle-SymbolicName");
+                String name = manifest.getMainAttributes().getValue("Bundle-Name");
+                String symbolicName = manifest.getMainAttributes().getValue("Bundle-SymbolicName");
+                if (name == null) {
+                    name = symbolicName;
+                }
                 String version = manifest.getMainAttributes().getValue("Bundle-Version");
                 jarInputStream.close();
 
@@ -86,19 +90,20 @@ public class InstallBundleCommand extend
                     // populate the cluster map
                     Map<String, BundleState> bundles = clusterManager.getMap(Constants.BUNDLE_MAP + Configurations.SEPARATOR + groupName);
                     BundleState state = new BundleState();
+                    state.setName(name);
                     state.setLocation(url);
                     if (start) {
                         state.setStatus(BundleEvent.STARTED);
                     } else {
                         state.setStatus(BundleEvent.INSTALLED);
                     }
-                    bundles.put(name + "/" + version, state);
+                    bundles.put(symbolicName + "/" + version, state);
                 } finally {
                     Thread.currentThread().setContextClassLoader(originalClassLoader);
                 }
 
                 // broadcast the cluster event
-                RemoteBundleEvent event = new RemoteBundleEvent(name, version, url, BundleEvent.INSTALLED);
+                RemoteBundleEvent event = new RemoteBundleEvent(symbolicName, version, url, BundleEvent.INSTALLED);
                 event.setSourceGroup(group);
                 eventProducer.produce(event);
             } else {

Modified: karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/ListBundleCommand.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/ListBundleCommand.java?rev=1413526&r1=1413525&r2=1413526&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/ListBundleCommand.java (original)
+++ karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/ListBundleCommand.java Mon Nov 26 09:29:40 2012
@@ -34,8 +34,11 @@ public class ListBundleCommand extends C
     @Argument(index = 0, name = "group", description = "The cluster group name.", required = true, multiValued = false)
     String groupName;
 
-    @Option(name = "-l", aliases = {}, description = "Show the locations", required = false, multiValued = false)
-    boolean showLoc;
+    @Option(name = "-s", aliases = {}, description = "Shows the symbolic name", required = false, multiValued = false)
+    boolean showSymbolicName;
+
+    @Option(name = "-l", aliases = {}, description = "Shows the location", required = false, multiValued = false)
+    boolean showLocation;
 
     @Override
     protected Object doExecute() throws Exception {
@@ -57,13 +60,13 @@ public class ListBundleCommand extends C
                 int id = 0;
                 for (String bundle : bundles.keySet()) {
                     String[] tokens = bundle.split("/");
-                    String name = null;
+                    String symbolicName = null;
                     String version = null;
                     if (tokens.length == 2) {
-                        name = tokens[0];
+                        symbolicName = tokens[0];
                         version = tokens[1];
                     } else {
-                        name = bundle;
+                        symbolicName = bundle;
                         version = "";
                     }
                     BundleState state = bundles.get(bundle);
@@ -94,10 +97,14 @@ public class ListBundleCommand extends C
                             status = "";
                             break;
                     }
-                    if (showLoc) {
+                    if (showLocation) {
                         System.out.println(String.format(OUTPUT_FORMAT, id, status, state.getLocation()));
                     } else {
-                        System.out.println(String.format(OUTPUT_FORMAT, id, status, name + " (" + version + ")"));
+                        if (showSymbolicName) {
+                            System.out.println(String.format(OUTPUT_FORMAT, id, status, symbolicName + " (" + version + ")"));
+                        } else {
+                            System.out.println(String.format(OUTPUT_FORMAT, id, status, state.getName() + " (" + version + ")"));
+                        }
                     }
                     id++;
                 }

Modified: karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StartBundleCommand.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StartBundleCommand.java?rev=1413526&r1=1413525&r2=1413526&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StartBundleCommand.java (original)
+++ karaf/cellar/branches/cellar-2.3.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StartBundleCommand.java Mon Nov 26 09:29:40 2012
@@ -13,7 +13,6 @@
  */
 package org.apache.karaf.cellar.bundle.shell;
 
-import org.apache.felix.gogo.commands.Argument;
 import org.apache.felix.gogo.commands.Command;
 import org.apache.karaf.cellar.bundle.BundleState;
 import org.apache.karaf.cellar.bundle.Constants;
@@ -24,7 +23,6 @@ import org.apache.karaf.cellar.core.Grou
 import org.apache.karaf.cellar.core.control.SwitchStatus;
 import org.apache.karaf.cellar.core.event.EventProducer;
 import org.apache.karaf.cellar.core.event.EventType;
-import org.apache.karaf.cellar.core.shell.CellarCommandSupport;
 import org.osgi.framework.BundleEvent;
 
 import java.util.Map;

Modified: karaf/cellar/branches/cellar-2.3.x/features/src/main/java/org/apache/karaf/cellar/features/shell/FeatureCommandSupport.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.3.x/features/src/main/java/org/apache/karaf/cellar/features/shell/FeatureCommandSupport.java?rev=1413526&r1=1413525&r2=1413526&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.3.x/features/src/main/java/org/apache/karaf/cellar/features/shell/FeatureCommandSupport.java (original)
+++ karaf/cellar/branches/cellar-2.3.x/features/src/main/java/org/apache/karaf/cellar/features/shell/FeatureCommandSupport.java Mon Nov 26 09:29:40 2012
@@ -56,8 +56,6 @@ public abstract class FeatureCommandSupp
             Group group = groupManager.findGroupByName(groupName);
             if (group == null || group.getNodes().isEmpty()) {
 
-                System.out.println("Here1");
-
                 FeatureInfo info = new FeatureInfo(feature, version);
                 Map<FeatureInfo, Boolean> features = clusterManager.getMap(Constants.FEATURES + Configurations.SEPARATOR + groupName);
                 // check the existing configuration

Modified: karaf/cellar/branches/cellar-2.3.x/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarBundleMBeanImpl.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.3.x/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarBundleMBeanImpl.java?rev=1413526&r1=1413525&r2=1413526&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.3.x/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarBundleMBeanImpl.java (original)
+++ karaf/cellar/branches/cellar-2.3.x/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarBundleMBeanImpl.java Mon Nov 26 09:29:40 2012
@@ -33,6 +33,8 @@ import java.net.URL;
 import java.util.Map;
 import java.util.jar.JarInputStream;
 import java.util.jar.Manifest;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * Implementation of the Cellar bundle MBean.
@@ -377,17 +379,73 @@ public class CellarBundleMBeanImpl exten
                 // ignore
             }
             if (id == -1) {
+
+                // add regex support
+                Pattern namePattern = Pattern.compile(name);
+
                 // looking for bundle using only the name
                 for (String bundle : distributedBundles.keySet()) {
-                    if (bundle.startsWith(name)) {
-                        key = bundle;
-                        break;
+                    BundleState state = distributedBundles.get(bundle);
+                    if (state.getName() != null) {
+                        // bundle name is populated, check if it matches the regex
+                        Matcher matcher = namePattern.matcher(state.getName());
+                        if (matcher.find()) {
+                            key = bundle;
+                            break;
+                        } else {
+                            // no match on bundle name, fall back to symbolic name and check if it matches the regex
+                            String[] split = bundle.split("/");
+                            matcher = namePattern.matcher(split[0]);
+                            if (matcher.find()) {
+                                key = bundle;
+                                break;
+                            }
+                        }
+                    } else {
+                        // no bundle name, fall back to symbolic name and check if it matches the regex
+                        String[] split = bundle.split("/");
+                        Matcher matcher = namePattern.matcher(split[0]);
+                        if (matcher.find()) {
+                            key = bundle;
+                            break;
+                        }
                     }
                 }
             }
         } else {
             // looking for the bundle using name and version
-            key = name + "/" + version;
+
+            // add regex support of the name
+            Pattern namePattern = Pattern.compile(name);
+
+            for (String bundle : distributedBundles.keySet()) {
+                String[] split = bundle.split("/");
+                BundleState state = distributedBundles.get(bundle);
+                if (split[1].equals(version)) {
+                    if (state.getName() != null) {
+                        // bundle name is populated, check if it matches the regex
+                        Matcher matcher = namePattern.matcher(state.getName());
+                        if (matcher.find()) {
+                            key = bundle;
+                            break;
+                        } else {
+                            // no match on bundle name, fall back to symbolic name and check if it matches the regex
+                            matcher = namePattern.matcher(split[0]);
+                            if (matcher.find()) {
+                                key = bundle;
+                                break;
+                            }
+                        }
+                    } else {
+                        // no bundle name, fall back to symbolic name and check if it matches the regex
+                        Matcher matcher = namePattern.matcher(split[0]);
+                        if (matcher.find()) {
+                            key = bundle;
+                            break;
+                        }
+                    }
+                }
+            }
         }
         return key;
     }