Drools Template

Drools Template てコード生成自体にルール使うのか。デバッグしづれえwww

org.drools.template.parser.DefaultTemplateRuleBase:

    public DefaultTemplateRuleBase(final TemplateContainer tc) {
        ruleBase = readRule(getDTRules(tc.getTemplates()));
    }

で作られるそのルールが以下。

package org.drools.template.parser;
//generated from Decision Table
import java.util.Map;
import java.util.HashMap;
global org.drools.template.parser.DefaultGenerator generator;
rule "ricin"
	when
		r : Row()
	then
		generator.generate( "ricin", r);
end

以下の処理で、置換用の値一組(Decision Tableの一行に相当)毎にひとつのRowとして上記ルールのksessionにinsertされる。ヒットしたら上記generatorのメソッドで置換が行われ、テンプレートを元に1ルールが生成される。

org.drools.template.DataProviderCompiler

    private void processData(final DataProvider dataProvider,
                             List<DataListener> listeners) {
        for ( int i = 0; dataProvider.hasNext(); i++ ) {
            String[] row = dataProvider.next();
            newRow( listeners,
                    i,
                    row.length );
            for ( int cellNum = 0; cellNum < row.length; cellNum++ ) {
                String cell = row[cellNum];

                newCell( listeners,
                         i,
                         cellNum,
                         cell,
                         DataListener.NON_MERGED );
            }
        }
        finishData( listeners );
    }