| Clazz.declarePackage ("JV"); | |
| Clazz.load (["J.api.JmolDataManager", "java.util.Hashtable"], "JV.DataManager", ["JU.AU", "$.BS", "$.PT", "$.SB", "J.c.VDW", "JS.T", "JU.BSUtil", "$.Elements", "$.Escape", "$.Logger", "$.Parser"], function () { | |
| c$ = Clazz.decorateAsClass (function () { | |
| this.dataValues = null; | |
| this.vwr = null; | |
| Clazz.instantialize (this, arguments); | |
| }, JV, "DataManager", null, J.api.JmolDataManager); | |
| Clazz.prepareFields (c$, function () { | |
| this.dataValues = new java.util.Hashtable (); | |
| }); | |
| Clazz.makeConstructor (c$, | |
| function () { | |
| }); | |
| Clazz.overrideMethod (c$, "set", | |
| function (vwr) { | |
| this.vwr = vwr; | |
| return this; | |
| }, "JV.Viewer"); | |
| Clazz.overrideMethod (c$, "clear", | |
| function () { | |
| this.dataValues.clear (); | |
| }); | |
| Clazz.overrideMethod (c$, "setData", | |
| function (type, data, arrayCount, actualAtomCount, matchField, matchFieldColumnCount, field, fieldColumnCount) { | |
| if (type == null) { | |
| this.clear (); | |
| return; | |
| }type = type.toLowerCase (); | |
| if (type.equals ("element_vdw")) { | |
| var stringData = (data[1]).trim (); | |
| if (stringData.length == 0) { | |
| this.vwr.userVdwMars = null; | |
| this.vwr.userVdws = null; | |
| this.vwr.bsUserVdws = null; | |
| return; | |
| }if (this.vwr.bsUserVdws == null) this.vwr.setUserVdw (this.vwr.defaultVdw); | |
| JU.Parser.parseFloatArrayFromMatchAndField (stringData, this.vwr.bsUserVdws, 1, 0, data[2], 2, 0, this.vwr.userVdws, 1); | |
| for (var i = this.vwr.userVdws.length; --i >= 0; ) this.vwr.userVdwMars[i] = Clazz.doubleToInt (Math.floor (this.vwr.userVdws[i] * 1000)); | |
| return; | |
| }var depth = this.getType (data); | |
| var val = data[1]; | |
| if (depth == -1) data[3] = Integer.$valueOf (depth = (Clazz.instanceOf (val, String) ? 0 : JU.AU.isAF (val) ? 1 : JU.AU.isAFF (val) ? 2 : JU.AU.isAFFF (val) ? 3 : -1)); | |
| if (data[2] != null && arrayCount > 0) { | |
| var createNew = (matchField != 0 || field != -2147483648 && field != 2147483647); | |
| var oldData = this.dataValues.get (type); | |
| var bs; | |
| var f = (oldData == null || createNew ? Clazz.newFloatArray (actualAtomCount, 0) : JU.AU.ensureLengthA ((oldData[1]), actualAtomCount)); | |
| if (depth == -1) { | |
| JU.Logger.error ("Cannot determine data type for " + val); | |
| return; | |
| }var stringData = (depth == 0 ? val : null); | |
| var floatData = (depth == 1 ? val : null); | |
| var strData = null; | |
| if (field == -2147483648 && (strData = JU.PT.getTokens (stringData)).length > 1) field = 0; | |
| if (field == -2147483648) { | |
| bs = data[2]; | |
| JV.DataManager.setSelectedFloats (JU.PT.parseFloat (stringData), bs, f); | |
| } else if (field == 0 || field == 2147483647) { | |
| bs = data[2]; | |
| if (floatData != null) { | |
| var n = floatData.length; | |
| if (n == bs.cardinality ()) { | |
| for (var i = bs.nextSetBit (0), pt = 0; i >= 0; i = bs.nextSetBit (i + 1), pt++) f[i] = floatData[pt]; | |
| } else { | |
| for (var i = bs.nextSetBit (0); i >= 0 && i < n; i = bs.nextSetBit (i + 1)) f[i] = floatData[i]; | |
| }} else { | |
| JU.Parser.parseFloatArrayBsData (strData == null ? JU.PT.getTokens (stringData) : strData, bs, f); | |
| }} else if (matchField <= 0) { | |
| bs = data[2]; | |
| JU.Parser.parseFloatArrayFromMatchAndField (stringData, bs, 0, 0, null, field, fieldColumnCount, f, 1); | |
| } else { | |
| var iData = data[2]; | |
| JU.Parser.parseFloatArrayFromMatchAndField (stringData, null, matchField, matchFieldColumnCount, iData, field, fieldColumnCount, f, 1); | |
| bs = new JU.BS (); | |
| for (var i = iData.length; --i >= 0; ) if (iData[i] >= 0) bs.set (iData[i]); | |
| }if (oldData != null && Clazz.instanceOf (oldData[2], JU.BS) && !createNew) bs.or ((oldData[2])); | |
| data[3] = Integer.$valueOf (1); | |
| data[2] = bs; | |
| data[1] = f; | |
| if (type.indexOf ("property_atom.") == 0) { | |
| var tok = JS.T.getSettableTokFromString (type = type.substring (14)); | |
| if (tok == 0) { | |
| JU.Logger.error ("Unknown atom property: " + type); | |
| return; | |
| }var nValues = bs.cardinality (); | |
| var fValues = Clazz.newFloatArray (nValues, 0); | |
| for (var n = 0, i = bs.nextSetBit (0); n < nValues; i = bs.nextSetBit (i + 1)) fValues[n++] = f[i]; | |
| this.vwr.setAtomProperty (bs, tok, 0, 0, null, fValues, null); | |
| return; | |
| }}this.dataValues.put (type, data); | |
| }, "~S,~A,~N,~N,~N,~N,~N,~N"); | |
| Clazz.defineMethod (c$, "getType", | |
| function (data) { | |
| return (data[3]).intValue (); | |
| }, "~A"); | |
| c$.setSelectedFloats = Clazz.defineMethod (c$, "setSelectedFloats", | |
| function (f, bs, data) { | |
| var isAll = (bs == null); | |
| var i0 = (isAll ? 0 : bs.nextSetBit (0)); | |
| for (var i = i0; i >= 0 && i < data.length; i = (isAll ? i + 1 : bs.nextSetBit (i + 1))) data[i] = f; | |
| }, "~N,JU.BS,~A"); | |
| Clazz.overrideMethod (c$, "getData", | |
| function (label, bsSelected, dataType) { | |
| if (this.dataValues.size () == 0 || label == null) return null; | |
| label = label.toLowerCase (); | |
| switch (dataType) { | |
| case -1: | |
| case -2: | |
| if (!label.equals ("types")) return this.dataValues.get (label); | |
| var info = new Array (2); | |
| info[0] = "types"; | |
| info[1] = ""; | |
| var nv = 0; | |
| for (var name, $name = this.dataValues.keySet ().iterator (); $name.hasNext () && ((name = $name.next ()) || true);) info[1] += (nv++ > 0 ? "\n" : "") + name; | |
| return info; | |
| default: | |
| var data = this.dataValues.get (label); | |
| if (data == null || this.getType (data) != dataType) return null; | |
| if (bsSelected == null) return data[1]; | |
| var f = data[1]; | |
| var fnew = Clazz.newFloatArray (bsSelected.cardinality (), 0); | |
| for (var i = 0, n = f.length, p = bsSelected.nextSetBit (0); p >= 0 && i < n; p = bsSelected.nextSetBit (p + 1)) fnew[i++] = f[p]; | |
| return fnew; | |
| } | |
| }, "~S,JU.BS,~N"); | |
| Clazz.overrideMethod (c$, "deleteModelAtoms", | |
| function (firstAtomIndex, nAtoms, bsDeleted) { | |
| if (this.dataValues.size () == 0) return; | |
| for (var name, $name = this.dataValues.keySet ().iterator (); $name.hasNext () && ((name = $name.next ()) || true);) { | |
| if (name.indexOf ("property_") == 0) { | |
| var obj = this.dataValues.get (name); | |
| JU.BSUtil.deleteBits (obj[2], bsDeleted); | |
| obj[1] = JU.AU.deleteElements (obj[1], firstAtomIndex, nAtoms); | |
| }} | |
| }, "~N,~N,JU.BS"); | |
| Clazz.overrideMethod (c$, "getDefaultVdwNameOrData", | |
| function (type, bs) { | |
| var sb = new JU.SB (); | |
| sb.append (type.getVdwLabel ()).append ("\n"); | |
| var isAll = (bs == null); | |
| var i0 = (isAll ? 1 : bs.nextSetBit (0)); | |
| var i1 = (isAll ? JU.Elements.elementNumberMax : bs.length ()); | |
| for (var i = i0; i < i1 && i >= 0; i = (isAll ? i + 1 : bs.nextSetBit (i + 1))) sb.appendI (i).appendC ('\t').appendF (type === J.c.VDW.USER ? this.vwr.userVdws[i] : JU.Elements.getVanderwaalsMar (i, type) / 1000).appendC ('\t').append (JU.Elements.elementSymbolFromNumber (i)).appendC ('\n'); | |
| return (bs == null ? sb.toString () : "\n DATA \"element_vdw\"\n" + sb.append (" end \"element_vdw\";\n\n").toString ()); | |
| }, "J.c.VDW,JU.BS"); | |
| Clazz.overrideMethod (c$, "getDataState", | |
| function (sc, sb) { | |
| if (this.dataValues.size () == 0) return false; | |
| var haveData = false; | |
| for (var name, $name = this.dataValues.keySet ().iterator (); $name.hasNext () && ((name = $name.next ()) || true);) { | |
| if (name.indexOf ("property_") == 0) { | |
| var obj = this.dataValues.get (name); | |
| if (obj.length > 4 && !(obj[4]).booleanValue ()) continue; | |
| haveData = true; | |
| var data = obj[1]; | |
| if (data != null && this.getType (obj) == 1) { | |
| sc.getAtomicPropertyStateBuffer (sb, 17, obj[2], name, data); | |
| sb.append ("\n"); | |
| } else { | |
| sb.append ("\n").append (JU.Escape.encapsulateData (name, data, -1)); | |
| }continue; | |
| }var type = (name.indexOf ("data2d") == 0 ? 2 : name.indexOf ("data3d") == 0 ? 3 : -1); | |
| if (type == -1) continue; | |
| var obj = this.dataValues.get (name); | |
| var data = obj[1]; | |
| if (data != null && this.getType (obj) == type) { | |
| haveData = true; | |
| sb.append ("\n").append (JU.Escape.encapsulateData (name, data, type)); | |
| }} | |
| return haveData; | |
| }, "JV.JmolStateCreator,JU.SB"); | |
| Clazz.overrideMethod (c$, "createFileData", | |
| function (strModel) { | |
| var o = new Array (4); | |
| o[0] = "model"; | |
| o[1] = strModel; | |
| o[3] = Integer.$valueOf (0); | |
| return o; | |
| }, "~S"); | |
| }); | |