use of com.servoy.j2db.scripting.IExecutingEnviroment in project servoy-client by Servoy.
the class FoundSetManager method getTriggerFunctions.
private List<TriggerFunction> getTriggerFunctions(ITable table, TypedProperty<Integer> property, Scriptable foundsetScope) {
FlattenedSolution solutionRoot = getApplication().getFlattenedSolution();
IExecutingEnviroment scriptEngine = getApplication().getScriptEngine();
return stream(solutionRoot.getTableNodes(table)).map(tableNode -> {
Object function = null;
Scriptable scope = null;
ScriptMethod scriptMethod = solutionRoot.getScriptMethod(((Integer) tableNode.getProperty(property.getPropertyName())).intValue());
if (scriptMethod != null) {
if (scriptMethod.getParent() instanceof Solution) {
// global method
GlobalScope gs = scriptEngine.getScopesScope().getGlobalScope(scriptMethod.getScopeName());
if (gs != null) {
scope = gs;
function = gs.get(scriptMethod.getName());
}
} else if (foundsetScope != null) {
// foundset method
scope = foundsetScope;
function = scope.getPrototype().get(scriptMethod.getName(), scope);
}
}
if (function instanceof Function) {
return new TriggerFunction((Function) function, scope, tableNode);
}
return null;
}).filter(Objects::nonNull).collect(toList());
}
use of com.servoy.j2db.scripting.IExecutingEnviroment in project servoy-client by Servoy.
the class ViewFoundSet method sort.
/**
* Sorts the foundset based on the given record comparator function.
* Tries to preserve selection based on primary key. If first record is selected or cannot select old record it will select first record after sort.
* The comparator function is called to compare
* two records, that are passed as arguments, and
* it will return -1/0/1 if the first record is less/equal/greater
* then the second record.
*
* The function based sorting does not work with printing.
* It is just a temporary in-memory sort.
*
* NOTE: starting with 7.2 release this function doesn't save the data anymore
*
* @sample
* %%prefix%%foundset.sort(mySortFunction);
*
* function mySortFunction(r1, r2)
* {
* var o = 0;
* if(r1.id < r2.id)
* {
* o = -1;
* }
* else if(r1.id > r2.id)
* {
* o = 1;
* }
* return o;
* }
*
* @param recordComparisonFunction record comparator function
*/
@JSFunction
@JSSignature(arguments = { Function.class })
public void sort(Object recordComparisonFunction) {
if (recordComparisonFunction instanceof Function) {
final Function func = (Function) recordComparisonFunction;
final IExecutingEnviroment scriptEngine = manager.getApplication().getScriptEngine();
final Scriptable recordComparatorScope = func.getParentScope();
sort(new Comparator<Object[]>() {
public int compare(Object[] o1, Object[] o2) {
try {
Object compareResult = scriptEngine.executeFunction(func, recordComparatorScope, recordComparatorScope, new Object[] { getRecord(o1), getRecord(o2) }, false, true);
double cmp = Utils.getAsDouble(compareResult, true);
return cmp < 0 ? -1 : cmp > 0 ? 1 : 0;
} catch (Exception ex) {
Debug.error(ex);
}
return 0;
}
});
}
}
use of com.servoy.j2db.scripting.IExecutingEnviroment in project servoy-client by Servoy.
the class FormManager method setCurrentContainer.
/**
* @param mainContainer
*/
public void setCurrentContainer(IMainContainer mainContainer, String name) {
if (mainContainer != null) {
currentContainer = mainContainer;
if (name != null) {
// reset it in the containers (must be done for the webclient)
containers.put(name, mainContainer);
}
} else {
currentContainer = getMainContainer(null);
}
enableCmds(true);
FormController formController = currentContainer.getController();
if (formController != null) {
IExecutingEnviroment scriptEngine = application.getScriptEngine();
if (scriptEngine != null) {
SolutionScope ss = scriptEngine.getSolutionScope();
Context.enter();
try {
// $NON-NLS-1$
ss.put("currentcontroller", ss, new NativeJavaObject(ss, formController.initForJSUsage(), new InstanceJavaMembers(ss, JSForm.class)));
} finally {
Context.exit();
}
}
}
application.getRuntimeWindowManager().setCurrentWindowName(name);
}
use of com.servoy.j2db.scripting.IExecutingEnviroment in project servoy-client by Servoy.
the class DebugNGClient method getStackFrame.
/**
* @return
*/
private DBGPDebugFrame getStackFrame() {
IExecutingEnviroment engine = getScriptEngine();
if (engine instanceof RemoteDebugScriptEngine && ((RemoteDebugScriptEngine) engine).getDebugger() != null) {
DBGPDebugger debugger = ((RemoteDebugScriptEngine) engine).getDebugger();
DBGPStackManager stackManager = debugger.getStackManager();
if (stackManager != null) {
return debugger.getStackManager().getStackFrame(0);
}
}
return null;
}
use of com.servoy.j2db.scripting.IExecutingEnviroment in project servoy-client by Servoy.
the class DataAdapterList method destroy.
public void destroy() {
if (record != null) {
setRecord(null, false);
}
if (formController != null && formController.getFormScope() != null) {
formController.getFormScope().getModificationSubject().removeModificationListener(this);
}
if (formController != null && formController.getApplication() != null && formController.getApplication().getScriptEngine() != null) {
IExecutingEnviroment er = formController.getApplication().getScriptEngine();
if (er.getScopesScope() != null) {
er.getScopesScope().getModificationSubject().removeModificationListener(this);
}
}
dataProviderToLinkedComponentProperty.clear();
allComponentPropertiesLinkedToData.clear();
findModeAwareProperties.clear();
parentRelatedForms.clear();
visibleChildForms.clear();
}
Aggregations