@Override public String marshal(final RuleModel model) { //Build rule final String ruleTemplate = marshalRule(model); log.debug("ruleTemplate:\n{}", ruleTemplate); log.debug("generated template:\n{}", ruleTemplate); final DataProvider dataProvider = chooseDataProvider(model); final DataProviderCompiler tplCompiler = new DataProviderCompiler(); final InputStream templateStream = new ByteArrayInputStream(ruleTemplate.getBytes(IoUtils.UTF8_CHARSET)); final DefaultTemplateContainer tc = new DefaultTemplateContainer(templateStream, false); final TemplateDataListener listener = new TemplateDataListener(tc, false); final String generatedDrl = tplCompiler.compile(dataProvider, listener); log.debug("generated drl:\n{}", generatedDrl); return generatedDrl; }
/** * Generates DRL from a data provider for the spreadsheet data and templates. * * @param rs the resultset for the table data * @param templateStream the InputStream for reading the templates * @return the generated DRL text as a String */ public String compile(final ResultSet rs, final InputStream templateStream) { TemplateContainer tc = new DefaultTemplateContainer(templateStream); closeStream(templateStream); return compile(rs, new TemplateDataListener(tc)); }
public String compile(final InputStream xlsStream, final InputStream templateStream, InputType type, int startRow, int startCol) { TemplateContainer tc = new DefaultTemplateContainer( templateStream ); closeStream( templateStream ); return compile( xlsStream, type, new TemplateDataListener( startRow, startCol, tc ) ); }
public String compile(final InputStream xlsStream, final String worksheetName, final InputStream templateStream, int startRow, int startCol) { TemplateContainer tc = new DefaultTemplateContainer( templateStream ); closeStream( templateStream ); return compile( xlsStream, worksheetName, new TemplateDataListener( startRow, startCol, tc ) ); }
/** * Generates DRL from a data provider for the spreadsheet data and templates. * * @param dataProvider the data provider for the spreadsheet data * @param templateStream the InputStream for reading the templates * @return the generated DRL text as a String */ public String compile(final DataProvider dataProvider, final InputStream templateStream, boolean replaceOptionals) { DefaultTemplateContainer tc = new DefaultTemplateContainer(templateStream, replaceOptionals); closeStream(templateStream); return compile(dataProvider, new TemplateDataListener(tc)); }
/** * Compile templates, substituting from a collection of maps or objects * into the given template. * * @param objs objs the collection of maps or objects * @param templateStream the template as a stream * @return the expanded rules as a string */ public String compile(final Collection<?> objs, final InputStream templateStream) { TemplateContainer tc = new DefaultTemplateContainer(templateStream); closeStream(templateStream); return compile(new ObjectDataProvider(tc, objs), new TemplateDataListener(tc)); } }
@Test public void testPricing() throws Exception { final ExternalSpreadsheetCompiler converter = new ExternalSpreadsheetCompiler(); final List<DataListener> listeners = new ArrayList<DataListener>(); TemplateDataListener l1 = new TemplateDataListener(10, 3, "/templates/test_pricing1.drl"); listeners.add(l1); TemplateDataListener l2 = new TemplateDataListener(30, 3, "/templates/test_pricing2.drl"); listeners.add(l2); converter.compile("/data/ExamplePolicyPricing.xls", InputType.XLS, listeners); //COMPILE KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newByteArrayResource(l1.renderDRL().getBytes()), ResourceType.DRL); kbuilder.add(ResourceFactory.newByteArrayResource(l2.renderDRL().getBytes()), ResourceType.DRL); assertFalse(kbuilder.hasErrors()); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages(kbuilder.getKnowledgePackages()); KieSession kSession = kbase.newKieSession(); //now create some test data Driver driver = new Driver(); Policy policy = new Policy(); kSession.insert(driver); kSession.insert(policy); kSession.fireAllRules(); System.out.println("BASE PRICE IS: " + policy.getBasePrice()); System.out.println("DISCOUNT IS: " + policy.getDiscountPercent()); int basePrice = policy.getBasePrice(); assertEquals(120, basePrice); }