mirror of https://gitee.com/bigwinds/arangodb
GraphViewer: Simple expansion of Communities now possible
This commit is contained in:
parent
bf749438f0
commit
f43f0568f7
|
@ -118,7 +118,7 @@ function ArangoAdapter(nodes, edges, config) {
|
||||||
if (res.length === 1) {
|
if (res.length === 1) {
|
||||||
return res[0];
|
return res[0];
|
||||||
}
|
}
|
||||||
throw "Too many nodes with the same ID, should never happen";
|
throw "Too many edges with the same ID, should never happen";
|
||||||
},
|
},
|
||||||
|
|
||||||
insertNode = function(data) {
|
insertNode = function(data) {
|
||||||
|
@ -203,22 +203,48 @@ function ArangoAdapter(nodes, edges, config) {
|
||||||
},
|
},
|
||||||
|
|
||||||
combineCommunityEdges = function (nodes, commNode) {
|
combineCommunityEdges = function (nodes, commNode) {
|
||||||
var i, j, s, t;
|
var i, j, s, t,
|
||||||
|
cachedCommEdges = cachedCommunities[commNode._id].edges,
|
||||||
|
edgeToPush;
|
||||||
for (i = 0; i < edges.length; i++ ) {
|
for (i = 0; i < edges.length; i++ ) {
|
||||||
|
edgeToPush = {};
|
||||||
// s and t keep old values yay!
|
// s and t keep old values yay!
|
||||||
s = edges[i].source;
|
s = edges[i].source;
|
||||||
t = edges[i].target;
|
t = edges[i].target;
|
||||||
for (j = 0; j < nodes.length; j++) {
|
for (j = 0; j < nodes.length; j++) {
|
||||||
if (s === nodes[j]) {
|
if (s === nodes[j]) {
|
||||||
|
if (edgeToPush.type !== undefined) {
|
||||||
|
edges[i].target = edgeToPush.target;
|
||||||
|
delete edgeToPush.target;
|
||||||
|
edgeToPush.type = "b";
|
||||||
|
edgeToPush.edge = edges[i];
|
||||||
|
edges.splice( i, 1 );
|
||||||
|
i--;
|
||||||
|
break;
|
||||||
|
}
|
||||||
edges[i].source = commNode;
|
edges[i].source = commNode;
|
||||||
|
edgeToPush.type = "s";
|
||||||
|
edgeToPush.id = edges[i]._id;
|
||||||
|
edgeToPush.source = s;
|
||||||
}
|
}
|
||||||
if (t === nodes[j]) {
|
if (t === nodes[j]) {
|
||||||
|
if (edgeToPush.type !== undefined) {
|
||||||
|
edges[i].source = edgeToPush.source;
|
||||||
|
delete edgeToPush.source;
|
||||||
|
edgeToPush.type = "b";
|
||||||
|
edgeToPush.edge = edges[i];
|
||||||
|
edges.splice( i, 1 );
|
||||||
|
i--;
|
||||||
|
break;
|
||||||
|
}
|
||||||
edges[i].target = commNode;
|
edges[i].target = commNode;
|
||||||
|
edgeToPush.type = "t";
|
||||||
|
edgeToPush.id = edges[i]._id;
|
||||||
|
edgeToPush.target = t;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (edges[i].source === commNode && edges[i].target === commNode) {
|
if (edgeToPush.type !== undefined) {
|
||||||
edges.splice( i, 1 );
|
cachedCommEdges.push(edgeToPush);
|
||||||
i--;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -288,7 +314,9 @@ function ArangoAdapter(nodes, edges, config) {
|
||||||
});
|
});
|
||||||
commNode.x = nodesToRemove[0].x;
|
commNode.x = nodesToRemove[0].x;
|
||||||
commNode.y = nodesToRemove[0].y;
|
commNode.y = nodesToRemove[0].y;
|
||||||
cachedCommunities[commId] = nodesToRemove;
|
cachedCommunities[commId] = {};
|
||||||
|
cachedCommunities[commId].nodes = nodesToRemove;
|
||||||
|
cachedCommunities[commId].edges = [];
|
||||||
combineCommunityEdges(nodesToRemove, commNode);
|
combineCommunityEdges(nodesToRemove, commNode);
|
||||||
_.each(nodesToRemove, function(n) {
|
_.each(nodesToRemove, function(n) {
|
||||||
removeNode(n);
|
removeNode(n);
|
||||||
|
@ -296,6 +324,33 @@ function ArangoAdapter(nodes, edges, config) {
|
||||||
nodes.push(commNode);
|
nodes.push(commNode);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
expandCommunity = function (commNode) {
|
||||||
|
var commId = commNode._id,
|
||||||
|
nodesToAdd = cachedCommunities[commId].nodes,
|
||||||
|
edgesToChange = cachedCommunities[commId].edges;
|
||||||
|
removeNode(commNode);
|
||||||
|
_.each(nodesToAdd, function(n) {
|
||||||
|
nodes.push(n);
|
||||||
|
});
|
||||||
|
_.each(edgesToChange, function(e) {
|
||||||
|
var edge;
|
||||||
|
switch(e.type) {
|
||||||
|
case "t":
|
||||||
|
edge = findEdge(e.id);
|
||||||
|
edge.target = e.target;
|
||||||
|
break;
|
||||||
|
case "s":
|
||||||
|
edge = findEdge(e.id);
|
||||||
|
edge.source = e.source;
|
||||||
|
break;
|
||||||
|
case "b":
|
||||||
|
edges.push(e.edge);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
delete cachedCommunities[commId];
|
||||||
|
},
|
||||||
|
|
||||||
parseResultOfTraversal = function (result, callback) {
|
parseResultOfTraversal = function (result, callback) {
|
||||||
result = result[0];
|
result = result[0];
|
||||||
_.each(result, function(visited) {
|
_.each(result, function(visited) {
|
||||||
|
@ -594,6 +649,7 @@ function ArangoAdapter(nodes, edges, config) {
|
||||||
};
|
};
|
||||||
|
|
||||||
self.expandCommunity = function (commNode, callback) {
|
self.expandCommunity = function (commNode, callback) {
|
||||||
|
expandCommunity(commNode);
|
||||||
if (callback !== undefined) {
|
if (callback !== undefined) {
|
||||||
callback();
|
callback();
|
||||||
}
|
}
|
||||||
|
|
|
@ -939,8 +939,7 @@
|
||||||
expect(nodes.length).toEqual(3);
|
expect(nodes.length).toEqual(3);
|
||||||
existEdge(commId, c3);
|
existEdge(commId, c3);
|
||||||
existEdge(commId, c4);
|
existEdge(commId, c4);
|
||||||
expect(edges.length).toEqual(2);
|
expect(edges.length).toEqual(2);
|
||||||
expect(called).toBeTruthy();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -998,7 +997,7 @@
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should expand a community if enough space is available', function() {
|
it('should expand a community if enough space is available', function() {
|
||||||
runs(function() {
|
runs(function() {
|
||||||
adapter.setNodeLimit(10);
|
adapter.setNodeLimit(10);
|
||||||
callbackCheck = false;
|
callbackCheck = false;
|
||||||
|
@ -1011,6 +1010,7 @@
|
||||||
|
|
||||||
runs(function() {
|
runs(function() {
|
||||||
expect(getCommunityNodes().length).toEqual(0);
|
expect(getCommunityNodes().length).toEqual(0);
|
||||||
|
console.log(edges);
|
||||||
existNodes([c0, c1, c2, c3, c4, c5, c6, c7]);
|
existNodes([c0, c1, c2, c3, c4, c5, c6, c7]);
|
||||||
existEdge(c0, c1);
|
existEdge(c0, c1);
|
||||||
existEdge(c0, c2);
|
existEdge(c0, c2);
|
||||||
|
|
Loading…
Reference in New Issue