public String[] next() { Object obj = iter.next(); if (obj instanceof Map) { return nextFromMap(obj); } else { return nextFromObject(obj); } } }
private String[] nextFromObject(Object obj) { Class<?> clazz = obj.getClass(); String[] values = new String[columns.length]; for (int iCol = 0; iCol < columns.length; iCol++) { String fieldName = columns[iCol].getName(); Object val = null; try { Method method = getMethod(clazz, fieldName); if (method != null) { val = method.invoke(obj); } else { Field field = getField(clazz, fieldName); if (field != null) { val = field.get(obj); } } } catch (Exception e) { // leave it null } values[iCol] = val == null ? null : val.toString(); } return values; }
private DataProvider chooseDataProvider(final RuleModel model) { DataProvider dataProvider; TemplateModel tplModel = (TemplateModel) model; if (tplModel.getRowsCount() > 0) { dataProvider = new ArrayDataProvider(tplModel.getTableAsArray()); } else { dataProvider = generateEmptyIterator(); } return dataProvider; }
/** * 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)); } }
public static void main(String[] args) { InputStream template = RuleTemplateArrayDemo.class.getResourceAsStream("/com/template/template.drt"); DataProvider dataProvider = new ArrayDataProvider(new String[][]{ {"1", "Tom"}, {"2", "Lucy"} }); DataProviderCompiler compiler = new DataProviderCompiler(); String drl = compiler.compile(dataProvider, template); KieSession kieSession = getKieSessionByDrl(drl); Person person = new Person(1,""); kieSession.insert(person); kieSession.fireAllRules(); System.out.println("Person's username is " + person.getUsername()); }