UNPKG

kekule

Version:

Open source JavaScript toolkit for chemoinformatics

92 lines (83 loc) 2.48 kB
/** * @fileoverview * This file provides some essential helper classes for algorithms on chem structures. * @author Partridge Jiang */ /* * requires /lan/classes.js * requires /core/kekule.common.js * requires /core/kekule.structures.js * requires /data/kekule.dataUtils.js * requires /utils/kekule.utils.js * requires /localizations/ */ (function(){ "use strict"; /** * A container class contains nodes and/or connectors as a "partial structure fragment". * @class * @augments ObjectEx * * @property {Array} nodes All structure nodes in this container. * @property {Array} connectors Connectors (usually bonds) in this container. */ Kekule.ChemStructObjContainer = Class.create(ObjectEx, /** @lends Kekule.ChemStructObjContainer# */ { /** @private */ CLASS_NAME: 'Kekule.ChemStructObjContainer', /** @constructs */ initialize: function(/*$super*/) { this.tryApplySuper('initialize') /* $super() */; this.setPropStoreFieldValue('nodes', []); this.setPropStoreFieldValue('connectors', []); }, /** @private */ initProperties: function() { this.defineProp('nodes', {'dataType': DataType.ARRAY, 'serializable': false, 'setter': null}); this.defineProp('connectors', {'dataType': DataType.ARRAY, 'serializable': false, 'setter': null}); }, /** * Clear all nodes and connectors in container. */ clear: function() { this.getNodes().length = 0; this.getConnectors().length = 0; return this; }, /** * Add new node or connector into container. * @param {Kekule.ChemStructureObject} obj */ add: function(obj) { var a = null; if (obj instanceof Kekule.ChemStructureConnector) a = this.getConnectors(); else if (obj instanceof Kekule.ChemStructureNode) a = this.getNodes(); if (!a) // not connector or node, report error Kekule.error(Kekule.$L('ErrorMsg.CANNOT_ADD_NON_NODE_NOR_CONNECTOR_TO_STRUCT_CONTAINER')/*Kekule.ErrorMsg.CANNOT_ADD_NON_NODE_NOR_CONNECTOR_TO_STRUCT_CONTAINER*/); else Kekule.ArrayUtils.pushUnique(a, obj); return this; }, /** * Remove an object from container. * @param {Kekule.ChemStructureObject} obj */ remove: function(obj) { var a = null; if (obj instanceof Kekule.ChemStructureConnector) a = this.getConnectors(); else // if (obj instanceof Kekule.ChemStructureNode) a = this.getNodes(); Kekule.ArrayUtils.remove(a, obj); return this; } }); })();