protected Object doExecute()

in bundle/core/src/main/java/org/apache/karaf/bundle/command/List.java [78:172]


    protected Object doExecute(java.util.List<Bundle> bundles) throws Exception {
        if (noFormat) {
            noEllipsis = true;
        }

        determineBundleLevelThreshold();
        
        // Display active start level.
        FrameworkStartLevel fsl = this.bundleContext.getBundle(0).adapt(FrameworkStartLevel.class);
        if (fsl != null) {
            System.out.println("START LEVEL " + fsl.getStartLevel() + " , List Threshold: " + bundleLevelThreshold);
        }

        ShellTable table = new ShellTable();
        if (!noEllipsis && terminal != null && terminal.getWidth() > 0) {
            table.size(terminal.getWidth() - 1);
        }
        table.column("ID").alignRight();
        table.column("State");
        table.column("Lvl").alignRight();
        table.column("Version");

        boolean effectiveShowName = showName || (!showLocation && !showSymbolic && !showUpdate && !showRevisions); 
        
        if (effectiveShowName) {
            table.column("Name");
        }

        if (showLocation) {
            table.column(new Col("Location") {
                @Override
                protected String cut(String value, int size) {
                    if (showLocation && value.length() > size) {
                        String[] parts = value.split("/");
                        String cut = "";
                        int c = parts[0].length() + 4;
                        for (int idx = parts.length - 1; idx > 0; idx--) {
                            if (cut.length() + c + parts[idx].length() + 1 < size) {
                                cut = "/" + parts[idx] + cut;
                            } else {
                                break;
                            }
                        }
                        cut = parts[0] + "/..." + cut;
                        return cut;
                    } else {
                        return super.cut(value, size);
                    }
                }
            });
        }
        if (showSymbolic) {
            table.column("Symbolic name");
        }
        if (showUpdate) {
            table.column("Update location");
        }
        if (showRevisions) {
            table.column("Revisions");
        }

        for (Bundle bundle : bundles) {
            BundleInfo info = this.bundleService.getInfo(bundle);
            if (info.getStartLevel() >= bundleLevelThreshold) {
                String version = info.getVersion();
                ArrayList<Object> rowData = new ArrayList<>();
                rowData.add(info.getBundleId());
                rowData.add(getStateString(info.getState()));
                rowData.add(info.getStartLevel());
                rowData.add(version);
                if (effectiveShowName) {
                    String bundleName = (info.getName() == null) ? info.getSymbolicName() : info.getName();
                    bundleName = (bundleName == null) ? info.getUpdateLocation() : bundleName;
                    String name = bundleName + printFragments(info) + printHosts(info);
                    rowData.add(name);
                }
                if (showLocation) {
                    rowData.add(info.getUpdateLocation());
                }
                if (showSymbolic) {
                    rowData.add(info.getSymbolicName() == null ? "<no symbolic name>" : info.getSymbolicName());
                }
                if (showUpdate) {
                    rowData.add(info.getUpdateLocation());
                }
                if (showRevisions) {
                    rowData.add(info.getRevisions());
                }
                Row row = table.addRow();
                row.addContent(rowData);
            }
        }
        table.print(System.out, !noFormat);
        return null;
    }