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