12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544 |
- "use strict";
- /**
- * Licensed Materials - Property of IBM
- * IBM Cognos Products: Manage
- * Copyright IBM Corp. 2015, 2021
- * US Government Users Restricted Rights
- * Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
- */
- define(['q', 'rave2', 'bi/admin/common/slideout/BasePane', 'bi/admin/common/ui/MagicWand', 'bi/admin/status/services/ApiSvc', 'bi/admin/common/visualizations/VizBar', 'bi/admin/common/visualizations/VizStackedBar', 'bi/commons/ui/widgets/DatePicker', 'bi/admin/common/ui/listview/ListView', 'bi/admin/status/services/ActivitiesAdaptor', 'bi/admin/common/utils/CapabilityHelper', 'bi/admin/nls/StringResource', 'text!bi/admin/status/templates/ActivitiesPaneTemplate.html', 'moment-timezone', 'bi/commons/utils/Utils', 'bacontentnav/utils/ContentStoreObject', 'react', 'react-dom', 'ba-react-admin/ba-react-admin.min', 'underscore', 'doT', 'text!bi/admin/status/templates/updateSchedules.xml', 'bi/content_apps/utils/C10Utils'], function (Q, rave, BasePane, MagicWand, Api, VizBar, VizStackedBar, DateNavigator, ListView, ActivitiesAdaptor, CapabilityHelper, StringResource, paneTemplate, moment, Utils, ContentStoreObject, React, ReactDOM, AdminReact, _, doT, UpdateSchedulesRequestTemplate, C10Utils) {
- //NOSONAR: needed for amd
- function buildContextMenuItemListFnMap() {
- var map = {};
- function getStatus(data) {
- var status = data[0].statusValue && data[0].statusValue.toLocaleLowerCase();
- return status || '';
- }
- map[Api.ActivityType.SCHEDULE] = function (data) {
- var isSingleSelect = data.length === 1;
- var itemList = ['useMyCredentials'];
- var status = getStatus(data);
- var isSubscription = data[0].isSubscription;
- if (isSingleSelect) {
- itemList.push('runOnce', 'versions');
- if (CapabilityHelper.checkCapabilities('canUseSchedulingPriority', this.glassContext)) {
- itemList.push('setPriority');
- }
- }
- if (!isSubscription) {
- itemList.push('removeSchedule', status === 'enabled' ? 'disableSchedule' : 'enableSchedule');
- if (isSingleSelect) {
- itemList.push('update_schedule', 'setProperties');
- }
- } else {
- itemList.push('removeSubscription', status === 'enabled' ? 'disableSubscription' : 'enableSubscription');
- if (isSingleSelect) {
- itemList.push('update_subscription');
- }
- }
- return itemList;
- };
- map[Api.ActivityType.UPCOMING] = function (data) {
- var isSingleSelect = data.length === 1;
- var status = getStatus(data);
- var itemList = [status === 'suspended' ? 'release' : 'suspend'];
- if (isSingleSelect && CapabilityHelper.checkCapabilities('canUseSchedulingPriority', this.glassContext)) {
- itemList.push('setPriority');
- }
- if (status !== 'cancelled') {
- itemList.push('activity-cancel');
- }
- return itemList;
- };
- map[Api.ActivityType.CURRENT] = function (data) {
- var isSingleSelect = data.length === 1;
- var status = getStatus(data);
- var itemList = [status === 'suspended' ? 'release' : 'suspend'];
- if (isSingleSelect) {
- itemList.push('versions');
- if (CapabilityHelper.checkCapabilities('canUseSchedulingPriority', this.glassContext)) {
- itemList.push('setPriority');
- }
- }
- if (status !== 'cancelled') {
- itemList.push('activity-cancel');
- }
- return itemList;
- };
- map[Api.ActivityType.PAST] = function (data) {
- return ['versions', 'runDetail', 'runOnce'];
- };
- return map;
- }
- var ActivitiesPane = BasePane.extend({
- chartMode: 'stacked',
- template: null,
- activityType: Api.ActivityType.SCHEDULE,
- groupBy: Api.GroupBy.HOUR,
- filter: {},
- _contextMenuItemListFnMap: buildContextMenuItemListFnMap(),
- init: function init(options) {
- ActivitiesPane.inherited('init', this, arguments);
- $.extend(this, options);
- Api.glassContext = this.glassContext; //glassContext may not be set yet and is required by some of the bacontentnav panels (ie. VersionView)
- ContentStoreObject.setGlassContext(this.glassContext);
- var listDataAdaptor = this.listDataAdaptor = this._getNewActivitiesAdaptor({
- glassContext: this.glassContext,
- isMyActivities: this.isMyActivities,
- checkboxSelection: true
- }); //check for ajax service as not to break unit tests
- if (this.glassContext && this.glassContext.services && this.glassContext.services.ajax && !this.isMyActivities) {
- Api.getDispatcherNameMap().then(function (data) {
- listDataAdaptor.dispatcherNameMap = data;
- });
- }
- },
- _getNewActivitiesAdaptor: function _getNewActivitiesAdaptor(options) {
- return new ActivitiesAdaptor(options);
- },
- onToggleMenuChanged: function onToggleMenuChanged(name, value) {
- if (name === 'activityType') {
- if (value === Api.ActivityType.CURRENT) {
- var $background = this.$body.find('#background input');
- var checked = $background.is(':checked');
- value = checked ? Api.ActivityType.CURRENT : Api.ActivityType.INTERACTIVE;
- }
- this._changeActivityType(value);
- this.$el.find('.menu-label').parent().focus();
- }
- },
- _openFilterPane: function _openFilterPane() {
- var valueBag = {
- status: Api.Status[this.activityType],
- priority: Api.SchedulePriorities,
- objectClass: Api.ScheduleObjectClasses
- };
- this._openSlideout({
- width: '330px',
- content: {
- filter: this.filter,
- valueBag: valueBag,
- isMyActivities: this.isMyActivities,
- activityType: this.activityType,
- parentView: this,
- module: 'bi/admin/status/slideout/FilterPane'
- }
- });
- },
- onHeaderButtonClicked: function onHeaderButtonClicked(id) {
- ActivitiesPane.inherited('onHeaderButtonClicked', this, arguments);
- if (id === 'filterButton') {
- if (this.slideout && this.slideout.child) {
- this.slideout.child.hide();
- } else {
- this._openFilterPane();
- }
- }
- },
- onHeaderChecked: function onHeaderChecked(id, checked) {
- if (id === 'chartMode') {
- var chartMode = checked ? 'stacked' : 'grouped';
- if (this.vizChart) {
- this.vizChart.changeMode(chartMode);
- }
- this.chartMode = chartMode;
- } else {
- if (id === 'background') {
- this._changeActivityType(checked ? Api.ActivityType.CURRENT : Api.ActivityType.INTERACTIVE);
- }
- }
- },
- _getNewDateNavigator: function _getNewDateNavigator(options) {
- return new DateNavigator(options);
- },
- renderBody: function renderBody($body) {
- $body.html(paneTemplate);
- var deferred = Q.defer();
- this._initCheckboxSelection($body);
- var $header = $body.find('.bi-admin-statuspane-header');
- var $leading = $header.find('.bi-admin-leading');
- this.$viewType = $('<div id="type_toggle" class="toggle-filter" role="menubar">');
- $leading.append(this.$viewType);
- var mainTypes = _.clone(Api.ActivityType);
- delete mainTypes.INTERACTIVE;
- this.renderToggleMenu(this.$viewType, 'activityType', mainTypes, this.activityType, true);
- this.$viewType.find('.dropdown-menu').addClass('activityDropDownFilter');
- var $spans = this.$viewType.find('span');
- $spans.parent().css('padding-bottom', '0px');
- var $center = $header.find('.bi-admin-center');
- var dnElement = $('<div class="datenav-container bi-admin-toolbaritem" role="menubar">');
- $center.append(dnElement);
- this.dateNav = this._getNewDateNavigator({
- $el: $(dnElement[0]),
- timezone: this.glassContext.services.userProfile.preferences.timeZoneID,
- locale: this.glassContext.services.userProfile.preferences.contentLocale,
- attributes: {
- inputFieldDate: new Date()
- },
- onChange: this._renderActivities.bind(this, true)
- });
- this.dateNav.render();
- $(this.dateNav.el).find('#datepicker').attr('aria-label', StringResource.get('datePicker'));
- var $buttonBar = $header.find('div.bi-admin-trailing .bi-admin-buttonbar');
- var $items = $buttonBar.find('td');
- var $filterButton = this._createButton('filterButton', 'common-filter', StringResource.get('filter'), 'bi-admin-toolbaritem');
- $filterButton.css('white-space', 'nowrap');
- $filterButton.appendTo($items[2]);
- var $label = $('<span class="bi-admin-menu-label">');
- $label.text(StringResource.get('all'));
- $label.appendTo($filterButton);
- var $chartMode = this._createCheckbox('chartMode', StringResource.get('stacked'), this.chartMode === 'stacked');
- $chartMode.appendTo($items[1]);
- var $background = this._createCheckbox('background', StringResource.get('background'), true);
- $background.appendTo($items[0]);
- MagicWand.checkBox($buttonBar);
- var $filterBar = $body.find('.bi-admin-filterbar');
- MagicWand.searchInput($filterBar).then(function (widgets) {
- if (widgets.length === 1) {
- this._filterInput = widgets[0];
- this._filterInput.options.hint = StringResource.get('findByName');
- this._filterInput.on('changed', function (e) {
- var trimmed = e.text.trim();
- if (trimmed.length > 0 || e.text === '') {
- this.listView.filter(trimmed);
- }
- }.bind(this));
- }
- }.bind(this)).then(function () {
- this._renderActivities().then(function () {
- deferred.resolve();
- }, function () {
- deferred.resolve();
- });
- }.bind(this));
- return deferred.promise;
- },
- _getDateRange: function _getDateRange() {
- var range = {};
- if (this.activityType === Api.ActivityType.UPCOMING) {
- range.minDate = new Date();
- } else {
- if (this.activityType === Api.ActivityType.PAST) {
- range.maxDate = new Date();
- }
- }
- return range;
- },
- _changeActivityType: function _changeActivityType(type) {
- if (this.activityType !== type) {
- this.activityType = type;
- if (this.filter) {
- delete this.filter.status;
- if (this.activityType === Api.ActivityType.PAST) {
- delete this.filter.priority;
- }
- }
- if (this.activityType === Api.ActivityType.UPCOMING || this.activityType === Api.ActivityType.PAST) {
- this.dateNav.setDate(new Date());
- this.dateNav.onChange(); //do not need to renderActivities in this case as the change in the date
- //will trigger a _renderActivities
- } else {
- this._renderActivities(true);
- }
- }
- },
- _getTimeFilters: function _getTimeFilters() {
- var selDate = this.dateNav.getDateObj();
- var filters = {};
- if (this.activityType === Api.ActivityType.UPCOMING || this.activityType === Api.ActivityType.PAST) {
- var timezone = this.glassContext.services.userProfile.preferences.timeZoneID;
- var locale = this.glassContext.services.userProfile.preferences.contentLocale;
- var st = moment(selDate).locale(locale).tz(timezone).startOf('day');
- var et = st.clone().endOf('day');
- filters.startTime = st.toDate();
- filters.endTime = et.toDate();
- }
- return filters;
- },
- _getAdvancedFilters: function _getAdvancedFilters(timeFilters) {
- var filters = timeFilters || this._getTimeFilters();
- if (this.filter) {
- filters = _.extend(filters, _.pick(this.filter, Api.AdvancedFilterItems));
- if (this.filter.user) {
- filters.user = this.filter.user.id;
- }
- if (this.filter.owner) {
- filters.owner = this.filter.owner.id;
- }
- if (this.filter.scheduleType) {
- filters.scheduleType = this.filter.scheduleType;
- }
- }
- return filters;
- },
- _renderActivities: function _renderActivities(forceCreate) {
- if (this.listView) {
- this.listView._clearRows(true);
- }
- var deferred = Q.defer();
- this._updateUIState();
- var timeFilters = this._getTimeFilters();
- var filters = this._getAdvancedFilters(timeFilters);
- this._renderActivityList(filters, forceCreate).then(function () {
- if (this._isIE()) {
- this._renderChart(this.listDataAdaptor.summary);
- this._updateTableHeight();
- } else {
- this._fixTableBodyHeight();
- this._renderChart(this.listDataAdaptor.summary);
- }
- deferred.resolve();
- }.bind(this));
- return deferred.promise;
- },
- _updateUIState: function _updateUIState() {
- var $chartMode = this.$body.find('#chartMode');
- switch (this.activityType) {
- case Api.ActivityType.SCHEDULE:
- case Api.ActivityType.CURRENT:
- case Api.ActivityType.INTERACTIVE:
- $chartMode.hide();
- break;
- case Api.ActivityType.UPCOMING:
- case Api.ActivityType.PAST:
- $chartMode.show();
- break;
- default:
- }
- var $background = this.$body.find('#background');
- if (!this.isMyActivities && (this.activityType === Api.ActivityType.CURRENT || this.activityType === Api.ActivityType.INTERACTIVE)) {
- $background.show();
- this._hideDatePicker();
- } else {
- $background.hide();
- }
- if (this.activityType === Api.ActivityType.UPCOMING || this.activityType === Api.ActivityType.PAST) {
- this._showDatePicker();
- } else {
- this._hideDatePicker();
- }
- this._renderFilterSummary(this.filter);
- },
- _updateFilterButtonState: function _updateFilterButtonState(filter, clear) {
- var $filterButton = this.$body.find('#filterButton');
- var $filterLabel = $filterButton.find('span');
- if (clear && this.filter && !this._isFilterEmpty(filter)) {
- $filterButton.addClass('bi-admin-state-info');
- $filterButton.attr('aria-pressed', 'true');
- $filterLabel.text(StringResource.get('applied'));
- } else {
- $filterButton.removeClass('bi-admin-state-info');
- $filterButton.removeAttr('aria-pressed');
- $filterLabel.text(StringResource.get('all'));
- }
- if (this.activityType === Api.ActivityType.INTERACTIVE) {
- $filterButton.hide();
- } else {
- $filterButton.show();
- }
- },
- // filter is initialized as an object with 1 property 'user' i.e. { user: 'xyz' } so an empty filter either looks like this or {}
- _isFilterEmpty: function _isFilterEmpty(filter) {
- var keys = _.keys(filter);
- if (this.isMyActivities) {
- return keys.length === 1 && keys[0] === 'user';
- }
- return keys.length === 0;
- },
- _renderFilterSummary: function _renderFilterSummary(filter) {
- var buffer = [];
- var validFilter = false;
- var key;
- if (this._checkValidFilter(filter)) {
- buffer = this._buildFilterText(filter);
- validFilter = true;
- }
- this._updateFilterButtonState(filter, validFilter);
- $('.filter-summary').html(buffer.join(''));
- if (buffer.length > 0) {
- Utils.setIcon($('.filter-summary'), 'common-filter');
- }
- },
- _buildFilterText: function _buildFilterText(filter) {
- var buffer = [];
- var key;
- for (key in filter) {
- var valueText = filter[key];
- if (!(this.isMyActivities && (key === 'owner' || key === 'user'))) {
- if (key === 'owner' || key === 'user') {
- valueText = _.escape(filter[key].defaultName);
- }
- buffer.push('<span title="' + StringResource.get(key) + ': ' + StringResource.get(valueText) + '" class="filter-summary-item"><b>' + StringResource.get(key) + ':</b> ' + StringResource.get(valueText) + '</span>');
- }
- }
- return buffer;
- },
- _checkValidFilter: function _checkValidFilter(filter) {
- var retVal = true;
- if (this.activityType !== Api.ActivityType.SCHEDULE && filter.scheduleType && filter.scheduleType !== '') {
- retVal = false;
- } //TODO more conditions can likely go here.
- return retVal;
- },
- _hideDatePicker: function _hideDatePicker() {
- this.$el.find('.bi_datepicker_div').hide();
- },
- _showDatePicker: function _showDatePicker() {
- this.$el.find('.bi_datepicker_div').show();
- },
- _renderChart: function _renderChart(result) {
- switch (this.activityType) {
- case Api.ActivityType.SCHEDULE:
- case Api.ActivityType.CURRENT:
- case Api.ActivityType.INTERACTIVE:
- this._renderBarChart(result);
- break;
- case Api.ActivityType.UPCOMING:
- case Api.ActivityType.PAST:
- this._renderStackedBarChart(result);
- break;
- default:
- }
- },
- _getNewVizBar: function _getNewVizBar(options) {
- return new VizBar(options);
- },
- _renderBarChart: function _renderBarChart(result) {
- var $chart = this.$el.find('#chart');
- var width = this.$el.width();
- $chart.removeClass().addClass('bi-admin-chart bi-admin-barchart bi-admin-chart-' + this.activityType);
- $chart.attr('role', 'presentation');
- var chartData = this._prepareBarChartData(result);
- this.vizChart = this._getNewVizBar({
- el: $chart[0],
- data: chartData,
- parentWidth: width
- });
- },
- _prepareBarChartData: function _prepareBarChartData(result) {
- var chartData = _.map(result.data, function (row) {
- return {
- name: row.name,
- value: row.total * 1
- };
- });
- return chartData;
- },
- _renderStackedBarChart: function _renderStackedBarChart(result) {
- var $chart = this.$el.find('#chart');
- $chart.removeClass().addClass('bi-admin-chart bi-admin-stackedbarchart ' + this.activityType);
- $chart.attr('role', 'presentation');
- var chartData = this._prepareStackedBarChartData(result);
- this.vizChart = new VizStackedBar({
- el: $chart[0],
- data: chartData,
- chartMode: this.chartMode
- });
- },
- _findGroupValue: function _findGroupValue(items, x) {
- var result = _.find(items, function (item) {
- var fixedDt = item.use;
- if (fixedDt.indexOf('Z') < 0) {
- fixedDt += 'Z';
- }
- var timezone = this.glassContext.services.userProfile.preferences.timeZoneID;
- var locale = this.glassContext.services.userProfile.preferences.contentLocale;
- var hour = moment(fixedDt).locale(locale).tz(timezone).hour();
- return hour === x;
- }.bind(this));
- return result ? result.display * 1 : 0;
- },
- _createLayer: function _createLayer(items) {
- var range = rave.range(24);
- var layer = _.map(range, function (x) {
- return {
- x: x,
- y: this._findGroupValue(items, x)
- };
- }.bind(this));
- return layer;
- },
- _prepareStackedBarChartData: function _prepareStackedBarChartData(result) {
- var chartData = [];
- if (this.activityType !== Api.ActivityType.INTERACTIVE) {
- chartData = _.map(result.data, function (row) {
- return {
- name: row.name,
- total: row.total,
- layer: this._createLayer(row.value),
- legendName: this._getStackedBarCharLegendName(row.name)
- };
- }.bind(this));
- }
- return chartData;
- },
- _getStackedBarCharLegendName: function _getStackedBarCharLegendName(name) {
- switch (this.activityType) {
- case Api.ActivityType.UPCOMING:
- return name;
- case Api.ActivityType.PAST:
- switch (name) {
- case 'succeeded':
- return 'succeeded';
- case 'cancelled':
- return 'cancelled';
- case 'failed':
- return 'failedActivity';
- case 'terminated':
- return 'terminated';
- case 'purged':
- return 'purged';
- default:
- }
- break;
- default:
- }
- },
- _getNewListView: function _getNewListView(options) {
- return new ListView(options);
- },
- _isIE: function _isIE() {
- return this._isIE11orLess() || this._isEdge() ? true : false;
- },
- _isIE11orLess: function _isIE11orLess() {
- var navigatorStr = navigator.userAgent;
- return navigatorStr.indexOf('Trident/') > 0 ? true : false;
- },
- _isEdge: function _isEdge() {
- var navigatorStr = navigator.userAgent;
- return navigatorStr.indexOf('Edge/') > 0 ? true : false;
- },
- _fixTableBodyHeight: function _fixTableBodyHeight() {
- if (!this.isMyActivities) {
- this.$el.find('div.dataTables_scrollBody').css('overflow', 'hidden');
- this.$el.find('div.ca-listContainer').css('overflow', 'auto');
- this.$el.find('div.dataTables_scrollBody').height('100%');
- }
- },
- _updateTableHeight: function _updateTableHeight() {
- var contentHeight = this.$el.find('div.bi-admin-pane-body').height(); // this is height of pane
- var topHeight = this.$el.find('div.bi-admin-pane-header').height() + this.$el.find('div.bi-admin-layout-gap').height() + this.$el.find('div.bi-admin-chartbar').height() + this.$el.find('div.bi-admin-filterbar').height(); // this is height of top elements
- var totalHeight = contentHeight - topHeight - 90;
- if (totalHeight < 10) {
- this.$el.find('div.dataTables_scrollBody').height(50);
- } else {
- this.$el.find('div.dataTables_scrollBody').height(contentHeight - topHeight - 50);
- }
- this.$el.find('div.dataTables_scrollBody .bi-admin-table-list').width('90%');
- this.$el.find('div.dataTables_scrollBody .bi-admin-activities').css({
- 'style': '-ms-overflow-style: scrollbar; -ms-overflow-y: auto;'
- });
- },
- _renderActivityList: function _renderActivityList(filters, forceCreate) {
- this._hideShowSelectionFooter(this.$el);
- forceCreate = forceCreate || !this.listView;
- this.listDataAdaptor.setFilters(filters);
- if (forceCreate) {
- var elList = this.$el.find('#list');
- elList.empty();
- this.listDataAdaptor.activityType = this.activityType;
- this.listView = this._getNewListView({
- el: elList,
- dataAdaptor: this.listDataAdaptor,
- glassContext: this.glassContext,
- accessibleLabel: StringResource.get('activities'),
- contentView: this,
- contextMenuId: 'com.ibm.bi.admin.scheduleMenu',
- onSelectionChange: this._onSelectionChange.bind(this)
- });
- window.onresize = this._redrawListView.bind(this);
- this.listView.contextMenuCallback = this._contextMenuHandler.bind(this);
- var $con = $(this.$el.find('.bi-admin-activities.pageView'));
- $con.addClass('bi-admin-activities-webkit-invisible-scrollbar');
- $con.addClass('flyoutPane');
- $con.css('width', '100%');
- return this.listView.render();
- } else {
- return this.listView.reload();
- }
- },
- _redrawListView: function _redrawListView() {
- this.listDataAdaptor.isResize = true;
- this.listView.render();
- },
- _contextMenuHandler: function _contextMenuHandler(data) {
- var args = {
- 'position': data.position,
- 'menuId': 'com.ibm.bi.admin.scheduleMenu',
- 'activeObject': {
- handler: this,
- data: data.selectedObject
- }
- };
- this.glassContext.appController.showContextMenu(args);
- },
- getReportProperties: function getReportProperties(id) {
- var options = {
- method: 'GET',
- contentType: 'application/json; charset=utf-8',
- dataType: 'json'
- };
- options.url = 'v1/search_path?searchPath=storeID%28%22' + id + '%22%29/parent::*&fields=base.type,userInterfaces,owner.id,defaultName,disabled,hidden,permissions,runInAdvancedViewer,owner.defaultName,modificationTime,canBurst,iconURI,defaultScreenTip,searchPath,owner.defaultName,modificationTime,tenantID,options';
- return this.glassContext.services.ajax.ajax(options);
- },
- _getReportInfo: function _getReportInfo(id, func) {
- this.getReportProperties(id).then(function (result) {
- func(result.data[0]);
- }.bind(this)).catch(function () {
- this._showErrorToast(StringResource.get('activityNotFound'));
- }.bind(this));
- },
- refresh: function refresh() {
- if (this.$el) {
- var runAs = this.$el.find('.bi-admin-runAsDialog');
- if (runAs && runAs[0] && !this.glassContext.isDevInstall()) {
- ReactDOM.unmountComponentAtNode(runAs[0]);
- }
- }
- this._renderActivities();
- },
- _showPropertiesPane: function _showPropertiesPane(object) {
- var content = {
- 'module': 'bi/content_apps/PropertiesPageView',
- 'glassContext': this.glassContext,
- 'objectInformation': object,
- 'parentView': this
- };
- this._openSlideout({
- 'content': content,
- 'width': '400px',
- 'enableTabLooping': true,
- 'label': StringResource.get('properties'),
- 'onHide': function onHide() {
- this.contentView.update();
- }
- });
- },
- _showVersionsPane: function _showVersionsPane(object) {
- var content = {
- 'module': 'bi/content_apps/VersionsView',
- 'glassContext': this.glassContext,
- 'objectInformation': object
- };
- this._openSlideout({
- 'content': content,
- 'width': '400px',
- 'enableTabLooping': true,
- 'label': StringResource.get('schedule_subscription_version_aria_label')
- });
- },
- _showScheduleProperties: function _showScheduleProperties(obj) {
- var content = {
- 'module': 'bi/schedule/views/SchedulesView',
- 'glassContext': this.glassContext,
- 'objectInfo': obj
- };
- this._openSlideout({
- 'content': content,
- 'width': '400px',
- 'enableTabLooping': true,
- 'label': 'Schedule'
- });
- },
- _openSlideout: function _openSlideout(opts) {
- if (this.isMyActivities) {
- opts.position = 'right';
- } else {
- opts.parent = this.slideout;
- }
- this.glassContext.appController.showSlideOut(opts);
- },
- _newRunAsReport: function _newRunAsReport(report) {
- var runAsActionView = React.createElement(AdminReact.RunAsAction, {
- StringResource: StringResource,
- glassContext: this.glassContext,
- objectInfo: report,
- slideout: this,
- runOnce: true
- });
- var runAs = this.$el.find('.bi-admin-runAsDialog');
- ReactDOM.unmountComponentAtNode(runAs[0]);
- ReactDOM.render(runAsActionView, runAs[0]);
- },
- _oldRunAsReport: function _oldRunAsReport(report, module) {
- var content = {
- 'module': module,
- 'glassContext': this.glassContext,
- 'objectInformation': report
- };
- this._openSlideout({
- 'content': content,
- 'width': '400px',
- 'enableTabLooping': true,
- 'label': StringResource.get('subscription_header_region')
- });
- },
- _runAsReport: function _runAsReport(report, module) {
- if (!this.glassContext.isDevInstall()) {
- return this._newRunAsReport(report, module);
- } else {
- return this._oldRunAsReport(report, module);
- }
- },
- _runOnce: function _runOnce(report, schedule) {
- if (schedule.name) {
- report.options = schedule.options;
- report.parameters = schedule.parameters;
- }
- var noOpts = ['jupyterNotebook', 'jobDefinition', 'agentDefinition', 'agentDefinitionView'];
- if (report.type === 'dataSet2') {
- return this._runAsReport(report, 'bi/admin/status/slideout/DSRunAsView');
- } else if (noOpts.indexOf(report.type) === -1) {
- this._runAsReport(report, 'bi/admin/status/slideout/ScheduleRunAsView');
- } else {
- return this._runAsReport(report, 'bi/content_apps/RunAsJobOptionsView');
- }
- },
- _showSubscriptionPane: function _showSubscriptionPane(report, sub) {
- var content = {
- 'module': 'bi/schedule/views/SubscriptionView',
- 'glassContext': this.glassContext,
- 'descriptor': sub
- };
- this._openSlideout({
- 'content': content,
- 'width': '400px',
- 'enableTabLooping': true,
- 'label': StringResource.get('subscription_header_region')
- });
- },
- newGetSchedule: function newGetSchedule(report) {
- return AdminReact.ScheduleAccess.readSchedule(this.glassContext, report.id);
- },
- oldGetSchedule: function oldGetSchedule(report, data) {
- var url = 'v1/reports/' + report.id + '/schedule';
- if (data[0].isSubscription) {
- url = 'v1/subscriptions/' + report.id;
- }
- var options = {
- method: 'GET',
- contentType: 'application/json; charset=utf-8',
- dataType: 'json'
- };
- options.url = url;
- return this.glassContext.services.ajax.ajax(options);
- },
- _getScheduleOptionsForReport: function _getScheduleOptionsForReport(data, func) {
- if (data[0] === 'undefined' || data[0].id === 'undefined') {
- this._showErrorToast(StringResource.get('activityNotFound'));
- return;
- }
- var isSubssc = data[0].isSubscription;
- this._getReportInfo(data[0].id, function (report) {
- var schPromise;
- if (this.glassContext.isDevInstall() || isSubssc) {
- schPromise = this.oldGetSchedule(report, data);
- } else {
- schPromise = this.newGetSchedule(report);
- }
- schPromise.then(function (scheduleData) {
- var schedule = scheduleData;
- if (scheduleData.length) {
- //variably the result from the api can either be an array with the schedule
- //in the first element or the schedule itself
- schedule = schedule[0];
- }
- if (!schedule.id) {
- func(report, schedule);
- return;
- } //Get the raw options of the schedule that will show if save to cloud was selected
- var optionsRequest = {
- method: 'GET',
- contentType: 'application/json; charset=utf-8',
- dataType: 'json',
- url: 'v1/objects/' + schedule.id + '?fields=options,parameters'
- };
- this.glassContext.services.ajax.ajax(optionsRequest).then(function (data) {
- if (this.glassContext.isDevInstall() || isSubssc) {
- _.extend(report, {
- rawOptions: data.data[0].options
- });
- } else {
- if (data.data[0].options) {
- report.options = data.data[0].options;
- }
- if (data.data[0].parameters) {
- report.parameters = data.data[0].parameters;
- }
- }
- func(report, schedule);
- }.bind(this));
- }.bind(this)).catch(function () {
- this._showErrorToast(StringResource.get('activityNotFound'));
- }.bind(this));
- }.bind(this));
- },
- onContextMenu: function onContextMenu(id, data) {
- if (this.slideout && this.slideout.child) {
- this.slideout.child.hide();
- }
- switch (id) {
- case 'activity-cancel':
- this._cancelActivity(data);
- break;
- case 'setProperties':
- this._getReportInfo(data[0].id, this._showPropertiesPane.bind(this));
- break;
- case 'runOnce':
- this._getScheduleOptionsForReport(data, this._runOnce.bind(this));
- break;
- case 'update_subscription':
- this._getScheduleOptionsForReport(data, this._showSubscriptionPane.bind(this));
- break;
- case 'update_schedule':
- this._getReportInfo(data[0].id, this._showScheduleProperties.bind(this));
- break;
- case 'versions':
- if (this.activityType === Api.ActivityType.PAST || this.activityType === Api.ActivityType.SCHEDULE) {
- this._getReportInfo(data[0].id, this._showVersionsPane.bind(this));
- } else if (this.activityType === Api.ActivityType.CURRENT) {
- this._showVersionsPane(data[0]);
- }
- break;
- case 'useMyCredentials':
- // Get credential and update schedule(s). On fail, renew credentials first, then try again.
- this._getAndUpdateCredential(data, this._renewGetAndUpdateCredential);
- break;
- case 'disableSubscription':
- case 'disableSchedule':
- this._updateScheduleStatus(data, false);
- break;
- case 'enableSubscription':
- case 'enableSchedule':
- this._updateScheduleStatus(data, true);
- break;
- case 'setPriority':
- this._openSetPriorityPane(data);
- break;
- case 'removeSchedule':
- this._removeSchedule(data);
- break;
- case 'removeSubscription':
- this._removeSubscription(data);
- break;
- case 'runDetail':
- this._getHistoryDetail(data[0]);
- break;
- case 'suspend':
- this._suspendReleaseSchedule(data, true);
- break;
- case 'release':
- this._suspendReleaseSchedule(data, false);
- break;
- case 'runHistoryJobDetails':
- this._viewRunHistoryDetails(data[0]);
- break;
- default:
- }
- },
- _viewRunHistoryDetails: function _viewRunHistoryDetails(data) {
- C10Utils.openC10MorphletWithParams('portal/history/view_executing_details.xts', this._prepareMorphletRequestForRunHistoryDetails(data));
- return true;
- },
- _prepareMorphletRequestForRunHistoryDetails: function _prepareMorphletRequestForRunHistoryDetails(data) {
- var morphletOptions = [{
- m_name: data.defaultName
- }, {
- eventID: data.eventID
- }, {
- m_class: 'jobDefinition'
- }];
- return morphletOptions;
- },
- _suspendReleaseSchedule: function _suspendReleaseSchedule(data, suspending) {
- var serviceMethod = suspending ? 'suspendSchedule' : 'releaseSchedule';
- var stringKey = suspending ? 'Suspended' : 'Released';
- var eventKey = suspending ? 'holdEvents' : 'releaseEvents';
- var fail = suspending ? StringResource.get('suspendFailed') : StringResource.get('releaseFailed');
- var eventIds = data.map(function (item) {
- return {
- eventID: item.eventID
- };
- });
- Api[serviceMethod](this.activityType, eventIds).then(function (res) {
- if (res[eventKey] == 'success') {
- var message = data.length > 1 ? StringResource.get('items' + stringKey, {
- num: data.length
- }) : StringResource.get('item' + stringKey, {
- name: data[0].defaultName
- });
- this.glassContext.appController.showToast(message, {
- type: 'success',
- timeOut: 3000
- });
- setTimeout(function () {
- this._renderActivities();
- }.bind(this), 500);
- } else {
- this._showErrorToast(fail);
- }
- }.bind(this), this._showErrorToast.bind(this, fail));
- },
- _showErrorToast: function _showErrorToast(msg) {
- this.glassContext.appController.showToast(msg, {
- type: 'error',
- timeOut: 3000
- });
- setTimeout(function () {
- this._renderActivities();
- }.bind(this), 500);
- },
- _cancelActivity: function _cancelActivity(data) {
- var eventIds = data.map(function (item) {
- return {
- eventID: item.eventID
- };
- });
- var fail = StringResource.get('cancelFailed');
- Api.cancelActivity(this.activityType, eventIds).then(function (res) {
- if (res.cancelEvents == 'success') {
- var message = data.length > 1 ? StringResource.get('itemsCancelled', {
- num: data.length
- }) : StringResource.get('itemCancelled', {
- name: data[0].defaultName
- });
- this.glassContext.appController.showToast(message, {
- type: 'success',
- timeOut: 3000
- });
- setTimeout(function () {
- this._renderActivities();
- }.bind(this), 500);
- } else {
- this._showErrorToast(fail);
- }
- }.bind(this), this._showErrorToast.bind(this, fail));
- },
- _getHistoryDetail: function _getHistoryDetail(data) {
- var options = {
- method: 'GET',
- contentType: 'application/json; charset=utf-8',
- dataType: 'json'
- };
- options.url = 'v1/objects/' + data.id + '?fields=status,actualExecutionTime,actualCompletionTime,requestedExecutionTime';
- var historyObj;
- var reportObj;
- return Promise.try(function () {
- return this.glassContext.services.ajax.ajax(options);
- }.bind(this)).then(function (historyRes) {
- historyObj = historyRes;
- return this.getReportProperties(data.id);
- }.bind(this)).then(function (reportResult) {
- reportObj = reportResult;
- options.url = 'v1/objects/' + data.id + '/history_details';
- return this.glassContext.services.ajax.ajax(options);
- }.bind(this)).then(function (outputObj) {
- this._showRunDetailView(outputObj.data, historyObj.data[0], reportObj.data[0]);
- }.bind(this));
- },
- _showRunDetailView: function _showRunDetailView(output, historyInfo, report) {
- var content = {
- module: 'bi/content_apps/VersionsDetailsView',
- parentView: this,
- objectInfo: report,
- historyInfo: historyInfo,
- detailsInfo: output,
- glassContext: this.glassContext
- };
- this._openSlideout({
- 'content': content,
- 'width': '400px',
- 'enableTabLooping': true,
- 'label': 'Run details'
- });
- },
- isContextMenuItemVisible: function isContextMenuItemVisible(itemId, data) {
- var visible = true;
- if (data.length > 1) {
- var isShowStatus = true;
- _.each(data, function (item) {
- if (data[0].statusValue !== item.statusValue) {
- isShowStatus = false;
- }
- }.bind(this));
- visible = this._contextMenuItemVisibleHelper(itemId, data);
- if ((itemId === 'disableSchedule' || itemId === 'enableSchedule' || itemId === 'disableSubscription' || itemId === 'enableSubscription') && !isShowStatus) {
- visible = false;
- }
- } else if (this.activityType === Api.ActivityType.SCHEDULE) {
- if (itemId === 'runDetail' || itemId === 'runHistoryJobDetails' || itemId === 'schedule') {
- visible = false;
- } else if (itemId === 'runOnce') {
- visible = true;
- } else if (itemId === 'activity-cancel') {
- visible = false;
- } else {
- visible = this._contextMenuItemVisibleHelper(itemId, data);
- }
- } else if (this.activityType === Api.ActivityType.PAST) {
- if (data[0].type === 'jupyterNotebook') {
- visible = itemId === 'runDetail' || itemId === 'runOnce';
- } else {
- visible = itemId === 'versions' || itemId === 'runDetail' || itemId === 'runOnce';
- }
- } else if (this.activityType === Api.ActivityType.UPCOMING) {
- if (itemId === 'suspend') {
- visible = data[0].statusValue.toLocaleLowerCase() === 'scheduled';
- } else if (itemId === 'release') {
- visible = data[0].statusValue.toLocaleLowerCase() === 'suspended';
- } else if (itemId === 'activity-cancel') {
- visible = data[0].statusValue.toLocaleLowerCase() !== 'cancelled';
- } else {
- visible = false;
- }
- } else if (this.activityType === Api.ActivityType.CURRENT) {
- if (itemId === 'suspend') {
- visible = data[0].statusValue.toLocaleLowerCase() === 'executing';
- } else if (itemId === 'release') {
- visible = data[0].statusValue.toLocaleLowerCase() === 'suspended';
- } else if (itemId === 'activity-cancel') {
- visible = data[0].statusValue.toLocaleLowerCase() !== 'cancelled';
- } else if (itemId === 'runHistoryJobDetails') {
- visible = data[0].type === 'jobDefinition';
- } else {
- visible = false;
- }
- }
- return visible;
- },
- _contextMenuItemVisibleHelper: function _contextMenuItemVisibleHelper(itemId, data) {
- var invisible = false;
- if (data[0].isSubscription) {
- invisible = invisible || itemId === 'disableSchedule';
- invisible = invisible || itemId === 'enableSchedule';
- invisible = invisible || itemId === 'disableSubscription' && data[0].statusValue.toLocaleLowerCase() === 'disabled';
- invisible = invisible || itemId === 'enableSubscription' && data[0].statusValue.toLocaleLowerCase() === 'enabled';
- } else {
- invisible = invisible || itemId === 'disableSubscription';
- invisible = invisible || itemId === 'enableSubscription';
- invisible = invisible || itemId === 'disableSchedule' && data[0].statusValue.toLocaleLowerCase() === 'disabled';
- invisible = invisible || itemId === 'enableSchedule' && data[0].statusValue.toLocaleLowerCase() === 'enabled';
- }
- if (data[0].type === 'jupyterNotebook') {
- invisible = invisible || itemId === 'versions';
- }
- invisible = invisible || itemId === 'setPriority' && !CapabilityHelper.checkCapabilities('canUseSchedulingPriority', this.glassContext);
- invisible = invisible || itemId === 'runOnce';
- invisible = invisible || itemId === 'setProperties' && data[0].isSubscription;
- invisible = invisible || itemId === 'update_schedule' && data[0].isSubscription;
- invisible = invisible || itemId === 'update_subscription' && !data[0].isSubscription;
- invisible = invisible || itemId === 'removeSubscription' && !data[0].isSubscription;
- invisible = invisible || itemId === 'removeSchedule' && data[0].isSubscription;
- invisible = invisible || itemId === 'useMyCredentials' && this.isMyActivities;
- invisible = invisible || itemId === 'suspend';
- invisible = invisible || itemId === 'release';
- invisible = invisible || itemId === 'runDetail' && this.activityType === Api.ActivityType.SCHEDULE;
- invisible = invisible || itemId === 'activity-cancel' && !(this.activityType === Api.ActivityType.CURRENT || this.activityType === Api.ActivityType.UPCOMING);
- return !invisible;
- },
- _openSetPriorityPane: function _openSetPriorityPane(data) {
- var self = this;
- var opts = {
- width: '200px',
- onHide: function onHide() {
- if (self.setPriorityPane && self.setPriorityPane.contentView && self.setPriorityPane.contentView.onHide) {
- self.setPriorityPane.contentView.onHide();
- }
- },
- content: {
- parentView: self,
- schedule: data,
- module: 'bi/admin/status/slideout/SetPriorityPane'
- }
- };
- if (this.slideout) {
- opts.parent = this.slideout;
- } else {
- opts.position = 'right';
- }
- this.setPriorityPane = this.glassContext.appController.showSlideOut(opts);
- },
- _getAndUpdateCredential: function _getAndUpdateCredential(data, onFail) {
- return Api.getCredential().then(function (credentialResult) {
- if (this._isValidCredentialResult(credentialResult)) {
- this._updateScheduleCredentials(data, credentialResult.data);
- } else {
- onFail.bind(this, data)();
- }
- }.bind(this)).fail(function () {
- onFail.bind(this, data)();
- }.bind(this));
- },
- _renewGetAndUpdateCredential: function _renewGetAndUpdateCredential(data) {
- return Api.renewCredential().done(function () {
- // Get and update user credential and then update schedule(s). On fail, renewing credential didn't work, show error.
- this._getAndUpdateCredential(data, this._showCredentialError);
- }.bind(this)).fail(function () {
- this._showCredentialError();
- }.bind(this));
- },
- _showCredentialError: function _showCredentialError() {
- this._showErrorToast(StringResource.get('internalErrorMsg'));
- },
- _isValidCredentialResult: function _isValidCredentialResult(credentialResults) {
- return credentialResults && credentialResults.data && credentialResults.data.searchPath && credentialResults.data.type && credentialResults.data.type === 'credential';
- },
- _updateScheduleCredentials: function _updateScheduleCredentials(data, credential) {
- var selectedNum = data.length;
- if (data.length > 1) {
- var aPromises = [];
- _.each(data, function (item) {
- var innerDeferred = Q.defer();
- Api.updateScheduleCredentials(item.id, credential).done(function () {
- innerDeferred.resolve();
- }.bind(this));
- aPromises.push(innerDeferred.promise);
- });
- return Q.all(aPromises).then(function () {
- var sText = StringResource.get('multiCredentialsUpdateSuccessful', {
- 'num': selectedNum
- });
- this.glassContext.appController.showToast(sText, {
- type: 'success',
- timeOut: 3000
- });
- setTimeout(function () {
- this._renderActivities();
- }.bind(this), 500);
- }.bind(this));
- } else {
- return Api.updateScheduleCredentials(data[0].id, credential).done(function () {
- this.glassContext.appController.showToast(StringResource.get('credentialsUpdateSuccessful'), {
- type: 'success',
- timeOut: 3000
- });
- setTimeout(function () {
- this._renderActivities();
- }.bind(this), 500);
- }.bind(this));
- }
- },
- _updateScheduleStatus: function _updateScheduleStatus(data, status) {
- var selectedNum = data.length;
- if (data.length > 1) {
- var aPromises = [];
- _.each(data, function (item) {
- var innerDeferred = Q.defer();
- Api.updateScheduleStatus(item.id, status).done(function () {
- innerDeferred.resolve();
- }.bind(this));
- aPromises.push(innerDeferred.promise);
- });
- Q.all(aPromises).then(function (results) {
- var sText = StringResource.get('multiScheduleStatusUpdateSuccessful', {
- 'num': selectedNum
- });
- this.glassContext.appController.showToast(sText, {
- type: 'success'
- });
- setTimeout(function () {
- this._renderActivities(true);
- }.bind(this), 500);
- return Promise.resolve(results);
- }.bind(this));
- } else {
- var scheduleId = data[0].id;
- Api.updateScheduleStatus(scheduleId, status).done(function () {
- this.glassContext.appController.showToast(StringResource.get('scheduleStatusUpdateSuccessful'), {
- type: 'success',
- timeOut: 3000
- });
- setTimeout(function () {
- this._renderActivities(true);
- }.bind(this), 500);
- }.bind(this));
- }
- },
- _removeSubscription: function _removeSubscription(data) {
- function getOptions(id) {
- return {
- method: 'DELETE',
- contentType: 'application/json; charset=utf-8',
- dataType: 'json',
- url: 'v1/subscriptions/' + id
- };
- }
- var deleteSchedule = function deleteSchedule(item) {
- return Promise.resolve(Api.deleteSchedule(item.id));
- };
- var deleteSubscription = function (item) {
- var ajaxService = this.glassContext.getCoreSvc('.Ajax');
- return ajaxService.ajax(getOptions(item.reportId));
- }.bind(this);
- var promises = [];
- var selectedNum = data.length;
- _.each(data, function (item) {
- // Delete Schedule CM object in tandem to prevent a "phantom" entry from appearing temporarily in the Activities pane after parent ReportView object is deleted
- promises.push(deleteSchedule(item).then(deleteSubscription(item)));
- });
- Promise.all(promises).then(function () {
- var message = selectedNum > 1 ? StringResource.get('multiSubscriptionDeleteSuccessful', {
- 'num': selectedNum
- }) : StringResource.get('subscriptionDeleteSuccessful');
- this.glassContext.appController.showToast(message, {
- type: 'success',
- timeOut: 3000
- });
- setTimeout(function () {
- this.listView.reload();
- }.bind(this), 500);
- }.bind(this));
- },
- _removeSchedule: function _removeSchedule(data) {
- var selectedNum = data.length;
- if (data.length > 1) {
- var aPromises = [];
- _.each(data, function (item) {
- var innerDeferred = Q.defer();
- Api.deleteSchedule(item.id).done(function () {
- innerDeferred.resolve();
- }.bind(this));
- aPromises.push(innerDeferred.promise);
- });
- Q.all(aPromises).then(function (results) {
- var sText = StringResource.get('multiScheduleDeleteSuccessful', {
- 'num': selectedNum
- });
- this.glassContext.appController.showToast(sText, {
- type: 'success'
- });
- setTimeout(function () {
- this.listView.reload();
- }.bind(this), 500);
- return deferred.resolve(results);
- }.bind(this));
- } else {
- var scheduleId = data[0].id;
- Api.deleteSchedule(scheduleId).done(function () {
- this.glassContext.appController.showToast(StringResource.get('scheduleDeleteSuccessful'), {
- type: 'success',
- timeOut: 3000
- });
- setTimeout(function () {
- this.listView.reload();
- }.bind(this), 500);
- }.bind(this));
- }
- },
- setFilter: function setFilter(filter) {
- if (!filter) {
- this.filter = {};
- } else {
- var newFilter = _.extend(this.filter, filter);
- _.each(newFilter, function (value, key) {
- if (_.isEmpty(value)) {
- delete newFilter[key];
- }
- });
- this.filter = newFilter;
- }
- this._renderActivities(true);
- },
- _onSelectionChange: function _onSelectionChange() {
- var showEnableSelected = false;
- var showDisableSelected = false;
- if (this.listView._dTable) {
- var selectedRows = this.listView._dTable.rows('tr.selected').data();
- for (var index = 0; index < selectedRows.length && (!showDisableSelected || !showEnableSelected); ++index) {
- if (selectedRows[index].statusValue === 'enabled') {
- showDisableSelected = true;
- } else if (selectedRows[index].statusValue === 'disabled') {
- showEnableSelected = true;
- }
- }
- }
- this.$body.find('#bi-admin-activity-items-selected-enable').css('display', showEnableSelected ? '' : 'none');
- this.$body.find('#bi-admin-activity-items-selected-disable').css('display', showDisableSelected ? '' : 'none');
- var $selectedItems = this.$body.find('#bi-admin-activity-items-selected');
- $selectedItems.text(StringResource.get('jobsSelected', {
- jobsSelected: this.listView.aSelectedRows.length
- }));
- var $activityItemActionSection = this.$body.find('#bi-admin-activity-items-actions');
- $activityItemActionSection.css('opacity', this.listView.aSelectedRows.length > 0 ? 1 : 0);
- },
- _modifySelectedSchedules: function _modifySelectedSchedules(enable) {
- var schedulesToUpdate = [];
- var selectedRows = this.listView._dTable.rows('tr.selected').data();
- for (var index = 0; index < selectedRows.length; ++index) {
- if (!enable && selectedRows[index].statusValue === 'enabled' || enable && selectedRows[index].statusValue === 'disabled') {
- schedulesToUpdate.push({
- id: selectedRows[index].id,
- enable: enable
- });
- }
- }
- if (schedulesToUpdate.length) {
- var updateRequest = doT.template(UpdateSchedulesRequestTemplate)({
- cafContextId: this.glassContext.authInfo.cafContextId,
- schedules: schedulesToUpdate
- });
- return this.glassContext.services.fetch.post('v1/disp', {
- 'headers': {
- 'SOAPAction': 'http://www.ibm.com/xmlns/prod/cognos/contentManagerService/201703/'
- },
- 'contentType': 'text/xml; charset=UTF-8',
- 'data': updateRequest
- }).then(function (response) {
- var sText = StringResource.get('multiScheduleStatusUpdateSuccessful', {
- 'num': schedulesToUpdate.length
- });
- this.glassContext.appController.showToast(sText, {
- type: 'success'
- });
- this._refreshAfterUpdate();
- }.bind(this)).catch(function () {
- this.glassContext.appController.showToast(StringResource.get('error'), {
- type: 'error'
- });
- this._refreshAfterUpdate();
- }.bind(this));
- }
- },
- _refreshAfterUpdate: function _refreshAfterUpdate() {
- setTimeout(function () {
- this._renderActivities(true);
- }.bind(this), 500);
- },
- _hideShowSelectionFooter: function _hideShowSelectionFooter($el) {
- var $activitiesSelectionFooter = $el.find('.admin-activities-selection-footer');
- if (this.activityType === Api.ActivityType.SCHEDULE) {
- $activitiesSelectionFooter.css('display', 'flex');
- } else {
- $activitiesSelectionFooter.css('display', 'none');
- }
- },
- _initCheckboxSelection: function _initCheckboxSelection($body) {
- if (this.listDataAdaptor.checkboxSelection) {
- var $selectedItems = $body.find('#bi-admin-activity-items-selected');
- $selectedItems.text(StringResource.get('jobsSelected', {
- jobsSelected: this.listView ? this.listView.aSelectedRows.length : 0
- }));
- var $enableSelected = $body.find('#bi-admin-activity-items-selected-enable');
- $enableSelected.text(StringResource.get('enableSelected'));
- $enableSelected.click(this._modifySelectedSchedules.bind(this, true));
- var $disableSelected = $body.find('#bi-admin-activity-items-selected-disable');
- $disableSelected.text(StringResource.get('disableSelected'));
- $disableSelected.click(this._modifySelectedSchedules.bind(this, false));
- }
- },
- getSearchTerm: function getSearchTerm() {
- return this._filterInput.$el.val();
- }
- });
- return ActivitiesPane;
- });
|