protected RuleDescrBuilderImpl(PackageDescrBuilder parent) { super( parent, new RuleDescr() ); }
public void addRule( final RuleDescr rule ) { if ( this.rules == Collections.EMPTY_LIST ) { this.rules = new ArrayList<RuleDescr>( 1 ); } for ( final AttributeDescr at : attributes ) { // check if rule overrides the attribute if ( !rule.getAttributes().containsKey( at.getName() ) ) { // if not, use default value rule.addAttribute( at ); } } this.rules.add( rule ); }
public RuleDescrBuilder namedRhs( String name, String rhs ) { descr.addNamedConsequences( name, rhs ); return this; }
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() ) ); } } }
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 ) ); }
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; }
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 ); } }
public void addRule(RuleBuildContext context) { // MVEL: Compiler change final RuleDescr ruleDescr = context.getRuleDescr(); // setup the line mappins for this rule final String name = this.pkg.getName() + "." + StringUtils.ucFirst( ruleDescr.getClassName() ); final LineMappings mapping = new LineMappings( name ); mapping.setStartLine( ruleDescr.getConsequenceLine() ); mapping.setOffset( ruleDescr.getConsequenceOffset() ); context.getPkg().getDialectRuntimeRegistry().getLineMappings().put( name, mapping ); }
if (isEmpty(ruleDescr.getNamespace())) { ruleDescr.setNamespace(packageDescr.getNamespace()); inheritPackageAttributes(pkgAttributes, ruleDescr); if (isEmpty(ruleDescr.getDialect())) { ruleDescr.addAttribute(new AttributeDescr("dialect", pkgRegistry.getDialect()));
public Object end(final String uri, final String localName, final ExtensibleXmlParser parser) throws SAXException { final Element element = parser.endElementBuilder(); final RuleDescr ruleDescr = (RuleDescr) parser.getCurrent(); final AndDescr lhs = ruleDescr.getLhs(); if ( lhs == null ) { throw new SAXParseException( "<rule> requires a LHS", parser.getLocator() ); } NodeList list = element.getElementsByTagName( "rhs" ); if ( list.getLength() == 0 ) { throw new SAXParseException( "<rule> requires a <rh> child element", parser.getLocator() ); } ruleDescr.setConsequence( ((org.w3c.dom.Text)list.item( 0 ).getChildNodes().item( 0 )).getWholeText() ); NodeList attributes = element.getElementsByTagName( "rule-attribute" ); for ( int i = 0, length = attributes.getLength(); i < length; i++ ) { final String name = ((Element) attributes.item( i )).getAttribute( "name" ); emptyAttributeCheck( "rule-attribute", "name", name, parser ); final String value = ((Element) attributes.item( i )).getAttribute( "value" ); ruleDescr.addAttribute( new AttributeDescr( name, value ) ); } ((PackageDescr) parser.getData()).addRule( ruleDescr ); return ruleDescr; }
public static JavaAnalysisResult createJavaAnalysisResult(final RuleBuildContext context, String consequenceName, Map<String, Declaration> decls) { OptimizerFactory.setDefaultOptimizer( OptimizerFactory.SAFE_REFLECTIVE ); final RuleDescr ruleDescr = context.getRuleDescr(); BoundIdentifiers bindings = new BoundIdentifiers(context.getDeclarationResolver().getDeclarationClasses( decls ), context.getPackageBuilder().getGlobals(), null, KnowledgeHelper.class ); String consequenceStr = ( Rule.DEFAULT_CONSEQUENCE_NAME.equals( consequenceName ) ) ? (String) ruleDescr.getConsequence() : (String) ruleDescr.getNamedConsequences().get( consequenceName ); consequenceStr = consequenceStr + "\n"; return ( JavaAnalysisResult) context.getDialect().analyzeBlock( context, ruleDescr, consequenceStr, bindings ); }
buffer.append("public class ").append(StringUtils.ucFirst(ruleDescr.getClassName())).append(" {").append(lineSeparator); buffer.append(" private static final long serialVersionUID = 510l;").append(lineSeparator); ruleDescr.setConsequenceOffset( lines.length );
public void buildMetaAttributes(final RuleBuildContext context ) { Rule rule = context.getRule(); for ( String metaAttr : context.getRuleDescr().getAnnotationNames() ) { AnnotationDescr ad = context.getRuleDescr().getAnnotation( metaAttr ); if ( ad.hasValue() ) { if ( ad.getValues().size() == 1 ) { rule.addMetaAttribute( metaAttr, resolveValue( ad.getSingleValue() ) ); } else { rule.addMetaAttribute( metaAttr, ad.getValueMap() ); } } else { rule.addMetaAttribute( metaAttr, null ); } } }
final RuleDescr ruleDescr = context.getRuleDescr(); for ( final AttributeDescr attributeDescr : ruleDescr.getAttributes().values() ) { final String name = attributeDescr.getName(); if ( name.equals( "no-loop" ) ) { AnnotationDescr ann = ruleDescr.getAnnotation( "activationListener" ); if ( ann != null && !StringUtils.isEmpty( (String) ann.getValue() ) ) { rule.setActivationListener( MVEL.evalToString( (String) ann.getValue() ) );
RuleDescr dummy = new RuleDescr( wd.getName() + " Window Declaration" ); dummy.addAttribute( new AttributeDescr( "dialect", "java" ) ); RuleBuildContext context = new RuleBuildContext( this, dummy,
public RuleDescrBuilder attribute( String name, String value ) { descr.addAttribute( new AttributeDescr( name, value ) ); return this; }
StringUtils.ucFirst( context.getRuleDescr().getClassName() ) ); context.getRuleDescr().getClassName() + StringUtils.ucFirst( className ) + "Invoker" );
private void inheritPackageAttributes( Map<String, AttributeDescr> pkgAttributes, RuleDescr ruleDescr ) { if (pkgAttributes == null) { return; } for (AttributeDescr attrDescr : pkgAttributes.values()) { String name = attrDescr.getName(); AttributeDescr ruleAttrDescr = ruleDescr.getAttributes().get( name ); if (ruleAttrDescr == null) { ruleDescr.getAttributes().put( name, attrDescr ); } } }
public AnnotationDescrBuilder<RuleDescrBuilder> newAnnotation( String name ) { AnnotationDescrBuilder<RuleDescrBuilder> annotation = new AnnotationDescrBuilderImpl<RuleDescrBuilder>( this, name ); descr.addAnnotation( annotation.getDescr() ); return annotation; }
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 ) ); }