public static Class<?> getNodeClass( ObjectTypeNode objectTypeNode ) { ObjectType objectType = objectTypeNode.getObjectType(); return objectType != null && objectType instanceof ClassObjectType ? ((ClassObjectType)objectType).getClassType() : null; }
public ObjectTypeNode getObjectTypeNode(KieBase kbase, String nodeName) { List<ObjectTypeNode> nodes = ((KnowledgeBaseImpl)kbase).getRete().getObjectTypeNodes(); for ( ObjectTypeNode n : nodes ) { if ( ((ClassObjectType)n.getObjectType()).getClassType().getSimpleName().equals( nodeName ) ) { return n; } } return null; }
public ObjectTypeNode getObjectTypeNode(KieBase kbase, Class<?> nodeClass) { List<ObjectTypeNode> nodes = ((KnowledgeBaseImpl)kbase).getRete().getObjectTypeNodes(); for ( ObjectTypeNode n : nodes ) { if ( ((ClassObjectType)n.getObjectType()).getClassType() == nodeClass ) { return n; } } return null; } }
public ObjectTypeNode getObjectTypeNode(KieBase kbase, Class<?> nodeClass) { List<ObjectTypeNode> nodes = ((KnowledgeBaseImpl)kbase).getRete().getObjectTypeNodes(); for ( ObjectTypeNode n : nodes ) { if ( ((ClassObjectType)n.getObjectType()).getClassType() == nodeClass ) { return n; } } return null; } }
public ObjectTypeNode getObjectTypeNode(KieBase kbase, Class<?> nodeClass) { List<ObjectTypeNode> nodes = ((KnowledgeBaseImpl)kbase).getRete().getObjectTypeNodes(); for ( ObjectTypeNode n : nodes ) { if ( ((ClassObjectType)n.getObjectType()).getClassType() == nodeClass ) { return n; } } return null; } }
public static ObjectTypeNode getObjectTypeNode(KieBase kbase, Class<?> nodeClass) { List<ObjectTypeNode> nodes = ((KnowledgeBaseImpl)kbase).getRete().getObjectTypeNodes(); for ( ObjectTypeNode n : nodes ) { if ( ((ClassObjectType)n.getObjectType()).getClassType() == nodeClass ) { return n; } } return null; }
public AlphaNodeFieldConstraint getLiteralConstraint(final Pattern pattern, final String fieldName, final String evaluatorString, final String value) { final Class<?> clazz = ((ClassObjectType) pattern.getObjectType()).getClassType(); final InternalReadAccessor extractor = store.getReader(clazz, fieldName); FieldValue fieldValue = FieldFactory.getInstance().getFieldValue(value, extractor.getValueType()); return new MvelConstraintTestUtil(fieldName + evaluatorString + value, fieldValue, extractor); }
private void checkPartitionedSinks(ObjectTypeNode otn) { if ( InitialFact.class.isAssignableFrom( ( (ClassObjectType) otn.getObjectType() ).getClassType() ) ) { return; } ObjectSinkPropagator sinkPropagator = otn.getObjectSinkPropagator(); ObjectSinkPropagator[] propagators = sinkPropagator instanceof CompositePartitionAwareObjectSinkAdapter ? ((CompositePartitionAwareObjectSinkAdapter) sinkPropagator).getPartitionedPropagators() : new ObjectSinkPropagator[] { sinkPropagator }; for (int i = 0; i < propagators.length; i++) { for (ObjectSink sink : propagators[i].getSinks()) { assertEquals( sink + " on " + sink.getPartitionId() + " is expcted to be on propagator " + i, i, sink.getPartitionId().getId() % propagators.length ); } } }
@Test public void testEmptyRule() throws Exception { String rule = "package org.drools.compiler.test;\n"; rule += "global java.util.List list\n"; rule += "rule \"Rule 1\"\n"; rule += "when\n"; rule += "then\n"; rule += " list.add( \"fired\" );\n"; rule += "end"; KieBase kBase = loadKnowledgeBaseFromString( rule ); // Make sure the rete node map is created correctly Map<Integer, BaseNode> nodes = RuleBaseNodes.getNodeMap((InternalKnowledgeBase) kBase); assertEquals( 2, nodes.size() ); assertEquals( "InitialFactImpl", ((ClassObjectType) ((ObjectTypeNode) nodes.get( 2 )).getObjectType()).getClassType().getSimpleName() ); assertEquals( "Rule 1", ((RuleTerminalNode) nodes.get( 4 )).getRule().getName() ); KieSession session = kBase.newKieSession(); List list = new ArrayList(); session.setGlobal( "list", list ); session = SerializationHelper.getSerialisedStatefulKnowledgeSession( session, kBase, true ); session.fireAllRules(); session = SerializationHelper.getSerialisedStatefulKnowledgeSession( session, kBase, true ); assertEquals( 1, ((List) session.getGlobal( "list" )).size() ); assertEquals( "fired", ((List) session.getGlobal( "list" )).get( 0 ) ); }
((ClassObjectType) pattern.getObjectType()).getClassType().getName() ); final Behavior window = pattern.getBehaviors().get( 0 ); assertEquals( Behavior.BehaviorType.TIME_WINDOW,
@Test public void testFromEPDontRequireLeftInput() { // DROOLS-1014 String drl = "rule R when\n" + " $s1 : String() from entry-point \"xxx\"\n" + "then\n" + "end\n"; KieBase kbase = new KieHelper().addContent( drl, ResourceType.DRL ) .build(); Rete rete = ( (KnowledgeBaseImpl) kbase ).getRete(); LeftInputAdapterNode liaNode = null; for ( ObjectTypeNode otn : rete.getObjectTypeNodes() ) { Class<?> otnType = ( (ClassObjectType) otn.getObjectType() ).getClassType(); if ( String.class == otnType ) { assertEquals( 1, otn.getObjectSinkPropagator().size() ); } else if ( InitialFact.class.isAssignableFrom( otnType ) ) { assertEquals( 0, otn.getObjectSinkPropagator().size() ); } else { fail("There shouldn't be other OTNs"); } } }
@Test public void testRtnNoConstraintsWithWatches() { String rule1 = "A() @watch(a)"; KieBase kbase = getKnowledgeBase(rule1); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); ObjectTypeNode otn = getObjectTypeNode(kbase, "A" ); assertNotNull( otn ); Class classType = ((ClassObjectType) otn.getObjectType()).getClassType(); LeftInputAdapterNode liaNode = ( LeftInputAdapterNode ) otn.getObjectSinkPropagator().getSinks()[0]; List<String> sp = getSettableProperties(wm, otn); RuleTerminalNode rtNode = ( RuleTerminalNode ) liaNode.getSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("a"), sp), rtNode.getDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a"), sp), rtNode.getInferredMask() ); }
@Test public void testBetaNoConstraintsWithWatches() { String rule1 = "B() @watch(a) A() @watch(a)"; KieBase kbase = getKnowledgeBase(rule1); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); ObjectTypeNode otn = getObjectTypeNode(kbase, "A" ); assertNotNull( otn ); Class classType = ((ClassObjectType) otn.getObjectType()).getClassType(); List<String> sp = getSettableProperties(wm, otn); BetaNode betaNode = ( BetaNode ) otn.getObjectSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("a"), sp), betaNode.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a"), sp), betaNode.getRightInferredMask() ); assertEquals( calculatePositiveMask(classType, list("a"), sp), betaNode.getLeftDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a"), sp), betaNode.getLeftInferredMask() ); }
@Test public void testRtnWithConstraintsNoWatches() { String rule1 = "A( a == 10 )"; KieBase kbase = getKnowledgeBase(rule1); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); ObjectTypeNode otn = getObjectTypeNode(kbase, "A" ); assertNotNull( otn ); Class classType = ((ClassObjectType) otn.getObjectType()).getClassType(); List<String> sp = getSettableProperties(wm, otn); AlphaNode alphaNode = ( AlphaNode ) otn.getObjectSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("a"), sp), alphaNode.getDeclaredMask( ) ); assertEquals( calculatePositiveMask(classType, list("a"), sp), alphaNode.getInferredMask()); LeftInputAdapterNode liaNode = ( LeftInputAdapterNode ) alphaNode.getObjectSinkPropagator().getSinks()[0]; RuleTerminalNode rtNode = ( RuleTerminalNode ) liaNode.getSinkPropagator().getSinks()[0]; assertEquals( EmptyBitMask.get(), rtNode.getDeclaredMask() ); // rtn declares nothing assertEquals( calculatePositiveMask(classType, list("a"), sp), rtNode.getInferredMask() ); // rtn infers from alpha }
@Test public void testRtnWithConstraintsWithWatches() { String rule1 = "A( a == 10 ) @watch(b)"; KieBase kbase = getKnowledgeBase(rule1); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); ObjectTypeNode otn = getObjectTypeNode(kbase, "A" ); assertNotNull( otn ); Class classType = ((ClassObjectType) otn.getObjectType()).getClassType(); List<String> sp = getSettableProperties(wm, otn); AlphaNode alphaNode = ( AlphaNode ) otn.getObjectSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("a"), sp), alphaNode.getDeclaredMask( ) ); assertEquals( calculatePositiveMask(classType, list("a", "b"), sp), alphaNode.getInferredMask() ); LeftInputAdapterNode liaNode = ( LeftInputAdapterNode ) alphaNode.getObjectSinkPropagator().getSinks()[0]; RuleTerminalNode rtNode = ( RuleTerminalNode ) liaNode.getSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("b"), sp), rtNode.getDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "b"), sp), rtNode.getInferredMask() ); }
@Test public void testBetaAfterBetaWithWatch() { String rule1 = "$b : B(a == 15) @watch(k) A(i == $b.j) @watch(b, c) C()"; KieBase kbase = getKnowledgeBase(rule1); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); ObjectTypeNode otnA = getObjectTypeNode(kbase, "A" ); Class classType = ((ClassObjectType) otnA.getObjectType()).getClassType(); ObjectTypeNode otnC = getObjectTypeNode(kbase, "C" ); List<String> sp = getSettableProperties(wm, otnA); BetaNode betaNodeA = ( BetaNode ) otnA.getObjectSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("i", "b", "c"), sp), betaNodeA.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("i", "b", "c"), sp), betaNodeA.getRightInferredMask() ); assertEquals( calculatePositiveMask(classType, list("j", "k"), sp), betaNodeA.getLeftDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "j", "k"), sp), betaNodeA.getLeftInferredMask() ); BetaNode betaNodeC = ( BetaNode ) otnC.getObjectSinkPropagator().getSinks()[0]; assertEquals( EmptyBitMask.get(), betaNodeC.getRightDeclaredMask()); assertEquals( EmptyBitMask.get(), betaNodeC.getRightInferredMask() ); assertEquals( AllSetBitMask.get(), betaNodeC.getLeftDeclaredMask() ); assertEquals( AllSetBitMask.get(), betaNodeC.getLeftInferredMask() ); }
@Test public void testBetaWithWatchAfterBeta() { String rule1 = "$b : B(a == 15) @watch(k) C() A(i == $b.j) @watch(b, c)"; KieBase kbase = getKnowledgeBase(rule1); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); ObjectTypeNode otnA = getObjectTypeNode(kbase, "A" ); Class classType = ((ClassObjectType) otnA.getObjectType()).getClassType(); ObjectTypeNode otnC = getObjectTypeNode(kbase, "C" ); List<String> sp = getSettableProperties(wm, otnA); BetaNode betaNodeA = ( BetaNode ) otnA.getObjectSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("i", "b", "c"), sp), betaNodeA.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("i", "b", "c"), sp), betaNodeA.getRightInferredMask() ); assertEquals( AllSetBitMask.get(), betaNodeA.getLeftDeclaredMask() ); assertEquals( AllSetBitMask.get(), betaNodeA.getLeftInferredMask() ); BetaNode betaNodeC = ( BetaNode ) otnC.getObjectSinkPropagator().getSinks()[0]; assertEquals( EmptyBitMask.get(), betaNodeC.getRightDeclaredMask() ); assertEquals( EmptyBitMask.get(), betaNodeC.getRightInferredMask() ); assertEquals( calculatePositiveMask(classType, list("j", "k"), sp), betaNodeC.getLeftDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "j", "k"), sp), betaNodeC.getLeftInferredMask() ); }
@Test public void testBetaWithConstraintsNoWatches() { String rule1 = "$b : B(a == 15) A( a == 10, b == $b.b )"; KieBase kbase = getKnowledgeBase(rule1); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); ObjectTypeNode otn = getObjectTypeNode(kbase, "A" ); assertNotNull( otn ); Class classType = ((ClassObjectType) otn.getObjectType()).getClassType(); List<String> sp = getSettableProperties(wm, otn); AlphaNode alphaNode = ( AlphaNode ) otn.getObjectSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("a"), sp), alphaNode.getDeclaredMask( ) ); assertEquals( calculatePositiveMask(classType, list("a", "b"), sp), alphaNode.getInferredMask()); BetaNode betaNode = ( BetaNode ) alphaNode.getObjectSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list( "b" ), sp), betaNode.getRightDeclaredMask() ); // beta declares nothing assertEquals( calculatePositiveMask(classType, list("a", "b"), sp), betaNode.getRightInferredMask() ); // beta infers from alpha otn = getObjectTypeNode(kbase, "B" ); alphaNode = ( AlphaNode ) otn.getObjectSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("a"), sp), alphaNode.getDeclaredMask( ) ); assertEquals( calculatePositiveMask(classType, list("a", "b"), sp), alphaNode.getInferredMask()); assertEquals( calculatePositiveMask(classType, list("b"), sp), betaNode.getLeftDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "b"), sp), betaNode.getLeftInferredMask() ); }
@Test public void testBetaWithConstraintsWithNegativeWatches() { String rule1 = "$b : B( a == 15) @watch(c, !a) A( a == 10, b == $b.b ) @watch(s, !a, !b)"; KieBase kbase = getKnowledgeBase(rule1); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); ObjectTypeNode otn = getObjectTypeNode(kbase, "A" ); assertNotNull( otn ); Class classType = ((ClassObjectType) otn.getObjectType()).getClassType(); List<String> sp = getSettableProperties(wm, otn); AlphaNode alphaNode = ( AlphaNode ) otn.getObjectSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("a"), sp), alphaNode.getDeclaredMask( ) ); assertEquals( calculatePositiveMask(classType, list("a", "b", "s"), sp), alphaNode.getInferredMask() ); BetaNode betaNode = ( BetaNode ) alphaNode.getObjectSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("b","s"), sp), betaNode.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("s"), sp), betaNode.getRightInferredMask() ); assertEquals( calculateNegativeMask(classType, list("!a", "!b"), sp), betaNode.getRightNegativeMask() ); otn = getObjectTypeNode(kbase, "B" ); alphaNode = ( AlphaNode ) otn.getObjectSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("a"), sp), alphaNode.getDeclaredMask( ) ); assertEquals( calculatePositiveMask(classType, list("a", "b", "c"), sp), alphaNode.getInferredMask()); assertEquals( calculatePositiveMask(classType, list( "b", "c" ), sp), betaNode.getLeftDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list( "b", "c" ), sp), betaNode.getLeftInferredMask() ); assertEquals( calculateNegativeMask(classType, list("!a"), sp), betaNode.getLeftNegativeMask() ); }
@Test public void testBetaWithConstraintsWithWatches() { String rule1 = "$b : B( a == 15) @watch(c) A( a == 10, b == $b.b ) @watch(s)"; KieBase kbase = getKnowledgeBase(rule1); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); ObjectTypeNode otn = getObjectTypeNode(kbase, "A" ); assertNotNull( otn ); Class classType = ((ClassObjectType) otn.getObjectType()).getClassType(); List<String> sp = getSettableProperties(wm, otn); AlphaNode alphaNode = ( AlphaNode ) otn.getObjectSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("a"), sp), alphaNode.getDeclaredMask( ) ); assertEquals( calculatePositiveMask(classType, list("a", "b", "s"), sp), alphaNode.getInferredMask() ); BetaNode betaNode = ( BetaNode ) alphaNode.getObjectSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("b","s"), sp), betaNode.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "b", "s"), sp), betaNode.getRightInferredMask() ); assertEquals( calculatePositiveMask(classType, list("b", "c"), sp), betaNode.getLeftDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "b", "c"), sp), betaNode.getLeftInferredMask() ); otn = getObjectTypeNode(kbase, "B" ); alphaNode = ( AlphaNode ) otn.getObjectSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("a"), sp), alphaNode.getDeclaredMask( ) ); assertEquals( calculatePositiveMask(classType, list("a", "b", "c"), sp), alphaNode.getInferredMask()); assertEquals( calculatePositiveMask(classType, list( "b", "c" ), sp), betaNode.getLeftDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list( "a", "b", "c" ), sp), betaNode.getLeftInferredMask() ); }