use of org.drools.core.spi.InternalReadAccessor in project drools by kiegroup.
the class FactTemplateFieldExtractorTest method testExtractor.
@Test
public void testExtractor() {
InternalKnowledgePackage pkg = new KnowledgePackageImpl("org.store");
final FieldTemplate cheeseName = new FieldTemplateImpl("name", 0, String.class);
final FieldTemplate cheesePrice = new FieldTemplateImpl("price", 1, Integer.class);
final FieldTemplate[] fields = new FieldTemplate[] { cheeseName, cheesePrice };
final FactTemplate cheese = new FactTemplateImpl(pkg, "Cheese", fields);
final InternalReadAccessor extractName = new FactTemplateFieldExtractor(cheese, 0);
final InternalReadAccessor extractPrice = new FactTemplateFieldExtractor(cheese, 1);
final Fact stilton = cheese.createFact(10);
stilton.setFieldValue("name", "stilton");
stilton.setFieldValue("price", new Integer(200));
assertEquals("stilton", extractName.getValue(null, stilton));
assertEquals(new Integer(200), extractPrice.getValue(null, stilton));
assertFalse(extractName.isNullValue(null, stilton));
stilton.setFieldValue("name", null);
assertTrue(extractName.isNullValue(null, stilton));
assertFalse(extractPrice.isNullValue(null, stilton));
final Fact brie = cheese.createFact(12);
brie.setFieldValue("name", "brie");
brie.setFieldValue("price", new Integer(55));
assertEquals("brie", extractName.getValue(null, brie));
assertEquals(new Integer(55), extractPrice.getValue(null, brie));
assertFalse(extractName.isNullValue(null, brie));
brie.setFieldValue("name", null);
assertTrue(extractName.isNullValue(null, brie));
assertFalse(extractPrice.isNullValue(null, stilton));
}
use of org.drools.core.spi.InternalReadAccessor in project drools by kiegroup.
the class CompositeObjectSinkAdapterTest method testTripleAlphaCharacterConstraint.
@Test
public void testTripleAlphaCharacterConstraint() {
final CompositeObjectSinkAdapter ad = new CompositeObjectSinkAdapter();
InternalReadAccessor extractor = store.getReader(Cheese.class, "charType");
final MvelConstraint lit = new MvelConstraintTestUtil("charType == 65", new LongFieldImpl(65), extractor);
final AlphaNode al = new AlphaNode(buildContext.getNextId(), lit, new MockObjectSource(buildContext.getNextId()), buildContext);
ad.addObjectSink(al);
assertNull(ad.otherSinks);
assertNotNull(ad.hashedFieldIndexes);
assertEquals(1, ad.hashableSinks.size());
assertEquals(al, ad.getSinks()[0]);
final MvelConstraint lit2 = new MvelConstraintTestUtil("charType == 66", new LongFieldImpl(66), extractor);
final AlphaNode al2 = new AlphaNode(buildContext.getNextId(), lit2, new MockObjectSource(buildContext.getNextId()), buildContext);
ad.addObjectSink(al2);
assertNull(ad.hashedSinkMap);
assertEquals(2, ad.hashableSinks.size());
final MvelConstraint lit3 = new MvelConstraintTestUtil("charType == 67", new LongFieldImpl(67), extractor);
final AlphaNode al3 = new AlphaNode(buildContext.getNextId(), lit3, new MockObjectSource(buildContext.getNextId()), buildContext);
ad.addObjectSink(al3);
// this should now be nicely hashed.
assertNotNull(ad.hashedSinkMap);
assertNull(ad.hashableSinks);
// test propagation
Cheese cheese = new Cheese();
cheese.setCharType('B');
CompositeObjectSinkAdapter.HashKey hashKey = new CompositeObjectSinkAdapter.HashKey();
// should find this
hashKey.setValue(extractor.getIndex(), cheese, extractor);
ObjectSink sink = (ObjectSink) ad.hashedSinkMap.get(hashKey);
assertSame(al2, sink);
// should not find this one
cheese.setCharType('X');
hashKey.setValue(extractor.getIndex(), cheese, extractor);
sink = (ObjectSink) ad.hashedSinkMap.get(hashKey);
assertNull(sink);
// now remove one, check the hashing is undone
ad.removeObjectSink(al2);
assertNotNull(ad.hashableSinks);
assertEquals(2, ad.hashableSinks.size());
assertNull(ad.hashedSinkMap);
}
use of org.drools.core.spi.InternalReadAccessor in project drools by kiegroup.
the class CompositeObjectSinkAdapterTest method testTripleAlphaObjectCharacterConstraint.
@Test
public void testTripleAlphaObjectCharacterConstraint() {
final CompositeObjectSinkAdapter ad = new CompositeObjectSinkAdapter();
InternalReadAccessor extractor = store.getReader(Cheese.class, "charObjectType");
final MvelConstraint lit = new MvelConstraintTestUtil("charObjectType == 65", new LongFieldImpl(65), extractor);
final AlphaNode al = new AlphaNode(buildContext.getNextId(), lit, new MockObjectSource(buildContext.getNextId()), buildContext);
ad.addObjectSink(al);
assertNull(ad.otherSinks);
assertNotNull(ad.hashedFieldIndexes);
assertEquals(1, ad.hashableSinks.size());
assertEquals(al, ad.getSinks()[0]);
final MvelConstraint lit2 = new MvelConstraintTestUtil("charObjectType == 66", new LongFieldImpl(66), extractor);
final AlphaNode al2 = new AlphaNode(buildContext.getNextId(), lit2, new MockObjectSource(buildContext.getNextId()), buildContext);
ad.addObjectSink(al2);
assertNull(ad.hashedSinkMap);
assertEquals(2, ad.hashableSinks.size());
final MvelConstraint lit3 = new MvelConstraintTestUtil("charObjectType == 67", new LongFieldImpl(67), extractor);
final AlphaNode al3 = new AlphaNode(buildContext.getNextId(), lit3, new MockObjectSource(buildContext.getNextId()), buildContext);
ad.addObjectSink(al3);
// this should now be nicely hashed.
assertNotNull(ad.hashedSinkMap);
assertNull(ad.hashableSinks);
// test propagation
Cheese cheese = new Cheese();
cheese.setCharObjectType('B');
CompositeObjectSinkAdapter.HashKey hashKey = new CompositeObjectSinkAdapter.HashKey();
// should find this
hashKey.setValue(extractor.getIndex(), cheese, extractor);
ObjectSink sink = (ObjectSink) ad.hashedSinkMap.get(hashKey);
assertSame(al2, sink);
// should not find this one
cheese.setCharObjectType('X');
hashKey.setValue(extractor.getIndex(), cheese, extractor);
sink = (ObjectSink) ad.hashedSinkMap.get(hashKey);
assertNull(sink);
// now remove one, check the hashing is undone
ad.removeObjectSink(al2);
assertNotNull(ad.hashableSinks);
assertEquals(2, ad.hashableSinks.size());
assertNull(ad.hashedSinkMap);
}
use of org.drools.core.spi.InternalReadAccessor in project drools by kiegroup.
the class CompositeObjectSinkAdapterTest method testTripleAlpha.
@Test
public void testTripleAlpha() {
final CompositeObjectSinkAdapter ad = new CompositeObjectSinkAdapter();
InternalReadAccessor extractor = store.getReader(Cheese.class, "type");
final MvelConstraint lit = new MvelConstraintTestUtil("type == \"stilton\"", new ObjectFieldImpl("stilton"), new MockExtractor());
final AlphaNode al = new AlphaNode(buildContext.getNextId(), lit, new MockObjectSource(buildContext.getNextId()), buildContext);
ad.addObjectSink(al);
assertNull(ad.otherSinks);
assertNotNull(ad.hashedFieldIndexes);
assertEquals(1, ad.hashableSinks.size());
assertEquals(al, ad.getSinks()[0]);
final MvelConstraint lit2 = new MvelConstraintTestUtil("type == \"cheddar\"", new ObjectFieldImpl("cheddar"), new MockExtractor());
final AlphaNode al2 = new AlphaNode(buildContext.getNextId(), lit2, new MockObjectSource(buildContext.getNextId()), buildContext);
ad.addObjectSink(al2);
assertNull(ad.hashedSinkMap);
assertEquals(2, ad.hashableSinks.size());
final MvelConstraint lit3 = new MvelConstraintTestUtil("type == \"stinky\"", new ObjectFieldImpl("stinky"), new MockExtractor());
final AlphaNode al3 = new AlphaNode(buildContext.getNextId(), lit3, new MockObjectSource(buildContext.getNextId()), buildContext);
ad.addObjectSink(al3);
// this should now be nicely hashed.
assertNotNull(ad.hashedSinkMap);
assertNull(ad.hashableSinks);
// now remove one, check the hashing is undone
ad.removeObjectSink(al2);
assertNotNull(ad.hashableSinks);
assertEquals(2, ad.hashableSinks.size());
assertNull(ad.hashedSinkMap);
}
use of org.drools.core.spi.InternalReadAccessor in project drools by kiegroup.
the class CompositeObjectSinkAdapterTest method testPropagationWithNullValue.
@Test
public void testPropagationWithNullValue() {
final CompositeObjectSinkAdapter ad = new CompositeObjectSinkAdapter();
InternalReadAccessor extractor = store.getReader(Cheese.class, "type");
final MvelConstraint lit1 = new MvelConstraintTestUtil("type == \"stilton\"", new ObjectFieldImpl("stilton"), new MockExtractor());
final AlphaNode al1 = new AlphaNode(buildContext.getNextId(), lit1, new MockObjectSource(buildContext.getNextId()), buildContext);
final MvelConstraint lit2 = new MvelConstraintTestUtil("type == \"brie\"", new ObjectFieldImpl("brie"), new MockExtractor());
final AlphaNode al2 = new AlphaNode(buildContext.getNextId(), lit2, new MockObjectSource(buildContext.getNextId()), buildContext);
final MvelConstraint lit3 = new MvelConstraintTestUtil("type == \"muzzarela\"", new ObjectFieldImpl("muzzarela"), new MockExtractor());
final AlphaNode al3 = new AlphaNode(buildContext.getNextId(), lit3, new MockObjectSource(buildContext.getNextId()), buildContext);
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());
}
}
Aggregations