summaryrefslogtreecommitdiffstats
path: root/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/queryDataSourceInterface.js
diff options
context:
space:
mode:
Diffstat (limited to 'sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/queryDataSourceInterface.js')
-rw-r--r--sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/queryDataSourceInterface.js87
1 files changed, 87 insertions, 0 deletions
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/queryDataSourceInterface.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/queryDataSourceInterface.js
new file mode 100644
index 000000000..3e2b45a15
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/queryDataSourceInterface.js
@@ -0,0 +1,87 @@
+(function( app ) {
+
+ var data = app.ns("data");
+
+ data.QueryDataSourceInterface = data.DataSourceInterface.extend({
+ defaults: {
+ metadata: null, // (required) instanceof app.data.MetaData, the cluster metadata
+ query: null // (required) instanceof app.data.Query the data source
+ },
+ init: function() {
+ this._super();
+ this.config.query.on("results", this._results_handler.bind(this) );
+ this.config.query.on("resultsWithParents", this._load_parents.bind(this) );
+ },
+ _results_handler: function(query, res) {
+ this._getSummary(res);
+ this._getMeta(res);
+ var sort = query.search.sort[0] || { "_score": { reverse: false }};
+ var sortField = Object.keys(sort)[0];
+ this.sort = { column: sortField, dir: (sort[sortField].reverse ? "asc" : "desc") };
+ this._getData(res, this.config.metadata);
+ this.fire("data", this);
+ },
+ _load_parents: function(query, res) {
+ query.loadParents(res, this.config.metadata);
+ },
+ _getData: function(res, metadata) {
+ var metaColumns = ["_index", "_type", "_id", "_score"];
+ var columns = this.columns = [].concat(metaColumns);
+
+ this.data = res.hits.hits.map(function(hit) {
+ var row = (function(path, spec, row) {
+ for(var prop in spec) {
+ if(acx.isObject(spec[prop])) {
+ arguments.callee(path.concat(prop), spec[prop], row);
+ } else if(acx.isArray(spec[prop])) {
+ if(spec[prop].length) {
+ arguments.callee(path.concat(prop), spec[prop][0], row)
+ }
+ } else {
+ var dpath = path.concat(prop).join(".");
+ if(metadata.paths[dpath]) {
+ var field_name = metadata.paths[dpath].field_name;
+ if(! columns.contains(field_name)) {
+ columns.push(field_name);
+ }
+ row[field_name] = (spec[prop] === null ? "null" : spec[prop] ).toString();
+ } else {
+ // TODO: field not in metadata index
+ }
+ }
+ }
+ return row;
+ })([ hit._index, hit._type ], hit._source, {});
+ metaColumns.forEach(function(n) { row[n] = hit[n]; });
+ row._source = hit;
+ if (typeof hit._parent!= "undefined") {
+ (function(prefix, path, spec, row) {
+ for(var prop in spec) {
+ if(acx.isObject(spec[prop])) {
+ arguments.callee(prefix, path.concat(prop), spec[prop], row);
+ } else if(acx.isArray(spec[prop])) {
+ if(spec[prop].length) {
+ arguments.callee(prefix, path.concat(prop), spec[prop][0], row)
+ }
+ } else {
+ var dpath = path.concat(prop).join(".");
+ if(metadata.paths[dpath]) {
+ var field_name = metadata.paths[dpath].field_name;
+ var column_name = prefix+"."+field_name;
+ if(! columns.contains(column_name)) {
+ columns.push(column_name);
+ }
+ row[column_name] = (spec[prop] === null ? "null" : spec[prop] ).toString();
+ } else {
+ // TODO: field not in metadata index
+ }
+ }
+ }
+ })(hit._parent._type,[hit._parent._index, hit._parent._type], hit._parent._source, row);
+ }
+ return row;
+ }, this);
+ }
+ });
+
+})( this.app );