diff --git a/html/admin/js/graphViewer/graph/arangoAdapter.js b/html/admin/js/graphViewer/graph/arangoAdapter.js index f8430f0d28..5fc6a1f3b0 100644 --- a/html/admin/js/graphViewer/graph/arangoAdapter.js +++ b/html/admin/js/graphViewer/graph/arangoAdapter.js @@ -40,12 +40,15 @@ function ArangoAdapter(nodes, edges, config) { if (config === undefined) { throw "A configuration with node- and edgeCollection has to be given."; } - if (config.nodeCollection === undefined) { - throw "The nodeCollection has to be given."; - } - if (config.edgeCollection === undefined) { - throw "The edgeCollection has to be given."; + if (config.graph === undefined) { + if (config.nodeCollection === undefined) { + throw "The nodeCollection or a graphname has to be given."; + } + if (config.edgeCollection === undefined) { + throw "The edgeCollection or a graphname has to be given."; + } } + var self = this, absAdapter, @@ -57,9 +60,31 @@ function ArangoAdapter(nodes, edges, config) { arangodb, direction, + setNodeCollection = function(name) { + nodeCollection = name; + api.node = api.base + "document?collection=" + nodeCollection; + }, + + setEdgeCollection = function(name) { + edgeCollection = name; + api.edge = api.base + "edge?collection=" + edgeCollection; + }, + + getCollectionsFromGraph = function(name) { + $.ajax({ + cache: false, + type: 'GET', + async: false, + url: api.graph + "/" + name, + contentType: "application/json", + success: function(data) { + setNodeCollection(data.graph.vertices); + setEdgeCollection(data.graph.edges); + } + }); + }, + parseConfig = function(config) { - nodeCollection = config.nodeCollection; - edgeCollection = config.edgeCollection; if (config.host === undefined) { arangodb = "http://" + document.location.host; } else { @@ -80,6 +105,20 @@ function ArangoAdapter(nodes, edges, config) { } else { direction = "outbound"; } + api.base = arangodb.lastIndexOf("http://", 0) === 0 + ? arangodb + "/_api/" + : "http://" + arangodb + "/_api/"; + api.cursor = api.base + "cursor"; + api.graph = api.base + "graph"; + api.collection = api.base + "collection/"; + api.document = api.base + "document/"; + api.any = api.base + "simple/any"; + if (config.graph) { + getCollectionsFromGraph(config.graph); + } else { + setNodeCollection(config.nodeCollection); + setEdgeCollection(config.edgeCollection); + } }, sendQuery = function(query, bindVars, onSuccess) { @@ -231,18 +270,8 @@ function ArangoAdapter(nodes, edges, config) { absConfig.prioList = config.prioList; } absAdapter = new AbstractAdapter(nodes, edges, this, absConfig); - - parseConfig(config); - api.base = arangodb.lastIndexOf("http://", 0) === 0 - ? arangodb + "/_api/" - : "http://" + arangodb + "/_api/"; - api.cursor = api.base + "cursor"; - api.collection = api.base + "collection/"; - api.document = api.base + "document/"; - api.any = api.base + "simple/any"; - api.node = api.base + "document?collection=" + nodeCollection; - api.edge = api.base + "edge?collection=" + edgeCollection; + parseConfig(config); queries.randomDocuments = "FOR u IN @@nodes" + " sort rand()" @@ -472,8 +501,8 @@ function ArangoAdapter(nodes, edges, config) { self.changeToCollections = function (nodesCol, edgesCol, dir) { absAdapter.cleanUp(); - nodeCollection = nodesCol; - edgeCollection = edgesCol; + setNodeCollection(nodesCol); + setEdgeCollection(edgesCol); if (dir !== undefined) { if (dir === true) { direction = "any"; @@ -481,8 +510,6 @@ function ArangoAdapter(nodes, edges, config) { direction = "outbound"; } } - api.node = api.base + "document?collection=" + nodeCollection; - api.edge = api.base + "edge?collection=" + edgeCollection; }; self.setNodeLimit = function (pLimit, callback) {