use of com.dexels.navajo.expression.api.FunctionDefinition in project navajo by Dexels.
the class OsgiFunctionFactory method getInstance.
@Override
public FunctionInterface getInstance(final ClassLoader cl, final String functionName) {
FunctionDefinition fd = (FunctionDefinition) getComponent(functionName, "functionName", FunctionDefinition.class);
if (fd == null) {
logger.debug("OSGi function resolution for function: {} failed, going old school.", functionName);
return super.getInstance(cl, functionName);
}
FunctionInterface osgiResolution = fd.getFunctionInstance();
if (osgiResolution == null) {
logger.debug("OSGi function resolution for function: {} failed, going old school.", functionName);
return super.getInstance(cl, functionName);
}
return osgiResolution;
}
use of com.dexels.navajo.expression.api.FunctionDefinition in project navajo by Dexels.
the class TestCompiledExpression method testMultiArgFunction.
@Test
public void testMultiArgFunction() throws Exception {
FunctionInterface testFunction = new AddTestFunction();
FunctionDefinition fd = new FunctionDefinition(testFunction.getClass().getName(), "blib", "bleb", "blab");
FunctionFactoryFactory.getInstance().addExplicitFunctionDefinition("SingleValueQuery", fd);
String expression = "SingleValueQuery( 'aap','noot' )";
StringReader sr = new StringReader(expression);
CompiledParser cp = new CompiledParser(sr);
List<String> problems = new ArrayList<>();
cp.Expression();
cp.getJJTree().rootNode().interpretToLambda(problems, sr.toString(), fn -> FunctionClassification.DEFAULT, name -> Optional.empty());
}
use of com.dexels.navajo.expression.api.FunctionDefinition in project navajo by Dexels.
the class TestCompiledExpression method testNestedNamedParams.
@Test
public void testNestedNamedParams() throws Exception {
FunctionInterface testFunction = new ParameterNamesFunction();
FunctionDefinition fd = new FunctionDefinition(testFunction.getClass().getName(), "description", "input", "result");
FunctionFactoryFactory.getInstance().addExplicitFunctionDefinition("ParameterNamesFunction", fd);
String expression = "ParameterNamesFunction(aap=1+1,noot=2+2)";
StringReader sr = new StringReader(expression);
CompiledParser cp = new CompiledParser(sr);
List<String> problems = new ArrayList<>();
cp.Expression();
ContextExpression ss = cp.getJJTree().rootNode().interpretToLambda(problems, sr.toString(), fn -> FunctionClassification.DEFAULT, name -> Optional.empty());
Assert.assertEquals("aap,noot", ss.apply().value);
}
use of com.dexels.navajo.expression.api.FunctionDefinition in project navajo by Dexels.
the class TestCompiledExpression method testEmptyFunctionCall.
@Test
public void testEmptyFunctionCall() throws ParseException {
FunctionInterface testFunction = new AddTestFunction();
FunctionDefinition fd = new FunctionDefinition(testFunction.getClass().getName(), "blib", "bleb", "blab");
FunctionFactoryFactory.getInstance().addExplicitFunctionDefinition("addtest", fd);
String expression = "addtest()";
StringReader sr = new StringReader(expression);
CompiledParser cp = new CompiledParser(sr);
cp.Expression();
List<String> problems = new ArrayList<>();
ContextExpression ss = cp.getJJTree().rootNode().interpretToLambda(problems, sr.toString(), fn -> FunctionClassification.DEFAULT, name -> Optional.empty());
Operand o = ss.apply();
Assert.assertEquals("monkey", o.value);
}
use of com.dexels.navajo.expression.api.FunctionDefinition in project navajo by Dexels.
the class TestCompiledExpression method testNestedNamedFunction.
@Test
public void testNestedNamedFunction() throws Exception {
FunctionInterface testFunction = new AddTestFunction();
FunctionDefinition fd = new FunctionDefinition(testFunction.getClass().getName(), "description", "input", "result");
FunctionFactoryFactory.getInstance().addExplicitFunctionDefinition("MysteryFunction", fd);
String expression = "MysteryFunction(eep=MysteryFunction('blib','blob'), 'aap','noot' )";
StringReader sr = new StringReader(expression);
CompiledParser cp = new CompiledParser(sr);
List<String> problems = new ArrayList<>();
cp.Expression();
cp.getJJTree().rootNode().interpretToLambda(problems, sr.toString(), fn -> FunctionClassification.DEFAULT, name -> Optional.empty());
}
Aggregations