in bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/BundleCommandSupport.java [71:195]
protected void addMatchingBundles(String nameId, List<String> bundles, Map<String, ExtendedBundleState> clusterBundles) {
// id is a number
Pattern pattern = Pattern.compile("^\\d+$");
Matcher matcher = pattern.matcher(nameId);
if (matcher.matches()) {
int id = Integer.parseInt(nameId);
for (String bundle : clusterBundles.keySet()) {
if (clusterBundles.get(bundle).getId() == id) {
bundles.add(bundle);
break;
}
}
return;
}
// id as a number range
pattern = Pattern.compile("^(\\d+)-(\\d+)$");
matcher = pattern.matcher(nameId);
if (matcher.matches()) {
int index = nameId.indexOf('-');
long startId = Long.parseLong(nameId.substring(0, index));
long endId = Long.parseLong(nameId.substring(index + 1));
if (startId < endId) {
int bundleIndex = 0;
for (String bundle : clusterBundles.keySet()) {
if (bundleIndex >= startId && bundleIndex <= endId) {
bundles.add(bundle);
}
bundleIndex++;
}
}
return;
}
int index = nameId.indexOf('/');
if (index != -1) {
// id is name/version
String[] idSplit = nameId.split("/");
String name = idSplit[0];
String version = idSplit[1];
for (String bundle : clusterBundles.keySet()) {
String[] bundleSplit = bundle.split("/");
if (bundleSplit[1].equals(version)) {
// regex on the name
Pattern namePattern = Pattern.compile(name);
BundleState state = clusterBundles.get(bundle);
if (state.getName() != null) {
// bundle name is populated, check if it matches the regex
matcher = namePattern.matcher(state.getName());
if (matcher.matches()) {
bundles.add(bundle);
} else {
// no match on bundle name, fall back to id and check if it matches the regex
matcher = namePattern.matcher(bundleSplit[0]);
if (matcher.matches()) {
bundles.add(bundle);
}
}
} else if (state.getSymbolicName() != null) {
// bundle symbolic name is populated, check if it matches the regex
matcher = namePattern.matcher(state.getSymbolicName());
if (matcher.matches()) {
bundles.add(bundle);
} else {
// no match on bundle symbolic name, fall back to id and check if it matches the regex
matcher = namePattern.matcher(bundleSplit[0]);
if (matcher.matches()) {
bundles.add(bundle);
}
}
} else {
// no bundle name, fall back to id and check if it matches the regex
matcher = namePattern.matcher(bundleSplit[0]);
if (matcher.matches()) {
bundles.add(bundle);
}
}
}
}
return;
}
// id is just name
// regex support on the name
Pattern namePattern = Pattern.compile(nameId);
// looking for bundle using only the name
for (String bundle : clusterBundles.keySet()) {
BundleState state = clusterBundles.get(bundle);
if (state.getName() != null) {
// bundle name is populated, check if it matches the regex
matcher = namePattern.matcher(state.getName());
if (matcher.matches()) {
bundles.add(bundle);
} else {
// no match on bundle name, fall back to id and check if it matches the regex
String[] idSplit = bundle.split("/");
matcher = namePattern.matcher(idSplit[0]);
if (matcher.matches()) {
bundles.add(bundle);
}
}
} else if (state.getSymbolicName() != null) {
// bundle symbolic name is populated, check if it matches the regex
matcher = namePattern.matcher(state.getSymbolicName());
if (matcher.matches()) {
bundles.add(bundle);
} else {
// no match on bundle symbolic name, fall back to id and check if it matches the regex
String[] idSplit = bundle.split("/");
matcher = namePattern.matcher(idSplit[0]);
if (matcher.matches()) {
bundles.add(bundle);
}
}
} else {
// no bundle name, fall back to id and check if it matches the regex
String[] idSplit = bundle.split("/");
matcher = namePattern.matcher(idSplit[0]);
if (matcher.matches()) {
bundles.add(bundle);
}
}
}
}