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

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


The following commit(s) were added to refs/heads/NLPCRAFT-434 by this push:
     new 8f83d07  WIP.
8f83d07 is described below

commit 8f83d07137b36dccb355fa8a23006ca878556cf6
Author: Sergey Kamov <[email protected]>
AuthorDate: Thu Sep 9 23:38:31 2021 +0300

    WIP.
---
 .../apache/nlpcraft/model/NCElementDefinition.java |  2 +-
 ...ntDefinition.java => NCElementDefinition2.java} | 10 ++++-----
 .../probe/mgrs/deploy/NCDeployManager.scala        | 11 +++++++++-
 .../mgrs/deploy1/NCElementAnnotationsSpec.scala    | 24 ++++++++++++++++------
 .../mgrs/deploy1/pack/NCElementAnnotations2.scala  | 10 ++++++++-
 5 files changed, 43 insertions(+), 14 deletions(-)

diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCElementDefinition.java 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCElementDefinition.java
index 0a50a01..dff9ae7 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCElementDefinition.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCElementDefinition.java
@@ -26,7 +26,7 @@ import java.lang.annotation.Target;
 import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
-// TODO:
+// TODO: json or yaml
 @Documented
 @Retention(value=RUNTIME)
 @Target(value=METHOD)
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCElementDefinition.java 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCElementDefinition2.java
similarity index 88%
copy from 
nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCElementDefinition.java
copy to 
nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCElementDefinition2.java
index 0a50a01..d7a6b5d 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCElementDefinition.java
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCElementDefinition2.java
@@ -26,23 +26,23 @@ import java.lang.annotation.Target;
 import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
-// TODO:
+// TODO: class name
 @Documented
 @Retention(value=RUNTIME)
 @Target(value=METHOD)
-@Repeatable(NCElementDefinition.NCIntentRefList.class)
-public @interface NCElementDefinition {
+@Repeatable(NCElementDefinition2.NCIntentRefList.class)
+public @interface NCElementDefinition2 {
     /**
      * ID of the intent term.
      *
      * @return ID of the intent term.
      */
-    String value();
+    Class<?> value();
 
     @Retention(RetentionPolicy.RUNTIME)
     @Target(value=METHOD)
     @Documented
     @interface NCIntentRefList {
-        NCElementDefinition[] value();
+        NCElementDefinition2[] value();
     }
 }
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
index dbe27cc..574ade2 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
@@ -69,6 +69,7 @@ object NCDeployManager extends NCService {
     private final val CLS_MDL_CLS_REF = classOf[NCModelAddClasses]
     private final val CLS_MDL_PKGS_REF = classOf[NCModelAddPackage]
     private final val CLS_ELEM_DEF = classOf[NCElementDefinition]
+    private final val CLS_ELEM_DEF_CLASS = classOf[NCElementDefinition2]
 
     // Java and scala lists.
     private final val CLS_SCALA_SEQ = classOf[Seq[_]]
@@ -1649,7 +1650,6 @@ object NCDeployManager extends NCService {
                                 s"]",
                                 e
                             )
-
                     }
 
                 val elem =
@@ -1692,6 +1692,15 @@ object NCDeployManager extends NCService {
                     }
 
                 elems += elem
+
+                val allClassDefAnns = 
mutable.ArrayBuffer.empty[NCElementDefinition2]
+
+                def addClass(anns: Array[NCElementDefinition2]): Unit = if 
(anns != null) allClassDefAnns ++= anns.toSeq
+
+                addClass(claxx.getAnnotationsByType(CLS_ELEM_DEF_CLASS))
+                getAllMethods(claxx).foreach(m => 
addClass(m.getAnnotationsByType(CLS_ELEM_DEF_CLASS)))
+
+                allClassDefAnns.foreach(cl => elems += 
cl.value().getDeclaredConstructor().newInstance().asInstanceOf[NCElement])
             })
         }
 
diff --git 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/probe/mgrs/deploy1/NCElementAnnotationsSpec.scala
 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/probe/mgrs/deploy1/NCElementAnnotationsSpec.scala
