From bb6e27f66272376fddabf05728cb3da7ed35f3f4 Mon Sep 17 00:00:00 2001 From: Anna Thomas Date: Wed, 26 Nov 2014 15:25:15 +0000 Subject: [PATCH] Store node list as module list --- red/nodes/registry.js | 163 +++++++++++++++++++++----------- test/red/nodes/registry_spec.js | 34 ++++--- 2 files changed, 128 insertions(+), 69 deletions(-) diff --git a/red/nodes/registry.js b/red/nodes/registry.js index bc606f5b1..4aefb39f3 100644 --- a/red/nodes/registry.js +++ b/red/nodes/registry.js @@ -46,31 +46,58 @@ function filterNodeInfo(n) { return r; } +function isEmpty(obj) { + for(var prop in obj) { + if(obj.hasOwnProperty(prop)) { + return false; + } + } + return true; +} + +function getModule(id) { + return id.split("/")[0]; +} + +function getNode(id) { + return id.split("/")[1]; +} + var registry = (function() { var nodeConfigCache = null; - var nodeConfigs = {}; + var moduleConfigs = {}; var nodeList = []; var nodeConstructors = {}; var nodeTypeToId = {}; var moduleNodes = {}; function saveNodeList() { - var nodeList = {}; + var moduleList = {}; - for (var i in nodeConfigs) { - if (nodeConfigs.hasOwnProperty(i)) { - var nodeConfig = nodeConfigs[i]; - var n = filterNodeInfo(nodeConfig); - n.file = nodeConfig.file; - delete n.loaded; - delete n.err; - delete n.file; - delete n.id; - nodeList[i] = n; + for (var mod in moduleConfigs) { + if (moduleConfigs.hasOwnProperty(mod)) { + var module = mod; + if (!moduleList[module]) { + moduleList[module] = {}; + moduleList[module].name = module; + moduleList[module].nodes = {}; + } + var nodes = moduleConfigs[mod].nodes; + for(var node in nodes) { + if (nodes.hasOwnProperty(node)) { + var config = nodes[node]; + var n = filterNodeInfo(config); + delete n.loaded; + delete n.err; + delete n.file; + delete n.id; + moduleList[module].nodes[node] = n; + } + } } } if (settings.available()) { - return settings.set("nodes",nodeList); + return settings.set("modules",moduleList); } else { return when.reject("Settings unavailable"); } @@ -79,15 +106,9 @@ var registry = (function() { return { init: function() { if (settings.available()) { - nodeConfigs = settings.get("nodes")||{}; - // Restore the node id property to individual entries - for (var id in nodeConfigs) { - if (nodeConfigs.hasOwnProperty(id)) { - nodeConfigs[id].id = id; - } - } + moduleConfigs = settings.get("modules")||{}; } else { - nodeConfigs = {}; + moduleConfigs = {}; } moduleNodes = {}; nodeTypeToId = {}; @@ -105,19 +126,27 @@ var registry = (function() { moduleNodes[set.module] = moduleNodes[set.module]||[]; moduleNodes[set.module].push(set.name); - if (version) { + if (!moduleConfigs[set.module]) { + moduleConfigs[set.module] = { + name: set.module, + nodes: {} + }; } - nodeConfigs[id] = set; + if (version) { + moduleConfigs[set.module].version = version; + } + + moduleConfigs[set.module].nodes[set.name] = set; nodeList.push(id); nodeConfigCache = null; }, removeNode: function(id) { - var config = nodeConfigs[id]; + var config = moduleConfigs[getModule(id)].nodes[getNode(id)]; if (!config) { throw new Error("Unrecognised id: "+id); } - delete nodeConfigs[id]; + delete moduleConfigs[getModule(id)].nodes[getNode(id)]; var i = nodeList.indexOf(id); if (i > -1) { nodeList.splice(i,1); @@ -148,19 +177,31 @@ var registry = (function() { return infoList; }, getNodeInfo: function(typeOrId) { + var id = typeOrId; if (nodeTypeToId[typeOrId]) { - return filterNodeInfo(nodeConfigs[nodeTypeToId[typeOrId]]); - } else if (nodeConfigs[typeOrId]) { - return filterNodeInfo(nodeConfigs[typeOrId]); - } else { - return null; + id = nodeTypeToId[typeOrId]; } + if (id) { + var module = moduleConfigs[getModule(id)]; + if (module) { + var config = module.nodes[getNode(id)]; + if (config) { + return filterNodeInfo(config); + } + } + } + return null; }, getNodeList: function() { var list = []; - for (var id in nodeConfigs) { - if (nodeConfigs.hasOwnProperty(id)) { - list.push(filterNodeInfo(nodeConfigs[id])); + for (var module in moduleConfigs) { + if (moduleConfigs.hasOwnProperty(module)) { + var nodes = moduleConfigs[module].nodes; + for (var node in nodes) { + if (nodes.hasOwnProperty(node)) { + list.push(filterNodeInfo(nodes[node])); + } + } } } return list; @@ -172,10 +213,11 @@ var registry = (function() { var nodes = moduleNodes[module]; var m = { name: module, + version: moduleConfigs[module].version, nodes: [] }; for (var i = 0; i < nodes.length; ++i) { - m.nodes.push(filterNodeInfo(nodeConfigs[module+"/"+nodes[i]])); + m.nodes.push(filterNodeInfo(moduleConfigs[module].nodes[nodes[i]])); } list.push(m); } @@ -184,14 +226,14 @@ var registry = (function() { }, getModuleInfo: function(module) { if (moduleNodes[module]) { - console.log(moduleNodes[module]); var nodes = moduleNodes[module]; var m = { name: module, + version: moduleConfigs[module].version, nodes: [] }; for (var i = 0; i < nodes.length; ++i) { - m.nodes.push(filterNodeInfo(nodeConfigs[module+"/"+nodes[i]])); + m.nodes.push(filterNodeInfo(moduleConfigs[module].nodes[nodes[i]])); } return m; } else { @@ -220,7 +262,8 @@ var registry = (function() { var result = ""; var script = ""; for (var i=0;i