Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.drools.compiler.integrationtests;
- import org.junit.Test;
- import org.kie.api.io.ResourceType;
- import org.kie.api.runtime.KieSession;
- import org.kie.internal.utils.KieHelper;
- import java.util.List;
- public class NpeOnQueryTest {
- @Test
- public void test() {
- String drl =
- "import " + FiveState.class.getCanonicalName() + ";\n" +
- "import " + NodeType.class.getCanonicalName() + ";\n" +
- "import " + Knowledge.class.getCanonicalName() + ";\n" +
- "import " + List.class.getCanonicalName() + ";\n" +
- "\n" +
- "rule \"Or Knowledge is unknown\"\n" +
- " when\n" +
- " $k: Knowledge( presence == FiveState.UNEVALUATED, nodeType == NodeType.OR )\n" +
- " allSubKnowledgeAreEvaluated( $k, $childs; )\n" +
- " not( Knowledge( presence == FiveState.TRUE ) )\n" +
- " then\n" +
- " modify( $k ){\n" +
- " setPresence( FiveState.UNKNOWN )\n" +
- " }\n" +
- "end\n" +
- "\n" +
- "rule \"Or Knowledge is present\"\n" +
- " when\n" +
- " $k: Knowledge( presence == FiveState.UNEVALUATED, nodeType == NodeType.OR )\n" +
- " allSubKnowledgeAreEvaluated( $k, $childs; )\n" +
- " then\n" +
- " modify( $k ){\n" +
- " setPresence( FiveState.TRUE )\n" +
- " }\n" +
- "end\n" +
- "\n" +
- "query allSubKnowledgeAreEvaluated( Knowledge parent, List childs )\n" +
- " childs:= List() from collect ( Knowledge( parent memberOf partOf ))\n" +
- " forall( Knowledge( presence != FiveState.UNEVALUATED ) from childs )\n" +
- "end\n";
- KieSession ksession = new KieHelper().addContent(drl, ResourceType.DRL)
- .build()
- .newKieSession();
- Knowledge bk0 = new Knowledge(new Knowledge[0], NodeType.OR, "bk0", FiveState.UNEVALUATED);
- Knowledge bk1 = new Knowledge(new Knowledge[] { bk0 }, NodeType.LEAF, "bk1", FiveState.TRUE);
- ksession.insert( bk0 );
- ksession.insert( bk1 );
- ksession.fireAllRules();
- }
- public enum FiveState {
- TRUE,
- FALSE,
- BOTH,
- UNKNOWN,
- UNEVALUATED
- }
- public enum NodeType {
- LEAF,
- AND,
- OR
- }
- public static class Knowledge {
- private final Knowledge[] partOf;
- private final NodeType nodeType;
- private final String name;
- private FiveState presence;
- public Knowledge(Knowledge[] partOf, NodeType nodeType, String name, FiveState presence) {
- this.partOf = partOf;
- this.nodeType = nodeType;
- this.name = name;
- this.presence = presence;
- }
- public void setPresence(final FiveState presence) {
- this.presence = presence;
- }
- public String getName() {
- return name;
- }
- public FiveState getPresence() {
- return presence;
- }
- public NodeType getNodeType() {
- return nodeType;
- }
- public Knowledge[] getPartOf() {
- return partOf;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement