Package net.firstpartners.drools

Source Code of net.firstpartners.drools.RuleRunner

package net.firstpartners.drools;

import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.logging.Logger;

import net.firstpartners.drools.data.RuleSource;
import net.firstpartners.drools.log.ILogger;

import org.drools.KnowledgeBase;
import org.drools.compiler.DroolsParserException;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.StatelessKnowledgeSession;

/**
* Load rules
*
* @author paul
*
*/
public class RuleRunner {

  // Handle to loader
  private final IRuleLoader loader;

  // Handle to logger
  private static final Logger log = Logger.getLogger(RuleRunner.class
      .getName());

  public RuleRunner(IRuleLoader ruleLoader) {

    loader = ruleLoader;

  }

  /**
   * Run the rules
   *
   * @param rulesUrl
   *            - array of rule files that we need to load
   * @param dslFileUrl
   *            - optional dsl file name (can be null)
   * @param facts
   *            - Javabeans to pass to the rule engine
   * @param globals
   *            - global variables to pass to the rule engine
   * @param logger
   *            - handle to a logging object
   * @throws IOException
   * @throws DroolsParserException
   * @throws ClassNotFoundException
   * @throws Exception
   */
  public void runStatelessRules(RuleSource ruleSource, ILogger logger)
  throws DroolsParserException, IOException, ClassNotFoundException {

    // The most common operation on a rulebase is to create a new rule
    // session; either stateful or stateless.
    log.info("Creating master rule base");
    KnowledgeBase masterRulebase = loader.loadRules(ruleSource);

    log.info("running stateless rules");
    runStatelessRules(masterRulebase, ruleSource.getFacts(), ruleSource
        .getGlobals(), logger);

  }

  /**
   * Run Stateless rules using a prebuilt knowledgebase
   *
   * @param preBuiltKnowledgeBase
   * @param facts
   * @param globals
   * @param logger
   * @throws DroolsParserException
   * @throws IOException
   */
  public void runStatelessRules(KnowledgeBase preBuiltKnowledgeBase,
      Collection<Object> facts, HashMap<String, Object> globals,
      ILogger logger) throws DroolsParserException, IOException {

    // Create a new stateless session
    log.info("Creating new working memory");
    StatelessKnowledgeSession workingMemory = preBuiltKnowledgeBase
    .newStatelessKnowledgeSession();

    log.info("Checking for globals");
    if (globals != null) {
      for (String o : globals.keySet()) {
        log.info("Inserting global name: " + o + " value:"
            + globals.get(o));
        workingMemory.setGlobal(o, globals.get(o));
      }
    }
    // Add the logger
    log.info("Inserting handle to logger (via global)");
    workingMemory.setGlobal("log", logger);

    log.info("Using facts:" + facts);

    log
    .info("==================== Calling Rule Engine ====================");

    // Fire using the facts
    workingMemory.execute(facts);

    log.info("==================== Rules Complete ====================");

  }

  /**
   * Run the rules
   *
   * @param rulesUrl
   *            - array of rule files that we need to load
   * @param dslFileUrl
   *            - optional dsl file name (can be null)
   * @param ruleFlowUrl
   *            - optional ruleFlow file name (can be null)
   * @param facts
   *            - Javabeans to pass to the rule engine
   * @param globals
   *            - global variables to pass to the rule engine
   * @param logger
   *            - handle to a logging object
   * @throws IOException
   * @throws DroolsParserException
   * @throws ClassNotFoundException
   * @throws Exception
   */
  public StatefulKnowledgeSession getStatefulSession(RuleSource ruleSource,
      ILogger logger) throws DroolsParserException, IOException,
      ClassNotFoundException {

    // The most common operation on a rulebase is to create a new rule
    // session; either stateful or stateless.
    KnowledgeBase masterRulebase = loader.loadRules(ruleSource);

    return getStatefulSession(masterRulebase, ruleSource.getGlobals(),
        logger);

  }

  /**
   * Get a Stateful Session for a pre built knowledgebase
   *
   * @param preBuiltKnowledgeBase
   * @param globals
   * @param logger
   * @return
   * @throws DroolsParserException
   * @throws IOException
   */
  public StatefulKnowledgeSession getStatefulSession(
      KnowledgeBase preBuiltKnowledgeBase,
      HashMap<String, Object> globals, ILogger logger)
  throws DroolsParserException, IOException {
    // Create a new stateful session
    StatefulKnowledgeSession workingMemory = preBuiltKnowledgeBase
    .newStatefulKnowledgeSession();

    for (String o : globals.keySet()) {
      log
      .info("Inserting global name: " + o + " value:"
          + globals.get(o));
      workingMemory.setGlobal(o, globals.get(o));
    }

    // Add the logger
    log.info("Inserting handle to logger (via global)");
    workingMemory.setGlobal("log", logger);

    return workingMemory;

  }

}
TOP

Related Classes of net.firstpartners.drools.RuleRunner

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.