diff options
| author | LV-426 <lv-426@taproot.org.il> | 2014-12-10 15:27:47 +0200 |
|---|---|---|
| committer | Alon Levy <alon@pobox.com> | 2014-12-16 10:59:14 +0200 |
| commit | fe01fba24eab3f42142803e3227e9b0a93dfbd89 (patch) | |
| tree | dfc8bd98cd98f3b777fda0d3b9943f72e589a3c4 | |
| parent | d67cb649f26259954d1cfeb0665f93d2059ed1cd (diff) | |
major addLink() sig refactoring: addLink(link, peer_notify)
| -rw-r--r-- | src/model/graph.js | 49 | ||||
| -rw-r--r-- | src/textanalysis.js | 2 |
2 files changed, 35 insertions, 16 deletions
diff --git a/src/model/graph.js b/src/model/graph.js index cc838db2..ac244339 100644 --- a/src/model/graph.js +++ b/src/model/graph.js @@ -301,8 +301,9 @@ function Graph() { } this.addLinkByName = function(src_name, dst_name, name, state, drop_conjugator_links) { - var src = findNodeByName(src_name, null), - dst = findNodeByName(dst_name, null), + + var src = findNodeByName(src_name), + dst = findNodeByName(dst_name), src_id = src ? src.id : null, dst_id = dst ? dst.id : null; @@ -311,25 +312,43 @@ function Graph() { + dst_name + ' (' + dst_id + ')'); return; } - this.addLink(src_id, dst_id, name, state); + + var link = model_core.create_link__set_random_id(src, dst, { name: name, + state: state }); + this.addLink(link); } - function addLink(src_id, dst_id, name, state, peer_notify) { - var src = find_node__by_id(src_id); - var dst = find_node__by_id(dst_id); - var found = findLink(src_id,dst_id,name); + function addLink(link, peer_notify) { + + util.assert(link instanceof model_core.Link); + + peer_notify = undefined === peer_notify ? true : peer_notify; + + var existing_link = findLink(link.__src.id, link.__dst.id, link.name); + + if (undefined == existing_link) { - if (undefined === src || undefined === dst) { - console.log('addLink: undefined src / dst'); - return; - } - if (!found) { - var link = model_core.create_link__set_random_id(src, dst, { name: name, state: state }); links.push(link); + + if (rz_config.backend_enabled && peer_notify){ + var topo_diff = new model_diff.new_topo_diff({ + link_set_add : [link].map(model_util.adapt_format_write_link), + }); + var on_success = function(){ + // FIXME: handle possible outcomes: + // - id merge: link already exists -> update id + // - attr-merge: link already exists -> merge attrs + }; + var on_error = function(){ + // TODO: add problem emblem to node + }; + rz_api_backend.commit_diff__topo(topo_diff, on_success, on_error); + } + diffBus.push({links: {add: [link]}}); } else { - found.name = name; - found.state = state; + existing_link.name = link.name; + existing_link.state = link.state; } } this.addLink = addLink; diff --git a/src/textanalysis.js b/src/textanalysis.js index fdc4e837..71621b95 100644 --- a/src/textanalysis.js +++ b/src/textanalysis.js @@ -185,7 +185,7 @@ var textAnalyser = function (newtext, finalize) { } link_hash[src][dst] = 1; - var link = model_core.create_link_from_spec(src, dst, {'name':name, 'state':state}); + var link = {'__src': src, '__dst':dst, 'name':name, 'state':state}; // can't use model_core.create_link_from_spec as src,dst are only names ret.link_set_add.push(link); } |
