From c60f5b1e0d99298ce78b6935e0f4eb4ab9e52057 Mon Sep 17 00:00:00 2001 From: Alex Rudyy Date: Mon, 14 Oct 2013 16:16:15 +0000 Subject: QPID-5138: Add improvements and fixes into Web Management Console preferences: Use UTC time zone by default if no time zone is set Create preferences dialog on demand Enable preferences Set buttons only when changes are made Display log viewer last update time for preferred and browser time zones Fix provider name editing git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1531965 13f79535-47bb-0310-9956-ffa450edef68 --- .../src/main/java/resources/index.html | 39 +++--------- .../java/resources/js/qpid/common/ConsoleHelper.js | 73 ++++++++++++++++++++++ .../resources/js/qpid/common/TimeZoneSelector.js | 23 +++++++ .../js/qpid/common/grid/EnhancedFilter.js | 2 + .../js/qpid/common/grid/EnhancedFilterTools.js | 43 ++++++++++++- .../resources/js/qpid/common/grid/GridUpdater.js | 62 +++++++++++++----- .../resources/js/qpid/management/Preferences.js | 33 ++++++++-- .../qpid/management/PreferencesProviderFields.js | 8 +-- .../js/qpid/management/UserPreferences.js | 3 + .../resources/js/qpid/management/logs/LogViewer.js | 2 +- 10 files changed, 231 insertions(+), 57 deletions(-) create mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ConsoleHelper.js (limited to 'qpid/java') diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/index.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/index.html index dbb0c111c0..f17e8d8bba 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/index.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/index.html @@ -57,33 +57,24 @@ @@ -98,20 +89,10 @@
Log out
-
- Preferences -
- -
- Help -
+
Preferences
+
Help
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ConsoleHelper.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ConsoleHelper.js new file mode 100644 index 0000000000..fdc07f27ca --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ConsoleHelper.js @@ -0,0 +1,73 @@ +/* + * + * 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/xhr", "dojo/domReady!"], function (xhr) { + + var qpidHelpLocation = "http://qpid.apache.org/releases/qpid-"; + var preferencesDialog = null; + var helpURL = null; + var qpidVersion = null; + + return { + showPreferencesDialog: function () { + if (preferencesDialog == null) + { + require(["qpid/management/Preferences", "dojo/ready"], function(PreferencesDialog, ready){ + ready(function(){ + preferencesDialog = new PreferencesDialog(); + preferencesDialog.showDialog(); + }); + }); + } + else + { + preferencesDialog.showDialog(); + } + }, + getVersion: function() + { + if (!qpidVersion) + { + xhr.get({ + sync: true, + url: "rest/helper?action=version", + handleAs: "json" + }).then(function(version) { + qpidVersion = version; + }); + } + return qpidVersion; + }, + getHelpUrl: function() + { + if (!helpURL) + { + helpURL = qpidHelpLocation + this.getVersion() + "/java-broker/book/index.html"; + } + return helpURL; + }, + showHelp: function() + { + var newWindow = window.open(this.getHelpUrl(),'QpidHelp','height=600,width=600,scrollbars=1,location=1,resizable=1,status=0,toolbar=0,titlebar=1,menubar=0', true); + newWindow.focus(); + } + }; + +}); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/TimeZoneSelector.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/TimeZoneSelector.js index 7d0a02afca..fa4bd8c873 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/TimeZoneSelector.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/TimeZoneSelector.js @@ -114,6 +114,7 @@ function (declare, array, domConstruct, parser, query, domStyle, Memory, _Widget } self._citySelector.set("disabled", checked); self._regionSelector.set("disabled", checked); + self._handleOnChange(self.value); }); this._regionSelector.on("change", function(value){ if (value=="undefined") @@ -122,6 +123,7 @@ function (declare, array, domConstruct, parser, query, domStyle, Memory, _Widget self._citySelector.query.region = /.*/; self.value = null; self._citySelector.set("value", null); + self._handleOnChange(self.value); } else { @@ -141,6 +143,7 @@ function (declare, array, domConstruct, parser, query, domStyle, Memory, _Widget this._citySelector.on("change", function(value){ self.value = value; + self._handleOnChange(value); }); this._setValueAttr(this._args.value); @@ -176,6 +179,7 @@ function (declare, array, domConstruct, parser, query, domStyle, Memory, _Widget this._regionSelector.set("value", "undefined"); } this.value = value; + this._handleOnChange(value); }, destroy: function() @@ -188,6 +192,25 @@ function (declare, array, domConstruct, parser, query, domStyle, Memory, _Widget _regionSelector: null; _citySelector: null; _utcSelector: null; + }, + + onChange: function(newValue){}, + + _handleOnChange: function(newValue) + { + if (this._lastValueReported != newValue) + { + this._lastValueReported = newValue; + if(this._onChangeHandle) + { + this._onChangeHandle.remove(); + } + this._onChangeHandle = this.defer(function() + { + this._onChangeHandle = null; + this.onChange(newValue); + }); + } } }); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilter.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilter.js index 21046ad283..262210f879 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilter.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilter.js @@ -96,6 +96,7 @@ define([ } this.defaulGridRowLimit = args.defaulGridRowLimit; this.disableFiltering = args.disableFiltering; + this.displayLastUpdateTime = args.displayLastUpdateTime; //Install UI components var obj = { "plugin": this }; @@ -147,6 +148,7 @@ define([ filterDefDialog: this.filterDefDialog, defaulGridRowLimit: this.defaulGridRowLimit, disableFiltering: this.disableFiltering, + displayLastUpdateTime: this.displayLastUpdateTime, nls: nls, ruleCountToConfirmClearFilter: this.ruleCountToConfirmClearFilter }); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilterTools.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilterTools.js index 475edaadfd..187ed8cfc6 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilterTools.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilterTools.js @@ -22,12 +22,15 @@ define([ "dojo/_base/declare", "dojo/_base/event", + "dojo/dom-construct", + "dojo/date/locale", "dijit/form/Button", "dijit/form/ToggleButton", "qpid/common/grid/RowNumberLimitDialog", "qpid/common/grid/ColumnDefDialog", - "qpid/common/grid/FilterSummary" -], function(declare, event, Button, ToggleButton, RowNumberLimitDialog, ColumnDefDialog, FilterSummary){ + "qpid/common/grid/FilterSummary", + "qpid/management/UserPreferences" +], function(declare, event, domConstruct, locale, Button, ToggleButton, RowNumberLimitDialog, ColumnDefDialog, FilterSummary, UserPreferences){ var _stopEvent = function (evt){ try{ @@ -65,6 +68,7 @@ define([ this.clearFilterDialog = params.clearFilterDialog; this.filterDefDialog = params.filterDefDialog; this.ruleCountToConfirmClearFilter = params.ruleCountToConfirmClearFilter; + this.displayLastUpdateTime = params.hasOwnProperty("displayLastUpdateTime")?params.displayLastUpdateTime:true; this._addRefreshButtons(); this._addRowLimitButton(params.defaulGridRowLimit); @@ -168,6 +172,38 @@ define([ this.filterBar.addChild(this.autoRefreshButton); this.filterBar.addChild(this.refreshButton); + + if (this.displayLastUpdateTime) + { + var updateStatusPanel = domConstruct.create("div"); + var updateTimeLabel = domConstruct.create("span", {innerHTML: "Update time: ", "class": "formLabel-labelCell", "style": "padding-right: 5px;padding-left: 5px"}, updateStatusPanel); + var updateTimeLabelPreferredTZ = domConstruct.create("span", {innerHTML: "Preferred timezone:", "style": "padding-right: 5px"}, updateStatusPanel); + var updateTimePreferredTZ = domConstruct.create("span", {"style": "padding-right: 5px"}, updateStatusPanel); + var updateTimeLabelBrowserTZ = domConstruct.create("span", {innerHTML: "Browser timezone:", "style": "padding-right: 5px"}, updateStatusPanel); + var updateTimeBrowserTZ = domConstruct.create("span", {"style": "padding-right: 5px"}, updateStatusPanel); + + var lastUpdateTimeUpdater = function(data) + { + var userTimeZone = UserPreferences.timeZone; + var displayStyle = userTimeZone? "inline" : "none"; + updateTimeLabelPreferredTZ.style.display = displayStyle; + updateTimePreferredTZ.style.display = displayStyle; + var formatOptions = {selector: "time", timePattern: "HH:mm:ss.SSS", appendTimeZone: true, addOffset: true}; + var updateTime = new Date(); + updateTimePreferredTZ.innerHTML = UserPreferences.formatDateTime(updateTime.getTime(), formatOptions); + updateTimeBrowserTZ.innerHTML = locale.format(updateTime, formatOptions); + }; + + if (self.grid.updater.store) + { + // data have been already provided/or fetched + // set last update time to current time + lastUpdateTimeUpdater(); + } + + self.grid.updater.addOnUpdate(lastUpdateTimeUpdater); + domConstruct.place(updateStatusPanel, this.grid.viewsHeaderNode, "before"); + } }, _addRowLimitButton: function(defaulGridRowLimit) @@ -241,6 +277,9 @@ define([ this.filterDefButton.on("click", function(e){ _stopEvent(e); + + // a bit of a hack to force dialog to rebuild the criteria controls in order to get rid from empty rule controls + self.filterDefDialog._criteriasChanged = true; self.filterDefDialog.showDialog(); }); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/GridUpdater.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/GridUpdater.js index 1aadd719dd..8d58b6dec0 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/GridUpdater.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/GridUpdater.js @@ -39,7 +39,11 @@ define(["dojo/_base/xhr", this.updatable = args.hasOwnProperty("updatable") ? args.updatable : true ; this.serviceUrl = args.serviceUrl; - this.onUpdate = args.onUpdate; + this.onUpdate = []; + if (args.onUpdate) + { + this.onUpdate.push(args.onUpdate); + } this.dataTransformer = args.dataTransformer; this.appendData = args.append; @@ -146,17 +150,10 @@ define(["dojo/_base/xhr", if (data) { - try - { - if ((dataSet || self.updateOrAppend(data)) && self.onUpdate) - { - self.onUpdate(data); - } - } - catch(e) - { - console.error(e); - } + if ((dataSet || self.updateOrAppend(data)) && self.onUpdate.length > 0) + { + self.fireUpdate(data); + } } }; @@ -191,6 +188,7 @@ define(["dojo/_base/xhr", this.store = null; this.memoryStore = null; this.grid = null; + this.onUpdate = null; }; GridUpdater.prototype.updateOrAppend = function(data) @@ -232,10 +230,7 @@ define(["dojo/_base/xhr", finally { this.updating = false; - if (this.onUpdate) - { - this.onUpdate(data); - } + this.fireUpdate(data); } } @@ -263,5 +258,40 @@ define(["dojo/_base/xhr", } }; + GridUpdater.prototype.fireUpdate=function(data) + { + if (this.onUpdate.length > 0) + { + for(var i=0; i