createPortlet: function()

in broker-plugins/management-http/src/main/java/resources/js/qpid/management/dashboard/widget/query.js [128:287]


            createPortlet: function ()
            {
                var preference = this.preference;
                var query = {
                    category: preference.value.category,
                    select: preference.value.select,
                    where: "1=2"
                };

                var deferred = new Deferred();

                var queryPreflightRequestPromise = this.management.query(query);
                queryPreflightRequestPromise.then(lang.hitch(this, function (preflightResults)
                {
                    var headers = lang.clone(preflightResults.headers);
                    var columns = [];
                    for (var i = 0; i < headers.length; i++)
                    {
                        columns.push({
                            field: i,
                            label: headers[i],
                            sortable: false
                        });
                    }

                    var queryGrid = new QueryGrid({
                        detectChanges: true,
                        rowsPerPage: this.limit,
                        management: this.management,
                        parentObject: this.parentObject,
                        category: preference.value.category,
                        selectClause: preference.value.select + ",id",
                        orderBy: preference.value.orderBy,
                        where: preference.value.where,
                        pageSizeOptions: [],
                        previousNextArrows: false,
                        pagingLinks: 0,
                        columns: columns,
                        idProperty: columns.length
                    });

                    queryGrid.on('rowBrowsed', lang.hitch(this, function (event)
                    {
                        this.controller.showById(event.id);
                    }));

                    this._queryGrid = queryGrid;
                    var portlet = new Portlet({
                        title: preference.name,
                        content: queryGrid,
                        open: !this.hidden,
                        onClose: lang.hitch(this, function ()
                        {
                            MessageDialog.confirm({
                                title: "Remove widget?",
                                message: ("Are you sure you want to remove the query widget '"
                                          + entities.encode(new String(preference.name)) + "'"
                                          + " from the dashboard?"),
                                confirmationId: "dashboard.confirmation.widget.delete"
                            })
                                .then(lang.hitch(this, function ()
                                {
                                    this.emit("close");
                                }));
                        }),
                        startup: function ()
                        {
                            this.inherited("startup", arguments);

                            // inherited startup adds the settings icon to the portlet's toolbar but does not expose
                            // a handle to it.

                            var settingsIconNodes = dojo.query(".dashboardWidgetSettingsIcon", this.domNode);
                            if (settingsIconNodes && settingsIconNodes.length == 1)
                            {
                                settingsIconNodes[0].title = "Configure the settings of this widget.";
                                util.stopEventPropagation(settingsIconNodes[0], "mousedown");
                            }
                        }
                    });

                    if (portlet.closeIcon)
                    {
                        portlet.closeIcon.title = "Remove this query from the dashboard.";
                        util.stopEventPropagation(portlet.closeIcon, "mousedown");
                    }

                    if (portlet.arrowNode)
                    {
                        portlet.arrowNode.title = "Maximise/minimise this widget.";
                        util.stopEventPropagation(portlet.arrowNode, "mousedown");
                    }

                    portlet._preferenceAccessIcon = portlet._createIcon("preferenceAccessIcon",
                        "preferenceAccessHoverIcon",
                        lang.hitch(this, function ()
                        {
                            var tabData = {
                                tabType: "query",
                                modelObject: this.parentObject,
                                data: preference,
                                preferenceId: preference.id
                            };
                            this.controller.showTab(tabData);
                        }));
                    portlet._preferenceAccessIcon.title = "Open this query in a separate tab.";
                    util.stopEventPropagation(portlet._preferenceAccessIcon, "mousedown");

                    var settings = new QueryWidgetSettings();
                    settings.set("limit", this.limit);
                    settings.set("refreshPeriod", this.refreshPeriod);

                    // TODO: remove hardcoded sizes
                    var settingsDialog = new PortletDialogSettings({
                        content: settings,
                        dimensions: [540, 130],
                        portletIconClass: "dashboardWidgetSettingsIcon",
                        portletIconHoverClass: "dashboardWidgetSettingsHoverIcon",
                        title: "Widget settings - " + preference.name
                    });
                    settings.on("save", lang.hitch(this, function (event)
                    {
                        var settings = event.settings;
                        var emitChange = this.limit !== settings.limit || this.refreshPeriod !== settings.refreshPeriod;
                        this.limit = settings.limit;
                        this.refreshPeriod = settings.refreshPeriod;
                        this.deactivate();
                        this.activate();
                        queryGrid.set("rowsPerPage", this.limit);
                        settingsDialog.toggle();
                        if (emitChange)
                        {
                            this.emit("change");
                        }
                    }));

                    settings.on("cancel", lang.hitch(settingsDialog, settingsDialog.toggle));

                    portlet.addChild(settingsDialog);
                    portlet.on("hide", lang.hitch(this, function(){
                        this.hidden = true;
                        this.emit("change");
                    }));
                    portlet.on("show", lang.hitch(this, function(){
                        this.hidden = false;
                        this.emit("change");
                    }));

                    this.activate();

                    this.portlet = portlet;
                    deferred.resolve(portlet);

                }), function (error)
                {
                    deferred.cancel(error);
                });

                return deferred.promise;
            },