in bundle/core/src/main/java/org/apache/karaf/bundle/command/FindClass.java [59:149]
protected void findResource() {
Bundle[] bundles = bundleContext.getBundles();
String path;
String filter;
int idx = className.lastIndexOf('.');
if (idx >= 0) {
path = className.substring(0, idx).replace('.', '/');
if (path.isEmpty() || path.charAt(0) != '/') {
path = "/" + path;
}
filter = className.substring(idx + 1) + ".class";
} else {
path = "/";
filter = "*" + className + "*";
}
if (!verbose) {
// old behavior
for (Bundle bundle:bundles){
BundleWiring wiring = bundle.adapt(BundleWiring.class);
if (wiring != null){
Collection<String> resources = wiring.listResources(path, filter, BundleWiring.LISTRESOURCES_RECURSE);
if (resources.size() > 0){
String title = ShellUtil.getBundleName(bundle);
System.out.println("\n" + title);
}
for (String resource:resources){
System.out.println(resource);
}
} else {
System.out.println("Bundle " + bundle.getBundleId() + " is not resolved.");
}
}
} else {
// more information
for (Bundle bundle : bundles) {
BundleWiring wiring = bundle.adapt(BundleWiring.class);
if (wiring != null) {
// own content and attached fragments' content
List<URL> entries = wiring.findEntries(path, filter, BundleWiring.FINDENTRIES_RECURSE);
boolean hasEntries = entries != null && !entries.isEmpty();
// entries visible through wires
Collection<String> resources = wiring.listResources(path, filter, BundleWiring.LISTRESOURCES_RECURSE);
boolean hasResources = resources != null && !resources.isEmpty();
if (hasEntries || hasResources) {
String title = ShellUtil.getBundleName(bundle);
System.out.println("\n" + title);
}
if (hasEntries) {
System.out.println(" Resources from this bundle (and its fragments) content:");
for (URL entry : entries) {
System.out.println(" " + entry);
}
}
if (hasResources) {
Set<String> reqBundles = new LinkedHashSet<>();
Set<String> importedPackages = new LinkedHashSet<>();
for (BundleWire bw : wiring.getRequiredWires(null)) {
BundleCapability cap = bw.getCapability();
BundleRevision rcap = cap == null ? null : cap.getResource();
if (cap == null || rcap == null
|| rcap.getWiring() == null || rcap.getWiring().getBundle() == null) {
continue;
}
Collection<String> res = rcap.getWiring().listResources(path, filter, BundleWiring.LISTRESOURCES_RECURSE);
for (String r : res) {
if (cap.getNamespace().equals(BundleRevision.PACKAGE_NAMESPACE)) {
importedPackages.add(" " + r + " (visible through " + BundleRevision.PACKAGE_NAMESPACE + " from " + ShellUtil.getBundleName(rcap.getWiring().getBundle()) + ")");
} else if (cap.getNamespace().equals(BundleRevision.BUNDLE_NAMESPACE)) {
reqBundles.add(" " + r + " (visible through " + BundleRevision.BUNDLE_NAMESPACE + " from " + ShellUtil.getBundleName(rcap.getWiring().getBundle()) + ")");
}
}
}
if (!(importedPackages.isEmpty() && reqBundles.isEmpty())) {
System.out.println(" Resources from bundle or wired bundles:");
for (String v : importedPackages) {
System.out.println(v);
}
for (String v : reqBundles) {
System.out.println(v);
}
}
}
} else {
System.out.println("Bundle " + bundle.getBundleId() + " is not resolved.");
}
}
}
}