[KARAF-3545] The bundle:list command should display ellipsis when displaying long bundle locations
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/47414d98 Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/47414d98 Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/47414d98 Branch: refs/heads/master Commit: 47414d989d9c055aa4da9d2a8b18a119852f14bc Parents: f621963 Author: Guillaume Nodet <[email protected]> Authored: Fri Feb 20 11:06:35 2015 +0100 Committer: Guillaume Nodet <[email protected]> Committed: Fri Feb 20 11:06:35 2015 +0100 ---------------------------------------------------------------------- .../org/apache/karaf/bundle/command/List.java | 39 +++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/47414d98/bundle/core/src/main/java/org/apache/karaf/bundle/command/List.java ---------------------------------------------------------------------- diff --git a/bundle/core/src/main/java/org/apache/karaf/bundle/command/List.java b/bundle/core/src/main/java/org/apache/karaf/bundle/command/List.java index 14b2523..82119c0 100644 --- a/bundle/core/src/main/java/org/apache/karaf/bundle/command/List.java +++ b/bundle/core/src/main/java/org/apache/karaf/bundle/command/List.java @@ -24,6 +24,8 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.Option; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; +import org.apache.karaf.shell.api.console.Terminal; +import org.apache.karaf.shell.support.table.Col; import org.apache.karaf.shell.support.table.ShellTable; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; @@ -48,18 +50,28 @@ public class List extends BundlesCommand { @Option(name = "--no-format", description = "Disable table rendered output", required = false, multiValued = false) boolean noFormat; + @Option(name = "--no-ellipsis") + boolean noEllipsis; + @Reference BundleContext bundleContext; @Reference BundleService bundleService; + @Reference + Terminal terminal; + @Override protected void executeOnBundle(Bundle bundle) throws Exception { } @Override protected Object doExecute(java.util.List<Bundle> bundles) throws Exception { + if (noFormat) { + noEllipsis = true; + } + determineBundleLevelThreshold(); // Display active start level. @@ -69,12 +81,35 @@ public class List extends BundlesCommand { } ShellTable table = new ShellTable(); + if (!noEllipsis && showLocation && terminal != null && terminal.getWidth() > 0) { + table.size(terminal.getWidth()); + } table.column("ID").alignRight(); table.column("State"); table.column("Lvl").alignRight(); table.column("Version"); - table.column(getNameHeader()); - + table.column(new Col(getNameHeader()) { + @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); + } + } + }); + for (Bundle bundle : bundles) { BundleInfo info = this.bundleService.getInfo(bundle); if (info.getStartLevel() >= bundleLevelThreshold) {
