private void initDeclarations() { Map<String, Declaration> declMap = subrule.getOuterDeclarations(); this.allDeclarations = declMap.values().toArray(new Declaration[declMap.size()]); this.requiredDeclarations = new Declaration[query.getParameters().length]; int i = 0; for (Declaration declr : query.getParameters()) { this.requiredDeclarations[i++] = declMap.get(declr.getIdentifier()); } }
@Test public void testSimpleExpression() throws Exception { PackageDescr pkgDescr = new PackageDescr("pkg1"); KnowledgeBuilderImpl pkgBuilder = new KnowledgeBuilderImpl(); pkgBuilder.addPackage(pkgDescr); InternalKnowledgePackage pkg = pkgBuilder.getPackageRegistry("pkg1").getPackage(); final RuleDescr ruleDescr = new RuleDescr("rule 1"); ruleDescr.setNamespace("pkg1"); ruleDescr.setConsequence("modify (cheese) {price = 5 };\nretract (cheese)"); DialectCompiletimeRegistry dialectRegistry = pkgBuilder.getPackageRegistry(pkg.getName()).getDialectCompiletimeRegistry(); MVELDialect mvelDialect = (MVELDialect) dialectRegistry.getDialect("mvel"); final InstrumentedBuildContent context = new InstrumentedBuildContent(pkgBuilder, ruleDescr, dialectRegistry, pkg, mvelDialect); final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver(); final ObjectType cheeseObjeectType = new ClassObjectType(Cheese.class); final Pattern pattern = new Pattern(0, cheeseObjeectType, "cheese"); final GroupElement subrule = new GroupElement(GroupElement.AND); subrule.addChild(pattern); final Map<String, Declaration> map = new HashMap<String, Declaration>(); map.put("cheese", pattern.getDeclaration()); declarationResolver.setDeclarations(map); context.setDeclarationResolver(declarationResolver); final MVELConsequenceBuilder builder = new MVELConsequenceBuilder(); builder.build(context, RuleImpl.DEFAULT_CONSEQUENCE_NAME); InternalKnowledgeBase kBase = (InternalKnowledgeBase) KnowledgeBaseFactory.newKnowledgeBase(); PropagationContextFactory pctxFactory = kBase.getConfiguration().getComponentFactory().getPropagationContextFactory(); kBase.addPackage(pkg); StatefulKnowledgeSessionImpl ksession = (StatefulKnowledgeSessionImpl) kBase.newStatefulKnowledgeSession(); final Cheese cheddar = new Cheese("cheddar", 10); final InternalFactHandle f0 = (InternalFactHandle) ksession.insert(cheddar); final LeftTupleImpl tuple = new LeftTupleImpl(f0, null, true); f0.removeLeftTuple(tuple); final AgendaItem item = new AgendaItemImpl( 0, tuple, 10, pctxFactory.createPropagationContext(1, 1, null, tuple, null), new RuleTerminalNode( 0, new CompositeObjectSinkAdapterTest.MockBetaNode(), context.getRule(), subrule, 0, new BuildContext(kBase, null)), null); final DefaultKnowledgeHelper kbHelper = new DefaultKnowledgeHelper(ksession); kbHelper.setActivation(item); ((MVELConsequence) context.getRule().getConsequence()) .compile( (MVELDialectRuntimeData) pkgBuilder .getPackageRegistry(pkg.getName()) .getDialectRuntimeRegistry() .getDialectData("mvel")); context.getRule().getConsequence().evaluate(kbHelper, ksession); assertEquals(5, cheddar.getPrice()); }