2018-09-24 16:03:29 +00:00
|
|
|
|
/**
|
2018-09-26 15:13:03 +00:00
|
|
|
|
* ### Глобальная нода
|
|
|
|
|
* Предоставляет интерфейс доступа к содержимому глобальной ноды
|
2018-09-25 16:04:11 +00:00
|
|
|
|
*
|
|
|
|
|
* Здесь создаются менеджер по работе с вложенными нодами и менеджер типов ноды
|
|
|
|
|
*
|
|
|
|
|
* <br>
|
|
|
|
|
* Связанные объекты:
|
|
|
|
|
*
|
|
|
|
|
* - {@link Trees.GlobalTree} - Здесь можно найти примеры, как работать с глобальным деревом
|
|
|
|
|
* - {@link Trees.GlobalTree.Node.Children} - Здесь можно найти примеры, как работать с вложенными нодами
|
|
|
|
|
* - {@link Trees.GlobalTree.Node.NodeTypes} - Здесь можно найти примеры, как работать с типами ноды
|
2018-10-10 14:53:39 +00:00
|
|
|
|
* - {@link Trees.GlobalAttributeTree.Node} - Нода у которой присутствуют базовые и динамические атрибуты
|
2018-09-25 16:04:11 +00:00
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @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);
|
|
|
|
|
* })
|
|
|
|
|
*
|
2018-09-24 16:03:29 +00:00
|
|
|
|
*
|
|
|
|
|
* @class Node
|
|
|
|
|
* @memberof Trees.GlobalTree
|
|
|
|
|
*/
|
|
|
|
|
function Node() {
|
|
|
|
|
/**
|
2018-09-26 15:13:03 +00:00
|
|
|
|
* ### Менеджер вложенных нод
|
|
|
|
|
*
|
|
|
|
|
* Внимание! На момент создания ноды, он не существует (что бы не съедать ресурсы системы).
|
|
|
|
|
*
|
|
|
|
|
* Поэтому вначале нужно запросить список чилдов, или загрузить его через this.children_manager
|
2018-09-24 16:03:29 +00:00
|
|
|
|
*
|
|
|
|
|
* @public
|
2018-09-26 15:13:03 +00:00
|
|
|
|
* @name cm
|
2018-09-24 16:03:29 +00:00
|
|
|
|
* @memberof Trees.GlobalTree.Node
|
2018-09-26 15:13:03 +00:00
|
|
|
|
* @type {Trees.GlobalTree.Node.Children}
|
2018-09-24 16:03:29 +00:00
|
|
|
|
*/
|
2018-09-26 15:13:03 +00:00
|
|
|
|
this.cm = new Trees.GlobalTree.Node.Children();
|
2018-09-24 16:03:29 +00:00
|
|
|
|
|
|
|
|
|
/**
|
2018-09-26 15:13:03 +00:00
|
|
|
|
* ### Добавление новой ноды
|
|
|
|
|
*
|
|
|
|
|
* Добавляет новую ноду используя текущую как парента.
|
|
|
|
|
*
|
|
|
|
|
* После добавления, менеджера вложенных нод, пошлет сигнал 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!")
|
|
|
|
|
* }));
|
|
|
|
|
*
|
|
|
|
|
* // В данном примере, я не буду полностью доступаться до ноды по всей цепочке, (т.к. она описана выше)
|
|
|
|
|
* // Допустим что сейчас она есть на руках.
|
|
|
|
|
*
|
2018-12-03 14:05:12 +00:00
|
|
|
|
* // Необходимо указать какой тип будет у создаваемой ноды. Это можно узнать из ядра. Или при у модели дерева
|
|
|
|
|
* // там есть, список типов нод.
|
|
|
|
|
* // В примере используется дефолтный тип для дерева топологии(схемы): @schemeNode
|
|
|
|
|
* var node_type = new v2.model_type("schemeNode");
|
|
|
|
|
*
|
2018-09-26 15:13:03 +00:00
|
|
|
|
* // Добавим ноду
|
2018-12-03 14:05:12 +00:00
|
|
|
|
* node.add_node(node_type, my_attributes);
|
2018-09-26 15:13:03 +00:00
|
|
|
|
*
|
|
|
|
|
* // Все. Нода добавилась, теперь в чилды придет оповещение.
|
2018-09-24 16:03:29 +00:00
|
|
|
|
*
|
|
|
|
|
* @public
|
|
|
|
|
* @function add_node
|
|
|
|
|
* @memberof Trees.GlobalTree.Node
|
2018-12-03 14:05:12 +00:00
|
|
|
|
* @param {v2.model_type} _type
|
2018-09-26 15:13:03 +00:00
|
|
|
|
* @param {v2.map(v2.string, v2.vc)} _attrs
|
2018-09-24 16:03:29 +00:00
|
|
|
|
*/
|
2018-12-03 14:05:12 +00:00
|
|
|
|
this.add_node = function(_type, _attrs) {
|
2018-09-24 16:03:29 +00:00
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Возвращает уникальный идентификатор ноды.
|
|
|
|
|
*
|
2018-09-26 15:13:03 +00:00
|
|
|
|
* @exapmle
|
|
|
|
|
* // Пример:
|
|
|
|
|
* var nodeId = node.id();
|
|
|
|
|
*
|
2018-09-24 16:03:29 +00:00
|
|
|
|
* @public
|
|
|
|
|
* @function id
|
|
|
|
|
* @memberof Trees.GlobalTree.Node
|
2018-09-26 15:13:03 +00:00
|
|
|
|
* @returns {v2.integer}
|
2018-09-24 16:03:29 +00:00
|
|
|
|
*/
|
|
|
|
|
this.id = function() {
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
2018-09-26 15:13:03 +00:00
|
|
|
|
* ### Возвращает список вложенных нод (Идентификаторы).
|
|
|
|
|
*
|
|
|
|
|
* А так же загрузит менеджер вложенных нод. После этого можно будет пользоваться 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);
|
|
|
|
|
* })
|
2018-09-24 16:03:29 +00:00
|
|
|
|
*
|
|
|
|
|
* @public
|
|
|
|
|
* @function children
|
|
|
|
|
* @memberof Trees.GlobalTree.Node
|
2018-09-26 15:13:03 +00:00
|
|
|
|
* @returns {tools.promise(v2.list(v2.integer))}
|
2018-09-24 16:03:29 +00:00
|
|
|
|
*/
|
|
|
|
|
this.children = function() {
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
2018-09-26 15:13:03 +00:00
|
|
|
|
* ### Получить менеджер вложенных нод
|
|
|
|
|
*
|
|
|
|
|
* В данном случае если МВН не загружен, загрузит его.
|
|
|
|
|
*
|
|
|
|
|
* Если уже загружен то вернет.
|
|
|
|
|
*
|
|
|
|
|
* <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() {
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Осуществляет проверку на существование менеджера нод.
|
|
|
|
|
*
|
2018-09-24 16:03:29 +00:00
|
|
|
|
* @public
|
2018-09-26 15:13:03 +00:00
|
|
|
|
* @function children_manager_exist
|
2018-09-24 16:03:29 +00:00
|
|
|
|
* @memberof Trees.GlobalTree.Node
|
2018-09-26 15:13:03 +00:00
|
|
|
|
* @returns {boolean}
|
2018-09-24 16:03:29 +00:00
|
|
|
|
*/
|
2018-09-26 15:13:03 +00:00
|
|
|
|
this.children_manager_exist = function() {
|
2018-09-24 16:03:29 +00:00
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
}
|