-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJSONataFunctionBridge.cfc
More file actions
30 lines (25 loc) · 1.1 KB
/
JSONataFunctionBridge.cfc
File metadata and controls
30 lines (25 loc) · 1.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
component displayname="JSONataFunctionBridge" hint="Bridges CFML closures to jsonata-java custom functions" {
variables.bridgeClass = javacast("null", "");
/**
* Register CFML closures as custom JSONata functions on a frame
* @frame The Java Frame object from expression.createFrame()
* @functions Struct of { functionName: cfmlClosure }
* @javaLoader Optional JavaLoader instance. If null, uses native createObject.
*/
public void function registerFunctions(required any frame, required struct functions, any javaLoader) {
if (isNull(variables.bridgeClass)) {
if (!isNull(arguments.javaLoader)) {
variables.bridgeClass = arguments.javaLoader.create("jsonata.bridge.CFMLFunctionBridge");
} else {
variables.bridgeClass = createObject("java", "jsonata.bridge.CFMLFunctionBridge");
}
}
var pc = getPageContext();
for (var funcName in arguments.functions) {
var closure = arguments.functions[funcName];
var wrapper = new JSONataFunctionWrapper(closure);
var jFunction = variables.bridgeClass.create(wrapper, pc);
arguments.frame.bind(lCase(funcName), jFunction);
}
}
}