public DuplicateRule(RuleDescr ruleDescr, PackageDescr pkg, KnowledgeBuilderConfiguration config) { super(ruleDescr.getResource(), config); rule = ruleDescr.getName(); pkgDescr = pkg; line = new int[1]; line[0] = ruleDescr.getLine(); }
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; }
private void validateRule(PackageDescr packageDescr, RuleDescr rule) { if (rule.hasErrors()) { for (String error : rule.getErrors()) { this.results.add( new ParserError( rule.getResource(), error + " in rule " + rule.getName(), rule.getLine(), rule.getColumn(), packageDescr.getNamespace() ) ); } } }
private void validateUniqueRuleNames( final PackageDescr packageDescr ) { final Set<String> names = new HashSet<String>(); PackageRegistry packageRegistry = this.pkgRegistryMap.get( packageDescr.getNamespace() ); Package pkg = null; if (packageRegistry != null) { pkg = packageRegistry.getPackage(); } for (final RuleDescr rule : packageDescr.getRules()) { validateRule(packageDescr, rule); final String name = rule.getName(); if (names.contains( name )) { this.results.add( new ParserError( rule.getResource(), "Duplicate rule name: " + name, rule.getLine(), rule.getColumn(), packageDescr.getNamespace() ) ); } if (pkg != null && pkg.getRule( name ) != null) { this.results.add( new DuplicateRule( rule, packageDescr, this.configuration ) ); } names.add( name ); } }
child.setResource(context.getRuleDescr().getResource()); child.setNamespace(context.getRuleDescr().getNamespace());
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); }
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 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; }
private void addRule( final RuleDescr ruleDescr ) { if ( ruleDescr.getResource() == null ) { ruleDescr.setResource( resource ); this.results.addAll( context.getWarnings() ); context.getRule().setResource( ruleDescr.getResource() );