From e35db04d37e98688c20c6f42fff0c5ce892aa728 Mon Sep 17 00:00:00 2001 From: Kanagaraj Manickam k00365106 Date: Thu, 31 Aug 2017 15:33:29 +0530 Subject: [PATCH] Make interactive mode as default CLI-37 Change-Id: Ic1ea32d4d38a46652de3fe7840391e76bc35a934 Signed-off-by: Kanagaraj Manickam k00365106 --- README.md | 48 ++++++++++++++++----- deployment/http/web/index.html | 47 +++++++++++++++----- deployment/http/web/onap-cli.png | Bin 0 -> 29672 bytes .../java/org/onap/cli/fw/OnapCommandRegistrar.java | 48 +++++++++++++++------ main/src/main/java/org/onap/cli/main/OnapCli.java | 41 +++++++----------- .../org/onap/cli/main/conf/OnapCliConstants.java | 3 +- main/src/main/resources/onap-readme.txt | 3 -- .../java/org/onap/cli/main/OnapCliMainTest.java | 9 +--- 8 files changed, 125 insertions(+), 74 deletions(-) create mode 100644 deployment/http/web/onap-cli.png diff --git a/README.md b/README.md index b1ef55d1..29f78d75 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,45 @@ -Onap Command-line interface (CLI). +ONAP Command-line interface (CLI) +================================== -One Command to command whole Onap !! It provides the unified commands -to access and operate Onap functionalities. To use this CLI, please -configure the following environment variables: +**One Command to command whole Onap !!** -1. ONAP_HOST_URL - Onap Micro service bus(MSB) URL or a service URL -2. ONAP_USERNAME - Onap user name -3. ONAP_PASSWORD - Onap user password +Provides unified commands to operate ONAP from Linux console. +Configure the following environment variables, before using it: -To know the CLI version, type onap [-v|--version] -To know the CLI usage, type onap [-h|--help] -To know the usage of sub commands, type onap [-h|--help] +1. **ONAP_HOST_URL** - Onap Micro service bus(MSB) URL or a service URL +2. **ONAP_USERNAME** - Onap user name +3. **ONAP_PASSWORD** - Onap user password +To Run a command +----------------- +Type **onap ** from linux console. + +To Run in Interactive mode +-------------------------- +Type **onap** from linux console + +Set the product version +------------------------ +CLI framework is enhanced to handle multiple product versions at same +time. so to choose the product version, set evironment variable +**CLI_PROUDCT_VERSION**. + +NOTE: In interactive mode, product version can be selected using +typing **use ** + +Run *onap [-v|--version]* to see the CLI and available product version details + +Help +---- +*onap [-h|--help]* +*onap [-h|--help]* + +Debug Mode +---------- To run in debug mode, set following environment variables: 1. ONAP_CLI_DEBUG - By default its false, otherwise Set to true 2. ONAP_CLI_DEBUG_PORT - By default it is 5005, otherwise set to new TCP port number -To know more, please refer the Onap wiki https://wiki.onap.org +More details +------------- +https://wiki.onap.org \ No newline at end of file diff --git a/deployment/http/web/index.html b/deployment/http/web/index.html index f44cc907..ea2491a9 100644 --- a/deployment/http/web/index.html +++ b/deployment/http/web/index.html @@ -1,10 +1,37 @@ - - - - ONAP CLI - - - -Please download ONAP CLI from here - - + +ONAP CLI +

ONAP Command-line interface (CLI)

+

One Command to command whole Onap !!

+

Provides unified commands to operate ONAP from Linux console.
+Configure the following environment variables, before using it:

+
    +
  1. ONAP_HOST_URL - Onap Micro service bus(MSB) URL or a service URL
  2. +
  3. ONAP_USERNAME - Onap user name
  4. +
  5. ONAP_PASSWORD - Onap user password
  6. +
+

To Run a command

+

Type onap <command> from linux console.

+

To Run in Interactive mode

+

Type onap from linux console

+

Set the product version

+

CLI framework is enhanced to handle multiple product versions at same
+time. so to choose the product version, set evironment variable
+CLI_PROUDCT_VERSION.

