use of org.mvel2.integration.VariableResolverFactory in project drools by kiegroup.
the class MVELConsequence method evaluate.
public void evaluate(final KnowledgeHelper knowledgeHelper, final WorkingMemory workingMemory) throws Exception {
VariableResolverFactory factory = unit.getFactory(knowledgeHelper, ((AgendaItem) knowledgeHelper.getMatch()).getTerminalNode().getRequiredDeclarations(), knowledgeHelper.getRule(), knowledgeHelper.getTuple(), null, (InternalWorkingMemory) workingMemory, workingMemory.getGlobalResolver());
// do we have any functions for this namespace?
InternalKnowledgePackage pkg = workingMemory.getKnowledgeBase().getPackage("MAIN");
if (pkg != null) {
MVELDialectRuntimeData data = (MVELDialectRuntimeData) pkg.getDialectRuntimeRegistry().getDialectData(this.id);
factory.setNextFactory(data.getFunctionFactory());
}
CompiledExpression compexpr = (CompiledExpression) this.expr;
if (MVELDebugHandler.isDebugMode()) {
if (MVELDebugHandler.verbose) {
logger.info(DebugTools.decompile(compexpr));
}
MVEL.executeDebugger(compexpr, knowledgeHelper, factory);
} else {
MVEL.executeExpression(compexpr, knowledgeHelper, factory);
}
}
use of org.mvel2.integration.VariableResolverFactory in project drools by kiegroup.
the class ActivationPropertyHandler method getProperty.
public Object getProperty(String name, Object obj, VariableResolverFactory variableFactory) {
AgendaItem item = (AgendaItem) obj;
if ("rule".equals(name)) {
return item.getRule();
} else if ("active".equals(name)) {
return item.isQueued();
} else if ("objects".equals(name)) {
return item.getObjects();
} else if ("factHandles".equals(name)) {
return item.getFactHandles();
} else if ("declarationIds".equals(name)) {
return item.getDeclarationIds();
} else if ("this".equals(name)) {
return item;
}
// FIXME hack as MVEL seems to be ignoring indexed variables
VariableResolver vr = variableFactory.getNextFactory().getVariableResolver(name);
if (vr != null) {
return vr.getValue();
}
Declaration declr = item.getTerminalNode().getSubRule().getOuterDeclarations().get(name);
if (declr != null) {
return declr.getValue(null, item.getTuple().get(declr).getObject());
} else {
return item.getRule().getMetaData(name);
}
}
use of org.mvel2.integration.VariableResolverFactory in project drools by kiegroup.
the class MVELObjectExpression method getValue.
public Object getValue(final Tuple leftTuple, final Declaration[] declrs, final Rule rule, final InternalWorkingMemory wm) {
VariableResolverFactory factory = unit.getFactory(null, declrs, rule, null, leftTuple, null, wm, wm.getGlobalResolver());
// do we have any functions for this namespace?
InternalKnowledgePackage pkg = wm.getKnowledgeBase().getPackage("MAIN");
if (pkg != null) {
MVELDialectRuntimeData data = (MVELDialectRuntimeData) pkg.getDialectRuntimeRegistry().getDialectData(this.id);
factory.setNextFactory(data.getFunctionFactory());
}
return MVELSafeHelper.getEvaluator().executeExpression(this.expr, factory);
}
use of org.mvel2.integration.VariableResolverFactory in project drools by kiegroup.
the class MVELSalienceExpression method getValue.
public int getValue(final KnowledgeHelper khelper, final Rule rule, final WorkingMemory workingMemory) {
VariableResolverFactory factory = unit.getFactory(khelper, khelper != null ? ((AgendaItem) khelper.getMatch()).getTerminalNode().getSalienceDeclarations() : null, rule, null, khelper != null ? (LeftTuple) khelper.getMatch().getTuple() : null, null, (InternalWorkingMemory) workingMemory, workingMemory.getGlobalResolver());
// do we have any functions for this namespace?
InternalKnowledgePackage pkg = workingMemory.getKnowledgeBase().getPackage("MAIN");
if (pkg != null) {
MVELDialectRuntimeData data = (MVELDialectRuntimeData) pkg.getDialectRuntimeRegistry().getDialectData(this.id);
factory.setNextFactory(data.getFunctionFactory());
}
Object value = MVEL.executeExpression(this.expr, factory);
if (value instanceof String) {
value = TimeUtils.parseTimeString((String) value);
}
return ((Number) value).intValue();
}
use of org.mvel2.integration.VariableResolverFactory in project drools by kiegroup.
the class MVELReturnValueExpression method evaluate.
public FieldValue evaluate(final InternalFactHandle handle, final Tuple tuple, final Declaration[] previousDeclarations, final Declaration[] requiredDeclarations, final WorkingMemory workingMemory, final Object ctx) throws Exception {
VariableResolverFactory factory = (VariableResolverFactory) ctx;
unit.updateFactory(handle, tuple, null, (InternalWorkingMemory) workingMemory, workingMemory.getGlobalResolver(), factory);
// do we have any functions for this namespace?
InternalKnowledgePackage pkg = workingMemory.getKnowledgeBase().getPackage("MAIN");
if (pkg != null) {
MVELDialectRuntimeData data = (MVELDialectRuntimeData) pkg.getDialectRuntimeRegistry().getDialectData(this.id);
factory.setNextFactory(data.getFunctionFactory());
}
return workingMemory.getKnowledgeBase().getConfiguration().getComponentFactory().getFieldFactory().getFieldValue(MVELSafeHelper.getEvaluator().executeExpression(this.expr, handle, factory));
}
Aggregations