package com.sample; import java.util.ArrayList; import java.util.List; import org.drools.KnowledgeBase; import org.drools.KnowledgeBaseFactory; import org.drools.builder.KnowledgeBuilder; import org.drools.builder.KnowledgeBuilderError; import org.drools.builder.KnowledgeBuilderErrors; import org.drools.builder.KnowledgeBuilderFactory; import org.drools.builder.ResourceType; import org.drools.io.ResourceFactory; import org.drools.logger.KnowledgeRuntimeLogger; import org.drools.logger.KnowledgeRuntimeLoggerFactory; import org.drools.runtime.StatefulKnowledgeSession; /** * This is a sample class to launch a rule. */ public class DroolsTest { public static final void main(String[] args) { try { // load up the knowledge base KnowledgeBase kbase = readKnowledgeBase(); StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(); KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test"); // go ! List loans = new ArrayList(); loans.add(new Loan(25000, "2006")); loans.add(new Loan(5000, "2000")); Person p = new Person("Alen", 11000, loans ); ksession.insert(p); ksession.startProcess("com.sample.ruleflow"); ksession.fireAllRules(); logger.close(); System.out.println("Result: " + p.getOutcome()); } catch (Throwable t) { t.printStackTrace(); } } private static KnowledgeBase readKnowledgeBase() throws Exception { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource("Sample.drl"), ResourceType.DRL); kbuilder.add(ResourceFactory.newClassPathResource("ruleflow.rf"), ResourceType.DRF); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if (errors.size() > 0) { for (KnowledgeBuilderError error: errors) { System.err.println(error); } throw new IllegalArgumentException("Could not parse knowledge."); } KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); return kbase; } public static class Person { private String name; private float income; private List loans; private String outcome; public Person(String name, float income, List loans) { super(); this.name = name; this.income = income; this.loans = loans; this.outcome = "rejected"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public float getIncome() { return income; } public void setIncome(float income) { this.income = income; } public List getLoans() { return loans; } public void setLoans(List loans) { this.loans = loans; } public String getOutcome() { return outcome; } public void setOutcome(String outcome) { this.outcome = outcome; } } public static class Loan { private float loanAmount; private String startYear; public Loan(float loanAmount, String startYear) { super(); this.loanAmount = loanAmount; this.startYear = startYear; } public float getLoanAmount() { return loanAmount; } public void setLoanAmount(float loanAmount) { this.loanAmount = loanAmount; } public String getStartYear() { return startYear; } public void setStartYear(String startYear) { this.startYear = startYear; } } }