src/searching/builder/AssetsSearchBuilder.js
'use strict';
import PreFilteredSearchBuilder from './PreFilteredSearchBuilder';
import FieldFinder from '../../util/searchingFields/FieldFinder';
import AssetSearch from '../AssetSearch';
const BASE_URL = '/entities';
/**
* Defined a search over Assets
* @example ogapi.assetsSearchBuilder()
*/
export default class AssetsSearchBuilder extends PreFilteredSearchBuilder {
/**
* @param {!InternalOpenGateAPI} parent - Instance of our InternalOpenGateAPI
*/
constructor(parent) {
super(parent, {}, new FieldFinder(parent, BASE_URL));
this._url = BASE_URL;
}
/**
* The response will only have a summary information
* @example
* ogapi.assetsSearchBuilder().summary()
* @return {AssetsSearchBuilder}
*/
summary() {
this._url = this._url + '/summary';
return this;
}
_buildFilter() {
let finalFilter = {
"and": [{
"exists": {
"provision.asset.identifier": true
}
}]
};
if (this._builderParams.filter && Object.keys(this._builderParams.filter).length > 0) {
let filter = this._builderParams.filter;
if (typeof filter._filterTemplate !== "undefined") {
//return filter._filterTemplate;
finalFilter.and.push(filter._filterTemplate.filter);
} else {
finalFilter.and.push(filter);
}
}
return {
filter: finalFilter
};
}
/**
* The search request will have this group by
* @example
* @param {!(object)} group
* @return {AssetsSearchBuilder}
*/
group(group) {
this._builderParams.group = (group || {});
return this;
}
/**
* Build a instance of Search
*
* @example
* ogapi.assetsSearchBuilder().onProvisioned().build()
* @throws {SearchBuilderError} Throw error on url build
* @return {Search}
*/
build() {
return new AssetSearch(this._parent,
this._buildUrl(),
this._buildFilter(),
this._buildLimit(),
this._buildSort(),
this._buildGroup(),
this._buildSelect(),
this._builderParams.timeout, this._urlParams);
}
/**
* The search request will have this filter
* @example
* ogapi.assetsSearchBuilder().select(
* ogapi.newSelectBuilder().add(SE.element("provision.device.identifier", ["value"], "id"), SE.add("device.temperature.value", ["value"]))
* ) // Setting SelectBuilder
* ogapi.assetsSearchBuilder().select({ "elements": [{"name": "provision.device.identifier",
* "fields": [{"field": "value","alias": "identifier"}]},
* {"name": "device.temperature.value","fields": [{"field": "value","alias": "identifier"}]}]
* }) //Custom select
* @param {!(SelectBuilder|object)} select
* @return {AssetsSearchBuilder}
*/
select(select) {
this._builderParams.select = (select || undefined);
return this;
}
}