You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2013/09/25 16:12:28 UTC

svn commit: r1526182 - in /qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources: ./ js/qpid/common/grid/ js/qpid/management/ js/qpid/management/logs/

Author: orudyy
Date: Wed Sep 25 14:12:28 2013
New Revision: 1526182

URL: http://svn.apache.org/r1526182
Log:
QPID-5138: Convert the time displayed in log viewer, message viewer, etc into user prefered timezone

Added:
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/UserPreferences.js
Modified:
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/GridUpdater.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Preferences.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogFileDownloadDialog.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogViewer.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/showMessage.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showPreferences.html

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/GridUpdater.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/GridUpdater.js?rev=1526182&r1=1526181&r2=1526182&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/GridUpdater.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/GridUpdater.js Wed Sep 25 14:12:28 2013
@@ -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
                {

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Preferences.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Preferences.js?rev=1526182&r1=1526181&r2=1526182&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Preferences.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Preferences.js Wed Sep 25 14:12:28 2013
@@ -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, 
         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, 
       }
     },
 
-    _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, 
              {
                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();
       });
     }
 

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js?rev=1526182&r1=1526181&r2=1526182&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js Wed Sep 25 14:12:28 2013
@@ -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 = {

Added: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/UserPreferences.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/UserPreferences.js?rev=1526182&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/UserPreferences.js (added)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/UserPreferences.js Wed Sep 25 14:12:28 2013
@@ -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

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogFileDownloadDialog.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogFileDownloadDialog.js?rev=1526182&r1=1526181&r2=1526182&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogFileDownloadDialog.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogFileDownloadDialog.js Wed Sep 25 14:12:28 2013
@@ -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.Log
           },
           { 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});
               }
           }
         ];

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogViewer.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogViewer.js?rev=1526182&r1=1526181&r2=1526182&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogViewer.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogViewer.js Wed Sep 25 14:12:28 2013
@@ -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;
        });

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/showMessage.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/showMessage.js?rev=1526182&r1=1526181&r2=1526182&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/showMessage.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/showMessage.js Wed Sep 25 14:12:28 2013
@@ -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);
                             }

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showPreferences.html
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showPreferences.html?rev=1526182&r1=1526181&r2=1526182&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showPreferences.html (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showPreferences.html Wed Sep 25 14:12:28 2013
@@ -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>



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org