Author: orudyy
Date: Fri Apr 15 08:09:31 2016
New Revision: 1739249

URL: http://svn.apache.org/viewvc?rev=1739249&view=rev
Log:
QPID-6983: Use datetime picking widget to set conditions for Date attributes

Modified:
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/CriteriaPane.js

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/CriteriaPane.js
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/CriteriaPane.js?rev=1739249&r1=1739248&r2=1739249&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/CriteriaPane.js
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/CriteriaPane.js
 Fri Apr 15 08:09:31 2016
@@ -26,6 +26,7 @@ define([
   "dojo/string",
   "dojo/dom-construct",
   "dojo/dom-style",
+  "dojo/sniff",
   "dojo/text!query/CriteriaPane.html",
   "dojox/html/entities",
   "dojo/Evented",
@@ -39,9 +40,12 @@ define([
   "dijit/form/TextBox",
   "dijit/form/NumberTextBox",
   "dijit/form/MultiSelect",
+  "dijit/form/TimeTextBox",
+  "dijit/form/DateTextBox",
+  "dijit/form/NumberSpinner",
   "dojo/domReady!"
 ],
-function(declare, array, lang, string, domConstruct, domStyle, template, 
entities, Evented)
+function(declare, array, lang, string, domConstruct, domStyle, has, template, 
entities, Evented)
 {
     var ANY = "any";
     var IS_NULL = "is null";
@@ -69,6 +73,7 @@ function(declare, array, lang, string, d
     var NUMERIC_CONDITIONS = 
[ANY,IS_NULL,IS_NOT_NULL,EQUAL,NOT_EQUAL,LESS_THAN,LESS_EQUAL_THAN,GREATER_THAN,
                               GREATER_EQUAL_THAN];
     var ENUM_CONDITIONS = [ANY,IS_NULL,IS_NOT_NULL,IN,NOT_IN];
+    var DATE_CONDITIONS = 
[ANY,IS_NULL,IS_NOT_NULL,EQUAL,NOT_EQUAL,LESS_THAN,LESS_EQUAL_THAN,GREATER_THAN,GREATER_EQUAL_THAN];
 
     var sqlEscape =                    function(value)
                                        {
@@ -167,6 +172,10 @@ function(declare, array, lang, string, d
                                          {
                                             return BOOLEAN_CONDITIONS;
                                          }
+                                         if (type === "Date")
+                                         {
+                                             return DATE_CONDITIONS;
+                                         }
                                          else if (isNumericType(type))
                                          {
                                             return NUMERIC_CONDITIONS;
@@ -195,6 +204,213 @@ function(declare, array, lang, string, d
                                          return 
array.indexOf(CONDITIONS_NOT_NEEDING_WIDGET,condition) == -1;
                                        }
 
+    // dojo TimeTextBox has a bug in Firefox
+    // https://bugzilla.mozilla.org/show_bug.cgi?id=487897
+    // Custom TimePicker is implemented for Firefox
+    var TimePicker =                   declare("qpid.management.TimePicker",
+                                         [dijit._WidgetBase, Evented],
+                                         {
+                                           disabled: false,
+                                           intermediateChanges: false,
+                                           value: undefined,
+                                           buildRendering: function()
+                                                     {
+                                                       var domNode = 
this.domNode = domConstruct.create("div", {className: "dijitReset 
dijitInline"});
+                                                       
domConstruct.create("span",{innerHTML:"T"}, domNode);
+                                                       var timeNode = 
domConstruct.create("div",{}, domNode);
+                                                       this.hoursEditor = new 
dijit.form.NumberSpinner({name: "hours",
+                                                                               
                         disabled: this.disabled,
+                                                                               
                         constraints:{ max:23, min:0 },
+                                                                               
                         style: {width: "4em"},
+                                                                               
                         intermediateChanges: this.intermediateChanges,
+                                                                               
                         title: "Hours in range 0-23"},
+                                                                               
                        timeNode);
+                                                       
this.hoursEditor.on("change", lang.hitch(this, this._setValue));
+                                                       
domConstruct.create("span",{innerHTML:":"}, domNode);
+                                                       var minutesNode = 
domConstruct.create("div",{}, domNode);
+                                                       this.minutesEditor = 
new dijit.form.NumberSpinner({name: "minutes",
+                                                                               
                           disabled: this.disabled,
+                                                                               
                           constraints:{ max:59, min:0 },
+                                                                               
                           style: {width: "4em"},
+                                                                               
                           intermediateChanges: this.intermediateChanges,
+                                                                               
                           title: "Minutes in range 0-59"},
+                                                                               
                           minutesNode);
+                                                       
this.minutesEditor.on("change", lang.hitch(this, this._setValue));
+                                                       
domConstruct.create("span",{innerHTML:":"}, domNode);
+                                                       var secondsNode = 
domConstruct.create("div",{}, domNode);
+                                                       this.secondsEditor = 
new dijit.form.NumberSpinner({name: "seconds",
+                                                                               
                            disabled: this.disabled,
+                                                                               
                            constraints:{ max:59, min:0 },
+                                                                               
                            style: {width: "4em"},
+                                                                               
                            intermediateChanges: this.intermediateChanges,
+                                                                               
                            title: "Seconds in range 0-59"},
+                                                                               
                            secondsNode);
+                                                       
this.secondsEditor.on("change", lang.hitch(this, this._setValue));
+                                                       
domConstruct.create("span",{innerHTML:"."}, domNode);
+                                                       var millisecondsNode = 
domConstruct.create("div",{}, domNode);
+                                                       this.millisecondsEditor 
= new dijit.form.NumberSpinner({name: "milliseconds",
+                                                                               
                             disabled: this.disabled,
+                                                                               
                             constraints:{ max:999, min:0 },
+                                                                               
                             style: {width: "5em"},
+                                                                               
                             intermediateChanges: this.intermediateChanges,
+                                                                               
                             title: "Milliseconds in range 0-999"},
+                                                                               
                             millisecondsNode);
+                                                       
this.millisecondsEditor.on("change", lang.hitch(this, this._setValue));
+                                                     },
+                                           startup:  function()
+                                                     {
+                                                       
this.inherited(arguments);
+                                                       
this.hoursEditor.startup();
+                                                       
this.minutesEditor.startup();
+                                                       
this.secondsEditor.startup();
+                                                       
this.millisecondsEditor.startup();
+                                                     },
+                                           _setValue:function()
+                                                     {
+                                                       var date = new Date(0);
+                                                       if 
(isFinite(this.hoursEditor.value) )
+                                                       {
+                                                        
date.setHours(this.hoursEditor.value);
+                                                       }
+                                                       if 
(isFinite(this.minutesEditor.value))
+                                                       {
+                                                         
date.setMinutes(this.minutesEditor.value);
+                                                       }
+                                                       if 
(isFinite(this.secondsEditor.value))
+                                                       {
+                                                        
date.setSeconds(this.secondsEditor.value);
+                                                       }
+                                                       if 
(isFinite(this.millisecondsEditor.value))
+                                                       {
+                                                        
date.setMilliseconds(this.millisecondsEditor.value);
+                                                       }
+                                                       this.value = date;
+                                                       this.emit("change", 
date);
+                                                     },
+                                           _setDisabledAttr:function(value)
+                                                     {
+                                                       
this.inherited(arguments);
+                                                       this.disabled = value;
+                                                       
this.hoursEditor.set("disabled", value);
+                                                       
this.minutesEditor.set("disabled", value);
+                                                       
this.secondsEditor.set("disabled", value);
+                                                       
this.millisecondsEditor.set("disabled", value);
+                                                     },
+                                           _setValueAttr:  function(value)
+                                                     {
+                                                       if (value)
+                                                       {
+                                                         var date = value 
instanceof Date ? value :new Date(value);
+                                                         
this.hoursEditor.set("value", date.getHours());
+                                                         
this.minutesEditor.set("value", date.getMinutes());
+                                                         
this.secondsEditor.set("value", date.getSeconds());
+                                                         
this.millisecondsEditor.set("value", date.getMilliseconds());
+                                                       }
+                                                       this.value = date;
+                                                       
this.inherited(arguments);
+                                                     },
+                                           _getValueAttr:  function()
+                                                     {
+                                                       return this.value;
+                                                     }
+                                         });
+
+    var DateTimePicker =               
declare("qpid.management.DateTimePicker",
+                                         [dijit._WidgetBase, Evented],
+                                         {
+                                           disabled: false,
+                                           value: undefined,
+                                           buildRendering: function()
+                                                     {
+                                                       var domNode = 
this.domNode = domConstruct.create("div",
+                                                                               
                         {className:"dijitReset dijitInline"});
+                                                       var dateNode = 
domConstruct.create("div",
+                                                                               
           {},
+                                                                               
           domNode);
+                                                       this.dateEditor = new 
dijit.form.DateTextBox({name: "date",
+                                                                               
                      disabled: this.disabled,
+                                                                               
                      intermediateChanges: true},
+                                                                               
                     dateNode);
+                                                       
this.dateEditor.on("change", lang.hitch(this, this._setValue));
+                                                       var timeNode = 
domConstruct.create("div",{}, domNode);
+                                                       if (has("ff"))
+                                                       {
+                                                         this.timeEditor = new 
TimePicker({name: "time",
+                                                                               
            value: this.value,
+                                                                               
            intermediateChanges: true,
+                                                                               
            disabled: this.disabled},
+                                                                               
           timeNode);
+                                                       }
+                                                       else
+                                                       {
+                                                         this.timeEditor = new 
dijit.form.TimeTextBox({name: "time",
+                                                                               
                        disabled: this.disabled,
+                                                                               
                        intermediateChanges: true,
+                                                                               
                        value: this.value,
+                                                                               
                        constraints: {
+                                                                               
                          timePattern: 'HH:mm:ss.SSS',
+                                                                               
                          clickableIncrement: 'T00:15:00',
+                                                                               
                          visibleIncrement: 'T00:15:00',
+                                                                               
                          visibleRange: 'T00:00:00'
+                                                                               
                          }
+                                                                               
                        },
+                                                                               
                        timeNode);
+                                                       }
+                                                       
this.timeEditor.on("change", lang.hitch(this, this._setValue));
+                                                     },
+                                           startup:  function()
+                                                     {
+                                                       
this.inherited(arguments);
+                                                       
this.dateEditor.startup();
+                                                       
this.timeEditor.startup();
+                                                     },
+                                           _setValue:function()
+                                                     {
+                                                       var date = 
this.dateEditor.get("value");
+                                                       if (date)
+                                                       {
+                                                         var time = 
this.timeEditor.value;
+                                                         var value = 
date.getTime() + (time ? time.getTime() : 0) ;
+                                                         this.value = new 
Date(value).toISOString();
+                                                         this.emit("change", 
this.value);
+                                                       }
+                                                     },
+                                           _setDisabledAttr: function(value)
+                                                     {
+                                                       
this.inherited(arguments);
+                                                       this.disabled = value;
+                                                       
this.dateEditor.set("disabled", value);
+                                                       
this.timeEditor.set("disabled", value);
+                                                       if (value)
+                                                       {
+                                                         this._setValue();
+                                                       }
+                                                       else
+                                                       {
+                                                         
this._setValueAttr(undefined);
+                                                       }
+                                                     },
+                                           _setValueAttr: function(value)
+                                                     {
+                                                       var date;
+                                                       if (value instanceof 
Date || isFinite(value))
+                                                       {
+                                                         var date = value 
instanceof Date ? value : new Date(value);
+                                                       }
+                                                       else
+                                                       {
+                                                         date = value;
+                                                       }
+                                                       
this.dateEditor.set("value", date);
+                                                       
this.timeEditor.set("value", date);
+                                                       this.value = value;
+                                                       
this.inherited(arguments);
+                                                     },
+                                           _getValueAttr: function()
+                                                     {
+                                                       return this.value;
+                                                     }
+                                         });
 
     return declare( "qpid.management.query.CriteriaPane",
                     [dijit._WidgetBase, dijit._TemplatedMixin, 
dijit._WidgetsInTemplateMixin, Evented],
@@ -255,6 +471,10 @@ function(declare, array, lang, string, d
                                                 }
                                                 this.valueEditor = new 
dijit.form.MultiSelect({disabled: true}, domNode);
                                             }
+                                            if (this.typeName === "Date")
+                                            {
+                                                this.valueEditor = new 
DateTimePicker({disabled: true}, domNode);
+                                            }
                                             else
                                             {
                                                 this.valueEditor = 
isNumericType(this.typeName)
@@ -294,10 +514,15 @@ function(declare, array, lang, string, d
                                         },
                         _conditionValueChanged: function(newValue)
                                         {
-                                            var expression = 
buildExpression(this.criteriaName,
+                                            var expression;
+                                            var val = 
this._getConditionValue();
+                                            if (val)
+                                            {
+                                              expression = 
buildExpression(this.criteriaName,
                                                                              
this.criteriaCondition.value,
-                                                                             
this._getConditionValue(),
+                                                                             
val,
                                                                              
this.typeName);
+                                            }
                                             if (!expression)
                                             {
                                               expression = this.criteriaName + 
":" + ANY;
@@ -388,6 +613,12 @@ function(declare, array, lang, string, d
                                               var value = 
this.valueEditor.value;
                                               return value && value.length;
                                             }
+
+                                            if (this.valueEditor instanceof 
DateTimePicker)
+                                            {
+                                              var value = 
this.valueEditor.value;
+                                              return !!value;
+                                            }
                                           }
                                           return true;
                                         }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to