Simple Structure Checker Button
/** Simple Structure Checker Button* * Runs the structure checker against the currently selected row* Checks the bond length* for more checkers available see:* https://www.chemaxon.com/jchem/doc/dev/java/api/chemaxon/checkers/package-frame.html** Usage:* 1. Edit the name of the Structure field* 2. Run button script** @author David Pech <[email protected]>*/import com.im.df.api.*import com.im.df.api.support.SelectionDescriptionimport com.im.ijc.core.api.util.IJCCoreUtilsimport chemaxon.checkers.*import chemaxon.struc.Moleculeimport com.im.df.api.chem.MarvinStructureinit = { widget ->}destroy = { widget ->}evaluate = { widget ->    def ety = dataTree.rootVertex.entity // assumes you have reference to the data tree    def molFld = ety.fields.items.find { it.name == 'Structure' } // find the structure field    def rs = ety.schema.dataProvider.getDefaultResultSet(dataTree, false, DFEnvironmentRO.DEV_NULL) // find the ResultSet    def rootVS = rs.getVertexState(dataTree.rootVertex) // obtain the VertexState     List ids = rootVS.getSelectedRowsIds() // get the selected IDs    if (ids.size == 1) {        Map rows = rootVS.getData(ids, DFEnvironmentRO.DEV_NULL) // get the data        Map row = rows[ids[0]] // get the first and only row        MarvinStructure mol = row[molFld.id] // Get the Structure. Its a com.im.df.api.chem.MarvinStructure instance        Molecule cxnMol = mol.getNative() // obtain the chemaxon.struc.Molecule instance                // Structure checker        StructureChecker checker = new BondLengthChecker() // initialize new checker (see Documentation for more checkers)        def result = checker.check(cxnMol) // run the checker and obtain instance of StructureCheckerResults (returns null if molecule is fine)        if (result != null ) {            def error = result.getDescription() // get the error description form StructureCheckerResults instance            println error        } else {            println "Molecule is fine"        }                    } else {        println "bad selection"    }}on_change = { widget, button ->  }