private StringBuffer expandConstructions ( final String drl ) { // display keys if requested if ( showKeyword ) { for ( DSLMappingEntry entry : this . keywords ) { logger . info ( "keyword: " + entry . getMappingKey ( ) ) ; logger . info ( " " + entry . getKeyPattern ( ) ) ; } } if ( showWhen ) { for ( DSLMappingEntry entry : this . condition ) { logger . info ( "when: " + entry . getMappingKey ( ) ) ; logger . info ( " " + entry . getKeyPattern ( ) ) ; // logger.info( " " + entry.getValuePattern() ); } } if ( showThen ) { for ( DSLMappingEntry entry : this . consequence ) { logger . info ( "then: " + entry . getMappingKey ( ) ) ; logger . info ( " " + entry . getKeyPattern ( ) ) ; } } // parse and expand specific areas final Matcher m = finder . matcher ( drl ) ; final StringBuffer buf = new StringBuffer ( ) ; int drlPos = 0 ; int linecount = 0 ; while ( m . find ( ) ) { final StringBuilder expanded = new StringBuilder ( ) ; int newPos = m . start ( ) ; linecount += countNewlines ( drl , drlPos , newPos ) ; drlPos = newPos ; String constr = m . group ( ) . trim ( ) ; if ( constr . startsWith ( "rule" ) ) { String headerFragment = m . group ( 1 ) ; expanded . append ( headerFragment ) ; // adding rule header and attributes String lhsFragment = m . group ( 2 ) ; expanded . append ( this . expandLHS ( lhsFragment , linecount + countNewlines ( drl , drlPos , m . start ( 2 ) ) + 1 ) ) ; String thenFragment = m . group ( 3 ) ; expanded . append ( thenFragment ) ; // adding "then" header String rhsFragment = this . expandRHS ( m . group ( 4 ) , linecount + countNewlines ( drl , drlPos , m . start ( 4 ) ) + 1 ) ; expanded . append ( rhsFragment ) ; expanded . append ( m . group ( 5 ) ) ; // adding rule trailer } else if ( constr . startsWith ( "query" ) ) { String fragment = m . group ( 6 ) ; expanded . append ( fragment ) ; // adding query header and attributes String lhsFragment = this . expandLHS ( m . group ( 7 ) , linecount + countNewlines ( drl , drlPos , m . start ( 7 ) ) + 1 ) ; expanded . append ( lhsFragment ) ; expanded . append ( m . group ( 8 ) ) ; // adding query trailer } else { // strange behavior this . addError ( new ExpanderException ( "Unable to expand statement: " + constr , 0 ) ) ; } m . appendReplacement ( buf , Matcher . quoteReplacement ( expanded . toString ( ) ) ) ; } m . appendTail ( buf ) ; return buf ; }
Expand constructions like rules and queries