package com.rules; import com.booking.*; import java.io.InputStreamReader; import java.io.StringReader; import java.io.InputStream; import java.text.*; import java.util.HashMap; import java.math.BigDecimal; import org.apache.log4j.*; import org.drools.RuleBase; import org.drools.WorkingMemory; import org.drools.RuleBaseFactory; import org.drools.audit.WorkingMemoryFileLogger; import org.drools.compiler.PackageBuilder; import org.drools.decisiontable.*; public class PricingRules implements PricingService { static RuleBase pricingRuleBase; static Logger myLogger; public void PricingRules() { } public Booking generatePrice(Reservation res) throws Exception { myLogger = Logger.getLogger(PricingRules.class.getName( )); myLogger.info("inside the ws method"); Booking book = new Booking(); firePricingRules(res, book); return book; } public void firePricingRules(Reservation res, Booking booking) throws Exception{ try { myLogger.info("about to load rules"); loadRulesFromDecisionTable(); // loadRulesFromDRL(); final WorkingMemory workingMemory = pricingRuleBase.newWorkingMemory(); final WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger( workingMemory ); logger.setFileName( "log/pricing" ); workingMemory.assertObject(res); workingMemory.assertObject(booking); workingMemory.fireAllRules(); } catch(Exception ruleEx) { ruleEx.printStackTrace(); throw ruleEx; } } private void loadRulesFromDecisionTable() throws Exception { if (pricingRuleBase == null) try { final SpreadsheetCompiler converter = new SpreadsheetCompiler(); final InputStream stream = this.getClass().getResourceAsStream( "/pricingdectbl2.xls"); final String drl = converter.compile(stream, InputType.XLS); myLogger.info(drl); final PackageBuilder builder = new PackageBuilder(); StringReader sr = new StringReader(drl); builder.addPackageFromDrl(sr); pricingRuleBase = RuleBaseFactory.newRuleBase(); pricingRuleBase.addPackage(builder.getPackage()); myLogger.info("pricingRuleBase loaded. . ."); } catch (Exception e) { myLogger.info("Error at Drool rulebase loading. . ."); e.printStackTrace(); throw e; } } private void loadRulesFromDRL() throws Exception{ if (pricingRuleBase == null){ try{ final PackageBuilder builder = new PackageBuilder(); builder.addPackageFromDrl( new InputStreamReader( PricingRules.class.getResourceAsStream("/pricingrules2.drl"))); pricingRuleBase = RuleBaseFactory.newRuleBase(); pricingRuleBase.addPackage(builder.getPackage()); myLogger.info("pricingRuleBase loaded. . ."); } catch (Exception e){ myLogger.info("Error at Drool rulebase loading. . ."); e.printStackTrace(); throw e; } } } }