All Downloads are FREE. Search and download functionalities are using the official Maven repository.

resources.js.qpid.management.query.QueryWidget.js Maven / Gradle / Ivy

The newest version!
/*
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 */
define(["dojo/_base/declare",
        "dojo/_base/lang",
        "dojo/parser",
        "dojo/dom-construct",
        "dojo/json",
        "dojo/Evented",
        "dojo/text!query/QueryWidget.html",
        "dojo/text!query/QueryCloneDialogForm.html",
        "qpid/management/preference/PreferenceSaveDialogContent",
        "dojo/store/Memory",
        "dijit/registry",
        "dojox/html/entities",
        "dojox/uuid/generateRandomUuid",
        "dgrid/extensions/ColumnReorder",
        "dgrid/extensions/ColumnHider",
        "qpid/management/query/QueryGrid",
        "qpid/common/MessageDialog",
        "dojox/uuid/generateRandomUuid",
        "qpid/management/query/DropDownSelect",
        "qpid/management/query/WhereExpression",
        "dijit/_WidgetBase",
        "dijit/_TemplatedMixin",
        "dijit/_WidgetsInTemplateMixin",
        "dijit/form/Button",
        "dijit/form/ValidationTextBox",
        "dijit/form/SimpleTextarea",
        "dijit/Toolbar",
        "dijit/Dialog"],
    function (declare,
              lang,
              parser,
              domConstruct,
              json,
              Evented,
              template,
              queryCloneDialogFormTemplate,
              PreferenceSaveDialogContent,
              Memory,
              registry,
              entities,
              generateRandomUuid,
              ColumnReorder,
              ColumnHider,
              QueryGrid,
              MessageDialog,
              uuid)
    {

        var QueryCloneDialogForm = declare("qpid.management.query.QueryCloneDialogForm",
            [dijit._WidgetBase, dijit._TemplatedMixin, dijit._WidgetsInTemplateMixin, Evented],
            {
                /**
                 * dijit._TemplatedMixin enforced fields
                 */
                //Strip out the apache comment header from the template html as comments unsupported.
                templateString: queryCloneDialogFormTemplate.replace(//g, ""),

                /**
                 * template attach points
                 */
                scope: null,
                cloneQueryForm: null,
                okButton: null,
                cancelButton: null,

                /**
                 * constructor
                 */
                structure: null,

                // internal fields
                _scopeModelObjects: {},

                postCreate: function ()
                {
                    this.inherited(arguments);
                    this._postCreate();
                },
                _postCreate: function ()
                {
                    this.cancelButton.on("click", lang.hitch(this, this._onCancel));
                    this.cloneQueryForm.on("submit", lang.hitch(this, this._onFormSubmit));
                    this.scope.on("change", lang.hitch(this, this._onChange));
                },
                _initScopeItems: function (defaultValue)
                {
                    var scopeItems = this.structure.getScopeItems();
                    this._scopeModelObjects = scopeItems.scopeModelObjects;

                    var scopeStore = new Memory({
                        data: scopeItems.items,
                        idProperty: 'id'
                    });
                    this.scope.set("store", scopeStore);

                    if (defaultValue)
                    {
                        for (var field in this._scopeModelObjects)
                        {
                            var item = this._scopeModelObjects[field];
                            if (item.id === defaultValue.id)
                            {
                                this.scope.set("value", item.id);
                                break;
                            }
                        }
                    }
                },
                _onCancel: function (data)
                {
                    this.emit("cancel");
                },
                _onChange: function (e)
                {
                    var invalid = !this._scopeModelObjects[this.scope.value];
                    this.okButton.set("disabled", invalid);
                },
                _onFormSubmit: function (e)
                {
                    try
                    {
                        if (this.cloneQueryForm.validate())
                        {
                            var parentObject = this._scopeModelObjects[this.scope.value];
                            this.emit("clone", {parentObject: parentObject});
                        }
                        else
                        {
                            alert('Form contains invalid data.  Please correct first');
                        }

                    }
                    finally
                    {
                        return false;
                    }
                }
            });

        var QueryWidget = declare("qpid.management.query.QueryWidget",
            [dijit._Widget, dijit._TemplatedMixin, dijit._WidgetsInTemplateMixin, Evented],
            {
                //Strip out the apache comment header from the template html as comments unsupported.
                templateString: template.replace(//g, ""),

                /**
                 * Fields from template
                 **/
                advancedSearch: null,
                advancedSelect: null,
                advancedWhere: null,
                advancedOrderBy: null,
                advancedSearchButton: null,
                standardSearch: null,
                standardSelectChooser: null,
                standardWhereChooser: null,
                standardSearchButton: null,
                standardWhereExpressionBuilder: null,
                modeButton: null,
                queryResultGrid: null,
                saveButton: null,
                cloneButton: null,
                deleteButton: null,
                saveButtonTooltip: null,
                cloneButtonTooltip: null,
                deleteButtonTooltip: null,
                searchForm: null,
                exportButton: null,
                exportButtonTooltip: null,

                /**
                 * constructor parameter
                 */
                management: null,
                controller: null,
                parentObject: null,
                preference: null,

                /**
                 * Inner fields
                 */
                _querySaveDialog: null,
                _standardMode: true,
                _lastStandardModeSelect: null,
                _lastHeaders: null,
                _queryCloneDialogForm: null,
                _ownQuery: false,

                postCreate: function ()
                {
                    this.inherited(arguments);
                    this._postCreate();
                },
                startup: function ()
                {
                    this.inherited(arguments);
                    this.standardSelectChooser.startup();
                    this.standardWhereChooser.startup();
                    this.standardWhereExpressionBuilder.startup();
                    this._resultsGrid.startup();
                    this._querySaveDialog.startup();
                    this._queryCloneDialog.startup();
                },
                _postCreate: function ()
                {
                    var valuePresent = this.preference && this.preference.value;
                    var selectPresent = valuePresent && this.preference.value.select;
                    this.categoryName = valuePresent && this.preference.value.category ? this.preference.value.category : "Queue";
                    this._lastStandardModeSelect = [];
                    this._lastHeaders = [];

                    // lifecycle UI
                    this._queryCloneDialogForm = new QueryCloneDialogForm({structure : this.controller.structure});
                    this._queryCloneDialog =
                        new dijit.Dialog({title: "Clone query", content: this._queryCloneDialogForm});
                    this._queryCloneDialogForm.on("clone", lang.hitch(this, this._onQueryClone));
                    this._queryCloneDialogForm.on("cancel", lang.hitch(this, this._onQueryCloneCancel));

                    this._querySaveDialogForm = new PreferenceSaveDialogContent({management: this.management});
                    this._querySaveDialog = new dijit.Dialog({title: "Save query", content: this._querySaveDialogForm});
                    this._querySaveDialogForm.on("save", lang.hitch(this, this._onQuerySave));
                    this._querySaveDialogForm.on("cancel", lang.hitch(this._querySaveDialog, this._querySaveDialog.hide));

                    // lifecycle controls
                    this.saveButton.on("click", lang.hitch(this, this._saveQuery));
                    this.cloneButton.on("click", lang.hitch(this, this._cloneQuery));
                    this.deleteButton.on("click", lang.hitch(this, this._deleteQuery));
                    this.exportButton.on("click", lang.hitch(this, this._exportQueryResults));

                    this._ownQuery = !this.preference
                                     || !this.preference.owner
                                     || this.preference.owner === this.management.getAuthenticatedUser();
                    var newQuery = !this.preference || !this.preference.createdDate;
                    this.saveButton.set("disabled", !this._ownQuery);
                    this.deleteButton.set("disabled", !this._ownQuery || newQuery);
                    this.exportButton.set("disabled", true);

                    if (!this._ownQuery)
                    {
                        this.saveButtonTooltip.set("label", "The query belongs to another user.
Use clone if you wish to make your own copy."); this.deleteButtonTooltip.set("label", "This query belongs to another user."); } // advanced mode widgets this.advancedSelect.on("change", lang.hitch(this, this._advancedModeSelectChanged)); this.advancedWhere.on("change", lang.hitch(this, this._advancedModeWhereChanged)); this.advancedOrderBy.on("change", lang.hitch(this, this._advancedModeOrderByChanged)); this.advancedSelect.on("keyDown", lang.hitch(this, this._advancedModeKeyPressed)); this.advancedWhere.on("keyDown", lang.hitch(this, this._advancedModeKeyPressed)); this.advancedOrderBy.on("keyDown", lang.hitch(this, this._advancedModeKeyPressed)); // standard mode widgets this.standardSelectChooser.on("change", lang.hitch(this, this._standardModeSelectChanged)); this.standardWhereExpressionBuilder.set("whereFieldsSelector", this.standardWhereChooser); this.standardWhereExpressionBuilder.set("userPreferences", this.management.userPreferences); this.standardWhereExpressionBuilder.on("change", lang.hitch(this, this._standardModeWhereChanged)); // search & mode buttons this.searchForm.on("submit", lang.hitch(this, function(){this.search(); return false;})); this.modeButton.on("click", lang.hitch(this, this._showModeSwitchWarningIfRequired)); var rowsPerPage = valuePresent && this.preference.value.limit ? this.preference.value.limit : 100; var currentPage = valuePresent && this.preference.value.offset ? this.preference.value.offset / rowsPerPage + 1: 1; this._buildGrid(currentPage, rowsPerPage); this._initStandardModeWidgets(this.categoryName, !selectPresent); if (selectPresent) { this._standardMode = false; this._configureModalWidgets(false); this.advancedSelect.set("value", this.preference.value.select); this._setSelectClause(this.advancedSelect.value); if (this.preference.value.where ) { this.advancedWhere.set("value", this.preference.value.where); this._setWhereClause(this.advancedWhere.value); } if (this.preference.value.orderBy) { this.advancedOrderBy.set("value", this.preference.value.orderBy); this._setOrderByClause(this.advancedOrderBy.value); } this._toggleSearchButton(this.preference.value.select); } else { this._toggleSearchButton(true); } this._lastQuery = this._getQuery(); }, search: function () { this._resultsGrid.refresh(); }, getDefaultColumns: function (category) { return ["id", "name"]; }, destroyRecursive: function (arg) { this.inherited(arguments); if (this._queryCloneDialog) { this._queryCloneDialog.destroyRecursive(); this._queryCloneDialog = null; } if (this._querySaveDialog) { this._querySaveDialog.destroyRecursive(); this._querySaveDialog = null; } }, _showModeSwitchWarningIfRequired: function () { if (this._standardMode) { var warningMessage = "
Copying of query settings is only supported on switching from Standard view into Advanced view!
" + "Switching back from Advanced view into Standard view will completely reset the query.

" + "Are you sure you want to switch from Standard view into Advanced view?"; "
"; MessageDialog.confirm({ title: "Warning!", message: warningMessage, confirmationId: "query.confirmation.mode.change" }, domConstruct.create("div")) .then(lang.hitch(this, function () { this._modeChanged(); })); } else { this._modeChanged(); } }, _setSelectClause: function (select) { this._selectClause = select; this._resultsGrid.setSelect(select ? select + ",id" : ""); }, _setWhereClause: function (where) { this._whereClause = where; this._resultsGrid.setWhere(where); }, _setOrderByClause: function (orderBy) { this._orderByClause = orderBy; this._resultsGrid.setOrderBy(orderBy); }, _advancedModeSelectChanged: function () { this._setSelectClause(this.advancedSelect.value); this._queryChanged(); this._submitIfEnterPressed(); }, _advancedModeWhereChanged: function () { this._setWhereClause(this.advancedWhere.value); this._queryChanged(); this._submitIfEnterPressed(); }, _advancedModeOrderByChanged: function () { this._setOrderByClause(this.advancedOrderBy.value); this._queryChanged(); this._submitIfEnterPressed(); }, _submitIfEnterPressed: function () { if (this._enterPressed) { this._enterPressed = false; this.searchForm.submit(); } }, _toggleSearchButton: function (select) { var criteriaNotSet = !select; this.advancedSearchButton.set("disabled", criteriaNotSet); this.advancedSearchButton.set("title", criteriaNotSet ? "Please, choose fields to display in order to enable search" : "Search"); this.standardSearchButton.set("disabled", criteriaNotSet); this.standardSearchButton.set("title", criteriaNotSet ? "Please, choose fields to display in order to enable search" : "Search"); }, _buildSelectExpression: function (value) { var expression = ""; if (lang.isArray(value)) { for (var i = 0; i < value.length; i++) { var selection = value[i] && value[i].hasOwnProperty("attributeName") ? value[i].attributeName : value[i]; expression = expression + (i > 0 ? "," : "") + selection; } } return expression; }, _normalizeSorting: function (selectedColumns) { var newSort = []; var sort = this._resultsGrid.getSort(); for (var i = 0; i < sort.length; ++i) { var sortColumnIndex = parseInt(sort[i].property) - 1; var sortDescending = sort[i].descending; if (sortColumnIndex < this._lastStandardModeSelect.length) { var oldSortedColumnName = this._lastStandardModeSelect[sortColumnIndex].attributeName; for (var j = 0; j < selectedColumns.length; ++j) { if (selectedColumns[j].attributeName === oldSortedColumnName) { newSort.push({ property: "" + (j + 1), descending: sortDescending }); break; } } } } this._setOrderByClause(this._resultsGrid.setSort(newSort)); }, _processStandardModeSelectChange: function (selectedColumns) { this._normalizeSorting(selectedColumns); var selectClause = this._buildSelectExpression(selectedColumns); this._setSelectClause(selectClause); this._lastStandardModeSelect = lang.clone(selectedColumns); this._toggleSearchButton(selectClause); }, _standardModeSelectChanged: function (selectedColumns) { this._processStandardModeSelectChange(selectedColumns); this.search(); this._queryChanged(); }, _standardModeColumnOrderChanged: function (event) { if (this._standardMode) { var columnRow = event.subRow; var selectedItems = this.standardSelectChooser.get("selectedItems"); var newSelectedItems = []; for (var i = 0; i < columnRow.length; i++) { var field = parseInt(columnRow[i].field) - 1; newSelectedItems.push(selectedItems[field]); } this._processStandardModeSelectChange(newSelectedItems); this.standardSelectChooser.set("data", {"selected": newSelectedItems}); this._queryChanged(); } else { event.preventDefault(); event.stopPropagation(); } }, _standardModeColumnStateChanged: function (event) { if (event.hidden) { var checkNode = null; if (this._resultsGrid._columnHiderCheckboxes && this._resultsGrid._columnHiderCheckboxes[event.column.id]) { checkNode = this._resultsGrid._columnHiderCheckboxes[event.column.id].parentNode; checkNode.style.display = 'none'; } try { var columnIndex = parseInt(event.column.field) - 1; var newSelectedItems = this.standardSelectChooser.get("selectedItems"); newSelectedItems.splice(columnIndex, 1); this._processStandardModeSelectChange(newSelectedItems); this.standardSelectChooser.set("data", {"selected": newSelectedItems}); this._resultsGrid.refresh(); this._queryChanged(); } finally { if (checkNode) { checkNode.style.display = ''; } } } }, _standardModeWhereChanged: function (result) { this._setWhereClause(result.expression); this.search(); this._queryChanged(); }, _buildGrid: function (currentPage, rowsPerPage) { var Grid = declare([QueryGrid, ColumnReorder, ColumnHider], { _restoreCurrentPage : currentPage > 1, gotoPage:function (page) { if (this._restoreCurrentPage) { return this.inherited(arguments, [currentPage]); } else { return this.inherited(arguments); } } }); var grid = new Grid({ management: this.management, category: this.categoryName.toLowerCase(), parentObject: this.parentObject, zeroBased: false, rowsPerPage: rowsPerPage, _currentPage: currentPage, allowTextSelection: true, transformer: function (data) { var dataResults = data.results; var results = []; for (var i = 0, l = dataResults.length; i < l; ++i) { var result = dataResults[i]; var item = {id: result[result.length - 1]}; // excluding id, as we already added id field for (var j = 0, rl = result.length - 1; j < rl; ++j) { // sql uses 1-based index in ORDER BY var field = j + 1; item[new String(field)] = result[j]; } results.push(item); } return results; } }, this.queryResultGrid); grid.on('dgrid-refresh-complete', lang.hitch(this, function () { this._resultsGrid.setUseCachedResults(false); })); grid.on('queryCompleted', lang.hitch(this, this._queryCompleted)); grid.on('orderByChanged', lang.hitch(this, function (event) { if (this._standardMode) { this._setOrderByClause(event.orderBy); } else { this.advancedOrderBy.set("value", event.orderBy); } this._queryChanged(); })); grid.on('dgrid-columnreorder', lang.hitch(this, this._standardModeColumnOrderChanged)); grid.on('dgrid-columnstatechange', lang.hitch(this, this._standardModeColumnStateChanged)); grid.hiderToggleNode.title = "Remove columns"; grid.on('rowBrowsed', lang.hitch(this, function(event){this.controller.showById(event.id);})); this._resultsGrid = grid; }, _queryCompleted: function (e) { this._buildColumnsIfHeadersChanged(e.data); this.exportButton.set("disabled", !(e.data.total && e.data.total > 0)); }, _buildColumnsIfHeadersChanged: function (data) { var headers = lang.clone(data.headers); if (headers.length > 0) { headers.pop(); } if (!this._equalStringArrays(headers, this._lastHeaders)) { this._lastHeaders = headers; this._resultsGrid.setUseCachedResults(true); this._resultsGrid.hiderToggleNode.style.display = this._standardMode && headers.length > 0 ? '' : 'none'; this._resultsGrid.set("columns", this._getColumns(headers)); this._resultsGrid.resize(); this._resultsGrid._restoreCurrentPage = false; } }, _equalStringArrays: function (a, b) { if (a.length != b.length) { return false; } for (var i = 0; i < a.length; ++i) { if (a[i] != b[i]) { return false; } } return true; }, _getColumns: function (headers) { var columns = []; if (headers) { for (var i = 0; i < headers.length; ++i) { var attribute = headers[i]; var column = { label: attribute, field: "" + (i + 1), sortable: true, reorderable: !!this._standardMode, unhidable: !this._standardMode }; columns.push(column); if (this._columns) { var columnData = this._columns[attribute]; if (columnData) { if (columnData.type == "Date") { var that = this; column.formatter = function (value, object) { if (!isNaN(value) && parseInt(Number(value)) == value && !isNaN(parseInt( value, 10))) { return that.management.userPreferences.formatDateTime(value, { addOffset: true, appendTimeZone: true }); } return value ? entities.encode(String(value)) : ""; }; } else if (columnData.type == "Map") { column.renderCell = function (object, value, node) { if (value) { var list = domConstruct.create("div", {}, node); for (var i in value) { domConstruct.create("div", { innerHTML: entities.encode(String(i)) + ": " + entities.encode( json.stringify(value[i])) }, list); } return list; } return ""; }; } else if (columnData.type == "List" || columnData.type == "Set") { column.renderCell = function (object, value, node) { if (value) { var list = domConstruct.create("div", {}, node); for (var i in value) { domConstruct.create("div", { innerHTML: entities.encode(json.stringify(value[i])) }, list) } return list; } return ""; }; } } } } } return columns; }, _initStandardModeWidgets: function (category, isNew) { var metadata = this._getCategoryMetadata(category); var columns, items, selectedItems; if (metadata) { var data = this._combineTypeAttributesAndStatistics(metadata); columns = data.asObject; items = data.asArray; selectedItems = isNew ? this.getDefaultColumns(category) : []; this.standardSelectChooser.set("data", { items: items, idProperty: "id", selected: selectedItems, nameProperty: "attributeName" }); this.standardWhereChooser.set("data", { items: items, selected: [], idProperty: "id", nameProperty: "attributeName" }); this._columns = columns; this._lastStandardModeSelect = this.standardSelectChooser.get("selectedItems"); if (isNew) { var select = this._buildSelectExpression(this._lastStandardModeSelect); this._setSelectClause(select); } } }, _advancedModeKeyPressed: function (evt) { var key = evt.keyCode; if (key == dojo.keys.ENTER) { evt.preventDefault(); evt.stopPropagation(); // set flag for Enter being pressed this._enterPressed = true; // move focus out and back into widget to provoke triggering of on change event this.advancedSearchButton.focus(); registry.getEnclosingWidget(evt.target).focus(); } }, _modeChanged: function () { this._standardMode = !this._standardMode; this._configureModalWidgets(this._standardMode); if (!this._standardMode) { this.advancedSelect.set("value", this._selectClause); this.advancedOrderBy.set("value", this._orderByClause); this.advancedWhere.set("value", this._whereClause); // rebuild columns to disable column reordering and removal if (this._lastHeaders && this._lastHeaders.length) { this._resultsGrid.setUseCachedResults(true); this._resultsGrid.set("columns", this._getColumns(this._lastHeaders)); this._resultsGrid.resize(); } } else { var category = this.categoryName; var selectedItems = this.getDefaultColumns(category); this.standardSelectChooser.set("data", {selected: selectedItems}); this.standardWhereChooser.set("data", {selected: []}); this.standardWhereExpressionBuilder.clearWhereCriteria(); this._lastStandardModeSelect = this.standardSelectChooser.get("selectedItems"); this._lastHeaders = []; var select = this._buildSelectExpression(this._lastStandardModeSelect); this._setSelectClause(select); this._setWhereClause(""); this._setOrderByClause(""); this._toggleSearchButton(select); this._resultsGrid.hiderToggleNode.style.display = ''; this.search(); this._queryChanged(); } }, _configureModalWidgets: function(standardMode) { if (standardMode) { this.modeButton.set("label", "Advanced View"); this.modeButton.set("title", "Switch to 'Advanced View' search using SQL-like expressions"); this.modeButton.set("iconClass", "advancedViewIcon ui-icon"); this.advancedSelect.set("disabled", true); this.advancedWhere.set("disabled", true); this.standardSearch.style.display = ""; this.standardWhereExpressionBuilder.domNode.style.display = ""; this.advancedSearch.style.display = "none"; } else { this.modeButton.set("label", "Standard View"); this.modeButton.set("title", "Switch to 'Standard View' search"); this.modeButton.set("iconClass", "dijitIconApplication"); this.advancedSelect.set("disabled", false); this.advancedWhere.set("disabled", false); this.standardSearch.style.display = "none"; this.standardWhereExpressionBuilder.domNode.style.display = "none"; this.advancedSearch.style.display = ""; this._resultsGrid.hiderToggleNode.style.display = 'none'; } }, _getCategoryMetadata: function (value) { if (value) { var category = value.charAt(0) .toUpperCase() + value.substring(1); return this.management.metadata.metadata[category]; } else { return undefined; } }, _combineTypeAttributesAndStatistics: function (metadata) { var columnsArray = []; var columnsObject = {}; var validTypes = []; var typeAttribute = null; for (var i in metadata) { validTypes.push(i); var categoryType = metadata[i]; var attributes = categoryType.attributes; for (var name in attributes) { var attribute = attributes[name]; if (!(name in columnsObject)) { var attributeData = { id: name, attributeName: name, type: attribute.type, validValues: attribute.validValues, description: attribute.description, columnType: "attribute" }; if (name === "type") { typeAttribute = attributeData; } columnsObject[name] = attributeData; columnsArray.push(attributeData); } } var statistics = categoryType.statistics; for (var name in statistics) { var statistic = statistics[name]; if (!(name in columnsObject)) { var statisticData = { id: name, attributeName: name, type: statistic.type, description: statistic.description, columnType: "statistics" }; columnsArray.push(statisticData); columnsObject[name] = statisticData; } } } if (typeAttribute != null && !typeAttribute.validValues) { typeAttribute.validValues = validTypes; } return { asArray: columnsArray, asObject: columnsObject }; }, _getQuery: function () { return { select: this._selectClause, where: this._whereClause, orderBy: this._orderByClause, category: this.categoryName }; }, _saveQuery: function () { var queryParameters = this._getQuery(); var preference = lang.clone(this.preference); preference.type = "query"; preference.value = queryParameters; this._querySaveDialogForm.set("preference", preference); this._querySaveDialog.show(); }, _onQuerySave: function (e) { var saveResponse = management.savePreference(this.parentObject, e.preference); saveResponse.then(lang.hitch(this, function () { var responsePromise = this._loadPreference(e.preference.name); responsePromise.then(lang.hitch(this, function (preference) { this.preference = preference; this._querySaveDialog.hide(); this.emit("save", {preference: preference}); this.deleteButton.set("disabled", false); })); })); }, _cloneQuery: function () { this._queryCloneDialogForm._initScopeItems(this.parentObject); this._queryCloneDialog.show(); }, _onQueryClone: function (e) { var preference = {id : generateRandomUuid(), type: "query", value: this._getQuery()}; this._queryCloneDialog.hide(); this.emit("clone", {preference: preference, parentObject: e.parentObject}); }, _onQueryCloneCancel: function () { this._queryCloneDialog.hide(); }, _deleteQuery: function () { MessageDialog.confirm({ title: "Discard query?", message: "Are you sure you want to delete the query?", confirmationId: "query.confirmation.delete" }).then(lang.hitch(this, function () { if (this.preference.id) { var deletePromise = this.management.deletePreference(this.parentObject, this.preference.type, this.preference.name); deletePromise.then(lang.hitch(this, function (preference) { this.emit("delete"); })); } else { this.emit("delete"); } })); }, _loadPreference: function (name) { return this.management.getPreference(this.parentObject, "query", name) }, _queryChanged: function() { if (this._ownQuery) { var query = this._getQuery(); if (this._lastQuery.orderBy !== query.orderBy || this._lastQuery.where !== query.where || this._lastQuery.select !== query.select) { var pref = lang.clone(this.preference); pref.value = query; this._lastQuery = lang.clone(query); this.emit("change", {preference: pref}); } } }, _exportQueryResults: function () { var query = this._getQuery(); delete query.category; var params = {}; for(var fieldName in query) { if (query.hasOwnProperty(fieldName) && query[fieldName]) { params[fieldName] = query[fieldName]; } } params.format = "csv"; var id = uuid(); params.contentDispositionAttachmentFilename ="query-results-" + id + ".csv"; var url = this.management.getQueryUrl({category: this.categoryName, parent: this.parentObject}, params); this.management.downloadUrlIntoFrame(url, "query_downloader_" + id); } }); return QueryWidget; });




© 2015 - 2025 Weber Informatics LLC | Privacy Policy