initi.doc/docfiles/providers/managers/trees/globalTree/node.js

233 lines
9.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* ### Глобальная нода
* Предоставляет интерфейс доступа к содержимому глобальной ноды
*
* Здесь создаются менеджер по работе с вложенными нодами и менеджер типов ноды
*
* <br>
* Связанные объекты:
*
* - {@link Trees.GlobalTree} - Здесь можно найти примеры, как работать с глобальным деревом
* - {@link Trees.GlobalTree.Node.Children} - Здесь можно найти примеры, как работать с вложенными нодами
* - {@link Trees.GlobalTree.Node.NodeTypes} - Здесь можно найти примеры, как работать с типами ноды
* - {@link Trees.GlobalAttributeTree.Node} - Нода у которой присутствуют базовые и динамические атрибуты
*
*
* @example
* // Пример: Как получить ноду дерева?
*
* // Пример взят для дерева тополгии
* var tree = null;
* var node = null;
*
* // Осуществляем запрос к менеджеру деревьев, на получение провайдера дерева
* ps.pl.tm.get(new v2.string("st")).then(function(ref){
* // ref - это ссылка на объект
* // метод value возвращает целевой объект. В данном случае дерево Trees.SchemeTree
* tree = ref.value();
*
* // Доступ к ноде осуществляется похожим образом, но теперь вместо строки нужно указать v2.integer
* // Так как возвратится нативный проимс, мы можем вернуть его и обработать в следующем then
* return tree.get(v2.integer.from_number(0))
* }, function(err){
* // в случае неудачи придет ошибка.
* // обычно в ошибке содержится три переменные err - код ошибки, message - краткое описание, sub - если к этому
* // привела другая ошибка внутри системы.
* }).then(function(ref){
* // Вот мы и получили ноду.
* node = ref.value();
* }, function(err){
* // Отобразим ошибку
* console.warn(err);
* })
*
*
* @class Node
* @memberof Trees.GlobalTree
*/
function Node() {
/**
* ### Менеджер вложенных нод
*
* Внимание! На момент создания ноды, он не существует (что бы не съедать ресурсы системы).
*
* Поэтому вначале нужно запросить список чилдов, или загрузить его через this.children_manager
*
* @public
* @name cm
* @memberof Trees.GlobalTree.Node
* @type {Trees.GlobalTree.Node.Children}
*/
this.cm = new Trees.GlobalTree.Node.Children();
/**
* ### Добавление новой ноды
*
* Добавляет новую ноду используя текущую как парента.
*
* После добавления, менеджера вложенных нод, пошлет сигнал s_node_add
*
*
* @example
* // Пример:
*
* // При добавлении ноды, так же можно добавить произвольное количество атрибутов
* // каждый атрибут имеет метаданные
* // - removable : v2.boolean,
* // - editable : v2.boolean,
* // - visible : v2.boolean,
* // - type : v2.type
* // - value : v2.base
*
* // Создадим мапу для аттрибутов
* var my_attributes = new v2.map(v2.string.type, v2.vc.type);
*
* // Добавим в нее один атрибут
* my_attributes.put(new v2.string("my_attribute"), v2.vc.from_object({
* removable: new v2.boolean(true),
* editable: new v2.boolean(true),
* visible: new v2.boolean(true),
* type: new v2.type(v2.string.type),
* value: new v2.string("Hello World!")
* }));
*
* // В данном примере, я не буду полностью доступаться до ноды по всей цепочке, (т.к. она описана выше)
* // Допустим что сейчас она есть на руках.
*
* // Необходимо указать какой тип будет у создаваемой ноды. Это можно узнать из ядра. Или при у модели дерева
* // там есть, список типов нод.
* // В примере используется дефолтный тип для дерева топологии(схемы): @schemeNode
* var node_type = new v2.model_type("schemeNode");
*
* // Добавим ноду
* node.add_node(node_type, my_attributes);
*
* // Все. Нода добавилась, теперь в чилды придет оповещение.
*
* @public
* @function add_node
* @memberof Trees.GlobalTree.Node
* @param {v2.model_type} _type
* @param {v2.map(v2.string, v2.vc)} _attrs
*/
this.add_node = function(_type, _attrs) {
};
/**
* Возвращает уникальный идентификатор ноды.
*
* @exapmle
* // Пример:
* var nodeId = node.id();
*
* @public
* @function id
* @memberof Trees.GlobalTree.Node
* @returns {v2.integer}
*/
this.id = function() {
};
/**
* ### Возвращает список вложенных нод (Идентификаторы).
*
* А так же загрузит менеджер вложенных нод. После этого можно будет пользоваться this.cm
*
* <br>
* Получив идентификаторы, можно сделать запрос на загрузку ноды у дерева.
*
* <br>
* Результат:
* - в случае успеха возвращает {@link v2.list(v2.integer)}
* - в случае отмены возвращает {@link Errors.PromiseReject}
*
* @example
* // Пример:
*
* // Получаем промис на загрузку списка
* var promise = node.children();
*
* // Навешиваем обработчики на промис
* promise.then(function(children){
* // распечаетаем список идентификаторов:
* v2.tools.print(children);
*
* // Пример вывода:
* //
* // List(Integer) [
* // 1,
* // 2,
* // 3,
* // 4,
* // 5
* // ]
* }, function(err){
* // выведем отмену
* console.warn(err);
* })
*
* @public
* @function children
* @memberof Trees.GlobalTree.Node
* @returns {tools.promise(v2.list(v2.integer))}
*/
this.children = function() {
};
/**
* ### Получить менеджер вложенных нод
*
* В данном случае если МВН не загружен, загрузит его.
*
* Если уже загружен то вернет.
*
* <br>
* После вызова этого метода, будет проинициализированна переменная this.cm
*
* <br>
* Результат:
* - в случае успеха вернется {@link Trees.GlobalTree.Node.Children}
* - в случае отмены вернется {@link Errors.PromiseReject}
*
* @example
* // Пример:
* // В данном примере, я не буду полностью доступаться до ноды по всей цепочке, (т.к. она описана выше)
* // Допустим что сейчас нода есть на руках.
*
* // Получаем промис на загрузку МВН
* var promise = node.children_manager();
*
* // Обрабатываем результат
* promise.then(function(cm){
* // Итак в переменной cm находится МВН
*
* // Пример использования такого подхода
* var children = cm.children();
* }, function(err){
* console.warn(err);
* })
*
* @public
* @function children_manager
* @memberof Trees.GlobalTree.Node
* @returns {tools.promise(NodeChildren)}
*/
this.children_manager = function() {
};
/**
* Осуществляет проверку на существование менеджера нод.
*
* @public
* @function children_manager_exist
* @memberof Trees.GlobalTree.Node
* @returns {boolean}
*/
this.children_manager_exist = function() {
};
}