private void manageUnresolvedExtension(RuleDescr ruleDescr, Collection<RuleDescr> candidates) { List<String> candidateRules = new LinkedList<String>(); for ( RuleDescr r : candidates ) { if ( StringUtils.stringSimilarity( ruleDescr.getParentName(), r.getName(), StringUtils.SIMILARITY_STRATS.DICE ) >= 0.75 ) { candidateRules.add( r.getName() ); } } String msg = "Unresolved parent name " + ruleDescr.getParentName(); if ( candidateRules.size() > 0 ) { msg += " >> did you mean any of :" + candidateRules; } results.add(new RuleBuildError(new Rule(ruleDescr.getName()), ruleDescr, msg, "Unable to resolve parent rule, please check that both rules are in the same package")); }
void compileAllRules(PackageDescr packageDescr, PackageRegistry pkgRegistry) { pkgRegistry.setDialect( getPackageDialect(packageDescr) ); // only try to compile if there are no parse errors if (!hasErrors()) { compileRules(packageDescr, pkgRegistry); } compileAll(); try { reloadAll(); } catch (Exception e) { this.results.add( new DialectError( null, "Unable to wire compiled classes, probably related to compilation failures:" + e.getMessage() ) ); } updateResults(); // iterate and compile if (! hasErrors() && this.ruleBase != null) { for (RuleDescr ruleDescr : packageDescr.getRules()) { pkgRegistry = this.pkgRegistryMap.get(ruleDescr.getNamespace()); this.ruleBase.addRule(pkgRegistry.getPackage(), pkgRegistry.getPackage().getRule(ruleDescr.getName())); } } }
private void reportHierarchyErrors( Map<String, List<RuleDescr>> parents, Map<String, RuleDescr> sorted ) { boolean circularDep = false; for ( List<RuleDescr> rds : parents.values() ) { for ( RuleDescr ruleDescr : rds ) { if ( parents.get( ruleDescr.getParentName() ) != null && ( sorted.containsKey( ruleDescr.getName() ) || parents.containsKey( ruleDescr.getName() ) ) ) { circularDep = true; results.add(new RuleBuildError(new Rule(ruleDescr.getName()), ruleDescr, null, "Circular dependency in rules hierarchy")); break; } manageUnresolvedExtension( ruleDescr, sorted.values() ); } if ( circularDep ) { break; } } }
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(); }
} else if ( pkg.getRule( ruleDescr.getParentName() ) != null ) { sorted.put(ruleDescr.getName(), ruleDescr); } else { List<RuleDescr> childz = children.get(ruleDescr.getParentName()); sorted.put(root.getName(), root); List<RuleDescr> childz = children.remove(root.getName()); if ( childz != null) { roots.addAll( childz );
public void init(final RuleDescr ruleDescr) { final String ruleClassName = getUniqueLegalName( this.pkg.getName(), ruleDescr.getName(), ruleDescr.getConsequence().hashCode(), "java", "Rule", this.src ); ruleDescr.setClassName( StringUtils.ucFirst( ruleClassName ) ); }
public void init(RuleDescr ruleDescr) { // MVEL:test null to Fix failing test on // org.drools.rule.builder.dialect. // mvel.MVELConsequenceBuilderTest.testImperativeCodeError() // @todo: why is this here, MVEL doesn't compile anything? mdp String pkgName = this.pkg == null ? "" : this.pkg.getName(); final String ruleClassName = getUniqueLegalName(pkgName, ruleDescr.getName(), ruleDescr.getConsequence().hashCode(), "mvel", "Rule", this.src); ruleDescr.setClassName( StringUtils.ucFirst( ruleClassName ) ); }
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 ); } }
private String processRules(final List rules) { String ruleList = ""; for ( final Iterator iterator = rules.iterator(); iterator.hasNext(); ) { final RuleDescr ruleDescr = (RuleDescr) iterator.next(); String rule = "<rule name=\"" + ruleDescr.getName() + "\">" + XmlDumper.eol; final String attribute = processAttribute( ruleDescr.getAttributes().values() ); String lhs = ""; if ( ruleDescr.getLhs().getDescrs() != Collections.EMPTY_LIST ) { lhs = "<lhs>" + processDescrList( ruleDescr.getLhs().getDescrs() ) + "</lhs>"; } else { lhs = "<lhs> </lhs>"; } final String rhs = "<rhs>" + replaceIllegalChars( (String) ruleDescr.getConsequence() ) + "</rhs>" + XmlDumper.eol; rule += attribute; rule += lhs; rule += rhs; rule += "</rule>"; ruleList += rule; } return ruleList + XmlDumper.eol; }
context.getRuleDescr(), null, "Unknown accumulate function: '" + fc.getFunction() + "' on rule '" + context.getRuleDescr().getName() + "'. All accumulate functions must be registered before building a resource." ) ); return null;
context.getRuleDescr(), null, "Unknown accumulate function: '" + func.getFunction() + "' on rule '" + context.getRuleDescr().getName() + "'. All accumulate functions must be registered before building a resource." ) ); return null;