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

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


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

commit 2a83b64dfa0fe5ce24405be64b8e13879d181623
Author: Aaron Radzinski <[email protected]>
AuthorDate: Fri Feb 19 18:28:00 2021 -0800

    WIP.
---
 .../scala/org/apache/nlpcraft/common/package.scala    |  1 +
 .../scala/org/apache/nlpcraft/model/NCMetadata.java   | 10 ++++++++++
 .../apache/nlpcraft/model/NCTokenPredicateResult.java |  6 +++---
 .../model/factories/basic/NCBasicModelFactory.java    |  7 ++++++-
 .../model/factories/spring/NCSpringModelFactory.java  |  9 +++++++--
 .../model/intent/impl/ver2/NCIntentDslCompiler.scala  | 19 ++++++++++++++-----
 .../probe/mgrs/nlp/NCProbeEnrichmentManager.scala     |  2 +-
 .../conversation/NCConversationTimeoutSpec.scala      | 16 ++++++++--------
 8 files changed, 50 insertions(+), 20 deletions(-)

diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala
index 21df52a..8a54bca 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala
@@ -42,6 +42,7 @@ package object common {
     final val MDL_META_ALL_GRP_IDS_KEY = "__NLPCRAFT_MDL_META_ALL_GRP_IDS"
     final val MDL_META_ALL_ALIASES_KEY = "__NLPCRAFT_MDL_META_ALL_ALIASES"
     final val TOK_META_ALIASES_KEY = "__NLPCRAFT_TOK_META_ALIASES"
+    final val MDL_META_MODEL_CLASS_KEY = "__NLPCRAFT_MDL_CLASS_NAME"
 
     def G: String = ansiGreenFg
     def R: String = ansiRedFg
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCMetadata.java 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCMetadata.java
index 2ca8a9f..6b0f319 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCMetadata.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCMetadata.java
@@ -28,6 +28,16 @@ import java.util.*;
  */
 public interface NCMetadata {
     /**
+     * Factory for creating metadata out of standard map.
+     *
+     * @param map Map to convert to metadata.
+     * @return Newly created metadata container.
+     */
+    static NCMetadata convert(Map<String, Object> map) {
+        return () -> map;
+    }
+
+    /**
      * Gets mutable metadata.
      *
      * @return Metadata.
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCTokenPredicateResult.java 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCTokenPredicateResult.java
index a3356ef..04a7bbf 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCTokenPredicateResult.java
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCTokenPredicateResult.java
@@ -35,7 +35,7 @@ public class NCTokenPredicateResult {
      * @param result Token predicate result.
      * @param wasTokenUsed Whether or not a token was used by this predicate 
(if {@link #getResult() result} is {@code true}).
      */
-    NCTokenPredicateResult(boolean result, boolean wasTokenUsed) {
+    public NCTokenPredicateResult(boolean result, boolean wasTokenUsed) {
         this.result = result;
         this.wasTokenUsed = wasTokenUsed;
     }
@@ -45,7 +45,7 @@ public class NCTokenPredicateResult {
      *
      * @return Predicate result.
      */
-    boolean getResult() {
+    public boolean getResult() {
         return result;
     }
 
@@ -54,7 +54,7 @@ public class NCTokenPredicateResult {
      *
      * @return {@code true} if token was used by this predicate, {@code false} 
otherwise.
      */
-    boolean wasTokenUsed() {
+    public boolean wasTokenUsed() {
         return wasTokenUsed;
     }
 }
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/factories/basic/NCBasicModelFactory.java
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/factories/basic/NCBasicModelFactory.java
index e9c9c72..6c06f4e 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/factories/basic/NCBasicModelFactory.java
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/factories/basic/NCBasicModelFactory.java
@@ -18,6 +18,7 @@
 package org.apache.nlpcraft.model.factories.basic;
 
 import org.apache.nlpcraft.common.*;
+import org.apache.nlpcraft.common.package$;
 import org.apache.nlpcraft.model.*;
 
 import java.lang.reflect.InvocationTargetException;
@@ -68,7 +69,11 @@ public class NCBasicModelFactory implements NCModelFactory {
     @Override
     public NCModel mkModel(Class<? extends NCModel> type) {
         try {
-            return type.getConstructor().newInstance();
+            NCModel mdl = type.getConstructor().newInstance();
+
+            mdl.getMetadata().put(package$.MODULE$.MDL_META_MODEL_CLASS_KEY(), 
type.getCanonicalName());
+
+            return mdl;
         }
         catch (NoSuchMethodException e) {
             throw new NCException(String.format("Model class does not have 
no-arg constructor: %s", type.getCanonicalName()), e);
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/factories/spring/NCSpringModelFactory.java
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/factories/spring/NCSpringModelFactory.java
index 84648d7..6fa234c 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/factories/spring/NCSpringModelFactory.java
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/factories/spring/NCSpringModelFactory.java
@@ -18,6 +18,7 @@
 package org.apache.nlpcraft.model.factories.spring;
 
 import org.apache.nlpcraft.common.*;
+import org.apache.nlpcraft.common.package$;
 import org.apache.nlpcraft.model.*;
 import org.springframework.context.annotation.*;
 import org.springframework.context.support.*;
@@ -115,8 +116,12 @@ public class NCSpringModelFactory implements 
NCModelFactory {
     public NCModel mkModel(Class<? extends NCModel> claxx) {
         if (ctx == null)
             throw new IllegalStateException(String.format("%s is not 
initialized.", getClass().getSimpleName()));
-        
-        return ctx.getBean(claxx);
+
+        NCModel mdl = ctx.getBean(claxx);
+
+        mdl.getMetadata().put(package$.MODULE$.MDL_META_MODEL_CLASS_KEY(), 
claxx.getCanonicalName());
+
+        return mdl;
     }
     
     @Override
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/ver2/NCIntentDslCompiler.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/ver2/NCIntentDslCompiler.scala
index b466e8f..459391b 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/ver2/NCIntentDslCompiler.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/ver2/NCIntentDslCompiler.scala
@@ -23,7 +23,7 @@ import org.antlr.v4.runtime.tree.ParseTreeWalker
 import org.apache.nlpcraft.common._
 import org.apache.nlpcraft.model.intent.impl.antlr4.{NCIntentDslParser ⇒ 
Parser, _}
 import org.apache.nlpcraft.model.intent.utils.ver2._
-import org.apache.nlpcraft.model.{NCMetadata, NCRequest, NCToken, 
NCTokenPredicateContext}
+import org.apache.nlpcraft.model.{NCMetadata, NCRequest, NCToken, 
NCTokenPredicateContext, NCTokenPredicateResult}
 
 import java.lang.{IllegalArgumentException ⇒ IAE}
 import java.util.Optional
@@ -138,16 +138,25 @@ object NCIntentDslCompiler extends LazyLogging {
                             override lazy val getToken: NCToken = tok
                             override lazy val getIntentMeta: 
Optional[NCMetadata] =
                                 if (termCtx.intentMeta != null)
-                                    Optional.of(termCtx.intentMeta.asJava)
+                                    
Optional.of(NCMetadata.convert(termCtx.intentMeta.asJava))
                                 else
                                     Optional.empty()
                         }
 
-                        val obj = if (termClsName == null) tok.getModel else 
U.mkObject(termClsName)
+                        val mdl = tok.getModel
+                        val mdlCls = if (termClsName == null) 
mdl.meta[String](MDL_META_MODEL_CLASS_KEY) else termClsName
 
-                        // TODO
+                        try {
+                            val obj = if (termClsName == null) mdl else 
U.mkObject(termClsName)
+                            val mtd = 
Thread.currentThread().getContextClassLoader.loadClass(mdlCls).getMethod(termMtdName,
 classOf[NCTokenPredicateContext])
 
-                        (true, true)
+                            val res = mtd.invoke(obj, 
javaCtx).asInstanceOf[NCTokenPredicateResult]
+
+                            (res.getResult, res.wasTokenUsed())
+                        }
+                        catch {
+                            case e: Exception ⇒ throw new IAE(s"Failed to 
invoke custom DSL intent term: $mdlCls.$termMtdName", e)
+                        }
                     }
                 }
                 else { // DSL-defined term.
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
index 85c0c1e..e00a74a 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
@@ -573,7 +573,7 @@ object NCProbeEnrichmentManager extends NCService with 
NCOpenCensusModelStats {
                 override def getDialogFlow: util.List[String] = 
NCDialogFlowManager.getDialogFlow(usrId, mdlId, span).asJava
                 override def clearStm(filter: Predicate[NCToken]): Unit = 
conv.clearTokens(filter)
                 override def clearDialog(filter: Predicate[String]): Unit = 
NCDialogFlowManager.clear(usrId, mdlId, span)
-                override def getUserData: util.Map[String, Object] = 
conv.getUserData
+                override def getMetadata = conv.getUserData
             }
 
             override def isOwnerOf(tok: NCToken): Boolean = 
allVars.contains(tok)
diff --git 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/conversation/NCConversationTimeoutSpec.scala
 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/conversation/NCConversationTimeoutSpec.scala
index 2826c34..680183e 100644
--- 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/conversation/NCConversationTimeoutSpec.scala
+++ 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/conversation/NCConversationTimeoutSpec.scala
@@ -53,26 +53,26 @@ class NCTimeoutSpecModel extends NCModel {
 
         step match {
             case 0 ⇒
-                assertTrue(conv.getUserData.isEmpty)
+                assertTrue(conv.getMetadata.isEmpty)
                 assertTrue(conv.getDialogFlow.isEmpty)
 
-                conv.getUserData.put("key", "value")
+                conv.getMetadata.put("key", "value")
 
-                saveData = conv.getUserData
+                saveData = conv.getMetadata
 
             case 1 ⇒
-                assertFalse(conv.getUserData.isEmpty)
-                assertEquals(saveData, conv.getUserData)
-                assertEquals("value", conv.getUserData.getOrDefault("key", 
"-"))
+                assertFalse(conv.getMetadata.isEmpty)
+                assertEquals(saveData, conv.getMetadata)
+                assertEquals("value", conv.getMetadata.getOrDefault("key", 
"-"))
                 assertFalse(conv.getDialogFlow.isEmpty)
 
             case 2 ⇒
-                assertTrue(conv.getUserData.isEmpty)
+                assertTrue(conv.getMetadata.isEmpty)
                 assertTrue(saveData.isEmpty)
                 assertTrue(conv.getDialogFlow.isEmpty)
 
             case 3 ⇒
-                assertTrue(conv.getUserData.isEmpty)
+                assertTrue(conv.getMetadata.isEmpty)
                 assertFalse(conv.getDialogFlow.isEmpty)
 
             case _ ⇒ require(false)

Reply via email to