+

NOTE: In interactive mode, product version can be selected using
+typing use <product-version>

+

Run onap [-v|–version] to see the CLI and available product version details

+

Help

+

onap [-h|–help]
+onap <command> [-h|–help]

+

Debug Mode

+

To run in debug mode, set following environment variables:

+
    +
  1. ONAP_CLI_DEBUG - By default its false, otherwise Set to true
  2. +
  3. ONAP_CLI_DEBUG_PORT - By default it is 5005, otherwise set to new TCP port number
  4. +
+

More details

+

https://wiki.onap.org

+ +

To download

+

Please download ONAP CLI here

+ \ No newline at end of file diff --git a/deployment/http/web/onap-cli.png b/deployment/http/web/onap-cli.png new file mode 100644 index 0000000000000000000000000000000000000000..60c3e151a7e78e418fcc72e49d68f565664fce07 GIT binary patch literal 29672 zcmV*jKuo`hP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&bA3rfK~#8N?Y#$} zZdX1Frw_4fY1G1vU|cS@3TPWB1O%^G{JZ_P4hS#ys69AnNk*IJod z>b>E0S6^j6^`ht5(&D_;CMGSP&s#Q^wM-^smdP3<*B#R^`610PIUh$bWs=`O10A7+ z+o6Pcl;(E)8v&7y3phc@2HkGlQ4x6f%~(d)I2^miW7B#Qa84p(e9SK76vO3%F)|(F zS4nc>iKzn}?c1Q3Hx%PXU6Lfavz$W6G2zFt5da;X_V(%64375SiP((j*jzR!#*A^` z6BPu^p)3^X2b3{&DAFVBNUY{$j;FFziZ z@B|v?8h4D-2Ji9FcN7v`Iv+Iv9GhZ;h=XpgB>L3{^4q129H8ifJOnvYLy^Z&ZqI5g zJ1_P4qDORGehG!}kZ=?}mQSzSwfThw_YSx3*kL)>M1f<(=dsZvitfSC24c@5nDU1d zP-GOV^Xf+o9v_AO4jMitIqHhtdAuHDlo$t;YYbc-q@VGOA&=x|jO2BpPx1)lf%0yE z;}{r?xMNH>LrG5I;{AV=GY-hZLTC)i;!5g#6o1lwqj1j`2LZ~3x+e+3DdC5bQ;dl; z@{QUrP^>aEYNo{RQ89iLx54CDxl<1Qy-gExe-bZGY)ewdmP=Y~>{szhlu>@(vXVE; zZlsI9V;P52$Y6t#YupIla1G?nx>tUkLsrqjImB^-aE0vLCI8X+5`xysPEAZ$E*pe3 zjJ6~agO?M|4t0+RCkm25=>8BSfZ<9?_v}3)G{Q#3MhQd;AzNz6zs^Y#Z%l|Z&Jsi} z1RO<5BVK~N9pv&fo`*9eNs{YuN*ta}^>c=hAY7$qq&`gYg(tcEz@Sk5(Z-F%6t6M0%(AU+7SWtj@814jTQ(^qjpt<)n?B&-tl)xLzp6M-Snn*qEn&{93&7 zFvZk(m0I2mwIvvj_=XZ@&y~9CP!;yq%A`F@&5Kq z$lJ?vuF#wwId+DJv-}&WLmg@HP^XZ7L@FoxgGAvMU(&(Jm4>so5BZPf5`uIJe10v# z(8rzKMD71 zR&k!U2fz{H0WpeR0BMu2s|MdkpdYYhN^>?>3LC}XYCYfp7`~Xbq5Iv*1wN( z9!VAyCyy6Gh8ujLP!CQ17~yoL6Uc`&FsXN)SHTn=Q-s!oCuvAn_<>nrG-_-B{0Nhi zS6F$H2rq}%OZmb|h*yE1B#mER5>F>9oX#2$uYdfZ!qH8pc>TxocZZWARk+J&C@{%S zWk|rBmBZ_&QWQWe@i7M+goN|}E(G!yM$XWd#BriJ_?=B@sLufP28$At-pf#Sv=?m^ z>+IsGK0vrVL6U}Yyw1)QqG%f@PVOf|xw&M(x zl7*M3Fk~cQPv(H3e)!4LI~ZYA1-#RV@c5+R={*0VI@CrrPp*ejGH3vjc)e&_k5B*w zhcxiXB_1!(%L~=gpZo)r;kLTsv$}v#A`H|bD$hZ(hP(TLn6-?e)@iNK}q>xpr9nbD0wvq z>jK@RRHD&9;c2|Z5O?>|)5LfqkXy{e|7l=2$%i~Vu`|iZg~6Ld${(*ifGzsTJju^T z*Tk=ML<7Xw#6B>38bBep>J|hPKFX1xsevdJh765^P{OQ#vJaIdO-Sd(CD-Hvk~D@_ zn?D~~ln>XUe1d5LDWTke4=21XtdvV~;^;8q@l%AS9Ssj5AJ2xNKu+hO-jpLZ0HPf{ zAL7WL>p{$+kiVyfhjd(9auDR{TpEMZ`N`a`4^R-M^osOw%J5R<^x%+ZU?79w4+9WC zI`EU9E`aun{S?yctUT#McayWXF%0D86$xSFLpc5F^>8jP&pq;a9q|yx1u{_K_6me- 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 literal 0 HcmV?d00001 diff --git a/framework/src/main/java/org/onap/cli/fw/OnapCommandRegistrar.java b/framework/src/main/java/org/onap/cli/fw/OnapCommandRegistrar.java index 39f684cc..a58cfd54 100644 --- a/framework/src/main/java/org/onap/cli/fw/OnapCommandRegistrar.java +++ b/framework/src/main/java/org/onap/cli/fw/OnapCommandRegistrar.java @@ -238,15 +238,19 @@ public class OnapCommandRegistrar { String configuredProductVersion = OnapCommandConfg.getEnabledProductVersion(); String errorNote = ""; + String usageNote = "\n\nTo enable a product version, use one of following methods:" + + "\n 1. set env variable CLI_PRODUCT_VERSION" + + "\n 2. set cli.product.version in onap.properties" + + "\n 3. in interactive mode, use the directive 'use '\n"; + if (!this.availableProductVersions.contains(configuredProductVersion)) { - errorNote = "** CUATION: Please configure the enabled product version to use one of " + this.availableProductVersions.toString() + - ".\nTo enable a product version, use one of following methods:\n\t 1. set env variable CLI_PRODUCT_VERSION" - + "\n\t 2. set cli.product.version in onap.properties \n\t 3. in interactive mode, use the directive 'use '"; + errorNote = "** CUATION: Please configure the enabled product version to use one of " + this.availableProductVersions.toString() + "."; + } return "CLI version : " + version + "\n" + "Available product versions: " + this.availableProductVersions.toString() + "\n" + "Enabled product version : " + configuredProductVersion + "\n" + - errorNote; + errorNote + usageNote; } /** @@ -257,6 +261,14 @@ public class OnapCommandRegistrar { * Help cmd failed */ public String getHelp() throws OnapCommandHelpFailed { + return this.getHelp(false); + } + + public String getHelpForEnabledProductVersion() throws OnapCommandHelpFailed { + return this.getHelp(true); + } + + private String getHelp(boolean isEnabledProductVersionOnly) throws OnapCommandHelpFailed { OnapCommandResult help = new OnapCommandResult(); help.setType(ResultType.TABLE); help.setPrintDirection(PrintDirection.LANDSCAPE); @@ -268,10 +280,12 @@ public class OnapCommandRegistrar { help.getRecords().add(attr); OnapCommandResultAttribute attrVer = new OnapCommandResultAttribute(); - attrVer.setName(Constants.PRODUCT_VERSION.toUpperCase()); - attrVer.setDescription(Constants.DESCRIPTION); - attrVer.setScope(OnapCommandResultAttributeScope.SHORT); - help.getRecords().add(attrVer); + if (!isEnabledProductVersionOnly) { + attrVer.setName(Constants.PRODUCT_VERSION.toUpperCase()); + attrVer.setDescription(Constants.DESCRIPTION); + attrVer.setScope(OnapCommandResultAttributeScope.SHORT); + help.getRecords().add(attrVer); + } OnapCommandResultAttribute attrSrv = new OnapCommandResultAttribute(); attrSrv.setName(Constants.SERVICE.toUpperCase()); @@ -285,13 +299,19 @@ public class OnapCommandRegistrar { attrDesc.setScope(OnapCommandResultAttributeScope.SHORT); help.getRecords().add(attrDesc); - for (String cmdName : OnapCommandUtils.sort(this.listCommands())) { + for (String cmdName : isEnabledProductVersionOnly ? OnapCommandUtils.sort(this.listCommandsForEnabledProductVersion()) : OnapCommandUtils.sort(this.listCommands())) { OnapCommand cmd; try { - String []cmdVer = cmdName.split(":"); - cmd = this.get(cmdVer[0], cmdVer[1]); - attr.getValues().add(cmdVer[0]); - attrVer.getValues().add(cmdVer[1]); + if (!isEnabledProductVersionOnly) { + String []cmdVer = cmdName.split(":"); + cmd = this.get(cmdVer[0], cmdVer[1]); + attr.getValues().add(cmdVer[0]); + attrVer.getValues().add(cmdVer[1]); + } else { + cmd = this.get(cmdName); + attr.getValues().add(cmdName); + } + attrSrv.getValues().add(cmd.printVersion()); attrDesc.getValues().add(cmd.getDescription()); } catch (OnapCommandException e) { @@ -300,7 +320,7 @@ public class OnapCommandRegistrar { } try { - return "\n\nOnap sub-commands:\n" + help.print() + "\n" + this.getVersion(); + return "\n\nOnap sub-commands:\n" + help.print() + (isEnabledProductVersionOnly ? "" : "\n" + this.getVersion()); } catch (OnapCommandException e) { throw new OnapCommandHelpFailed(e); } diff --git a/main/src/main/java/org/onap/cli/main/OnapCli.java b/main/src/main/java/org/onap/cli/main/OnapCli.java index 528c3e18..ac63fdfa 100644 --- a/main/src/main/java/org/onap/cli/main/OnapCli.java +++ b/main/src/main/java/org/onap/cli/main/OnapCli.java @@ -82,11 +82,9 @@ public class OnapCli { */ public void handleHelp() { try { - // By default, it prints help - if ((args.isEmpty()) - || ((args.size() == 1) && (this.getLongOption(OnapCliConstants.PARAM_HELP_LOGN).equals(args.get(0)) - || this.getShortOption(OnapCliConstants.PARAM_HELP_SHORT).equals(args.get(0))))) { - this.print(IOUtils.toString(this.getClass().getClassLoader().getResourceAsStream("README.md"))); + if ((args.size() == 1) && (this.getLongOption(OnapCliConstants.PARAM_HELP_LOGN).equals(args.get(0)) + || this.getShortOption(OnapCliConstants.PARAM_HELP_SHORT).equals(args.get(0)))) { + this.print(IOUtils.toString(this.getClass().getClassLoader().getResourceAsStream("onap-readme.txt"))); String help = OnapCommandRegistrar.getRegistrar().getHelp(); this.print(help); this.exitSuccessfully(); @@ -115,11 +113,10 @@ public class OnapCli { } /** - * Handles Interactive Mode. --interactive or -i + * Handles Interactive Mode. */ public void handleInteractive() { // NOSONAR - if (isInteractive()) { - + if (args.isEmpty()) { ConsoleReader console = null; try { OnapCommandRegistrar.getRegistrar().setInteractiveMode(true); @@ -148,10 +145,15 @@ public class OnapCli { this.print(e); } } - - continue; + } else if (!args.isEmpty() && this.args.get(0).equals(OnapCliConstants.PARAM_INTERACTIVE_HELP)) { + try { + this.print(OnapCommandRegistrar.getRegistrar().getHelpForEnabledProductVersion()); + } catch (OnapCommandException e) { + this.print(e); + } + } else { + handleCommand(); } - handleCommand(); } } catch (IOException e) { // NOSONAR this.print("Failed to read console, " + e.getMessage()); @@ -171,20 +173,6 @@ public class OnapCli { } } - /** - * Checks if the command is interactive. - * - * @return boolean - */ - public boolean isInteractive() { - if ((args.size() == 1) && (this.getLongOption(OnapCliConstants.PARAM_INTERACTIVE_LONG).equals(args.get(0)) - || this.getShortOption(OnapCliConstants.PARAM_INTERACTIVE_SHORT).equals(args.get(0)))) { - return true; - } - - return false; - } - /** * Creates console reader object. * @@ -198,7 +186,8 @@ public class OnapCli { StringCompleter strCompleter = new StringCompleter(OnapCommandRegistrar.getRegistrar().listCommandsForEnabledProductVersion()); strCompleter.add(OnapCliConstants.PARAM_INTERACTIVE_EXIT, OnapCliConstants.PARAM_INTERACTIVE_CLEAR, - OnapCliConstants.PARAM_INTERACTIVE_USE); + OnapCliConstants.PARAM_INTERACTIVE_USE, + OnapCliConstants.PARAM_INTERACTIVE_HELP); console.addCompleter(strCompleter); console.setPrompt(OnapCliConstants.PARAM_INTERACTIVE_PROMPT); } catch (OnapCommandException e) { // NOSONAR diff --git a/main/src/main/java/org/onap/cli/main/conf/OnapCliConstants.java b/main/src/main/java/org/onap/cli/main/conf/OnapCliConstants.java index 4db26f74..d01aa1e5 100644 --- a/main/src/main/java/org/onap/cli/main/conf/OnapCliConstants.java +++ b/main/src/main/java/org/onap/cli/main/conf/OnapCliConstants.java @@ -27,13 +27,12 @@ public final class OnapCliConstants { public static final int EXIT_SUCCESS = 0; public static final int EXIT_FAILURE = 1; - public static final String PARAM_INTERACTIVE_SHORT = "i"; - public static final String PARAM_INTERACTIVE_LONG = "interactive"; public static final String PARAM_INTERACTIVE_PROMPT = "onap>"; public static final String PARAM_INTERACTIVE_EXIT = "exit"; public static final String PARAM_INTERACTIVE_BYE = "bye"; public static final String PARAM_INTERACTIVE_CLEAR = "clear"; public static final String PARAM_INTERACTIVE_USE = "use"; + public static final String PARAM_INTERACTIVE_HELP = "help"; public static final String PARAM_INTERACTIVE_ARG_SPLIT_PATTERN = "\\s+"; private OnapCliConstants(){} diff --git a/main/src/main/resources/onap-readme.txt b/main/src/main/resources/onap-readme.txt index 1008737b..1784a348 100644 --- a/main/src/main/resources/onap-readme.txt +++ b/main/src/main/resources/onap-readme.txt @@ -13,6 +13,3 @@ To know the CLI usage, type onap [-h|--help] To know the usage of sub commands, type onap [-h|--help] To know more, please refer the Onap wiki https://wiki.onap.org - -NOTE: This file has been deprecated in amesterdam release and is -replaced by README.md file \ No newline at end of file diff --git a/main/src/test/java/org/onap/cli/main/OnapCliMainTest.java b/main/src/test/java/org/onap/cli/main/OnapCliMainTest.java index ff4b4362..a94252ee 100644 --- a/main/src/test/java/org/onap/cli/main/OnapCliMainTest.java +++ b/main/src/test/java/org/onap/cli/main/OnapCliMainTest.java @@ -126,14 +126,7 @@ public class OnapCliMainTest { @Test public void interactiveTest() { - cli = new OnapCli(new String[] { "-i" }); - boolean isInter = cli.isInteractive(); - - assertTrue(isInter); - cli = new OnapCli(new String[] { "--interactive" }); - isInter = cli.isInteractive(); - assertTrue(isInter); - cli.getExitCode(); + cli = new OnapCli(new String[] {}); mockConsole("exit"); cli.handleInteractive(); -- 2.16.6