Package org.drools.kproject

Source Code of org.drools.kproject.KBaseBuilder

package org.drools.kproject;

import java.util.*;
import java.io.IOException;
import java.io.InputStream;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseConfiguration;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.CompositeKnowledgeBuilder;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.conf.AssertBehaviorOption;
import org.drools.conf.EventProcessingOption;
import org.drools.core.util.StringUtils;
import org.drools.io.ResourceFactory;


public class KBaseBuilder {
    private EventProcessingOption eventProcessingMode;

    private AssertBehaviorOption equalsBehaviour;
    protected KBaseBuilder() {

    }

    public static KBaseBuilder fluent() {
        return new KBaseBuilder();
    }

    public  KBaseBuilder setEqualsBehavior(AssertBehaviorOption equalsBehaviour) {
        this.equalsBehaviour = equalsBehaviour;
        return this;
    }

    public  KBaseBuilder setEventProcessingMode(EventProcessingOption eventProcessingMode) {
        this.eventProcessingMode = eventProcessingMode;
        return this;
    }

    public KnowledgeBase build(Class[] kBaseQualifiers) {
        Map<Class, List<String>> map = new HashMap<Class, List<String>>();

        if ( kBaseQualifiers != null && kBaseQualifiers.length > 0 ) {
            for ( Class kBaseQualifier : kBaseQualifiers ) {
                List<String> list = new ArrayList<String>();
                buildResourcesList(kBaseQualifier, kBaseQualifier.getName(), list);
                map.put(kBaseQualifier, list);
            }
        }

        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
        CompositeKnowledgeBuilder ckbuilder = kbuilder.batch();

        for ( Map.Entry<Class, List<String>> entry : map.entrySet() ) {
            Class cls = entry.getKey();
            List<String> files = entry.getValue();
            if ( !files.isEmpty() ) {
                for ( String file : files ) {
                    if ( file.endsWith(".drl" ) ) {
                        ckbuilder.add( ResourceFactory.newUrlResource( cls.getResource("/" + file.trim()) ), ResourceType.DRL );
                    }
                }
            }
        }

        ckbuilder.build();


        if ( kbuilder.hasErrors() ) {
            throw new RuntimeException( "Unable to compile " + kBaseQualifiers[0].getName() + ":\n" + kbuilder.getErrors() );
        }

        KnowledgeBaseConfiguration kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
        kconf.setOption( eventProcessingMode);
        kconf.setOption( equalsBehaviour );
        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(kconf);
        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
        return kbase;
    }

    public static void  buildResourcesList(Class cls, String kBaseQName, List<String> list) {
        String fileStr = null;
        InputStream is = null;
        try {
            is = cls.getResourceAsStream( "/" + kBaseQName + ".files.dat" );
            fileStr = org.drools.core.util.StringUtils.toString( is );
        } catch ( IOException e ) {
            throw new RuntimeException( "Unable to fine files for KnowledgeBase " + kBaseQName );
        } finally {
            if ( is != null ) {
                try {
                    is.close();
                } catch (IOException e) {
                    throw new RuntimeException( "Unable to fine files for KnowledgeBase " + kBaseQName );
                }
            }
        }

        if (!StringUtils.isEmpty(fileStr))  {
            for( String entry : fileStr.split( "," ) ) {
                if (!StringUtils.isEmpty(entry))  {
                    list.add( entry.trim() );
                }
            }
        }
    }

}
TOP

Related Classes of org.drools.kproject.KBaseBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.