public Declaration getDeclaration(final String identifier) { return (Declaration) ((AgendaItem)this.activation).getRuleTerminalNode().getSubRule().getOuterDeclarations().get( identifier ); }
private long evalDelay(Activation item, WorkingMemory wm) { Object d = this.delay.getValue( item, ((AgendaItem)item).getRuleTerminalNode().getTimerDelayDeclarations(), item.getRule(), wm ); if ( d instanceof Number ) { return ((Number) d).longValue(); } else { return TimeUtils.parseTimeString( d.toString() ); } }
private long evalPeriod( Activation item, WorkingMemory wm ) { Object p = this.period.getValue( item, ((AgendaItem)item).getRuleTerminalNode().getTimerPeriodDeclarations(), item.getRule(), wm ); if ( p instanceof Number ) { return ((Number) p).longValue(); } else { return TimeUtils.parseTimeString( p.toString() ); } }
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.isActive(); } 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.getRuleTerminalNode().getSubRule().getOuterDeclarations().get( name ); if ( declr != null ) { return declr.getValue( null, item.getTuple().get( declr ).getObject() ); } else { return item.getRule().getMetaData().get( name ); } }
public int getValue(final KnowledgeHelper khelper, final Rule rule, final WorkingMemory workingMemory) { VariableResolverFactory factory = unit.getFactory( khelper, ((AgendaItem)khelper.getActivation()).getRuleTerminalNode().getSalienceDeclarations(), rule, null, (LeftTuple) khelper.getActivation().getTuple(), null, (InternalWorkingMemory) workingMemory, workingMemory.getGlobalResolver() ); // do we have any functions for this namespace? Package pkg = workingMemory.getRuleBase().getPackage( "MAIN" ); if ( pkg != null ) { MVELDialectRuntimeData data = (MVELDialectRuntimeData) pkg.getDialectRuntimeRegistry().getDialectData( this.id ); factory.setNextFactory( data.getFunctionFactory() ); } return ((Number) MVEL.executeExpression( this.expr, factory )).intValue(); }
public void evaluate(final KnowledgeHelper knowledgeHelper, final WorkingMemory workingMemory) throws Exception { VariableResolverFactory factory = unit.getFactory( knowledgeHelper, ((AgendaItem)knowledgeHelper.getActivation()).getRuleTerminalNode().getDeclarations(), knowledgeHelper.getRule(), knowledgeHelper, (LeftTuple) knowledgeHelper.getTuple(), null, (InternalWorkingMemory) workingMemory, workingMemory.getGlobalResolver() ); // do we have any functions for this namespace? Package pkg = workingMemory.getRuleBase().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 ); } }