Skip to content

Generate random resultset from actual resultset

/*
* Show defined number of random entries in current resultset
*
*
* Usage:
* 1. Edit the number of entries to show randomly
* 2. Run button script
* 3. Show all in Query Mode to be able to use the button script again
*
* @author David Pech <dpech@chemaxon.com>
*/


import com.im.df.api.dml.*
import com.im.df.api.support.SelectionDescription
import com.im.ijc.core.api.util.IJCCoreUtils


init = { widget ->
}

destroy = { widget ->
}

// evaluate is called when the button is clicked to perform action
//
// widget is IJCWidget instance
evaluate = { widget ->

    // get the needed environmental variables
    def rs = widget.form.resultSet  // result set
    def rootVS = rs.rootVertexState // vertex state of the resultset

    // set amount of entries to generate from your resultset
    def randomSeriesLength = 20;
    println "Showing random entries of total count of " + randomSeriesLength


    // get all the IDs of your current resultset and
    // create a copy of the immutable List to work with
    List listOfIDs = new ArrayList(rootVS.getIds());
    // randlomly shuffle the list
    Collections.shuffle(listOfIDs);
    // select n values from the list and sort
    // n of values defined in randomSeriesLength
    def randomSeries = listOfIDs.subList(0, randomSeriesLength).sort();
    // convert the generated sublist type to ArrayList type
    // to be able to load it
    List randomList = new ArrayList(randomSeries)

    // apply the list of IDs to the resultset
    def rsLock = rs.lockable.withLock('applying random list of IDs') { rsEnv ->
                rs.applyList(randomList, rsEnv)
            }

}


on_change = { widget, button ->

}