This is an automated email from the ASF dual-hosted git repository.

aradzinski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git

commit 8228110ce021917e34cfc8170aac7c832e473210
Author: Aaron Radzinski <[email protected]>
AuthorDate: Fri Oct 9 19:01:21 2020 -0700

    Update NCCli.scala
---
 .../nlpcraft/model/tools/cmdline/NCCli.scala       | 78 ++++++++++++++--------
 1 file changed, 51 insertions(+), 27 deletions(-)

diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
index 2840ac6..b3d9769 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
@@ -75,7 +75,7 @@ object NCCli extends App {
     )
 
     // TODO: this needs to be loaded dynamically from OpenAPI spec.
-    private final val REST_PATHS = Seq(
+    private final val REST_CMDS = Seq(
         RestCall("clear/conversation", "Clears conversation STM", "Asking"),
         RestCall("clear/dialog", "Clears dialog flow", "Asking"),
         RestCall("model/sugsyn", "Runs model synonym suggestion tool", 
"Tools"),
@@ -177,7 +177,7 @@ object NCCli extends App {
          * @param name
          * @return
          */
-        def findParameterByName(name: String): Option[Parameter] =
+        def findParameterByNameOpt(name: String): Option[Parameter] =
             params.find(_.names.contains(name))
 
         /**
@@ -185,8 +185,16 @@ object NCCli extends App {
          * @param id
          * @return
          */
-        def findParameterById(id: String): Option[Parameter] =
+        def findParameterByIdOpt(id: String): Option[Parameter] =
             params.find(_.id == id)
+
+        /**
+         *
+         * @param id
+         * @return
+         */
+        def findParameterById(id: String): Parameter =
+            findParameterByIdOpt(id).get
     }
     // Single command's example.
     case class Example(
@@ -213,7 +221,7 @@ object NCCli extends App {
     private final val CMDS = Seq(
         Command(
             name = "rest",
-            group = "Rest API",
+            group = "Rest Commands",
             synopsis = s"Issues REST call to local REST server.",
             desc = Some(
                 s"All NLPCraft REST API uses HTTP POST and JSON parameters 
('Content-Type: application/json' header). " +
@@ -256,7 +264,7 @@ object NCCli extends App {
         ),
         Command(
             name = "tail-server",
-            group = "Server Ops",
+            group = "Server Commands",
             synopsis = s"Shows last N lines from the local REST server log.",
             desc = Some(
                 s"Only works for the server started via this script."
@@ -280,7 +288,7 @@ object NCCli extends App {
         ),
         Command(
             name = "start-server",
-            group = "Server Ops",
+            group = "Server Commands",
             synopsis = s"Starts local REST server.",
             desc = Some(
                 s"REST server is started in the external JVM process with both 
stdout and stderr piped out into log file. " +
@@ -332,7 +340,7 @@ object NCCli extends App {
         ),
         Command(
             name = "restart-server",
-            group = "Server Ops",
+            group = "Server Commands",
             synopsis = s"Restarts local REST server.",
             desc = Some(
                 s"This command is equivalent to executing  
${y("'stop-server'")} and then ${y("'start-server'")} commands with " +
@@ -384,19 +392,19 @@ object NCCli extends App {
         ),
         Command(
             name = "info-server",
-            group = "Server Ops",
+            group = "Server Commands",
             synopsis = s"Info about local REST server.",
             body = cmdInfoServer
         ),
         Command(
             name = "cls",
-            group = "REPL",
+            group = "REPL Commands",
             synopsis = s"Clears terminal screen.",
             body = cmdCls
         ),
         Command(
             name = "nano",
-            group = "REPL",
+            group = "REPL Commands",
             synopsis = s"Runs built-in ${y("'nano'")} editor.",
             body = cmdNano,
             desc = Some(
@@ -428,7 +436,7 @@ object NCCli extends App {
         ),
         Command(
             name = "less",
-            group = "REPL",
+            group = "REPL Commands",
             synopsis = s"Runs built-in ${y("'less'")} command.",
             body = cmdLess,
             desc = Some(
@@ -459,7 +467,7 @@ object NCCli extends App {
         ),
         Command(
             name = "no-ansi",
-            group = "REPL",
+            group = "REPL Commands",
             synopsis = s"Disables ANSI escape codes for terminal colors & 
controls.",
             desc = Some(
                 s"This is a special command that can be combined with any 
other commands."
@@ -474,7 +482,7 @@ object NCCli extends App {
         ),
         Command(
             name = "ansi",
-            group = "REPL",
+            group = "REPL Commands",
             synopsis = s"Enables ANSI escape codes for terminal colors & 
controls.",
             desc = Some(
                 s"This is a special command that can be combined with any 
other commands."
@@ -489,7 +497,7 @@ object NCCli extends App {
         ),
         Command(
             name = "ping-server",
-            group = "Server Ops",
+            group = "Server Commands",
             synopsis = s"Pings local REST server.",
             desc = Some(
                 s"REST server is pinged using ${y("'/health'")} REST call to 
check its online status."
@@ -516,7 +524,7 @@ object NCCli extends App {
         ),
         Command(
             name = "stop-server",
-            group = "Server Ops",
+            group = "Server Commands",
             synopsis = s"Stops local REST server.",
             desc = Some(
                 s"Local REST server must be started via 
${y(s"'$SCRIPT_NAME''")} or other compatible way."
@@ -525,13 +533,13 @@ object NCCli extends App {
         ),
         Command(
             name = "quit",
-            group = "REPL",
-            synopsis = s"Quits REPL when in REPL mode.",
+            group = "REPL Commands",
+            synopsis = s"Quits REPL mode.",
             body = cmdQuit
         ),
         Command(
             name = "help",
-            group = "REPL",
+            group = "REPL Commands",
             synopsis = s"Displays help for ${y(s"'$SCRIPT_NAME'")}.",
             desc = Some(
                 s"By default, without ${y("'--all'")} or ${y("'--cmd'")} 
parameters, displays the abbreviated form of manual " +
@@ -566,7 +574,7 @@ object NCCli extends App {
         ),
         Command(
             name = "version",
-            group = "REPL",
+            group = "REPL Commands",
             synopsis = s"Displays full version of ${y(s"'$SCRIPT_NAME'")} 
script.",
             desc = Some(
                 "Depending on the additional parameters can display only the 
semantic version or the release date."
@@ -1176,7 +1184,7 @@ object NCCli extends App {
                     "align:left, maxWidth:85" → cmd.synopsis
                 ))
 
-                logln(s"\n$grp:\n${tbl.toString}")
+                logln(s"\n$B$grp:$RST\n${tbl.toString}")
             })
         }
         else if (args.size == 1 && args.head.parameter.id == "all") { // Show 
a full format help for all commands.
@@ -1382,7 +1390,7 @@ object NCCli extends App {
         if (!U.isValidJson(rawJson))
             throw MalformedJson()
 
-        if (!REST_PATHS.exists(_.path == path))
+        if (!REST_CMDS.exists(_.path == path))
             throw new IllegalArgumentException(s"Unknown REST path 
$C'$path'$RST, type ${c("'help --cmd=rest'")} to get help.")
 
         val endpoint = getRestEndpointFromBeacon
@@ -1455,7 +1463,7 @@ object NCCli extends App {
                     candidates.addAll(cmds.map(n ⇒ {
                         val name = n._1
                         val desc = n._2.substring(0, n._2.length - 1) // 
Remove last '.'.
-                        val grp = n._3
+                        val grp = s"${n._3}:"
 
                         mkCandidate(
                             id = name,
@@ -1477,7 +1485,7 @@ object NCCli extends App {
                                 names.map(name ⇒ mkCandidate(
                                     id = if (hasVal) name + "=" else name,
                                     disp = name,
-                                    grp = null,
+                                    grp = "Parameters:",
                                     desc = null,
                                     completed = !hasVal)
                                 )
@@ -1499,10 +1507,26 @@ object NCCli extends App {
                             ))
                             .asJava
                         )
-
                     // For 'rest' - add additional auto-completion candidates.
-                    if (cmd == REST_CMD.name) {
-
+                    else if (cmd == REST_CMD.name) {
+                        val pathParam = REST_CMD.findParameterById("path")
+                        val hasPathAlready = words.exists(w ⇒ 
pathParam.names.exists(x ⇒ w.startsWith(x)))
+
+                        if (!hasPathAlready)
+                            candidates.addAll(
+                                REST_CMDS.map(cmd ⇒ {
+                                    val name = s"--path=${cmd.path}"
+
+                                    mkCandidate(
+                                        id = name,
+                                        disp = name,
+                                        grp = s"REST ${cmd.group}:",
+                                        desc = cmd.desc,
+                                        completed = true
+                                    )
+                                })
+                                .asJava
+                            )
                     }
                 }
             }
@@ -1815,7 +1839,7 @@ object NCCli extends App {
             val name = if (parts.size == 1) arg else parts(0)
             val value = if (parts.size == 1) None else Some(parts(1))
 
-            cmd.findParameterByName(name) match {
+            cmd.findParameterByNameOpt(name) match {
                 case None ⇒ throw mkError()
                 case Some(param) ⇒
                     if ((param.value.isDefined && value.isEmpty) || 
(param.value.isEmpty && value.isDefined))

Reply via email to