This is an automated email from the ASF dual-hosted git repository. sergeykamov pushed a commit to branch NLPCRAFT-153 in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
commit 74385031c16a2648016cb938dc86693f62041b77 Author: Sergey Kamov <[email protected]> AuthorDate: Fri Nov 6 09:01:51 2020 +0300 WIP. --- .../nlpcraft/model/tools/cmdline/NCCli.scala | 107 +++++++++++++++------ 1 file changed, 76 insertions(+), 31 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 c3bae70..e8e5261 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 @@ -1144,8 +1144,8 @@ object NCCli extends App { id = "outputDir", names = Seq("--outputDir", "-d"), value = Some("path"), - optional = false, - desc = "Output dir." + optional = true, + desc = s"Output dir. Default value is ${y("'current folder'")}" ), Parameter( id = "baseName", @@ -1158,24 +1158,45 @@ object NCCli extends App { id = "lang", names = Seq("--lang", "-l"), value = Some("name"), - optional = false, - desc = s"Language name. Supported: ${y("'java'")}, ${y("'scala'")}, ${y("'groovy'")}, ${y("'kotlin'")}." + optional = true, + desc = s"Language name. Supported: ${y("'java'")}, ${y("'scala'")}, ${y("'groovy'")}, ${y("'kotlin'")}. Default value is ${y("'java'")}" ), Parameter( id = "buildTool", names = Seq("--buildTool", "-t"), value = Some("name"), + optional = true, + desc = s"Build tool name. Supported: ${y("'mvn'")}, ${y("'grape'")}, ${y("'gradle'")}, ${y("'sbt'")}. Default value is ${y("'mvn'")}" + ), + Parameter( + id = "packageName", + names = Seq("--packageName", "-p"), + value = Some("name"), optional = false, - desc = s"Build tool name. Supported: ${y("'mvn'")}, ${y("'grape'")}, ${y("'gradle'")}, ${y("'sbt'")}." + desc = s"Package name." + ), + Parameter( + id = "fileType", + names = Seq("--fileType", "-f"), + value = Some("'type'"), + optional = true, + desc = s"Model file type. Supported: ${y("'yaml'")}, ${y("'json'")}. Default value is ${y("'yaml'")}" + ), + Parameter( + id = "override", + names = Seq("--override", "-o"), + value = Some("flag"), + optional = true, + desc = s"Override output direcory flag. Supported: ${y("'true'")}, ${y("'false'")}. Default value is ${y("'false'")}" ) ), examples = Seq( Example( - usage = Seq("> project -d=. -n=myproject -l=java -t=mvn"), + usage = Seq("> project -n=myproject -l=scala -t=sbt -p=com.mycompany.nlp"), desc = s"Generates project with given parameters" ), Example( - usage = Seq("> project --outputDir=. --baseName=myproject --lang=scala --buildTool=sbt"), + usage = Seq("> project --baseName=myproject --lang=scala --buildTool=sbt -packageName=com.mycompany.nlp --override=true"), desc = s"Generates project with given parameters" ) ) @@ -1193,8 +1214,8 @@ object NCCli extends App { id = "outputDir", names = Seq("--outputDir", "-d"), value = Some("path"), - optional = false, - desc = "Output dir." + optional = true, + desc = s"Output dir. Default value is ${y("'current folder'")}" ), Parameter( id = "fileName", @@ -1206,11 +1227,11 @@ object NCCli extends App { ), examples = Seq( Example( - usage = Seq("> model -d=. -f=myModel.json"), + usage = Seq("> model -f=myModel.json"), desc = s"Generates model in given output folder and file name" ), Example( - usage = Seq("> model --file-name=. --file-name=myModel.json"), + usage = Seq("> model --outputDir=c:/tmp --fileName=myModel.json"), desc = s"Generates model in given output folder and file name" ) ) @@ -2165,7 +2186,6 @@ object NCCli extends App { case None ⇒ error(s"Not signed in. See ${c("'signin'")} command.") } - /** * * @param cmd Command descriptor. @@ -2268,17 +2288,44 @@ object NCCli extends App { private def isValidDir(dir: File): Boolean = if (dir.exists()) dir.isDirectory else dir.mkdirs() /** + * @param cmd + * @param args + * @param id + */ + @throws[MissingParameter] + private def get(cmd: Command, args: Seq[Argument], id: String): String = + args.find(_.parameter.id == id).flatMap(_.value).getOrElse(throw MissingParameter(cmd, id)) + + /** + * + * @param args + * @param name + * @param dflt + */ + private def getOrDefault(args: Seq[Argument], name: String, dflt: String): String = + args.find(_.parameter.id == name).flatMap(_.value).getOrElse(dflt) + + /** + * + * @param cmd + * @param name + * @param value + * @param supported + */ + @throws[InvalidParameter] + private def check(cmd: Command, name: String, value: String, supported: String*): Unit = + if (!supported.contains(value)) + throw InvalidParameter(cmd, name) + + /** * * @param cmd Command descriptor. * @param args Arguments, if any, for this command. * @param repl Whether or not executing from REPL. */ private def cmdModel(cmd: Command, args: Seq[Argument], repl: Boolean): Unit = { - def get(name: String): String = - args.find(_.parameter.id == name).flatMap(_.value).getOrElse(throw MissingParameter(cmd, name)) - - val outputDir = get("outputDir") - val fileName = get("fileName") + val outputDir = getOrDefault(args, "outputDir", ".") + val fileName = get(cmd, args, "fileName") val idx = fileName.lastIndexOf(".") @@ -2322,20 +2369,18 @@ object NCCli extends App { * @param repl Whether or not executing from REPL. */ private def cmdProject(cmd: Command, args: Seq[Argument], repl: Boolean): Unit = { - def get(name: String): String = - args.find(_.parameter.id == name).flatMap(_.value).getOrElse(throw MissingParameter(cmd, name)) - - val outputDir = get("outputDir") - val baseName = get("baseName") - val lang = get("lang").toLowerCase - val buildTool = get("buildTool").toLowerCase - - def check(name: String, value: String, supported: String*): Unit = - if (!supported.contains(value)) - throw InvalidParameter(cmd, name) - - check("lang", lang, "java", "scala", "groovy", "kotlin") - check("buildTool", buildTool, "mvn", "grape", "gradle", "sbt") + val outputDir = getOrDefault(args, "outputDir", ".") + val baseName = get(cmd, args,"baseName") + val lang = getOrDefault(args,"lang", "java").toLowerCase + val buildTool = getOrDefault(args,"buildTool", "mvn").toLowerCase + val packageName = get(cmd, args,"packageName").toLowerCase + val fileType = getOrDefault(args,"fileType", "yaml").toLowerCase + val overrideFlag = getOrDefault(args,"override", "false").toLowerCase + + check(cmd, "lang", lang, "java", "scala", "groovy", "kotlin") + check(cmd,"buildTool", buildTool, "mvn", "grape", "gradle", "sbt") + check(cmd,"fileType", fileType, "yaml", "yml", "json", "js") + check(cmd,"overrideFlag", overrideFlag, "true", "false") val outputDirFull = new File(outputDir, baseName)
