123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- 'use strict';
- /*
- *+------------------------------------------------------------------------+
- *| Licensed Materials - Property of IBM
- *| IBM Cognos Products: BI Dashboard
- *| (C) Copyright IBM Corp. 2017
- *|
- *| US Government Users Restricted Rights - Use, duplication or disclosure
- *| restricted by GSA ADP Schedule Contract with IBM Corp.
- *+------------------------------------------------------------------------+
- */
- /*
- * This Class defines a Query Definitio Object that supports multiple layers
- */
- define(['../../../lib/@waca/core-client/js/core-client/ui/core/Class', 'underscore'], function (Class, _) {
- 'use strict';
- var SingleQueryDefinition = null;
- SingleQueryDefinition = Class.extend({
- _dataItems: [],
- _projections: [],
- _filters: [],
- _fields: [],
- _layerId: null,
- _hasCategoricalSlots: {},
- _queryHints: {},
- _augmentations: [],
- /**
- *Initialization for one layer query definition
- */
- init: function init(layerId, dataItems, projections, filters, hints, hasCategoricalSlots, augmentations) {
- this.setDataItems(dataItems);
- this.setProjections(projections);
- this.setFiltres(filters);
- this.setLayerId(layerId);
- this.setQueryHints(hints);
- this.setAugmentations(augmentations);
- },
- /**
- *@return {String} Unique layer ID
- */
- getLayerId: function getLayerId() {
- return this._layerId;
- },
- /**
- *@param {String} layerId
- *Set a layer unique ID
- */
- setLayerId: function setLayerId(layerId) {
- this._layerId = layerId;
- },
- /**
- *@return {String} Unique layer ID
- */
- getDataItems: function getDataItems() {
- return this._dataItems;
- },
- /**
- *@param {Array of JSONObject} dataItems An array of data items included in the query definition
- *Set a data items
- */
- setDataItems: function setDataItems(dataItems) {
- this._dataItems = dataItems || [];
- },
- /**
- *@param {JSONObject} dataItem Add a data item object to query definition
- */
- addDataItems: function addDataItems(dataItem) {
- this._dataItems = this._addArrayElement(this._dataItems, dataItem);
- },
- /**
- *@return {Array of JSONObject} An array of projections included in the query definition
- */
- getProjections: function getProjections() {
- return this._projections;
- },
- /**
- *@param {Array of JSONObject}
- *Set an array of projections
- */
- setProjections: function setProjections(projections) {
- this._projections = projections || [];
- },
- /**
- *@param {JSONObject} Add a projection object to query definition
- */
- addProjections: function addProjections(projection) {
- this._addArrayElement(this._projections, projection);
- },
- /**
- *@return {Array of JSONObject} An array of local filters object included in the query definition
- */
- getFilters: function getFilters() {
- return this._filters;
- },
- /**
- *@param {Array of JSONObject} filters
- *Set an arry of local filters
- */
- setFiltres: function setFiltres(filters) {
- this._filters = filters || [];
- },
- /**
- *@param {JSONObject} Add a filter object to query definition
- */
- addFilters: function addFilters(filter) {
- this._filters = this._addArrayElement(this._filters, filter);
- },
- setQueryHints: function setQueryHints(hints) {
- this._queryHints = hints;
- },
- getQueryHints: function getQueryHints() {
- return this._queryHints;
- },
- setAugmentations: function setAugmentations(augmentations) {
- this._augmentations = augmentations;
- },
- getAugmentations: function getAugmentations() {
- return this._augmentations;
- },
- getSynDataFilters: function getSynDataFilters() {
- return this.synDataFilters;
- },
- setSynDataFilters: function setSynDataFilters(synDataFilters) {
- this.synDataFilters = synDataFilters;
- },
- _addArrayElement: function _addArrayElement(array, item, singleID) {
- if (item) {
- if (!_.isArray(item)) {
- if (item.layerId) delete item.layerId;
- array.push(item);
- } else {
- _.each(item, function (entry) {
- if (item.layerId) delete entry.layerId;
- });
- if (singleID) {
- item = _.pluck(item, 'id');
- }
- array = array.concat(item);
- }
- }
- return array;
- }
- });
- /*Query definition object used by client to build final query spec
- * Internally, this object contains an array of query definition defined for
- * one layer
- */
- var VisQueryDefinition = Class.extend({
- /**
- *Initialization for query definition
- *load all query context
- */
- init: function init(queryContext) {
- this._queryDefinitions = [];
- //Initialize layers
- _.each(queryContext.layers, function (layer) {
- this.addQueryDefinitionByLayer(layer.getId());
- }.bind(this));
- this._addLayeredEntities(queryContext);
- this._addSharedEntities(queryContext);
- _.each(this._queryDefinitions, function (def) {
- def.setProjections(_.pluck(def.getProjections(), 'id'));
- });
- },
- /**
- *@param {object} - queryContext that contains layered entities and common entities
- */
- _addLayeredEntities: function _addLayeredEntities(queryContext) {
- _.map(queryContext.layeredEntities, function (querySpecMember, querySpecMemberType) {
- _.each(querySpecMember, function (value) {
- this._addEntity(this.getQueryDefinitionByLayer(value.layerId), querySpecMemberType, value);
- }.bind(this));
- }.bind(this));
- },
- _addSharedEntities: function _addSharedEntities(queryContext) {
- _.map(queryContext.commonEntities, function (querySpecMember, querySpecMemberType) {
- _.each(this._queryDefinitions, function (queryDef) {
- _.each(querySpecMember, function (value) {
- this._addEntity(queryDef, querySpecMemberType, value);
- }.bind(this));
- }.bind(this));
- }.bind(this));
- },
- _addEntity: function _addEntity(queryDef, entryType, value) {
- if (!queryDef) {
- return;
- }
- //TODO:Each Entry could have its own hanlder
- switch (entryType) {
- case 'dataItems':
- queryDef.addDataItems(value);
- break;
- case 'projections':
- queryDef.addProjections(value);
- break;
- case 'filters':
- queryDef.addFilters(value);
- break;
- case 'queryHints':
- queryDef.setQueryHints(value);
- break;
- case 'augmentations':
- queryDef.setAugmentations(value);
- break;
- default:
- //console.warn('unrecognized definition element');
- }
- },
- //Create single layer definition object it is not defined
- addQueryDefinitionByLayer: function addQueryDefinitionByLayer(layerId) {
- var oLayerQueryDef = this.getQueryDefinitionByLayer(layerId);
- if (!oLayerQueryDef) {
- this._queryDefinitions.push(new SingleQueryDefinition(layerId));
- }
- },
- getQueryDefinitionByLayer: function getQueryDefinitionByLayer(layerId) {
- return _.find(this._queryDefinitions, function (entry) {
- return entry.getLayerId() === layerId;
- });
- },
- clearQueryDefinitions: function clearQueryDefinitions() {
- this._queryDefinitions = [];
- },
- /**
- *Return the Query definitions object that support multiple layers
- */
- getQueryDefinitions: function getQueryDefinitions() {
- return this._queryDefinitions;
- }
- });
- return VisQueryDefinition;
- });
- //# sourceMappingURL=VisQueryDefinition.js.map
|