protected boolean processAtomicExpression( RuleBuildContext context, Pattern pattern, BaseDescr d, String expr, Map<String, OperatorDescr> aliases ) { if ( d instanceof AtomicExprDescr ) { Matcher m = evalRegexp.matcher( ((AtomicExprDescr) d).getExpression() ); if ( m.find() ) { // MVELDumper already stripped the eval // this will build the eval using the specified dialect PredicateDescr pdescr = new PredicateDescr( context.getRuleDescr().getResource(), expr ); pdescr.copyLocation( d ); buildEval( context, pattern, pdescr, aliases, expr, true ); return true; } } return false; }
public void visitPredicateDescr(final PredicateDescr descr) { this.template = new String(); this.template = "<predicate>" + replaceIllegalChars( (String) descr.getContent() ) + "</predicate>" + XmlDumper.eol; }
public void copyParameters( BaseDescr base ) { if ( base instanceof RelationalExprDescr ) { setParameters( ((RelationalExprDescr) base).getParameters() ); } } }
protected void createAndBuildPredicate( RuleBuildContext context, Pattern pattern, BaseDescr base, String expr, Map<String, OperatorDescr> aliases ) { Dialect dialect = context.getDialect(); MVELDialect mvelDialect = (MVELDialect) context.getDialect( "mvel" ); context.setDialect( mvelDialect ); PredicateDescr pdescr = new PredicateDescr( context.getRuleDescr().getResource(), expr ); pdescr.copyParameters( base ); pdescr.copyLocation( base ); buildEval( context, pattern, pdescr, aliases, expr, false ); // fall back to original dialect context.setDialect(dialect); }
public void build(final RuleBuildContext context, final BoundIdentifiers usedIdentifiers, final Declaration[] previousDeclarations, final Declaration[] localDeclarations, final PredicateConstraint predicateConstraint, final PredicateDescr predicateDescr, final AnalysisResult analysis) { final String className = "predicate" + context.getNextId(); predicateDescr.setClassMethodName( className ); final Map map = createVariableContext( className, (String) predicateDescr.getContent(), context, previousDeclarations, localDeclarations, usedIdentifiers.getGlobals() ); generateTemplates("predicateMethod", "predicateInvoker", context, className, map, predicateConstraint, predicateDescr); }
predicateDescr, null, "Predicate '" + predicateDescr.getContent() + "' must be a Boolean expression\n" + predicateDescr.positionAsString() ) ); unit = dialect.getMVELCompilationUnit( (String) predicateDescr.getContent(), analysis, previousDeclarations, predicateDescr, e, "Unable to build expression for 'inline-eval' : " + e.getMessage() + "'" + predicateDescr.getContent() + "'\n" + e.getMessage() ) );
public RuleConditionElement build(RuleBuildContext context, BaseDescr descr, Pattern prefixPattern) { if (prefixPattern == null) { return build(context, descr); } EvalDescr evalDescr = (EvalDescr) descr; PredicateDescr predicateDescr = new PredicateDescr( context.getRuleDescr().getResource(), evalDescr.getContent() ); AnalysisResult analysis = buildAnalysis(context, prefixPattern, predicateDescr, null ); Declaration[] declarations = getUsedDeclarations(context, prefixPattern, analysis); return buildEval(context, evalDescr, analysis, declarations); }
public PredicateDescr(final Resource resource, final Object text) { this.content = text; setResource(resource); }
public void build(final RuleBuildContext context, final BoundIdentifiers usedIdentifiers, final Declaration[] previousDeclarations, final Declaration[] localDeclarations, final PredicateConstraint predicateConstraint, final PredicateDescr predicateDescr, final AnalysisResult analysis) { final String className = "predicate" + context.getNextId(); predicateDescr.setClassMethodName( className ); final Map vars = createVariableContext( className, (String) predicateDescr.getContent(), context, previousDeclarations, localDeclarations, usedIdentifiers.getGlobals() ); generateMethodTemplate("predicateMethod", context, vars); byte[] bytecode = createPredicateBytecode(context, vars); registerInvokerBytecode(context, vars, bytecode, predicateConstraint); }
predicateDescr, null, "Predicate '" + predicateDescr.getContent() + "' must be a Boolean expression\n" + predicateDescr.positionAsString() ) ); MVELCompilationUnit unit = dialect.getMVELCompilationUnit((String) predicateDescr.getContent(), analysis, previousDeclarations, predicateDescr, e, "Unable to build expression for 'inline-eval' : " + e.getMessage() + "'" + predicateDescr.getContent() + "'\n" + e.getMessage() ) ); } finally { context.setTypesafe( typesafe );
public MVELCompilationUnit buildCompilationUnit(RuleBuildContext context, Pattern pattern, String expression, Map<String, OperatorDescr> aliases) { Dialect dialect = context.getDialect(); context.setDialect( context.getDialect( "mvel" ) ); PredicateDescr predicateDescr = new PredicateDescr( context.getRuleDescr().getResource(), expression ); AnalysisResult analysis = buildAnalysis(context, pattern, predicateDescr, aliases); if ( analysis == null ) { // something bad happened return null; } Declaration[][] usedDeclarations = getUsedDeclarations(context, pattern, analysis); MVELCompilationUnit compilationUnit = buildCompilationUnit(context, usedDeclarations[0], usedDeclarations[1], predicateDescr, analysis); context.setDialect(dialect); return compilationUnit; }
public static AnalysisResult buildAnalysis(RuleBuildContext context, Pattern pattern, PredicateDescr predicateDescr, Map<String, OperatorDescr> aliases ) { Map<String, Class< ? >> declarations = getDeclarationsMap( predicateDescr, context, true ); Map<String, Class< ? >> globals = context.getPackageBuilder().getGlobals(); Map<String, EvaluatorWrapper> operators = aliases == null ? new HashMap<String, EvaluatorWrapper>() : buildOperators(context, pattern, predicateDescr, aliases); Class< ? > thisClass = null; if ( pattern.getObjectType() instanceof ClassObjectType) { thisClass = ((ClassObjectType) pattern.getObjectType()).getClassType(); } return context.getDialect().analyzeExpression( context, predicateDescr, predicateDescr.getContent(), new BoundIdentifiers( declarations, globals, operators, thisClass ) ); }