diff options
| author | Alex Rudyy <orudyy@apache.org> | 2013-09-25 14:12:28 +0000 |
|---|---|---|
| committer | Alex Rudyy <orudyy@apache.org> | 2013-09-25 14:12:28 +0000 |
| commit | 53a3636863014e5f6d0af76228884421d4ce6210 (patch) | |
| tree | 52bed7f6e55fd02e5b82ed958df6a764c765d589 /qpid/java | |
| parent | 309f2f88d0a10def70bff0b08e660a8dd57fe27f (diff) | |
| download | qpid-python-53a3636863014e5f6d0af76228884421d4ce6210.tar.gz | |
QPID-5138: Convert the time displayed in log viewer, message viewer, etc into user prefered timezone
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1526182 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
8 files changed, 463 insertions, 124 deletions
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 7016e4eb5b..1aadd719dd 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 @@ -40,6 +40,7 @@ define(["dojo/_base/xhr", this.serviceUrl = args.serviceUrl; this.onUpdate = args.onUpdate; + this.dataTransformer = args.dataTransformer; this.appendData = args.append; this.appendLimit = args.appendLimit; @@ -122,6 +123,10 @@ define(["dojo/_base/xhr", function processData(data) { + if (self.dataTransformer) + { + data = self.dataTransformer(data); + } var dataSet = false; if (!store) { @@ -197,6 +202,10 @@ define(["dojo/_base/xhr", GridUpdater.prototype.refresh = function(data) { + if (this.dataTransformer && data) + { + data = this.dataTransformer(data); + } this.updating = true; try { diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Preferences.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Preferences.js index 735a657c61..18396d7b8d 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Preferences.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Preferences.js @@ -34,6 +34,7 @@ define([ "qpid/common/TimeZoneSelector", "dojo/text!../../showPreferences.html", "qpid/common/util", + "qpid/management/UserPreferences", "dijit/Dialog", "dijit/form/NumberSpinner", "dijit/form/CheckBox", @@ -43,26 +44,26 @@ define([ "dijit/form/DropDownButton", "dijit/form/Button", "dijit/form/Form", + "dijit/layout/BorderContainer", "dijit/layout/TabContainer", "dijit/layout/ContentPane", "dojox/grid/EnhancedGrid", "dojox/validate/us", "dojox/validate/web", "dojo/domReady!"], -function (declare, xhr, event, connect, dom, domConstruct, parser, json, Memory, ObjectStore, entities, registry, TimeZoneSelector, markup, util) { +function (declare, xhr, event, connect, dom, domConstruct, parser, json, Memory, ObjectStore, entities, registry, TimeZoneSelector, markup, util, UserPreferences) { - var preferenceNames = ["timeZone", "updatePeriod", "saveTabs"]; + var preferenceNames = ["timeZone", "updatePeriod"]; return declare("qpid.management.Preferences", null, { preferencesDialog: null, - saveButton: null, - cancelButton: null, constructor: function() { var that = this; + this.userPreferences = {}; this.domNode = domConstruct.create("div", {innerHTML: markup}); this.preferencesDialog = parser.parse(this.domNode)[0]; @@ -72,82 +73,38 @@ function (declare, xhr, event, connect, dom, domConstruct, parser, json, Memory, this[name] = registry.byId("preferences." + name); } - this.saveButton = registry.byId("preferences.saveButton"); - this.cancelButton = registry.byId("preferences.cancelButton"); + this.setButton = registry.byId("preferences.setButton"); + this.setAndCloseButton = registry.byId("preferences.setAndCloseButton"); + this.setButton.on("click", function(e){that._savePreferences(e, false)}); + this.setAndCloseButton.on("click", function(e){that._savePreferences(e, true)}); this.theForm = registry.byId("preferences.preferencesForm"); - this.users = registry.byId("preferences.users"); - this.users.set("structure", [ { name: "User", field: "name", width: "50%"}, + this.usersGrid = registry.byId("preferences.users"); + this.usersGrid.set("structure", [ { name: "User", field: "name", width: "50%"}, { name: "Authentication Provider", field: "authenticationProvider", width: "50%"}]); - this.cancelButton.on("click", function(){that.preferencesDialog.hide();}); - this.deletePreferencesButton = registry.byId("preferences.deletePreeferencesButton"); - this.deletePreferencesButton.on("click", function(){ - if (util.deleteGridSelections( - null, - that.users, - "rest/userpreferences", - "Are you sure you want to delete preferences for user", - "user")) - { - that._updateUsersWithPreferences(); - } - }); + this.deleteButton = registry.byId("preferences.deleteButton"); + this.deleteAndCloseButton = registry.byId("preferences.deleteAndCloseButton"); + this.deleteButton.on("click", function(e){that._deletePreferences(false)}); + this.deleteAndCloseButton.on("click", function(e){that._deletePreferences(true)}); + var deletePreferencesButtonToggler = function(rowIndex){ - var data = that.users.selection.getSelected(); - that.deletePreferencesButton.set("disabled",!data.length ); + var data = that.usersGrid.selection.getSelected(); + that.deleteButton.set("disabled",!data.length ); + that.deleteAndCloseButton.set("disabled",!data.length ); }; - connect.connect(this.users.selection, 'onSelected', deletePreferencesButtonToggler); - connect.connect(this.users.selection, 'onDeselected', deletePreferencesButtonToggler); - this.theForm.on("submit", function(e){ - event.stop(e); - if(that.theForm.validate()){ - var preferences = {}; - for(var i=0; i<preferenceNames.length; i++) - { - var name = preferenceNames[i]; - var preferenceWidget = that[name]; - if (preferenceWidget) - { - preferences[name] = preferenceWidget.get("value"); - } - } - xhr.post({ - url: "rest/preferences", - sync: true, - handleAs: "json", - headers: { "Content-Type": "application/json"}, - postData: json.stringify(preferences), - load: function(x) {that.success = true; }, - error: function(error) {that.success = false; that.failureReason = error;} - }); - if(that.success === true) - { - that.preferencesDialog.hide(); - } - else - { - alert("Error:" + that.failureReason); - } - } - return false; - }); + connect.connect(this.usersGrid.selection, 'onSelected', deletePreferencesButtonToggler); + connect.connect(this.usersGrid.selection, 'onDeselected', deletePreferencesButtonToggler); + this.theForm.on("submit", function(e){event.stop(e); return false;}); + + this._setValues(); + + deletePreferencesButtonToggler(); this.preferencesDialog.startup(); }, showDialog: function(){ - var that = this; - xhr.get({ - url: "rest/preferences", - sync: true, - handleAs: "json", - load: function(data) { - that._updatePreferencesWidgets(data); - that._updateUsersWithPreferences(); - that.preferencesDialog.show(); - }, - error: function(error){ - alert("Cannot load user preferences : " + error); - } - }); + this._setValues(); + this._loadUserPreferences(); + this.preferencesDialog.show(); }, destroy: function() @@ -159,24 +116,113 @@ function (declare, xhr, event, connect, dom, domConstruct, parser, json, Memory, } }, - _updatePreferencesWidgets: function(data) + _savePreferences: function(e, hideDialog) { - for(var i=0; i<preferenceNames.length; i++) + var that =this; + event.stop(e); + if(this.theForm.validate()){ + var preferences = {}; + for(var i=0; i<preferenceNames.length; i++) + { + var name = preferenceNames[i]; + var preferenceWidget = this[name]; + if (preferenceWidget) + { + preferences[name] = preferenceWidget.hasOwnProperty("checked") ? preferenceWidget.checked : preferenceWidget.get("value"); + } + } + + UserPreferences.setPreferences( + preferences, + function(preferences) + { + success = true; + if (hideDialog) + { + that.preferencesDialog.hide(); + } + else + { + var reloadUsers = true; + if (that.users) + { + var authenticatedUser = dom.byId("authenticatedUser").innerHTML; + for(var i=0; i<that.users.length; i++) + { + if (that.users[i].name == authenticatedUser) + { + reloadUsers = false; + break; + } + } + } + if (reloadUsers) + { + that._loadUserPreferences(); + } + alert("Preferences stored successfully"); + } + }, + function(error){alert("Error:" + error);} + ); + } + }, + + _deletePreferences: function(hideDialog){ + var data = this.usersGrid.selection.getSelected(); + if (util.deleteGridSelections( + null, + this.usersGrid, + "rest/userpreferences", + "Are you sure you want to delete preferences for user", + "user")) + { + this._loadUserPreferences(); + var authenticatedUser = dom.byId("authenticatedUser").innerHTML; + for(i = 0; i<data.length; i++) + { + if (data[i].name == authenticatedUser) + { + UserPreferences.resetPreferences(); + this._setValues(); + break; + } + } + if (hideDialog) + { + this.preferencesDialog.hide(); + } + } + }, + + _setValues: function() + { + for(var i = 0; i < preferenceNames.length; i++) { - var preference = preferenceNames[i]; - if (this.hasOwnProperty(preference)) + var name = preferenceNames[i]; + var preferenceWidget = this[name]; + if (preferenceWidget) { - var value = data ? data[preference] : null; + var value = UserPreferences[name] if (typeof value == "string") { value = entities.encode(String(value)) } - this[preference].set("value", value); + if (!value && name == "updatePeriod") + { + // set to default + value = 5; + } + preferenceWidget.set("value", value); + if (preferenceWidget.hasOwnProperty("checked")) + { + preferenceWidget.set("checked", UserPreferences[name] ? true : false); + } } } }, - _updateUsersWithPreferences: function() + _loadUserPreferences : function() { var that = this; xhr.get({ @@ -189,14 +235,15 @@ function (declare, xhr, event, connect, dom, domConstruct, parser, json, Memory, { users[i].id = users[i].authenticationProvider + "/" + users[i].name; } + that.users = users; var usersStore = new Memory({data: users, idProperty: "id"}); var usersDataStore = new ObjectStore({objectStore: usersStore}); - if (that.users.store) + if (that.usersGrid.store) { - that.users.store.close(); + that.usersGrid.store.close(); } - that.users.set("store", usersDataStore); - that.users._refresh(); + that.usersGrid.set("store", usersDataStore); + that.usersGrid._refresh(); }); } diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js index a47b24d1ab..1a2283e07c 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js @@ -33,6 +33,7 @@ define(["dojo/_base/xhr", "qpid/management/addBinding", "qpid/management/moveCopyMessages", "qpid/management/showMessage", + "qpid/management/UserPreferences", "dojo/store/JsonRest", "dojox/grid/EnhancedGrid", "dojo/data/ObjectStore", @@ -41,7 +42,7 @@ define(["dojo/_base/xhr", "dojox/grid/enhanced/plugins/IndirectSelection", "dojo/domReady!"], function (xhr, parser, query, registry, connect, event, json, properties, updater, util, formatter, - UpdatableStore, addBinding, moveMessages, showMessage, JsonRest, EnhancedGrid, ObjectStore, entities) { + UpdatableStore, addBinding, moveMessages, showMessage, UserPreferences, JsonRest, EnhancedGrid, ObjectStore, entities) { function Queue(name, parent, controller) { this.name = name; @@ -98,10 +99,7 @@ define(["dojo/_base/xhr", {name:"Arrival", field:"arrivalTime", width: "100%", formatter: function(val) { - var d = new Date(0); - d.setUTCSeconds(val/1000); - - return d.toLocaleString(); + return UserPreferences.formatDateTime(val, {addOffset: true, appendTimeZone: true}); } } ], plugins: { @@ -164,6 +162,7 @@ define(["dojo/_base/xhr", event.stop(evt); that.deleteQueue(); }); + UserPreferences.addListener(that); }}); @@ -237,6 +236,12 @@ define(["dojo/_base/xhr", Queue.prototype.close = function() { updater.remove( this.queueUpdater ); + UserPreferences.removeListener(this); + }; + + Queue.prototype.onPreferencesChange = function(data) + { + this.grid._refresh(); }; var queueTypeKeys = { diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/UserPreferences.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/UserPreferences.js new file mode 100644 index 0000000000..e9552de31a --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/UserPreferences.js @@ -0,0 +1,259 @@ +/* + * + * 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/json", + "dojo/date", + "dojo/date/locale", + "dojo/number", + "dojox/date/timezone"], function (xhr, json, date, locale, number) { + + var listeners = []; + var userTimeZones = {}; + + var UserPreferences = { + + loadPreferences : function(callbackSuccessFunction, callbackErrorFunction) + { + var that = this; + xhr.get({ + url: "rest/preferences", + sync: true, + handleAs: "json", + load: function(data) + { + for(var name in data) + { + that[name] = data[name]; + } + if (callbackSuccessFunction) + { + callbackSuccessFunction(); + } + }, + error: function(error) + { + if (callbackErrorFunction) + { + callbackErrorFunction(error); + } + } + }); + }, + + setPreferences : function(preferences, callbackSuccessFunction, callbackErrorFunction) + { + var that = this; + xhr.post({ + url: "rest/preferences", + sync: true, + handleAs: "json", + headers: { "Content-Type": "application/json"}, + postData: json.stringify(preferences), + load: function(x) + { + for(var name in preferences) + { + if (preferences.hasOwnProperty(name)) + that[name] = preferences[name]; + } + that._notifyListeners(preferences); + if (callbackSuccessFunction) + { + callbackSuccessFunction(preferences); + } + }, + error: function(error) + { + if (callbackErrorFunction) + { + callbackErrorFunction(error); + } + } + }); + }, + + resetPreferences : function() + { + var preferences = {}; + for(var name in this) + { + if (this.hasOwnProperty(name) && typeof this[name] != "function") + { + if (name == "preferencesError") + { + continue; + } + this[name] = null; + preferences[name] = undefined; + delete preferences[name]; + } + } + this._notifyListeners(preferences); + }, + + addListener : function(obj) + { + listeners.push(obj); + }, + + removeListener : function(obj) + { + for(var i = 0; i < listeners.length; i++) + { + if(listeners[i] === obj) + { + listeners.splice(i,1); + return; + } + } + }, + + _notifyListeners : function(preferences) + { + for(var i = 0; i < listeners.length; i++) + { + try + { + listeners[i].onPreferencesChange(preferences); + } + catch(e) + { + if (console && console.warn) + { + console.warn(e); + } + } + } + }, + + getTimeZoneInfo : function(timeZoneName) + { + if (!timeZoneName && this.timeZone) + { + timeZoneName = this.timeZone; + } + + if (!timeZoneName) + { + return null; + } + + var timeZoneInfo = userTimeZones[timeZoneName]; + if (timeZoneInfo) + { + return timeZoneInfo; + } + + timeZoneInfo = dojox.date.timezone.getTzInfo(new Date(), timeZoneName); + userTimeZones[timeZoneName] = timeZoneInfo; + return timeZoneInfo; + }, + + addTimeZoneOffsetToUTC : function(utcTimeInMilliseconds, timeZone) + { + var tzi = null; + if (timeZone && timeZone.hasOwnProperty("tzOffset")) + { + tzi = timeZone; + } + else + { + tzi = this.getTimeZoneInfo(timeZone); + } + + if (tzi) + { + var browserTimeZoneOffsetInMinues = new Date().getTimezoneOffset(); + return utcTimeInMilliseconds - (tzi.tzOffset - browserTimeZoneOffsetInMinues) * 60000; + } + return utcTimeInMilliseconds; + }, + + getTimeZoneDescription : function(timeZone) + { + var tzi = null; + if (timeZone && timeZone.hasOwnProperty("tzOffset")) + { + tzi = timeZone; + } + else + { + tzi = this.getTimeZoneInfo(timeZone); + } + + if (tzi) + { + var timeZoneOfsetInMinutes = -tzi.tzOffset; + var timeZoneCode = tzi.tzAbbr; + return (timeZoneOfsetInMinutes>=0? "+" : "-") + + number.format(timeZoneOfsetInMinutes/60, {pattern: "00"}) + + ":" + number.format(timeZoneOfsetInMinutes%60, {pattern: "00"}) + + " " + timeZoneCode; + } + return date.getTimezoneName(new Date()); + }, + + formatDateTime : function(utcTimeInMilliseconds, options) + { + var dateTimeOptions = options || {}; + var tzi = this.getTimeZoneInfo(dateTimeOptions.timeZoneName); + var timeInMilliseconds = utcTimeInMilliseconds; + + if (tzi && dateTimeOptions.addOffset) + { + timeInMilliseconds = this.addTimeZoneOffsetToUTC(utcTimeInMilliseconds, tzi); + } + + var d = new Date(timeInMilliseconds); + + var formatOptions = { + datePattern: dateTimeOptions.datePattern || "yyyy-MM-dd", + timePattern: dateTimeOptions.timePattern || "HH:mm:ss.SSS" + }; + + if ("date" == dateTimeOptions.selector) + { + formatOptions.selector = "date"; + } + else if ("time" == dateTimeOptions.selector) + { + formatOptions.selector = "time"; + } + + var result = locale.format(d, formatOptions); + if(dateTimeOptions.appendTimeZone) + { + result += " (" + this.getTimeZoneDescription(tzi) + ")"; + } + return result; + } + + }; + + UserPreferences.loadPreferences(null, + function(error) + { + UserPreferences.preferencesError = error; + } + ); + + return UserPreferences; +});
\ No newline at end of file diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogFileDownloadDialog.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogFileDownloadDialog.js index c25fd7c609..97b4d7df73 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogFileDownloadDialog.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogFileDownloadDialog.js @@ -28,7 +28,7 @@ define([ "dojo/parser", "dojo/store/Memory", "dojo/data/ObjectStore", - "dojo/date/locale", + "qpid/management/UserPreferences", "dojo/number", "dijit/registry", "dijit/Dialog", @@ -36,7 +36,7 @@ define([ "dojox/grid/EnhancedGrid", "dojo/text!../../../logs/showLogFileDownloadDialog.html", "dojo/domReady!" -], function(declare, event, xhr, connect, domConstruct, query, parser, Memory, ObjectStore, locale, number, +], function(declare, event, xhr, connect, domConstruct, query, parser, Memory, ObjectStore, UserPreferences, number, registry, Dialog, Button, EnhancedGrid, template){ @@ -79,8 +79,7 @@ return declare("qpid.management.logs.LogFileDownloadDialog", null, { }, { name: "Last Modified", field: "lastModified", width: "250px", formatter: function(val) { - var d = new Date(val); - return locale.format(d, {selector:"date", datePattern: "EEE, MMM d yy, HH:mm:ss z (ZZZZ)"}); + return UserPreferences.formatDateTime(val, {addOffset: true, appendTimeZone: true}); } } ]; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogViewer.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogViewer.js index 56b37d0167..0c6c21964f 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogViewer.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogViewer.js @@ -23,14 +23,25 @@ define(["dojo/_base/xhr", "dojo/query", "dojo/date/locale", "dijit/registry", + "qpid/management/UserPreferences", "qpid/common/grid/GridUpdater", "qpid/common/grid/UpdatableGrid", "qpid/management/logs/LogFileDownloadDialog", "dojo/text!../../../logs/showLogViewer.html", "dojo/domReady!"], - function (xhr, parser, query, locale, registry, GridUpdater, UpdatableGrid, LogFileDownloadDialog, markup) { + function (xhr, parser, query, locale, registry, UserPreferences, GridUpdater, UpdatableGrid, LogFileDownloadDialog, markup) { var defaulGridRowLimit = 4096; + var currentTimeZone; + + function dataTransformer(data) + { + for(var i=0; i < data.length; i++) + { + data[i].time = UserPreferences.addTimeZoneOffsetToUTC(data[i].timestamp); + } + return data; + } function LogViewer(name, parent, controller) { var self = this; @@ -64,10 +75,11 @@ define(["dojo/_base/xhr", LogViewer.prototype._buildGrid = function() { var self = this; + currentTimeZone = UserPreferences.getTimeZoneDescription(); var gridStructure = [ { - hidden: true, + hidden: false, name: "ID", field: "id", width: "50px", @@ -75,28 +87,27 @@ define(["dojo/_base/xhr", filterable: true }, { - name: "Date", field: "timestamp", width: "100px", datatype: "date", + name: "Date", field: "time", width: "100px", datatype: "date", formatter: function(val) { - var d = new Date(0); - d.setUTCSeconds(val/1000); - return locale.format(d, {selector:"date", datePattern: "EEE, MMM d yy"}); - }, - dataTypeArgs: { - selector: "date", - datePattern: "EEE MMMM d yyy" + return UserPreferences.formatDateTime(val, {selector:"date"}); } }, - { name: "Time", field: "timestamp", width: "150px", datatype: "time", + { name: "Time ", field: "time", width: "100px", datatype: "time", formatter: function(val) { - var d = new Date(0); - d.setUTCSeconds(val/1000); - return locale.format(d, {selector:"time", timePattern: "HH:mm:ss z (ZZZZ)"}); - }, - dataTypeArgs: { - selector: "time", - timePattern: "HH:mm:ss ZZZZ" + return UserPreferences.formatDateTime(val, {selector:"time"}); } }, + { + name: "Time zone", + field: "time", + width: "80px", + datatype: "string", + hidden: true, + filterable: false, + formatter: function(val) { + return currentTimeZone; + }, + }, { name: "Level", field: "level", width: "50px", datatype: "string", autoComplete: true, hidden: true}, { name: "Logger", field: "logger", width: "150px", datatype: "string", autoComplete: false, hidden: true}, { name: "Thread", field: "thread", width: "100px", datatype: "string", hidden: true}, @@ -132,14 +143,15 @@ define(["dojo/_base/xhr", } }, append: true, - appendLimit: defaulGridRowLimit + appendLimit: defaulGridRowLimit, + dataTransformer: dataTransformer }); this.grid = new UpdatableGrid(updater.buildUpdatableGridArguments({ structure: gridStructure, selectable: true, selectionMode: "none", sortInfo: -1, - sortFields: [{attribute: 'timestamp', descending: true}], + sortFields: [{attribute: 'id', descending: true}], plugins:{ nestedSorting:true, enhancedFilter:{defaulGridRowLimit: defaulGridRowLimit}, @@ -170,14 +182,19 @@ define(["dojo/_base/xhr", }; this.grid.on("styleRow", onStyleRow); this.grid.startup(); + UserPreferences.addListener(this); } catch(err) { - console.error(err); + if (console && console.error) + { + console.error(err); + } } }; LogViewer.prototype.close = function() { + UserPreferences.removeListener(this); if (this.grid) { this.grid.destroy(); @@ -195,5 +212,12 @@ define(["dojo/_base/xhr", } }; + LogViewer.prototype.onPreferencesChange = function(data) + { + currentTimeZone = UserPreferences.getTimeZoneDescription(); + dataTransformer(this.grid.updater.memoryStore.data); + this.grid._refresh(); + }; + return LogViewer; }); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/showMessage.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/showMessage.js index 59822ec535..1281e44166 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/showMessage.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/showMessage.js @@ -29,8 +29,9 @@ define(["dojo/_base/xhr", "dojo/_base/connect", "qpid/common/properties", "dojox/html/entities", + "qpid/management/UserPreferences", "dojo/domReady!"], - function (xhr, dom, construct, domClass, win, registry, parser, array, event, json, query, connect, properties, entities) { + function (xhr, dom, construct, domClass, win, registry, parser, array, event, json, query, connect, properties, entities, UserPreferences) { function encode(val){ @@ -88,9 +89,7 @@ define(["dojo/_base/xhr", } tableStr += "</table>"; } else if(domClass.contains(field,"datetime")) { - var d = new Date(0); - d.setUTCSeconds(val/1000); - field.innerHTML = d.toLocaleString(); + field.innerHTML = UserPreferences.formatDateTime(val, {addOffset: true, appendTimeZone: true}); } else { field.innerHTML = encode(val); } diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/showPreferences.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/showPreferences.html index ede111272a..35a489474f 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/showPreferences.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/showPreferences.html @@ -40,14 +40,10 @@ "/> </td> </tr> - <tr> - <td><strong>Save tabs:</strong></td> - <td><input id="preferences.saveTabs" type="checkbox" data-dojo-type="dijit/form/CheckBox" name="saveTabs"/></td> - </tr> </table> <div class="dijitDialogPaneActionBar"> - <input type="submit" value="Save Preferences" data-dojo-type="dijit/form/Button" data-dojo-props="label: 'Save Preferences'" id="preferences.saveButton"/> - <button value="Cancel" data-dojo-type="dijit/form/Button" data-dojo-props="label: 'Cancel'" id="preferences.cancelButton"></button> + <button data-dojo-type="dijit/form/Button" data-dojo-props="label: 'Set'" id="preferences.setButton">Set</button> + <button data-dojo-type="dijit/form/Button" data-dojo-props="label: 'Set and Close'" id="preferences.setAndCloseButton">Set and Close</button> </div> </form> </div> @@ -76,7 +72,8 @@ </thead> </table> <div class="dijitDialogPaneActionBar"> - <button id="preferences.deletePreeferencesButton" data-dojo-type="dijit/form/Button" data-dojo-props="label:'Delete Preferences', title:'Delete preferences for selected users'">Delete Preferences</button> + <button id="preferences.deleteButton" data-dojo-type="dijit/form/Button" data-dojo-props="label:'Delete', title:'Delete preferences for selected users'">Delete</button> + <button id="preferences.deleteAndCloseButton" data-dojo-type="dijit/form/Button" data-dojo-props="label: 'Delete and Close', title:'Delete preferences for selected users and close the dialog'">Delete and Close</button> </div> </div> </div> |
