Advertisement
Guest User

Untitled

a guest
Apr 20th, 2015
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.42 KB | None | 0 0
  1. package org.drools.compiler.integrationtests;
  2.  
  3. import org.junit.Test;
  4. import org.kie.api.io.ResourceType;
  5. import org.kie.api.runtime.KieSession;
  6. import org.kie.internal.utils.KieHelper;
  7.  
  8. import java.util.List;
  9.  
  10. public class NpeOnQueryTest {
  11.  
  12. @Test
  13. public void test() {
  14. String drl =
  15. "import " + FiveState.class.getCanonicalName() + ";\n" +
  16. "import " + NodeType.class.getCanonicalName() + ";\n" +
  17. "import " + Knowledge.class.getCanonicalName() + ";\n" +
  18. "import " + List.class.getCanonicalName() + ";\n" +
  19. "\n" +
  20. "rule \"Or Knowledge is unknown\"\n" +
  21. " when\n" +
  22. " $k: Knowledge( presence == FiveState.UNEVALUATED, nodeType == NodeType.OR )\n" +
  23. " allSubKnowledgeAreEvaluated( $k, $childs; )\n" +
  24. " not( Knowledge( presence == FiveState.TRUE ) )\n" +
  25. " then\n" +
  26. " modify( $k ){\n" +
  27. " setPresence( FiveState.UNKNOWN )\n" +
  28. " }\n" +
  29. "end\n" +
  30. "\n" +
  31. "rule \"Or Knowledge is present\"\n" +
  32. " when\n" +
  33. " $k: Knowledge( presence == FiveState.UNEVALUATED, nodeType == NodeType.OR )\n" +
  34. " allSubKnowledgeAreEvaluated( $k, $childs; )\n" +
  35. " then\n" +
  36. " modify( $k ){\n" +
  37. " setPresence( FiveState.TRUE )\n" +
  38. " }\n" +
  39. "end\n" +
  40. "\n" +
  41. "query allSubKnowledgeAreEvaluated( Knowledge parent, List childs )\n" +
  42. " childs:= List() from collect ( Knowledge( parent memberOf partOf ))\n" +
  43. " forall( Knowledge( presence != FiveState.UNEVALUATED ) from childs )\n" +
  44. "end\n";
  45.  
  46. KieSession ksession = new KieHelper().addContent(drl, ResourceType.DRL)
  47. .build()
  48. .newKieSession();
  49.  
  50. Knowledge bk0 = new Knowledge(new Knowledge[0], NodeType.OR, "bk0", FiveState.UNEVALUATED);
  51. Knowledge bk1 = new Knowledge(new Knowledge[] { bk0 }, NodeType.LEAF, "bk1", FiveState.TRUE);
  52.  
  53. ksession.insert( bk0 );
  54. ksession.insert( bk1 );
  55. ksession.fireAllRules();
  56. }
  57.  
  58. public enum FiveState {
  59. TRUE,
  60. FALSE,
  61. BOTH,
  62. UNKNOWN,
  63. UNEVALUATED
  64. }
  65.  
  66. public enum NodeType {
  67. LEAF,
  68. AND,
  69. OR
  70. }
  71.  
  72. public static class Knowledge {
  73.  
  74. private final Knowledge[] partOf;
  75. private final NodeType nodeType;
  76. private final String name;
  77. private FiveState presence;
  78.  
  79. public Knowledge(Knowledge[] partOf, NodeType nodeType, String name, FiveState presence) {
  80. this.partOf = partOf;
  81. this.nodeType = nodeType;
  82. this.name = name;
  83. this.presence = presence;
  84. }
  85.  
  86. public void setPresence(final FiveState presence) {
  87. this.presence = presence;
  88. }
  89.  
  90. public String getName() {
  91. return name;
  92. }
  93.  
  94. public FiveState getPresence() {
  95. return presence;
  96. }
  97.  
  98. public NodeType getNodeType() {
  99. return nodeType;
  100. }
  101.  
  102. public Knowledge[] getPartOf() {
  103. return partOf;
  104. }
  105. }
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement