Search in sources :

Example 1 with Cheese

use of org.drools.mvel.model.Cheese in project drools by kiegroup.

the class CompositeObjectSinkAdapterTest method testPropagationWithNullValue.

@Test
public void testPropagationWithNullValue() {
    extractor = store.getReader(Cheese.class, "type");
    final AlphaNode al1 = createAlphaNode(cheeseTypeEqualsTo("stilton"));
    final AlphaNode al2 = createAlphaNode(cheeseTypeEqualsTo("brie"));
    final AlphaNode al3 = createAlphaNode(cheeseTypeEqualsTo("muzzarela"));
    ad.addObjectSink(al1);
    ad.addObjectSink(al2);
    ad.addObjectSink(al3);
    InternalFactHandle handle = new ReteooFactHandleFactory().newFactHandle(new Cheese(), null, null, new DisconnectedWorkingMemoryEntryPoint("DEFAULT"));
    try {
        ad.propagateAssertObject(handle, null, null);
    } catch (RuntimeException e) {
        fail("Not supposed to throw any exception: " + e.getMessage());
    }
}
Also used : DisconnectedWorkingMemoryEntryPoint(org.drools.kiesession.entrypoints.DisconnectedWorkingMemoryEntryPoint) Cheese(org.drools.mvel.model.Cheese) ReteooFactHandleFactory(org.drools.core.reteoo.ReteooFactHandleFactory) InternalFactHandle(org.drools.core.common.InternalFactHandle) AlphaNode(org.drools.core.reteoo.AlphaNode) Test(org.junit.Test)

Example 2 with Cheese

use of org.drools.mvel.model.Cheese in project drools by kiegroup.

the class AlphaNodeTest method testLiteralConstraintAssertObjectWithoutMemory.

@Test
public void testLiteralConstraintAssertObjectWithoutMemory() throws Exception {
    InternalKnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase();
    BuildContext buildContext = new BuildContext(kBase, Collections.emptyList());
    buildContext.setRule(new RuleImpl("test"));
    StatefulKnowledgeSessionImpl ksession = (StatefulKnowledgeSessionImpl) kBase.newKieSession();
    final RuleImpl rule = new RuleImpl("test-rule");
    PropagationContextFactory pctxFactory = RuntimeComponentFactory.get().getPropagationContextFactory();
    final PropagationContext context = pctxFactory.createPropagationContext(0, PropagationContext.Type.INSERTION, null, null, null);
    final MockObjectSource source = new MockObjectSource(buildContext.getNextNodeId());
    AlphaNodeFieldConstraint constraint = ConstraintTestUtil.createCheeseTypeEqualsConstraint(store, "cheddar", useLambdaConstraint);
    // With Memory
    final AlphaNode alphaNode = new AlphaNode(buildContext.getNextNodeId(), constraint, source, // no memory
    buildContext);
    final MockObjectSink sink = new MockObjectSink();
    alphaNode.addObjectSink(sink);
    final Cheese cheddar = new Cheese("cheddar", 5);
    final DefaultFactHandle f0 = (DefaultFactHandle) ksession.insert(cheddar);
    // check sink is empty
    assertLength(0, sink.getAsserted());
    // object should assert as it passes text
    alphaNode.assertObject(f0, context, ksession);
    Assert.assertEquals(1, sink.getAsserted().size());
    Object[] list = (Object[]) sink.getAsserted().get(0);
    assertSame(cheddar, ksession.getObject((DefaultFactHandle) list[0]));
    final Cheese stilton = new Cheese("stilton", 6);
    final DefaultFactHandle f1 = new DefaultFactHandle(1, stilton);
    // object should NOT assert as it does not pass test
    alphaNode.assertObject(f1, context, ksession);
    assertLength(1, sink.getAsserted());
    list = (Object[]) sink.getAsserted().get(0);
    assertSame(cheddar, ksession.getObject((DefaultFactHandle) list[0]));
}
Also used : PropagationContextFactory(org.drools.core.common.PropagationContextFactory) PropagationContext(org.drools.core.spi.PropagationContext) RuleImpl(org.drools.core.definitions.rule.impl.RuleImpl) Cheese(org.drools.mvel.model.Cheese) MockObjectSource(org.drools.mvel.model.MockObjectSource) MockObjectSink(org.drools.core.reteoo.MockObjectSink) AlphaNode(org.drools.core.reteoo.AlphaNode) DefaultFactHandle(org.drools.core.common.DefaultFactHandle) AlphaNodeFieldConstraint(org.drools.core.spi.AlphaNodeFieldConstraint) BuildContext(org.drools.core.reteoo.builder.BuildContext) StatefulKnowledgeSessionImpl(org.drools.kiesession.session.StatefulKnowledgeSessionImpl) InternalKnowledgeBase(org.drools.kiesession.rulebase.InternalKnowledgeBase) Test(org.junit.Test)

Example 3 with Cheese

use of org.drools.mvel.model.Cheese in project drools by kiegroup.

the class AlphaNodeTest method testUpdateSinkWithoutMemory.

@Test
public void testUpdateSinkWithoutMemory() {
    // An AlphaNode should try and repropagate from its source
    InternalKnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase();
    BuildContext buildContext = new BuildContext(kBase, Collections.emptyList());
    buildContext.setRule(new RuleImpl("test"));
    StatefulKnowledgeSessionImpl ksession = (StatefulKnowledgeSessionImpl) kBase.newKieSession();
    final RuleImpl rule = new RuleImpl("test-rule");
    PropagationContextFactory pctxFactory = RuntimeComponentFactory.get().getPropagationContextFactory();
    final PropagationContext context = pctxFactory.createPropagationContext(0, PropagationContext.Type.INSERTION, null, null, null);
    final MockObjectSource source = new MockObjectSource(buildContext.getNextNodeId());
    AlphaNodeFieldConstraint constraint = ConstraintTestUtil.createCheeseTypeEqualsConstraint(store, "cheddar", useLambdaConstraint);
    final AlphaNode alphaNode = new AlphaNode(buildContext.getNextNodeId(), constraint, source, // no memory
    buildContext);
    alphaNode.attach(buildContext);
    final MockObjectSink sink1 = new MockObjectSink();
    alphaNode.addObjectSink(sink1);
    // Assert a single fact which should be in the AlphaNode memory and also
    // propagated to the
    // the tuple sink
    final Cheese cheese = new Cheese("cheddar", 0);
    final DefaultFactHandle handle1 = new DefaultFactHandle(1, cheese);
    // adding handle to the mock source
    source.addFact(handle1);
    alphaNode.assertObject(handle1, context, ksession);
    // Create a fact that should not be propagated, since the alpha node restriction will filter it out
    final Cheese stilton = new Cheese("stilton", 10);
    final DefaultFactHandle handle2 = new DefaultFactHandle(2, stilton);
    // adding handle to the mock source
    source.addFact(handle2);
    alphaNode.assertObject(handle2, context, ksession);
    assertLength(1, sink1.getAsserted());
    // Attach a new tuple sink
    final MockObjectSink sink2 = new MockObjectSink();
    // Tell the alphanode to update the new node. Make sure the first sink1
    // is not updated
    // likewise the source should not do anything
    alphaNode.updateSink(sink2, context, ksession);
    assertLength(1, sink1.getAsserted());
    assertLength(1, sink2.getAsserted());
    Assert.assertEquals(1, source.getUdated());
}
Also used : PropagationContextFactory(org.drools.core.common.PropagationContextFactory) DefaultFactHandle(org.drools.core.common.DefaultFactHandle) AlphaNodeFieldConstraint(org.drools.core.spi.AlphaNodeFieldConstraint) BuildContext(org.drools.core.reteoo.builder.BuildContext) PropagationContext(org.drools.core.spi.PropagationContext) StatefulKnowledgeSessionImpl(org.drools.kiesession.session.StatefulKnowledgeSessionImpl) RuleImpl(org.drools.core.definitions.rule.impl.RuleImpl) Cheese(org.drools.mvel.model.Cheese) MockObjectSource(org.drools.mvel.model.MockObjectSource) MockObjectSink(org.drools.core.reteoo.MockObjectSink) AlphaNode(org.drools.core.reteoo.AlphaNode) InternalKnowledgeBase(org.drools.kiesession.rulebase.InternalKnowledgeBase) Test(org.junit.Test)

Example 4 with Cheese

use of org.drools.mvel.model.Cheese in project drools by kiegroup.

the class AlphaNodeTest method testReturnValueConstraintAssertObject.

/*
     *  This just test AlphaNode With a different Constraint type.
     */
@Test
public void testReturnValueConstraintAssertObject() throws Exception {
    InternalKnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase();
    BuildContext buildContext = new BuildContext(kBase, Collections.emptyList());
    buildContext.setRule(new RuleImpl("test"));
    StatefulKnowledgeSessionImpl ksession = (StatefulKnowledgeSessionImpl) kBase.newKieSession();
    final RuleImpl rule = new RuleImpl("test-rule");
    PropagationContextFactory pctxFactory = RuntimeComponentFactory.get().getPropagationContextFactory();
    final PropagationContext context = pctxFactory.createPropagationContext(0, PropagationContext.Type.INSERTION, null, null, null);
    final MockObjectSource source = new MockObjectSource(buildContext.getNextNodeId());
    AlphaNodeFieldConstraint constraint = ConstraintTestUtil.createCheeseTypeEqualsConstraint(store, "cheddar", useLambdaConstraint);
    final AlphaNode alphaNode = new AlphaNode(buildContext.getNextNodeId(), constraint, source, buildContext);
    final MockObjectSink sink = new MockObjectSink();
    alphaNode.addObjectSink(sink);
    final Cheese cheddar = new Cheese("cheddar", 5);
    final DefaultFactHandle f0 = (DefaultFactHandle) ksession.insert(cheddar);
    assertLength(0, sink.getAsserted());
    // object should assert as it passes text
    alphaNode.assertObject(f0, context, ksession);
    assertLength(1, sink.getAsserted());
    final Object[] list = (Object[]) sink.getAsserted().get(0);
    assertSame(cheddar, ksession.getObject((DefaultFactHandle) list[0]));
    final Cheese stilton = new Cheese("stilton", 6);
    f0.setObject(stilton);
    sink.getAsserted().clear();
    // object should not assert as it does not pass text
    alphaNode.assertObject(f0, context, ksession);
    assertLength(0, sink.getAsserted());
}
Also used : PropagationContextFactory(org.drools.core.common.PropagationContextFactory) PropagationContext(org.drools.core.spi.PropagationContext) RuleImpl(org.drools.core.definitions.rule.impl.RuleImpl) Cheese(org.drools.mvel.model.Cheese) MockObjectSource(org.drools.mvel.model.MockObjectSource) MockObjectSink(org.drools.core.reteoo.MockObjectSink) AlphaNode(org.drools.core.reteoo.AlphaNode) DefaultFactHandle(org.drools.core.common.DefaultFactHandle) AlphaNodeFieldConstraint(org.drools.core.spi.AlphaNodeFieldConstraint) BuildContext(org.drools.core.reteoo.builder.BuildContext) StatefulKnowledgeSessionImpl(org.drools.kiesession.session.StatefulKnowledgeSessionImpl) InternalKnowledgeBase(org.drools.kiesession.rulebase.InternalKnowledgeBase) Test(org.junit.Test)

Example 5 with Cheese

use of org.drools.mvel.model.Cheese in project drools by kiegroup.

the class CompositeObjectSinkAdapterTest method keyForCheeseCharType.

private HashKey keyForCheeseCharType(char c) {
    Cheese cheese = new Cheese();
    cheese.setCharType(c);
    HashKey hashKey = new CompositeObjectSinkAdapter.HashKey();
    hashKey.setValue(extractor.getIndex(), cheese, extractor);
    return hashKey;
}
Also used : Cheese(org.drools.mvel.model.Cheese) HashKey(org.drools.core.reteoo.CompositeObjectSinkAdapter.HashKey)

Aggregations

Cheese (org.drools.mvel.model.Cheese)16 Test (org.junit.Test)8 ClassObjectType (org.drools.core.base.ClassObjectType)7 Pattern (org.drools.core.rule.Pattern)7 AlphaNodeFieldConstraint (org.drools.core.spi.AlphaNodeFieldConstraint)6 InternalKnowledgeBase (org.drools.kiesession.rulebase.InternalKnowledgeBase)6 StatefulKnowledgeSessionImpl (org.drools.kiesession.session.StatefulKnowledgeSessionImpl)6 AlphaNode (org.drools.core.reteoo.AlphaNode)5 DeclarationImpl (org.drools.model.impl.DeclarationImpl)5 AlphaIndexImpl (org.drools.model.index.AlphaIndexImpl)5 InternalFactHandle (org.drools.core.common.InternalFactHandle)4 DefaultFactHandle (org.drools.core.common.DefaultFactHandle)3 PropagationContextFactory (org.drools.core.common.PropagationContextFactory)3 RuleImpl (org.drools.core.definitions.rule.impl.RuleImpl)3 MockObjectSink (org.drools.core.reteoo.MockObjectSink)3 BuildContext (org.drools.core.reteoo.builder.BuildContext)3 PropagationContext (org.drools.core.spi.PropagationContext)3 MockObjectSource (org.drools.mvel.model.MockObjectSource)3 HashKey (org.drools.core.reteoo.CompositeObjectSinkAdapter.HashKey)2 Declaration (org.drools.core.rule.Declaration)2