use of org.mule.mvel2.integration.impl.MapVariableResolverFactory in project mvel by mvel.
the class TemplateTests method testDRLTemplate.
public void testDRLTemplate() {
String template = "@declare{\"drl\"}@includeNamed{\"ced\"; node=root }@end{}" + "" + "@declare{\"ced\"}" + "@if{ node.base==1 } @includeNamed{ \"cedX\"; connect=\"AND\"; args=node.list }" + "@elseif{ node.base ==2 }@includeNamed{ \"cedX\"; connect=\"OR\"; args=node.list }" + "@end{}" + "@end{}" + "" + "@declare{\"cedX\"}@{connect}@foreach{child : args}" + "@includeNamed{\"ced\"; node=child; }@end{} @{connect}@end{}";
TemplateRegistry reportRegistry = new SimpleTemplateRegistry();
reportRegistry.addNamedTemplate("drl", TemplateCompiler.compileTemplate(template));
TemplateRuntime.execute(reportRegistry.getNamedTemplate("drl"), null, reportRegistry);
Map<String, Object> context = new HashMap<String, Object>();
context.put("root", new Node(2, Arrays.asList(new Node(1, Collections.EMPTY_LIST))));
String result = (String) TemplateRuntime.execute(reportRegistry.getNamedTemplate("drl"), null, new MapVariableResolverFactory(context), reportRegistry);
assertEquals("OR AND AND OR", result);
}
use of org.mule.mvel2.integration.impl.MapVariableResolverFactory in project drools by kiegroup.
the class DefaultGenerator method generate.
/*
* (non-Javadoc)
*
* @see org.kie.decisiontable.parser.Generator#generate(java.lang.String,
* org.kie.decisiontable.parser.Row)
*/
public void generate(String templateName, Row row) {
try {
CompiledTemplate template = getTemplate(templateName);
VariableResolverFactory factory = new MapVariableResolverFactory();
Map<String, Object> vars = new HashMap<String, Object>();
initializePriorCommaConstraints(vars);
initializeHasPriorJunctionConstraint(vars);
vars.put("row", row);
for (Cell cell : row.getCells()) {
cell.addValue(vars);
}
String drl = String.valueOf(TemplateRuntime.execute(template, vars, factory, registry));
rules.add(drl);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
use of org.mule.mvel2.integration.impl.MapVariableResolverFactory in project drools by kiegroup.
the class JavaFunctionBuilder method build.
/* (non-Javadoc)
* @see org.kie.rule.builder.dialect.java.JavaFunctionBuilder#build(org.kie.rule.Package, org.kie.lang.descr.FunctionDescr, org.codehaus.jfdi.interpreter.TypeResolver, java.util.Map)
*/
public String build(final InternalKnowledgePackage pkg, final FunctionDescr functionDescr, final TypeResolver typeResolver, final Map<String, LineMappings> lineMappings, final List<KnowledgeBuilderResult> errors) {
final Map<String, Object> vars = new HashMap<String, Object>();
vars.put("package", pkg.getName());
vars.put("imports", pkg.getImports().keySet());
final List<String> staticImports = new LinkedList<String>();
for (String staticImport : pkg.getStaticImports()) {
if (!staticImport.endsWith(functionDescr.getName())) {
staticImports.add(staticImport);
}
}
vars.put("staticImports", staticImports);
vars.put("className", StringUtils.ucFirst(functionDescr.getName()));
vars.put("methodName", functionDescr.getName());
vars.put("returnType", functionDescr.getReturnType());
vars.put("parameterTypes", functionDescr.getParameterTypes());
vars.put("parameterNames", functionDescr.getParameterNames());
vars.put("hashCode", functionDescr.getText().hashCode());
// Check that all the parameters are resolvable
final List<String> names = functionDescr.getParameterNames();
final List<String> types = functionDescr.getParameterTypes();
for (int i = 0, size = names.size(); i < size; i++) {
try {
typeResolver.resolveType(types.get(i));
} catch (final ClassNotFoundException e) {
errors.add(new FunctionError(functionDescr, e, "Unable to resolve type " + types.get(i) + " while building function."));
break;
}
}
vars.put("text", functionDescr.getText());
final String text = String.valueOf(TemplateRuntime.eval(template, null, new MapVariableResolverFactory(vars)));
final BufferedReader reader = new BufferedReader(new StringReader(text));
final String lineStartsWith = " public static " + functionDescr.getReturnType() + " " + functionDescr.getName();
try {
String line;
int offset = 0;
while ((line = reader.readLine()) != null) {
offset++;
if (line.startsWith(lineStartsWith)) {
break;
}
}
functionDescr.setOffset(offset);
} catch (final IOException e) {
// won't ever happen, it's just reading over a string.
throw new RuntimeException("Error determining start offset with function");
}
final String name = pkg.getName() + "." + StringUtils.ucFirst(functionDescr.getName());
final LineMappings mapping = new LineMappings(name);
mapping.setStartLine(functionDescr.getLine());
mapping.setOffset(functionDescr.getOffset());
lineMappings.put(name, mapping);
return text;
}
use of org.mule.mvel2.integration.impl.MapVariableResolverFactory in project drools by kiegroup.
the class JavaRuleBuilderHelper method generateMethodTemplate.
public static void generateMethodTemplate(final String ruleTemplate, final RuleBuildContext context, final Map vars) {
TemplateRegistry registry = getRuleTemplateRegistry(context.getKnowledgeBuilder().getRootClassLoader());
context.addMethod((String) TemplateRuntime.execute(registry.getNamedTemplate(ruleTemplate), null, new MapVariableResolverFactory(vars), registry));
}
use of org.mule.mvel2.integration.impl.MapVariableResolverFactory in project drools by kiegroup.
the class AccumulateTemplateTest method testMethodGeneration.
@Test
public void testMethodGeneration() {
final String className = "accumulate0";
final String[] declarationTypes = new String[] { "String", "int" };
final Declaration[] declarations = new Declaration[] { new Declaration("name", null, null), new Declaration("age", null, null) };
final Declaration[] inner = new Declaration[] { new Declaration("cheese", new PatternExtractor(new ClassObjectType(Cheese.class)), null), new Declaration("price", store.getReader(Cheese.class, "price"), null) };
final String[] globals = new String[] { "aGlobal", "anotherGlobal" };
final List globalTypes = Arrays.asList(new String[] { "String", "String" });
final Map map = new HashMap();
map.put("className", StringUtils.ucFirst(className));
map.put("instanceName", className);
map.put("package", "org.drools");
map.put("ruleClassName", "Rule0");
map.put("invokerClassName", "Rule0" + StringUtils.ucFirst(className) + "Invoker");
map.put("declarations", declarations);
map.put("declarationTypes", declarationTypes);
map.put("globals", globals);
map.put("globalTypes", globalTypes);
map.put("innerDeclarations", inner);
map.put("attributes", new String[] { "x" });
map.put("attributesTypes", new String[] { "int" });
map.put("initCode", "x = 0;");
map.put("actionCode", "x += 1;");
map.put("reverseCode", "x -= 1;");
map.put("resultCode", "x + 10");
map.put("supportsReverse", "true");
map.put("resultType", Integer.class);
map.put("hashCode", new Integer(10));
TemplateRegistry registry = getRuleTemplateRegistry();
Object method = TemplateRuntime.execute(registry.getNamedTemplate("accumulateInnerClass"), null, new MapVariableResolverFactory(map), registry);
// System.out.println( method );
}
Aggregations