123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866 |
- "use strict";
- /**
- * Licensed Materials - Property of IBM
- * IBM Cognos Products: admin
- * Copyright IBM Corp. 2015, 2019
- * US Government Users Restricted Rights - Use, duplication or disclosure
- * restricted by GSA ADP Schedule Contract with IBM Corp.
- */
- define(['underscore', 'bi/content_apps/PropertiesPageView', 'bi/admin/datasource/services/ApiSvc', 'bi/admin/datasource/services/DataSourceListController', 'bi/admin/multitenancy/services/TenantsCustomizationService', 'bi/admin/nls/StringResource', 'text!bi/admin/common/propertiespageview.json', 'bi/admin/common/utils/AJAXUtils', 'bi/admin/datasource/services/ConnectionUtils', 'bi/admin/datasource/services/ConnectionListController', 'bacontentnav/utils/UIHelper', '../ba-graphics/dist/icons-js/custom-visual_16', '../ba-graphics/dist/icons-js/schematic_16', 'bi/admin/common/services/ApiBase', 'jquery'], function (_, BasePropertiesPageView, datasourceApi, DataSourceListController, TenantsController, StringResource, propertiesPageViewDefinitions, AJAXUtils, ConnectionUtils, ConnectionListController, UIHelper, bundleTypeRendererIcon, bundleTypeSchematicIcon, ApiBase, $) {
- 'use strict'; //NOSONAR: meant to be strict
- var PropertiesPageView = BasePropertiesPageView.extend({
- _objectIcons: {
- dataSource: {
- icon: '#common-data_source',
- tooltip: 'datasource'
- },
- dataSourceConnection: {
- icon: '#common-connection',
- tooltip: 'connection'
- },
- dataSourceSignon: {
- icon: '#common-password-key',
- tooltip: 'signon'
- },
- tenant: {
- icon: '#common-multi_tenant',
- tooltip: 'tenant'
- },
- bundleType_renderer: {
- icon: bundleTypeRendererIcon.id || bundleTypeRendererIcon.default.id,
- tooltip: StringResource.get('bundleType_renderer')
- },
- bundleType_schematic: {
- icon: bundleTypeSchematicIcon.id || bundleTypeSchematicIcon.default.id,
- tooltip: StringResource.get('bundleType_schematic')
- }
- },
- /**
- * @param options.$el - JQuery node to append the view onto (either a parent pane or the body)
- * @param options.objectInformation {object} - An object that contains the information for the content
- *
- * @constructor
- */
- init: function init(options) {
- options.objectInformation = options.objectInfo;
- PropertiesPageView.inherited('init', this, arguments);
- _.extend(this, options);
- datasourceApi.glassContext = this.glassContext;
- if (options.propertiesPageViewDefinition) {
- this._oPropertiesPageViewDefintions = options.propertiesPageViewDefinition;
- } else {
- this._oPropertiesPageViewDefintions = JSON.parse(propertiesPageViewDefinitions);
- }
- this.dsController = this._getNewDataSourceListController({
- glassContext: this.glassContext
- });
- this.tenantsController = this._getNewTenantsController({
- glassContext: this.glassContext
- });
- this.apiBase = this._getApiBase({
- glassContext: this.glassContext
- });
- },
- _getApiBase: function _getApiBase(options) {
- return new ApiBase(options);
- },
- _getNewDataSourceListController: function _getNewDataSourceListController(options) {
- return new DataSourceListController(options);
- },
- _getNewTenantsController: function _getNewTenantsController(options) {
- return new TenantsController(options);
- },
- reload: function reload() {
- this.$el.empty();
- this.render();
- },
- _addTabChangeHandler: function _addTabChangeHandler() {
- var tabCon = this._oPropertyUIControl.getProperties()[2];
- tabCon.onTabChange = function () {
- $(this).trigger('tabChanged');
- }.bind(this);
- },
- cannotEditNSObjects: function cannotEditNSObjects(type) {
- var nsObjectTypes = ['namespace', 'namespaceFolder', 'account', 'group', 'role'];
- return nsObjectTypes.indexOf(type) !== -1 && this._isExternalNS();
- },
- _property_name_read_only: function _property_name_read_only() {
- var $editIcon = $(this.$el.find('.banner .propertyNameEdit'));
- $editIcon.remove();
- var $nameInput = $(this.$el.find('.propertiesBannerLabel.v_defaultName'));
- $nameInput.attr('readonly', 'true');
- $nameInput.css('cursor', 'text');
- var $ic = $(this.$el.find('.propertiesBannerIcon'));
- $ic.css('cursor', 'text');
- },
- render: function render() {
- return PropertiesPageView.inherited('render', this, arguments).then(function () {
- this.$el.addClass('AdminPropPageView');
- this._addTabChangeHandler();
- if (this.type === 'connection') {
- if (this.objectInfo.isNew || this.objectInfo.disabled) {
- this._hideExtraTabs();
- } else {
- this._showExtraTabs();
- }
- } else if (this.type === 'resourceFolder' || this.cannotEditNSObjects(this.type)) {
- this._property_name_read_only();
- } else if (this.type === 'visualization') {
- var bundle = this._objectIcons['bundleType_' + this.objectInfo.bundleType];
- if (bundle) {
- // change icon in title banner
- var $bundleIcon = this.$el.find('.propertyUIControlBanner .propertiesBannerIcon');
- $bundleIcon.attr('title', bundle.tooltip);
- if (this.objectInfo.bundleImage) {
- var classStr = ' class="' + $bundleIcon.find('svg').attr('class') + '" ';
- var srcStr = ' src="' + this.objectInfo.bundleImage + '" ';
- $bundleIcon.find('svg').replaceWith('<img ' + classStr + srcStr + '></img>');
- } else {
- $bundleIcon.find('svg>text').text(bundle.tooltip);
- $bundleIcon.find('svg>use').attr('xlink:href', '#' + bundle.icon);
- } // change type in first row
- var $fileType = this.$el.find('.containerUIControl.propertiesUIControlPageView .propertyRow .propertyDetails .propertyValue.fileType');
- $fileType.text(bundle.tooltip);
- }
- }
- }.bind(this)).catch(function (e) {
- this.logger.debug(e);
- }.bind(this));
- },
- _hideExtraTabs: function _hideExtraTabs() {
- this.slideout.$el.find('.tabNumber2').addClass('disabled').attr('aria-disabled', 'true');
- var $disabledIcon = $('<svg role="presentation" class="svgIcon admin-schema-property-icon"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#common-disabled" x="2" y="0" height="12" width="12" style="stroke: #ff0000;"></use></svg>');
- this.slideout.$el.find('.tabNumber2>a').append($disabledIcon);
- },
- _showExtraTabs: function _showExtraTabs() {
- this.slideout.$el.find('.tabNumber2').removeClass('disabled').removeAttr('aria-disabled');
- this.slideout.$el.find('.tabNumber2>a>svg').remove();
- },
- _getObjectType: function _getObjectType() {
- if (!this.objectInformation.ancestors || this.objectInformation.ancestors.length === 0) {
- return this.objectInformation.type;
- }
- if (this.objectInformation.ancestors[0].type === 'capability') {
- return this.objectInformation.ancestors[0].type;
- }
- return this.objectInformation.type;
- },
- _invalidDataAccount: function _invalidDataAccount(data) {
- var errKey;
- if (this.type === 'account') {
- if (data.password && !/^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/.test(data.password)) {
- errKey = 'passwordInvalidErrorMsg';
- } else if (data.surname !== undefined && $.trim(data.surname) === '') {
- errKey = 'surnameInvalidErrorMsg';
- } else if (data.email && !/^([a-zA-Z0-9]+[_|-|.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|-|.]?)*[a-zA-Z0-9]+.[a-zA-Z]{2,3}$/.test(data.email)) {
- errKey = 'emailInvalidErrorMsg';
- }
- if (errKey) {
- this.glassContext.appController.showErrorMessage(StringResource.get(errKey), StringResource.get('error'));
- }
- }
- return errKey !== undefined;
- },
- _invalidData: function _invalidData(data) {
- // Glass always calls hide() on open and close of the slideout. This causes the save request to be done multiple
- // times. To avoid this, the _isSaved flag is used to indicate that save is already done, so not to do another one.
- return this._isSaved || !this.objectInfo.isNew && _.size(data) === 0 || this._invalidDataAccount(data);
- },
- _isBasicType: function _isBasicType() {
- return this.type === 'account' || this.type === 'group' || this.type === 'namespaceFolder' || this.type === 'role';
- },
- _reloadAfterUpdate: function _reloadAfterUpdate() {
- if (this.onUpdate) {
- this.onUpdate();
- }
- if (this.type === 'namespace') {
- _.each(this.parentView.listView.dataAdaptor._accountExplorer._nameSpaces, function (item, index) {
- if (item.id === this.objectInformation.id) {
- this.parentView.listView.dataAdaptor._accountExplorer._nameSpaces[index] = this.objectInformation;
- }
- }.bind(this));
- }
- if (this.parentView.refresh) {
- this.parentView.refresh();
- }
- },
- _isCorDL: function _isCorDL() {
- return this.type === 'contact' || this.type === 'distributionList';
- },
- update: function update() {
- var data;
- var dataDefault = this.objectInformation.defaultName;
- if (this.objectInformation.contactUpdate) {
- data = this.objectInformation.contactUpdate;
- delete this.objectInformation.contactUpdate;
- } else {
- data = this._oPropertyUIControl ? this._oPropertyUIControl.getModifiedProperties() : '';
- }
- if (this._invalidData(data)) {
- return Promise.resolve();
- }
- if (this._isBasicType()) {
- this._convertOptions(data);
- } else if (this.type === 'securedFeature' || this.type === 'securedFunction' || this.type === 'productCapability' || this.type === 'resourceFolder' || this.type === 'cosConnection' || this.type === 'cosLocation') {
- this.objectInformation = _.extend(this.objectInformation, data);
- } else if (this.type !== 'visualization' && this.type !== 'dataSource' && this.type !== 'connection' && this.type !== 'tenant' && !this._isCorDL()) {
- this.parentView.listView.dataAdaptor.sortChanged = true;
- this.objectInformation = _.extend(this.objectInformation, data);
- }
- if (data.defaultName === '') {
- data.defaultName = dataDefault + '_defaultNameWasEmpty';
- }
- return this._save(data).then(this._reloadAfterUpdate.bind(this));
- },
- _getActualValue: function _getActualValue(data, item, val) {
- var temp = _.find(this.objectInformation.options, function (opIt) {
- return opIt.name === item.name;
- });
- var actualValue;
- if (data[val] !== undefined) {
- actualValue = data[val];
- } else if (this.objectInformation.options && temp) {
- actualValue = temp.value;
- } else {
- actualValue = item.value;
- }
- return actualValue;
- },
- _convertOptionsHelper: function _convertOptionsHelper(data, item) {
- var val = item.name;
- var sBidiEnumURL = 'http://developer.cognos.com/ceba/constants/biDirectionalOptionEnum#';
- if (val.indexOf(sBidiEnumURL) === 0) {
- val = val.substring(sBidiEnumURL.length);
- }
- if (this.objectInformation.options) {
- var actualValue = this._getActualValue(data, item, val);
- if (_.isString(actualValue) && actualValue.indexOf(sBidiEnumURL) === 0) {
- this.objectInformation[val] = actualValue.substring(actualValue.lastIndexOf('#') + 1);
- } else {
- this.objectInformation[val] = actualValue;
- }
- item.value = actualValue;
- }
- },
- _convertOptions: function _convertOptions(data) {
- var newOptions = [{
- 'name': 'http://developer.cognos.com/ceba/constants/biDirectionalOptionEnum#baseTextDirection',
- 'type': 'genericOptionAnyURI',
- 'value': 'http://developer.cognos.com/ceba/constants/biDirectionalOptionEnum#biDirectionalFeaturesEnabled#RTL'
- }, {
- 'name': 'http://developer.cognos.com/ceba/constants/biDirectionalOptionEnum#biDirectionalFeaturesEnabled',
- 'type': 'genericOptionBoolean',
- 'value': false
- }, {
- 'name': 'showHiddenObjects',
- 'type': 'portalOptionBoolean',
- 'value': false
- }, {
- 'name': 'http:\/\/developer.cognos.com\/ceba\/constants\/systemOptionEnum#accessibilityFeatures',
- 'type': 'genericOptionBoolean',
- 'value': false
- }, {
- 'name': 'showHints',
- 'type': 'portalOptionString',
- 'value': 'showAll'
- }];
- _.extend(this.objectInformation, data);
- newOptions.forEach(this._convertOptionsHelper.bind(this, data));
- this.objectInformation.options = newOptions;
- },
- onHide: function onHide() {
- if (!this._oPropertyUIControl) {
- return Promise.resolve();
- } else {
- if (this.type === 'connection') {
- //in this case we want to make sure we delete the settings tab
- //as that is taken care of for us
- var tabCon = this._oPropertyUIControl.getProperties()[2];
- if (tabCon && tabCon._tabs) {
- tabCon._tabs.splice(1, 1);
- }
- }
- this.update().then(function () {
- this._oPropertyUIControl.remove();
- if (this.parentView.slideout && this.parentView.slideout.content && this.parentView.slideout.parent.parent && this.parentView.slideout.content.module.indexOf('bi/admin/datasource/slideout') > -1) {
- this.parentView.slideout.remove();
- }
- }.bind(this));
- return Promise.resolve(true);
- }
- },
- _handleError: function _handleError(err) {
- if (AJAXUtils.isNamingConflictErrorMsg(err) || err.status === 409) {
- this.glassContext.appController.showErrorMessage(StringResource.get('nameConflictErrorMsg'), StringResource.get('error'));
- } else {
- this.glassContext.appController.showErrorMessage(err.responseJSON.messages.join('\n'), StringResource.get('error'));
- }
- },
- _updateAccountObject: function _updateAccountObject() {
- var userPrefURL;
- switch (this.type) {
- case 'group':
- userPrefURL = AJAXUtils.getPath('updateGroup', this.objectInformation.id);
- break;
- case 'role':
- userPrefURL = AJAXUtils.getPath('updateRole', this.objectInformation.id);
- break;
- case 'user':
- userPrefURL = AJAXUtils.getPath('updateUser', this.objectInformation.id);
- break;
- case 'namespaceFolder':
- userPrefURL = AJAXUtils.getPath('updateNamespaceFolder', this.objectInformation.id);
- break;
- case 'namespace':
- case 'contact':
- case 'distributionList':
- userPrefURL = AJAXUtils.getPath('updateNamespace', this.objectInformation.id);
- break;
- case 'securedFeature':
- case 'securedFunction':
- case 'productCapability':
- userPrefURL = 'v1/objects/' + this.objectInformation.id;
- break;
- default:
- userPrefURL = '';
- break;
- }
- var options = {
- dataType: 'json',
- contentType: 'application/json; charset=utf-8',
- type: 'PUT',
- data: JSON.stringify(this.objectInformation.updatedData),
- url: userPrefURL,
- cache: false
- };
- return this.glassContext.services.ajax.ajax(options);
- },
- _updateUserPreferences: function _updateUserPreferences() {
- var userPrefURL = AJAXUtils.getPath('getUserPreference', this.objectInformation.id);
- var options = {
- dataType: 'json',
- type: 'PUT',
- contentType: 'application/json; charset=utf-8',
- data: JSON.stringify(this.objectInformation),
- url: userPrefURL,
- cache: false
- };
- return this.glassContext.services.ajax.ajax(options);
- },
- _save: function _save(data) {
- this._isSaved = true;
- var toastName = data.defaultName ? data.defaultName : this.objectInformation.defaultName;
- if (data.defaultName && data.defaultName.includes('_defaultNameWasEmpty')) {
- this.type = 'error';
- }
- var dfd;
- switch (this.type) {
- case 'account':
- this._setObjectInformationForAccounts(data);
- dfd = this._updateUserPreferences().then(this._showToastHelper.bind(this, toastName));
- break;
- case 'group':
- case 'role':
- case 'namespaceFolder':
- dfd = this._getPropertiesInfo().then(function () {
- this._dataHelper(data);
- return this._updateAccountObject();
- }.bind(this)).then(this._showToastHelper.bind(this, toastName));
- break;
- case 'dataSource':
- dfd = this._saveDataSource(data, toastName);
- break;
- case 'connection':
- dfd = this._saveConnection(data);
- break;
- case 'visualization':
- this._dataHelper(data);
- dfd = this._saveVisualization().then(this._showToastHelper.bind(this, toastName), function (arg, err) {
- this._handleError(err);
- }.bind(this));
- break;
- case 'namespace':
- case 'contact':
- case 'distributionList':
- case 'securedFeature':
- case 'securedFunction':
- case 'productCapability':
- this._dataHelper(data);
- dfd = this._updateAccountObject().then(this._showToastHelper.bind(this, toastName), function (arg, err) {
- this._handleError(err);
- }.bind(this));
- break;
- case 'tenant':
- dfd = this._updateTenant(data);
- break;
- case 'resourceFolder':
- dfd = this.apiBase.updateResourceFolder(this.objectInformation, data);
- break;
- case 'cosConnection':
- dfd = this.apiBase.updateCOSConnection(this.objectInformation, data);
- break;
- case 'cosLocation':
- dfd = this.apiBase.updateCOSLocation(this.objectInformation, data);
- break;
- default:
- this.logger.error('do not know how to handle objects of type ' + this.type);
- dfd = Promise.resolve().then(this._showToastHelper.bind(this, toastName));
- }
- return dfd;
- },
- _setObjectInformationForAccounts: function _setObjectInformationForAccounts(data) {
- if (this.objectInformation.skin) {
- this.objectInformation.skin = this.objectInformation.skin.charAt(0).toUpperCase() + this.objectInformation.skin.slice(1);
- }
- if (this.objectInformation.password) {
- this.objectInformation.password = btoa(this.objectInformation.password);
- }
- if (!this._isAnonymous(this.objectInformation)) {
- this.objectInformation.defaultName = this.objectInformation.givenName + ' ' + this.objectInformation.surname;
- }
- },
- _dataHelper: function _dataHelper(data) {
- this.objectInformation.updatedData = data;
- this.objectInformation.updatedData.type = this.type;
- if (this.type === 'securedFeature' || this.type === 'securedFunction' || this.type === 'productCapability') {
- this.objectInformation.updatedData.type = this.objectInformation.type;
- }
- },
- _saveDataSource: function _saveDataSource(data, toastName) {
- var propertyInfo = {
- 'disabled': this.objectInformation.disabled,
- 'hidden': this.objectInformation.hidden,
- 'hasChildren': this.objectInformation.hasChildren
- };
- $.extend(propertyInfo, data);
- return datasourceApi.dataSources.update(this.objectInformation.id, propertyInfo).then(this._showToastHelper.bind(this, toastName), function (arg, err) {
- this._handleError(err);
- }.bind(this)).then(function () {
- $(this.slideout).trigger('updateObject', this.objectInfo);
- }.bind(this));
- },
- _saveConnection: function _saveConnection(data) {
- $.extend(this.objectInfo, data);
- if (!this.objectInfo.isNew) {
- this._saveExistingConnection();
- }
- return Promise.resolve();
- },
- _saveVisualization: function _saveVisualization() {
- var userPrefURL = AJAXUtils.getPath('updateVisualization', this.objectInformation.id); // visualizations id saved to CM defaultName field.
- // visualizations name saved to CM defaultScreenTip field.
- this.objectInformation.updatedData.defaultScreenTip = this.objectInformation.updatedData.defaultName;
- delete this.objectInformation.updatedData.defaultName;
- var options = {
- dataType: 'json',
- contentType: 'application/json; charset=utf-8',
- type: 'PUT',
- data: JSON.stringify(this.objectInformation.updatedData),
- url: userPrefURL,
- cache: false
- };
- return this.glassContext.getCoreSvc('.Ajax').ajax(options);
- },
- _showToastHelper: function _showToastHelper(toastName, newData) {
- if (toastName.includes('_defaultNameWasEmpty')) {
- var sText = StringResource.get('toastUpdateFailedMsg', {
- 'name': toastName.substring(0, toastName.length - 20)
- });
- this.glassContext.appController.showToast(sText, {
- type: 'info'
- });
- } else {
- var sText = StringResource.get('toastUpdateMsg', {
- 'name': toastName
- });
- this.glassContext.appController.showToast(sText, {
- type: 'success'
- });
- }
- return newData;
- },
- setFocus: function setFocus() {
- if (this.objectInfo.isNew) {
- var nameEl = this.$el.find('.v_defaultName');
- $(nameEl).focus();
- $(nameEl).select();
- } else {
- PropertiesPageView.inherited('setFocus', this, arguments);
- }
- },
- _getIdFromLocationHeader: function _getIdFromLocationHeader(response) {
- var location = response.getResponseHeader('location');
- return location.split('/').pop();
- },
- _updateTenant: function _updateTenant(data) {
- var tenantName = data.defaultName !== undefined ? data.defaultName : this.objectInfo.defaultName;
- return this.tenantsController.updateTenant(this.objectInfo.tenantID, data).then(function () {
- this.glassContext.appController.showToast(StringResource.get('multitenancySuccessUpdate', {
- 'tenantName': tenantName
- }));
- }.bind(this), function (ajaxOptions, error) {
- this.glassContext.appController.showErrorMessage(StringResource.get('multitenacyFailedUpdate', {
- 'tenantName': tenantName
- }) + ', ' + AJAXUtils.buildErrorMessage(error.responseJSON.errors));
- }.bind(this));
- },
- _saveExistingConnection: function _saveExistingConnection() {
- ConnectionUtils.saveConnection(this.glassContext.getCoreSvc('.Ajax'), this.objectInfo, this.connectionSignons, this.removedSignons).then(function () {
- var sText = StringResource.get('datasourceConnectionToastUpdateMsg', {
- 'name': this.objectInfo.defaultName
- });
- this.glassContext.appController.showToast(sText, {
- type: 'success'
- });
- if (this.connectionSignons) {
- this.connectionSignons.forEach(function (signon) {
- delete signon.isNew;
- });
- }
- this.removedSignons = [];
- $(this.slideout).trigger('updateObject', this.objectInfo);
- }.bind(this), function () {
- var sText = StringResource.get('datasourceConnectionToastUpdateFailedMsg', {
- 'name': this.objectInfo.defaultName
- });
- this.glassContext.appController.showToast(sText, {
- 'type': 'error'
- });
- }.bind(this));
- },
- _getPropertiesInfoForAccount: function _getPropertiesInfoForAccount() {
- if (!_.isUndefined(this.accountExplorer)) {
- return new Promise(function (resolve, reject) {
- this.accountExplorer.getAccount(this.objectInformation).then(function (newData) {
- resolve(newData.data[0]);
- }, reject);
- }.bind(this));
- } else {
- return Promise.resolve(this.objectInfo);
- }
- },
- _getPropertiesInfoForConnection: function _getPropertiesInfoForConnection() {
- if (!this.objectInfo.isNew) {
- var conControl = new ConnectionListController({
- glassContext: this.glassContext
- });
- return conControl.getConnection(this.objectInformation.id, this.objectInformation.connId).then(function (newData) {
- newData.dataSourceId = this.objectInfo.dataSourceId;
- return newData;
- }.bind(this));
- } else {
- return Promise.resolve(this.objectInfo);
- }
- },
- _getPropertiesInfoForGroupRoleFolderNS: function _getPropertiesInfoForGroupRoleFolderNS() {
- if (!_.isUndefined(this.accountExplorer)) {
- return new Promise(function (resolve, reject) {
- this.accountExplorer.getItem(this.objectInformation).then(function (newData) {
- resolve(newData.data[0]);
- }, reject);
- }.bind(this));
- } else {
- return Promise.resolve(this.objectInfo);
- }
- },
- _getPropertiesInfoForDataSource: function _getPropertiesInfoForDataSource() {
- return new Promise(function (resolve, reject) {
- this.dsController.getDataSource(this.objectInformation.id).then(function (newData) {
- resolve(newData.data[0]);
- }, reject);
- }.bind(this));
- },
- _getPropertiesInfoForTenant: function _getPropertiesInfoForTenant() {
- return new Promise(function (resolve, reject) {
- this.tenantsController.getTenant(this.objectInformation.tenantID).then(function (tenant) {
- resolve(tenant.data[0]);
- }, reject);
- }.bind(this));
- },
- // visualizations id saved to CM defaultName field.
- // visualizations name saved to CM defaultScreenTip field.
- _getPropertiesInfoForvisualization: function _getPropertiesInfoForvisualization() {
- return this.glassContext.getCoreSvc('.Ajax').ajax({
- dataType: 'json',
- type: 'GET',
- url: 'v1/objects/' + encodeURIComponent(this.objectInformation.id) + '?fields=defaultScreenTip,disabled,hidden,permissions,creationTime,owner.defaultName,hidden,disabled,tenantID,defaultDescription,email,searchPath,ancestors,format,locale,timeZoneID,givenName,surname'
- }).then(function (resp) {
- resp.data.data[0].defaultName = resp.data.data[0].defaultScreenTip;
- return resp.data.data[0];
- }).catch(function (err) {
- this.logger.error(err);
- }.bind(this));
- },
- _getPropertiesInfoCM: function _getPropertiesInfoCM() {
- return this.glassContext.getCoreSvc('.Ajax').ajax({
- dataType: 'json',
- type: 'GET',
- url: 'v1/objects/' + encodeURIComponent(this.objectInformation.id) + '?fields=defaultName,disabled,hidden,permissions,creationTime,owner.defaultName,hidden,disabled,tenantID,defaultDescription,email,searchPath,ancestors,format,locale,timeZoneID,givenName,surname'
- }).then(function (resp) {
- return resp.data.data[0];
- }).catch(function (err) {
- this.logger.error(err);
- }.bind(this));
- },
- _getPropertiesInfoForCapability: function _getPropertiesInfoForCapability() {
- return this.glassContext.getCoreSvc('.Ajax').ajax({
- dataType: 'json',
- type: 'GET',
- url: 'v1/objects/' + encodeURIComponent(this.objectInformation.id) + '?fields=ancestors,disabled,hidden,permissions,creationTime,owner.defaultName,defaultDescription,parent,defaultName,userCapability,policies,hasChildren,searchPath'
- }).then(function (resp) {
- return resp.data.data[0];
- }).catch(function (err) {
- this.logger.error(err);
- }.bind(this));
- },
- _getPropertiesInfoByType: function _getPropertiesInfoByType() {
- var dfd;
- switch (this.type) {
- case 'account':
- dfd = this._getPropertiesInfoForAccount();
- break;
- case 'role':
- case 'group':
- case 'namespace':
- case 'namespaceFolder':
- dfd = this._getPropertiesInfoForGroupRoleFolderNS();
- break;
- case 'dataSource':
- dfd = this._getPropertiesInfoForDataSource();
- break;
- case 'connection':
- dfd = this._getPropertiesInfoForConnection();
- break;
- case 'tenant':
- dfd = this._getPropertiesInfoForTenant();
- break;
- case 'visualization':
- dfd = this._getPropertiesInfoForvisualization();
- break;
- case 'contact':
- case 'distributionList':
- dfd = this._getPropertiesInfoCM();
- break;
- case 'securedFeature':
- case 'securedFunction':
- case 'productCapability':
- dfd = this._getPropertiesInfoForCapability();
- break;
- default:
- dfd = Promise.resolve(this.objectInfo);
- }
- return dfd;
- },
- _getPropertiesInfo: function _getPropertiesInfo() {
- return this._getPropertiesInfoByType().then(function (anObj) {
- this.objectInformation = anObj;
- }.bind(this));
- },
- _isExternalNS: function _isExternalNS() {
- var allowed = ['CAMID(":', 'CAMID("CognosEx:'];
- var isAllowed = _.find(allowed, function (aKey) {
- return this.objectInfo.searchPath.indexOf(aKey) >= 0;
- }.bind(this));
- return this.objectInfo && this.objectInfo.searchPath && !isAllowed;
- },
- _getFileType: function _getFileType() {
- var objectType = this.objectInformation.type;
- if (objectType) {
- return StringResource.get('type_' + objectType.toLowerCase());
- } else {
- return StringResource.get('unknown');
- }
- },
- _isAnonymous: function _isAnonymous(objectInformation) {
- if (objectInformation) {
- return objectInformation.searchPath.indexOf('CAMID("::Anonymous') >= 0;
- } else {
- return false;
- }
- },
- _getSvgIcon: function _getSvgIcon(objInfo) {
- var icon = PropertiesPageView.inherited('_getSvgIcon', this, arguments);
- if (icon === null) {
- if (this._objectIcons[objInfo.type]) {
- icon = this._objectIcons[objInfo.type].icon;
- } else {
- return '#common-question-mark';
- }
- }
- return icon;
- },
- _getSvgTooltip: function _getSvgTooltip(objInfo) {
- var tooltip = PropertiesPageView.inherited('_getSvgTooltip', this, arguments);
- if (_.isUndefined(tooltip)) {
- tooltip = this._objectIcons[objInfo.type].tooltip;
- }
- return tooltip;
- },
- _getTabItems: function _getTabItems() {
- var tabs = this._oPropertiesPageViewDefintions.tabs;
- var currentObjTabs = tabs[this._getObjectType()] || tabs['unknown'] || [];
- return _.map(_.filter(currentObjTabs, this._isTabVisible.bind(this)), this._getTabSpec.bind(this));
- },
- _getTabSpec: function _getTabSpec(tab) {
- return {
- 'name': StringResource.get(tab.name),
- 'module': tab.module,
- 'objectInfo': this.objectInformation,
- 'glassContext': this.glassContext,
- 'slideout': this.slideout,
- 'accountExplorer': this.accountExplorer,
- 'selected': this.selectedTabModule === tab.module,
- 'connectionResolver': this.connectionResolver
- };
- },
- _isTabVisible: function _isTabVisible(tab) {
- var isVisible = true;
- if (this._isDevOnlyTab(tab) || !this._tabHasCapabilities(tab) || !this._tabHasPermissions(tab) || this._isExternalNameSpaceRole(tab) || this._dataSourceConnShowSchemasCubes(tab) || this._isCQdataServConn(tab) || this._isOIDCNameSpaceGroup(tab)) {
- isVisible = false;
- }
- return isVisible;
- },
- _dataSourceConnShowSchemasCubes: function _dataSourceConnShowSchemasCubes(tab) {
- var hideTab = false;
- if (this._getObjectType() === 'dataSourceConnection' && tab.connectionClass) {
- hideTab = tab.connectionClass !== ConnectionUtils.getConnectionClass(this.objectInformation);
- }
- return hideTab;
- },
- _isCQdataServConn: function _isCQdataServConn(tab) {
- var hideTab = false;
- if (this.objectInformation.isNew) {
- return hideTab;
- }
- if (this._getObjectType() === 'dataSourceConnection' && tab && (tab.name === 'connection_details' || tab.name === 'schemas')) {
- var connectionStringParseResult = ConnectionUtils.parseConnectionString(this.objectInformation);
- if (!connectionStringParseResult.metadata) {
- hideTab = true;
- }
- }
- return hideTab;
- },
- _isOIDCNameSpaceGroup: function _isOIDCNameSpaceGroup(tab) {
- return tab.name === 'members' && this.type === 'group' && this.accountExplorer && this.accountExplorer.isOidcNamespace && this.accountExplorer.isOidcNamespace();
- },
- _isExternalNameSpaceRole: function _isExternalNameSpaceRole(tab) {
- return tab.name === 'customization' && this.type === 'role' && this.accountExplorer && !this.accountExplorer.isBuiltinNamespace();
- },
- _tabHasPermissions: function _tabHasPermissions(tab) {
- return !tab.requiredPermissions || UIHelper.hasPermissions(this.objectInformation.permissions, tab.requiredPermissions);
- },
- _isDevOnlyTab: function _isDevOnlyTab(tab) {
- return !this.glassContext.isDevInstall() && tab.devMode === true;
- },
- _tabHasCapabilities: function _tabHasCapabilities(tab) {
- var hasRequiredCapabilities = true;
- if (tab.requiredCapabilities) {
- hasRequiredCapabilities = _.find(tab.requiredCapabilities, function (capability) {
- return this.glassContext.hasCapability(capability) === false;
- }.bind(this)) === undefined;
- }
- return hasRequiredCapabilities;
- }
- });
- return PropertiesPageView;
- });
|