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

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


The following commit(s) were added to refs/heads/NLPCRAFT-108 by this push:
     new 7ca3847  Update NCCli.scala
7ca3847 is described below

commit 7ca384789e0d89b6509ddff323f8592683455087
Author: Aaron Radzinski <[email protected]>
AuthorDate: Mon Oct 5 15:40:32 2020 -0700

    Update NCCli.scala
---
 .../nlpcraft/model/tools/cmdline/NCCli.scala       | 68 ++++++++++++++--------
 1 file changed, 43 insertions(+), 25 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 e2dce97..f46a7bb 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
@@ -38,9 +38,10 @@ import java.util
 import java.util.Date
 import java.io._
 import java.nio.charset.StandardCharsets
-import java.util.regex.{Pattern, PatternSyntaxException}
+import java.util.regex.Pattern
 
 import org.apache.commons.io.input.{ReversedLinesFileReader, Tailer, 
TailerListenerAdapter}
+import org.apache.http.util.EntityUtils
 import org.jline.reader.Completer
 import org.jline.reader.impl.DefaultParser
 import org.jline.terminal.{Terminal, TerminalBuilder}
@@ -128,8 +129,14 @@ object NCCli extends App {
     case class SplitError(index: Int) extends Exception
     case class NoLocalServer() extends IllegalStateException(s"Cannot detect 
locally running REST server.")
     case class MissingParameter(cmd: Command, paramId: String) extends 
IllegalArgumentException(
-        s"Missing mandatory parameter: ${c(cmd.params.find(_.id == 
paramId).get.names.head)}. " +
-        s"Type ${c("help --cmd=")}${c(cmd.name)} to get help."
+        s"Missing mandatory parameter: $ansiCyanFg${"'" + cmd.params.find(_.id 
== paramId).get.names.head + "'"}$ansiReset. " +
+        s"Type $ansiCyanFg${"'help --cmd="}${c(cmd.name) + "'"}$ansiReset to 
get help."
+    )
+    case class HttpError(httpCode: Int) extends IllegalStateException(s"REST 
error (HTTP ${c(httpCode)}).")
+
+    case class HttpRestResponse(
+        code: Int,
+        data: String
     )
 
     case class ReplState(
@@ -1146,12 +1153,34 @@ object NCCli extends App {
      * @param repl Whether or not executing from REPL.
      */
     private def cmdRest(cmd: Command, args: Seq[Argument], repl: Boolean): 
Unit = {
-        val path = args.find(_.parameter.id == "path").getOrElse(throw 
MissingParameter(cmd, "path"))
-        val json = args.find(_.parameter.id == "json").getOrElse(throw 
MissingParameter(cmd, "json"))
+        val path = args.find(_.parameter.id == "path").getOrElse(throw 
MissingParameter(cmd, "path")).value.get
+        val rawJson = args.find(_.parameter.id == "json").getOrElse(throw 
MissingParameter(cmd, "json")).value.get
+
+        if (!REST_PATHS.contains(path))
+            throw new IllegalArgumentException(s"Unknown REST path: $path")
 
+        val json = stripQuotes(rawJson)
         val endpoint = getRestEndpointFromBeacon
 
-        httpPost()
+        val handler = new ResponseHandler[HttpRestResponse] {
+            override def handleResponse(resp: HttpResponse): HttpRestResponse 
= {
+                val status = resp.getStatusLine
+
+                HttpRestResponse(
+                    status.getStatusCode,
+                    Option(EntityUtils.toString(resp.getEntity)).getOrElse(
+                        throw new IllegalStateException(s"Unexpected REST 
error: ${status.getReasonPhrase}")
+                    )
+                )
+            }
+        }
+
+        val resp = httpPost(endpoint, path, handler, json)
+
+        val code = if (resp.code == 200) g("200") else r(resp.code)
+
+        logln(s"HTTP $code")
+        logln(resp.data)
     }
 
     /**
@@ -1163,12 +1192,12 @@ object NCCli extends App {
             case None ⇒ ()
         }
 
-        val appName = s"$NAME ver. ${VER.version}"
-
         val parser = new DefaultParser()
 
         parser.setEofOnUnclosedBracket(Bracket.CURLY, Bracket.ROUND, 
Bracket.SQUARE)
         parser.setEofOnUnclosedQuote(true)
+        parser.setRegexCommand("")
+        parser.setRegexVariable("")
 
         val completer = new Completer {
             private val cmds = CMDS.map(c ⇒ c.name → c.synopsis)
@@ -1219,7 +1248,7 @@ object NCCli extends App {
 
         val reader = LineReaderBuilder
             .builder
-            .appName(appName)
+            .appName("NLPCraft")
             .terminal(term)
             .completer(completer)
             .parser(parser)
@@ -1261,9 +1290,9 @@ object NCCli extends App {
                 reader.readLine(s"${g("\u25b6")} ")
             }
             catch {
-                case _: PatternSyntaxException ⇒ "" // Guard against JLine 
hiccups.
                 case _: UserInterruptException ⇒ "" // Ignore.
                 case _: EndOfFileException ⇒ null
+                case e: Exception ⇒ e.printStackTrace(); "" // Guard against 
JLine hiccups.
             }
 
             if (rawLine == null || QUIT_CMD.name == rawLine.trim)
@@ -1359,8 +1388,10 @@ object NCCli extends App {
      *
      */
     private def unknownCommand(cmd: String): Unit = {
-        error(s"Unknown command: ${y(cmd)}")
-        error(s"Type '${c("help")}' to read the manual.")
+        val c2 = y(s"'$cmd'")
+        val h2 = c(s"'help'")
+
+        error(s"Unknown command $c2, type $h2 to get help.")
     }
 
     /**
@@ -1387,19 +1418,6 @@ object NCCli extends App {
      * @param baseUrl Base endpoint URL.
      * @param cmd REST call command.
      * @param resp
-     * @param json Set of object pairs to be converted into JSON 
representation.
-     * @return
-     * @throws IOException
-     */
-    private def httpPost[T](baseUrl: String, cmd: String, resp: 
ResponseHandler[T], json: (String, AnyRef)*): T =
-        httpPost(baseUrl, cmd, resp, gson.toJson(json.filter(_._2 != 
null).toMap.asJava))
-
-    /**
-     * Posts HTTP POST request.
-     *
-     * @param baseUrl Base endpoint URL.
-     * @param cmd REST call command.
-     * @param resp
      * @param json JSON string.
      * @return
      * @throws IOException

Reply via email to