From a318bbdabe0c8e796b0afb054e38111f3d60f02f Mon Sep 17 00:00:00 2001 From: gongdewei Date: Thu, 21 May 2020 21:50:29 +0800 Subject: [PATCH] transform command: help --- .../core/command/basic1000/HelpCommand.java | 113 +++++++++++++----- .../arthas/core/command/model/ArgumentVO.java | 43 +++++++ .../core/command/model/CommandOptionVO.java | 62 ++++++++++ .../arthas/core/command/model/CommandVO.java | 94 +++++++++++++++ .../arthas/core/command/model/HelpModel.java | 51 ++++++++ .../arthas/core/command/view/HelpView.java | 48 ++++++++ .../core/util/usage/StyledUsageFormatter.java | 2 +- 7 files changed, 380 insertions(+), 33 deletions(-) create mode 100644 core/src/main/java/com/taobao/arthas/core/command/model/ArgumentVO.java create mode 100644 core/src/main/java/com/taobao/arthas/core/command/model/CommandOptionVO.java create mode 100644 core/src/main/java/com/taobao/arthas/core/command/model/CommandVO.java create mode 100644 core/src/main/java/com/taobao/arthas/core/command/model/HelpModel.java create mode 100644 core/src/main/java/com/taobao/arthas/core/command/view/HelpView.java diff --git a/core/src/main/java/com/taobao/arthas/core/command/basic1000/HelpCommand.java b/core/src/main/java/com/taobao/arthas/core/command/basic1000/HelpCommand.java index 215c6cd8e..0b37d70ef 100644 --- a/core/src/main/java/com/taobao/arthas/core/command/basic1000/HelpCommand.java +++ b/core/src/main/java/com/taobao/arthas/core/command/basic1000/HelpCommand.java @@ -1,5 +1,6 @@ package com.taobao.arthas.core.command.basic1000; +import com.taobao.arthas.core.command.model.*; import com.taobao.arthas.core.shell.cli.Completion; import com.taobao.arthas.core.shell.cli.CompletionUtils; import com.taobao.arthas.core.shell.command.AnnotatedCommand; @@ -9,24 +10,15 @@ import com.taobao.arthas.core.shell.command.CommandResolver; import com.taobao.arthas.core.shell.session.Session; import com.taobao.arthas.core.util.usage.StyledUsageFormatter; import com.taobao.middleware.cli.CLI; +import com.taobao.middleware.cli.Option; import com.taobao.middleware.cli.annotations.Argument; import com.taobao.middleware.cli.annotations.Description; import com.taobao.middleware.cli.annotations.Name; import com.taobao.middleware.cli.annotations.Summary; -import com.taobao.text.Color; -import com.taobao.text.Decoration; -import com.taobao.text.Style; -import com.taobao.text.ui.Element; -import com.taobao.text.ui.LabelElement; -import com.taobao.text.ui.TableElement; -import com.taobao.text.util.RenderUtil; import java.util.ArrayList; import java.util.List; -import static com.taobao.text.ui.Element.label; -import static com.taobao.text.ui.Element.row; - /** * @author vlinux on 14/10/26. */ @@ -47,16 +39,91 @@ public class HelpCommand extends AnnotatedCommand { public void process(CommandProcess process) { List commands = allCommands(process.session()); Command targetCmd = findCommand(commands); - String message; if (targetCmd == null) { - message = RenderUtil.render(mainHelp(commands), process.width()); + process.appendResult(createHelpModel(commands)); } else { - message = commandHelp(targetCmd, process.width()); + process.appendResult(createHelpDetailModel(targetCmd)); } - process.write(message); process.end(); } + public HelpModel createHelpDetailModel(Command targetCmd) { + return new HelpModel(createCommandVO(targetCmd, true)); + } + + private HelpModel createHelpModel(List commands) { + HelpModel helpModel = new HelpModel(); + for (Command command : commands) { + if(command.cli() == null || command.cli().isHidden()){ + continue; + } + helpModel.addCommandVO(createCommandVO(command, false)); + } + return helpModel; + } + + private CommandVO createCommandVO(Command command, boolean withDetail) { + CLI cli = command.cli(); + CommandVO commandVO = new CommandVO(); + commandVO.setName(command.name()); + if (cli!=null){ + commandVO.setSummary(cli.getSummary()); + if (withDetail){ + commandVO.setCli(cli); + StyledUsageFormatter usageFormatter = new StyledUsageFormatter(null); + String usageLine = usageFormatter.computeUsageLine(null, cli); + commandVO.setUsage(usageLine); + commandVO.setDescription(cli.getDescription()); + + //以线程安全的方式遍历options + List