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 ->
    
    }