index ca844f5..4d594ed 100644
--- 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/probe/mgrs/deploy1/NCElementAnnotationsSpec.scala
+++ 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/probe/mgrs/deploy1/NCElementAnnotationsSpec.scala
@@ -17,7 +17,7 @@
 
 package org.apache.nlpcraft.probe.mgrs.deploy1
 
-import org.apache.nlpcraft.model.{NCElement, NCElementDefinition, NCIntent, 
NCModelAdapter, NCModelAddClasses, NCModelAddPackage, NCResult}
+import org.apache.nlpcraft.model.{NCElement, NCElementDefinition, 
NCElementDefinition2, NCIntent, NCModelAdapter, NCModelAddClasses, 
NCModelAddPackage, NCResult}
 import org.apache.nlpcraft.{NCTestContext, NCTestElement, NCTestEnvironment}
 import org.junit.jupiter.api.Test
 
@@ -31,6 +31,9 @@ class NCElementAnnotations1 {
     def x(): Unit = ()
 }
 
+class NCElementAnn1 extends NCElement {
+    override def getId: String = "e12"
+}
 /**
   *
   */
@@ -38,9 +41,7 @@ class NCElementAnnotations1 {
 @NCModelAddPackage(Array("org.apache.nlpcraft.probe.mgrs.deploy1.pack"))
 @NCElementDefinition("""{ "id": "e3" }""")
 @NCElementDefinition("""{ "id": "e4" }""")
-class NCElementAnnotationsSpecModel extends NCModelAdapter(
-    "nlpcraft.intents.idl.test", "IDL Test Model", "1.0"
-) {
+class NCElementAnnotationsSpecModel extends 
NCModelAdapter("nlpcraft.intents.idl.test", "IDL Test Model", "1.0") {
     // It overrides city.
     override def getElements: util.Set[NCElement] = Set(NCTestElement("e1"))
 
@@ -74,8 +75,14 @@ class NCElementAnnotationsSpecModel extends NCModelAdapter(
 
     @NCIntent("intent=onE10 term={# == 'e10'}")
     def onE10(): NCResult = NCResult.text("OK")
-}
 
+    @NCIntent("intent=onE11 term={# == 'e11'}")
+    def onE11(): NCResult = NCResult.text("OK")
+
+    @NCElementDefinition2(classOf[NCElementAnn1])
+    @NCIntent("intent=onE12 term={# == 'e12'}")
+    def onE12(): NCResult = NCResult.text("OK")
+}
 /**
  *
  */
@@ -105,7 +112,12 @@ class NCElementAnnotationsSpec extends NCTestContext {
         checkIntent("e8", "onE8")
 
         // Added via annotation to class and method, where class added via 
NCModelAddPackage.
+        // Complex YAML tested.
         checkIntent("e9", "onE9")
-        checkIntent("e10", "onE10")
+        checkIntent("e101", "onE10")
+        checkIntent("e11", "onE11")
+
+        // Added via class annotation.
+        checkIntent("e12", "onE12")
     }
 }
\ No newline at end of file
diff --git 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/probe/mgrs/deploy1/pack/NCElementAnnotations2.scala
 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/probe/mgrs/deploy1/pack/NCElementAnnotations2.scala
index de06dda..26f5d6f 100644
--- 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/probe/mgrs/deploy1/pack/NCElementAnnotations2.scala
+++ 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/probe/mgrs/deploy1/pack/NCElementAnnotations2.scala
@@ -20,7 +20,15 @@ package org.apache.nlpcraft.probe.mgrs.deploy1.pack
 import org.apache.nlpcraft.model.NCElementDefinition
 
 @NCElementDefinition("""{ "id": "e9" }""")
+@NCElementDefinition(
+    """---
+        id: "e10"
+        synonyms:
+          - "e100"
+          - "e101"
+    """
+)
 class NCElementAnnotations2 {
-    @NCElementDefinition("""{ "id": "e10" }""")
+    @NCElementDefinition("""{ "id": "e11" }""")
     def x(): Unit = ()
 }
\ No newline at end of file

Reply via email to