use of com.servoy.j2db.scripting.annotations.JSSignature in project servoy-client by Servoy.
the class FoundSet 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 = fsm.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.annotations.JSSignature 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;
}
});
}
}
Aggregations