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 2016/04/13 14:58:42 UTC

svn commit: r1738933 [2/2] - in /qpid/java/trunk/broker-plugins/management-http: ./ src/main/java/org/apache/qpid/server/management/plugin/ src/main/java/resources/ src/main/java/resources/css/ src/main/java/resources/js/qpid/management/ src/main/java/...

Added: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryBuilder.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryBuilder.js?rev=1738933&view=auto
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryBuilder.js (added)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryBuilder.js Wed Apr 13 12:58:41 2016
@@ -0,0 +1,618 @@
+/*
+ *
+ * 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/declare",
+        "dojo/_base/lang",
+        "dojo/parser",
+        "dojo/dom-construct",
+        "dojo/json",
+        "dojo/text!query/QueryBuilder.html",
+        "dojox/html/entities",
+        "dgrid/Grid",
+        "dgrid/Keyboard",
+        "dgrid/Selection",
+        "dgrid/extensions/Pagination",
+        "dgrid/Selector",
+        "dstore/Memory",
+        'dstore/legacy/DstoreAdapter',
+        "qpid/management/query/DropDownSelect",
+        "qpid/management/query/WhereExpression",
+        "dojo/Evented",
+        "dijit/_WidgetBase",
+        "dijit/_TemplatedMixin",
+        "dijit/_WidgetsInTemplateMixin",
+        "dijit/form/FilteringSelect",
+        "dijit/form/ComboBox",
+        "dijit/form/Button",
+        "dijit/form/ComboButton",
+        "dijit/form/CheckBox",
+        "dijit/form/DropDownButton",
+        "dijit/form/NumberTextBox",
+        "dijit/form/ValidationTextBox",
+        "dijit/form/Select",
+        "dijit/form/SimpleTextarea",
+        "dijit/Menu",
+        "dijit/MenuItem",
+        "dijit/Toolbar",
+        "dijit/TooltipDialog",
+        "dijit/Dialog",
+        "dojo/Deferred",
+        "dojo/json"
+        ],
+        function(declare,
+                 lang,
+                 parser,
+                 domConstruct,
+                 json,
+                 template,
+                 entities,
+                 Grid,
+                 Keyboard,
+                 Selection,
+                 Pagination,
+                 Selector,
+                 Memory,
+                 DstoreAdapter,
+                 DropDownSelect,
+                 WhereExpression
+                 )
+        {
+             var selectExpressionToArray =  function(value)
+                                            {
+                                              var columns = [];
+                                              if (value)
+                                              {
+                                                var attributes = value.split(",");
+                                                for (var i in attributes)
+                                                {
+                                                   var attribute = attributes[i].replace(/^\s+|\s+$/gm,'');
+                                                   columns.push(attribute);
+                                                }
+                                              }
+                                              return columns;
+                                            };
+
+             var arrayToSelectExpression =  function(value)
+                                            {
+                                              var expression = "";
+                                              if (lang.isArray(value))
+                                              {
+                                                for(var i=0; i<value.length ;i++)
+                                                {
+                                                  var selection = value[i] && value[i].hasOwnProperty("attributeName") ?
+                                                                  value[i].attributeName : value[i];
+                                                  expression = expression + (i > 0 ? "," : "") + selection;
+                                                }
+                                              }
+                                              return expression;
+                                            };
+             var predefinedCategories =     [ {id: "queue", name: "queue"},  {id: "connection", name: "connection"} ];
+
+            return declare( "qpid.management.query.QueryBuilder",
+                            [dijit._Widget, dijit._TemplatedMixin, dijit._WidgetsInTemplateMixin],
+                            {
+                                 //Strip out the apache comment header from the template html as comments unsupported.
+                                templateString:    template.replace(/<!--[\s\S]*?-->/g, ""),
+
+                                /**
+                                 * Fields from template
+                                 **/
+                                scope:null,
+                                categoryName: null,
+                                advancedSearch: null,
+                                selectExpression: null,
+                                whereExpression: null,
+                                standardSearch: null,
+                                selectColumnsButton: null,
+                                selectWhereButton: null,
+                                searchButton: null,
+                                modeButton: null,
+                                whereExpressionBuilder: null,
+                                queryResultGrid: null,
+
+                                /**
+                                 * constructor parameter
+                                 */
+                                _management: null,
+
+                                /**
+                                 * Inner fields
+                                 */
+                                _standardMode: true,
+                                _standardModeLastWhereExpression: null,
+                                _standardModeLastSelectExpression: null,
+                                _scopeModelObjects: {},
+                                _categorySelector: null,
+                                _searchScopeSelector: null,
+                                _lastCategory: null,
+                                _lastSearchQuery: null,
+
+                                constructor: function(args)
+                                             {
+                                               this._management = args.management;
+                                               this.inherited(arguments);
+                                             },
+                                postCreate:  function()
+                                             {
+                                               this.inherited(arguments);
+                                               this._postCreate();
+                                             },
+                                _postCreate: function()
+                                             {
+                                               var promise = this._createScopeList();
+                                               promise.then(lang.hitch(this, this. _postCreateScope));
+                                             },
+                                _postCreateScope: function()
+                                             {
+                                               this._createCategoryList();
+
+                                               // advanced mode widgets
+                                               this.selectExpression.on("change", lang.hitch(this, this._advancedModeSelectChanged));
+                                               this.whereExpression.on("change", lang.hitch(this, this._advancedModeWhereChanged));
+                                               this.selectExpression.on("keyUp", lang.hitch(this, this._advancedModeKeyPressed));
+                                               this.whereExpression.on("keyUp", lang.hitch(this, this._advancedModeKeyPressed));
+
+                                               // standard mode widgets
+                                               this.selectColumnsButton.on("change", lang.hitch(this, this._standardModeSelectChanged));
+                                               this.selectColumnsButton.startup();
+                                               this.selectWhereButton.startup();
+                                               this.whereExpressionBuilder.set("whereFieldsSelector", this.selectWhereButton );
+                                               this.whereExpressionBuilder.startup();
+                                               this.whereExpressionBuilder.on("change", lang.hitch(this, this._standardModeWhereChanged));
+
+                                               // search & mode buttons
+                                               this.searchButton.on("click", lang.hitch(this, this.search));
+                                               this.modeButton.on("click", lang.hitch(this, this._modeChanged));
+
+                                               this._categoryChanged();
+                                               this._toggleSearchButton();
+                                             },
+                                search:      function()
+                                             {
+                                               var select, where;
+                                               if (this._standardMode)
+                                               {
+                                                  select = this._standardModeLastSelectExpression;
+                                                  where = this._standardModeLastWhereExpression;
+                                               }
+                                               else
+                                               {
+                                                 select = this.selectExpression.value;
+                                                 where = this.whereExpression.value;
+                                                 this._resetStandardSearchWidgetsIfAdvancedChanged();
+                                               }
+
+                                               var category = this._categorySelector.value.toLowerCase();
+                                               if (select && category)
+                                               {
+                                                 var scope = this._searchScopeSelector.value;
+                                                 this._lastSearchQuery = {scope:scope, select: select, where: where, category: category};
+                                                 var modelObj = this._scopeModelObjects[scope];
+                                                 this._doSearch( modelObj, category, select, where);
+                                               }
+                                             },
+                                _doSearch:   function(modelObj, category, select, where)
+                                             {
+                                               var that = this;
+                                               var result = this._management.query({select: select,
+                                                                                    where: where,
+                                                                                    parent: modelObj,
+                                                                                    category: category,
+                                                                                    transformIntoObjects: true});
+                                               result.then(function(data)
+                                                           {
+                                                             that._showResults(data, select);
+                                                           },
+                                                           function(error)
+                                                           {
+                                                             if (error && error.response && error.response.status == 404)
+                                                             {
+                                                               that._showResults([], select);
+                                                             }
+                                                             else
+                                                             {
+                                                               alert(error.message ? error.message: error);
+                                                             }
+                                                           });
+                                             },
+                                _advancedModeWhereChanged:  function()
+                                             {
+                                               if (this._standardModeLastWhereExpression && !this._standardMode)
+                                               {
+                                                 dijit.showTooltip("On switching into Standard Mode where expression"
+                                                                 + " will be erased. Copying of where expression from "
+                                                                 + " Advanced Mode into Standard Mode is unsupported!",
+                                                                 this.whereExpression.domNode,
+                                                                 this.whereExpression.get("tooltipPosition"),
+                                                                 !this.whereExpression.isLeftToRight());
+                                               }
+                                             },
+                                _advancedModeSelectChanged: function()
+                                             {
+                                               this._toggleSearchButton(this.selectExpression.value);
+                                             },
+                                _toggleSearchButton: function(select)
+                                             {
+                                               var criteriaNotSet = !select;
+                                               this.searchButton.set("disabled",criteriaNotSet);
+                                               this.searchButton.set("title", criteriaNotSet?"Please, choose fields to display in order to enable search":"Search");
+                                             },
+                                _standardModeSelectChanged: function(result)
+                                             {
+                                               this._standardModeLastSelectExpression = arrayToSelectExpression(result);
+                                               this.selectExpression.set("value", this._standardModeLastSelectExpression);
+                                               this.search();
+                                             },
+                                _standardModeWhereChanged: function(result)
+                                             {
+                                                this._standardModeLastWhereExpression = result;
+                                                this.whereExpression.set("value", result);
+                                                this.search();
+                                             },
+                                _resetStandardSearchWidgetsIfAdvancedChanged: function()
+                                             {
+                                               if (this._standardModeLastWhereExpression && this._standardModeLastWhereExpression != this.whereExpression.value)
+                                               {
+                                                 this._standardModeLastWhereExpression = "";
+                                                 this.whereExpressionBuilder.clearWhereCriteria();
+                                               }
+
+                                               if (this._standardModeLastSelectExpression != this.selectExpression.value)
+                                               {
+                                                 this._standardModeLastSelectExpression = this.selectExpression.value;
+                                                 this.selectColumnsButton.set("data", {selected: selectExpressionToArray(this.selectExpression.value)});
+                                                 var promise = this.selectColumnsButton.get("selectedItems");
+                                                 dojo.when(promise,
+                                                           lang.hitch(this,
+                                                                      function(selectedItems)
+                                                                      {
+                                                                        var val = arrayToSelectExpression(selectedItems);
+                                                                        this._standardModeLastSelectExpression = val;
+                                                                      }));
+                                               }
+                                             },
+                                _showResults:function(data, select)
+                                             {
+                                               var store = new Memory({data: data, idProperty: 'id'});
+                                               if (!this._resultsGrid)
+                                               {
+                                                 if (select)
+                                                 {
+                                                   this._buildGrid(store, select);
+                                                 }
+                                               }
+                                               else
+                                               {
+                                                 this._resultsGrid.set("collection", store);
+                                                 this._resultsGrid.set("columns", this._getColumns(select));
+                                                 this._resultsGrid.refresh();
+                                               }
+                                             },
+                                _buildGrid:  function(store, select)
+                                             {
+                                                var CustomGrid = declare([ Grid, Keyboard, Selection, Pagination ]);
+                                                var grid = new CustomGrid({
+                                                                              columns: this._getColumns(select),
+                                                                              collection: store,
+                                                                              rowsPerPage: 100,
+                                                                              selectionMode: 'single',
+                                                                              cellNavigation: false,
+                                                                              className: 'dgrid-autoheight'
+                                                                          },
+                                                                          this.queryResultGrid);
+                                                this._resultsGrid = grid;
+                                                this._resultsGrid.startup();
+                                                this._resultsGrid.on('.dgrid-row:dblclick', lang.hitch(this, this._onRowClick));
+                                             },
+                                _onRowClick: function (event)
+                                             {
+                                               var row = this._resultsGrid.row(event);
+                                               var promise = this._management.get({url:"service/structure"});
+                                               var that = this;
+                                               promise.then(function (data)
+                                                            {
+                                                              var findObject = function findObject(structure, parent, type)
+                                                              {
+                                                                  var item = {id:structure.id,
+                                                                             name: structure.name,
+                                                                             type: type,
+                                                                             parent: parent};
+                                                                  if (item.id == row.id)
+                                                                  {
+                                                                    return item;
+                                                                  }
+                                                                  else
+                                                                  {
+                                                                      for(var fieldName in structure)
+                                                                      {
+                                                                          var fieldValue = structure[fieldName];
+                                                                          if (lang.isArray(fieldValue))
+                                                                          {
+                                                                             var fieldType = fieldName.substring(0, fieldName.length - 1);
+                                                                             for (var i = 0; i < fieldValue.length; i++)
+                                                                             {
+                                                                                var object = fieldValue[i];
+                                                                                var result = findObject(object, item, fieldType);
+                                                                                if (result != null)
+                                                                                {
+                                                                                    return result;
+                                                                                }
+                                                                             }
+                                                                          }
+                                                                      }
+                                                                      return null;
+                                                                  }
+                                                              };
+
+                                                              var item = findObject(data, null, "broker");
+                                                              if (item != null)
+                                                              {
+                                                               that.controller.show(item.type, item.name, item.parent, item.id);
+                                                              }
+                                                            });
+                                             },
+                                _getColumns: function(select)
+                                             {
+                                               var columns = {};
+                                               if (select)
+                                               {
+                                                  var attributes = select.split(",");
+                                                  for (var i in attributes)
+                                                  {
+                                                     var attribute = attributes[i].replace(/^\s+|\s+$/gm,'');
+                                                     columns[attribute] = attribute;
+                                                  }
+                                               }
+                                               return columns;
+                                             },
+                                _createScopeList: function()
+                                             {
+                                               var that = this;
+                                               var result = this._management.query({select: "$parent.name, name, id",
+                                                                                   category : "virtualhost",
+                                                                                   transformIntoObjects: true});
+                                               var deferred = new dojo.Deferred();
+                                               result.then(function(data)
+                                                           {
+                                                             try
+                                                             {
+                                                               that._scopeDataReceived(data);
+                                                             }
+                                                             finally
+                                                             {
+                                                               deferred.resolve(that._searchScopeSelector);
+                                                             }
+                                                           },
+                                                           function(error)
+                                                           {
+                                                             deferred.reject(null);
+                                                             console.error(error.message ? error.message : error);
+                                                           });
+                                               return deferred.promise;
+                                             },
+                                _scopeDataReceived: function(data)
+                                             {
+                                               this._scopeModelObjects = {};
+                                               var defaultValue = undefined;
+                                               var items = [{id:undefined, name: "Broker"}];
+                                               for(var i =0 ; i<data.length;i++)
+                                               {
+                                                 var name = data[i].name;
+                                                 var parentName = data[i]["$parent.name"];
+                                                 items.push({id: data[i].id,  name: "VH:" + parentName + "/" + name});
+                                                 this._scopeModelObjects[data[i].id] = {name: name,
+                                                                                        type: "virtualhost",
+                                                                                        parent: {name: parentName,
+                                                                                                 type: "virtualhostnode",
+                                                                                                 parent: {type: "broker"}
+                                                                                                }
+                                                                                       };
+                                                 if (this.parentModelObj &&
+                                                     this.parentModelObj.type == "virtualhost" &&
+                                                     this.parentModelObj.name == name &&
+                                                     this.parentModelObj.parent &&
+                                                     this.parentModelObj.parent.name == parentName)
+                                                 {
+                                                   defaultValue = data[i].id;
+                                                 }
+                                               }
+
+                                               var scopeStore = new DstoreAdapter (new Memory({data: items,
+                                                                                               idProperty: 'id'}));
+                                               this._searchScopeSelector = new dijit.form.FilteringSelect({ name: "scope",
+                                                                                                            placeHolder: "Select search scope",
+                                                                                                            store: scopeStore,
+                                                                                                            value: defaultValue,
+                                                                                                            required: false,
+                                                                                                            "class": "queryDefaultField"
+                                                                                                          },
+                                                                                                          this.scope);
+                                               this._searchScopeSelector.startup();
+                                            },
+                                _createCategoryList: function()
+                                            {
+                                              var categoryStore = new DstoreAdapter(new Memory({idProperty: "id",
+                                                                                                data: predefinedCategories}));
+                                              var categoryList = new dijit.form.ComboBox({name: "category",
+                                                                                          placeHolder: "Select Category",
+                                                                                          store: categoryStore,
+                                                                                          value: this._category || "queue",
+                                                                                          required: true,
+                                                                                          invalidMessage: "Invalid category specified",
+                                                                                          "class": "queryDefaultField"
+                                                                                         },
+                                                                                         this.categoryName);
+                                              categoryList.startup();
+                                              categoryList.on("change", lang.hitch(this, this._categoryChanged));
+                                              this._categorySelector = categoryList;
+                                            },
+                                _categoryChanged: function()
+                                            {
+                                              var metadata = this._getCategoryMetadata(this._categorySelector.value);
+                                              var disableMetadataDependant = !metadata;
+                                              this.selectWhereButton.set("disabled", disableMetadataDependant);
+                                              this.selectColumnsButton.set("disabled", disableMetadataDependant);
+                                              this.searchButton.set("disabled", disableMetadataDependant);
+                                              if (disableMetadataDependant)
+                                              {
+                                                dijit.showTooltip(
+                                                  this._categorySelector.get("invalidMessage"),
+                                                  this._categorySelector.domNode,
+                                                  this._categorySelector.get("tooltipPosition"),
+                                                  !this._categorySelector.isLeftToRight()
+                                                );
+                                              }
+                                              else
+                                              {
+                                                if (this._lastCategory != this._categorySelector.value)
+                                                {
+                                                  this._standardModeLastWhereExpression = "";
+                                                  this._lastCategory = this._categorySelector.value;
+                                                  this.selectExpression.set("value", "");
+                                                  this.whereExpression.set("value", "");
+                                                  this.whereExpressionBuilder.clearWhereCriteria();
+                                                  var columns = this._extractFieldsFromMetadata(metadata);
+                                                  this.selectColumnsButton.set("data", {items: columns,
+                                                                                       idProperty: "id",
+                                                                                       selected:[],
+                                                                                       nameProperty: "attributeName"});
+                                                  this.selectWhereButton.set("data", {items: columns,
+                                                                                      selected:[],
+                                                                                      idProperty: "id",
+                                                                                      nameProperty: "attributeName"});
+                                                  this._showResults([], "");
+                                                }
+                                              }
+                                            },
+                                _advancedModeKeyPressed:function(evt)
+                                            {
+                                              var key = evt.keyCode;
+                                              if (key == dojo.keys.ENTER && this.selectExpression.value)
+                                              {
+                                                this.search();
+                                              }
+                                            },
+                                _modeChanged: function()
+                                            {
+                                              this._standardMode = !this._standardMode
+                                              if (!this._standardMode)
+                                              {
+                                                this.modeButton.set("label", "Standard");
+                                                this.modeButton.set("title", "Switch to 'Standard' search");
+                                                this.selectExpression.set("disabled", false);
+                                                this.whereExpression.set("disabled", false);
+                                                this.standardSearch.style.display = "none";
+                                                this.whereExpressionBuilder.domNode.style.display = "none";
+                                                this.advancedSearch.style.display = "";
+                                                if (this._lastSearchQuery &&
+                                                     (this._lastSearchQuery.select != this.selectExpression.value ||
+                                                      this._lastSearchQuery.where != this.whereExpression.value ||
+                                                      this._lastSearchQuery.category != this._categorySelector.value ||
+                                                      this._lastSearchQuery.scope != this._searchScopeSelector.value))
+                                                {
+                                                  this.search();
+                                                }
+                                              }
+                                              else
+                                              {
+                                                this.modeButton.set("label", "Advanced");
+                                                this.modeButton.set("title", "Switch to 'Advanced' search using SQL-like expressions");
+                                                this.selectExpression.set("disabled", true);
+                                                this.whereExpression.set("disabled", true);
+                                                this.standardSearch.style.display = "";
+                                                this.whereExpressionBuilder.domNode.style.display = "";
+                                                this.advancedSearch.style.display = "none";
+
+                                                if (this._lastSearchQuery &&
+                                                     (this._lastSearchQuery.select != this._standardModeLastSelectExpression ||
+                                                      this._lastSearchQuery.where != this._standardModeLastWhereExpression ||
+                                                      this._lastSearchQuery.category != this._categorySelector.value ||
+                                                      this._lastSearchQuery.scope != this._searchScopeSelector.value))
+                                                {
+                                                  this.search();
+                                                }
+                                              }
+                                            },
+                                _getCategoryMetadata: function(value)
+                                            {
+                                              if (value)
+                                              {
+                                                var category = value.charAt(0).toUpperCase() + value.substring(1);
+                                                return this._management.metadata.metadata[category];
+                                              }
+                                              else
+                                              {
+                                                return undefined;
+                                              }
+                                            },
+                                _extractFieldsFromMetadata: function(metadata)
+                                            {
+                                              var columns = [];
+                                              var helper = {};
+                                              var validTypes = [];
+                                              var typeAttribute = null;
+                                              for(var i in metadata)
+                                              {
+                                                validTypes.push(i);
+                                                var categoryType = metadata[i];
+                                                var attributes = categoryType.attributes;
+                                                for(var name in attributes)
+                                                {
+                                                  var attribute = attributes[name];
+                                                  if (!(name in helper))
+                                                  {
+                                                    helper[name] = true;
+                                                    var attributeData = {id: name,
+                                                                         attributeName: name,
+                                                                         type: attribute.type,
+                                                                         validValues: attribute.validValues,
+                                                                         description: attribute.description,
+                                                                         columnType: "attribute"};
+                                                    if (name === "type")
+                                                    {
+                                                      typeAttribute = attributeData;
+                                                    }
+                                                    columns.push(attributeData );
+                                                  }
+                                                }
+
+                                                var statistics = categoryType.statistics;
+                                                for(var name in statistics)
+                                                {
+                                                  var statistic = statistics[name];
+                                                  if (!(name in helper))
+                                                  {
+                                                    helper[name] = true;
+                                                    columns.push( {id: name,
+                                                                   attributeName: name,
+                                                                   type: statistic.type,
+                                                                   description: statistic.description,
+                                                                   columnType: "statistics"});
+                                                  }
+                                                }
+                                              }
+                                              if (typeAttribute != null && !typeAttribute.validValues)
+                                              {
+                                                typeAttribute.validValues = validTypes;
+                                              }
+                                              return columns;
+                                            }
+                            });
+        });

Added: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/WhereCriteria.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/WhereCriteria.js?rev=1738933&view=auto
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/WhereCriteria.js (added)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/WhereCriteria.js Wed Apr 13 12:58:41 2016
@@ -0,0 +1,262 @@
+/*
+ *
+ * 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/declare",
+  "dojo/_base/array",
+  "dojo/_base/lang",
+  "dojo/string",
+  "dojo/text!query/WhereCriteria.html",
+  "dojox/html/entities",
+  "dijit/popup",
+  "qpid/management/query/CriteriaPane",
+  "dojo/Evented",
+  "dijit/_WidgetBase",
+  "dijit/_TemplatedMixin",
+  "dijit/_WidgetsInTemplateMixin",
+  "dijit/layout/ContentPane",
+  "dijit/form/Button",
+  "dijit/form/ValidationTextBox",
+  "dijit/form/TextBox",
+  "dijit/form/Select",
+  "dijit/form/Form",
+  "dijit/_Container",
+  "dijit/form/SimpleTextarea",
+  "dijit/InlineEditBox",
+  "dojo/domReady!"
+],
+function(declare, array, lang, string, template, entities, popup, CriteriaPane, Evented)
+{
+    return declare("qpid.management.query.WhereCriteria",
+                   [dijit._WidgetBase, dijit._TemplatedMixin, dijit._WidgetsInTemplateMixin, Evented],
+                   {
+                        //Strip out the apache comment header from the template html as comments unsupported.
+                        templateString:    template.replace(/<!--[\s\S]*?-->/g, ""),
+
+                        /**
+                         * template attach points
+                         */
+                        removeCriteria: null,
+                        doneButton: null,
+                        cancelButton: null,
+                        addButton: null,
+                        criteriaMatchCondition: null,
+                        editDialog: null,
+                        conditionDialogContent: null,
+                        criteriaContainer: null,
+                        newColumnCondition: null,
+
+                        /**
+                         * constructor arguments
+                         */
+                        attributeDetails: null,
+
+                        /**
+                         * inner fields
+                         */
+                        _deleted: false,
+
+                        constructor: function(args)
+                                     {
+                                       this.attributeDetails = args.attributeDetails;
+                                       this.inherited(arguments);
+                                     },
+                        postCreate:  function()
+                                     {
+                                       this.inherited(arguments);
+                                       this._postCreate();
+                                     },
+                        _getDeletedAttr()
+                                     {
+                                       return this._deleted;
+                                     },
+                        _postCreate: function()
+                                     {
+                                       this.removeCriteria.on("click", lang.hitch(this, this._destroy));
+                                       this.doneButton.on("click", lang.hitch(this, this._criteriaSet));
+                                       this.cancelButton.on("click", lang.hitch(this, this._dialogCancelled));
+                                       this.addButton.on("click", lang.hitch(this, this._addCriteria));
+                                       this.criteriaMatchCondition.on("change", lang.hitch(this, this._criteriaConditionChanged));
+                                       var criteriaPane = this._addCriteria({_stored:true});
+                                       criteriaPane.submitted();
+                                       this._displayExpression();
+                                       this._criteriaConditionChanged();
+                                       this.editDialog.on("hide", lang.hitch(this, this._dialogHidden));
+                                     },
+                        _addCriteria:function()
+                                     {
+                                       var criteriaPane = new CriteriaPane({criteriaName: this.attributeDetails.attributeName,
+                                                                            typeName: this.attributeDetails.type,
+                                                                            typeValidValues: this.attributeDetails.validValues});
+                                       this.criteriaContainer.addChild(criteriaPane);
+                                       criteriaPane.on("change", lang.hitch(this, this._criteriaConditionChanged));
+                                       this._updateRemovable();
+                                       this.conditionDialogContent.connectChildren();
+                                       return criteriaPane;
+                                     },
+                        _getNumberOfCriteria : function()
+                                     {
+                                       var counter = 0;
+                                       var criteriaArray = this.criteriaContainer.getChildren();
+                                       for(var i = 0;i<criteriaArray.length;i++)
+                                       {
+                                          if (!criteriaArray[i]._removed)
+                                          {
+                                            counter = counter + 1;
+                                          }
+                                       }
+                                       return counter;
+                                     },
+                        _updateRemovable: function()
+                                     {
+                                       var counter = this._getNumberOfCriteria();
+                                       var singleCriteria = counter == 1;
+                                       var criteriaArray = this.criteriaContainer.getChildren();
+                                       for(var i = 0;i<criteriaArray.length;i++)
+                                       {
+                                         if (!criteriaArray[i]._removed)
+                                         {
+                                            criteriaArray[i].setRemovable(!singleCriteria);
+                                         }
+                                       }
+                                       this.criteriaMatchCondition.set("disabled", singleCriteria);
+                                     },
+                        _getUserFriendlyExpression: function()
+                                      {
+                                        var expression = this.getConditionExpression();
+                                        if (!expression)
+                                        {
+                                          expression = this.attributeDetails.attributeName + ": any";
+                                        }
+                                        return expression;
+                                      },
+                        _displayExpression: function()
+                                      {
+                                        var expression = this._getUserFriendlyExpression();
+                                        this.criteria.set("label", expression);
+                                      },
+                        _criteriaConditionChanged: function()
+                                      {
+                                        this.conditionDialogContent.connectChildren();
+                                        var isValid =  this._validateCriteria();
+                                        if (isValid)
+                                        {
+                                          var expression = this._getUserFriendlyExpression();
+                                          this.newColumnCondition.set("value", expression);
+                                          this._updateRemovable();
+                                        }
+                                        this.doneButton.set("disabled", !isValid);
+                                      },
+                        _validateCriteria:function()
+                                      {
+                                        var isValid = true;
+                                        var criteriaArray = this.criteriaContainer.getChildren();
+                                        for(var i = 0;i<criteriaArray.length;i++)
+                                        {
+                                          if (!criteriaArray[i].validate())
+                                          {
+                                            isValid = false;
+                                          }
+                                        }
+                                        return isValid;
+                                      },
+                        _getAttributeDetailsAttr: function()
+                                      {
+                                        return this.attributeDetails;
+                                      },
+                        getConditionExpression:function()
+                                      {
+                                        if (this._deleted)
+                                        {
+                                          return undefined;
+                                        }
+
+                                        var expression = "";
+                                        var criteriaArray = this.criteriaContainer.getChildren();
+                                        var criteriaCounter = 0;
+                                        for(var i = 0;i<criteriaArray.length;i++)
+                                        {
+                                          var criteria = criteriaArray[i].getExpression();
+                                          if (criteria)
+                                          {
+                                              if (expression)
+                                              {
+                                                 expression = expression + " " + this.criteriaMatchCondition.value;
+                                              }
+                                              expression = expression + " " + criteria;
+                                              criteriaCounter = criteriaCounter + 1;
+                                          }
+                                        }
+                                        if (criteriaCounter>0 && this.criteriaMatchCondition.value == "or")
+                                        {
+                                          expression = "( " + expression + " )"
+                                        }
+                                        return expression;
+                                      },
+                        _destroy:     function()
+                                      {
+                                        this._deleted = true;
+                                        try
+                                        {
+                                            // notify listeners which are listening for onChange events
+                                            this.emit("change", this);
+                                        }
+                                        finally
+                                        {
+                                            this.destroyRecursive(false);
+                                        }
+                                      },
+                        _criteriaSet: function()
+                                      {
+                                        var isValid = this._validateCriteria();
+                                        if (isValid)
+                                        {
+                                          this._displayExpression();
+                                          var criteriaArray = this.criteriaContainer.getChildren();
+                                          for(var i = 0;i<criteriaArray.length;i++)
+                                          {
+                                              criteriaArray[i].submitted();
+                                          }
+                                          popup.close(this.editDialog);
+
+                                          // notify listeners which are listening for onChange events
+                                          this.emit("change", this);
+                                        }
+                                      },
+                        _dialogCancelled: function()
+                                      {
+                                        popup.close(this.editDialog);
+                                        this._dialogHidden();
+                                      },
+                        _dialogHidden: function()
+                                      {
+                                        var criteriaArray = this.criteriaContainer.getChildren();
+                                        for(var i = 0;i<criteriaArray.length;i++)
+                                        {
+                                            if (criteriaArray[i].cancelled)
+                                            {
+                                                criteriaArray[i].cancelled();
+                                            }
+                                        }
+                                        this._updateRemovable();
+                                      }
+                   });
+});
\ No newline at end of file

Added: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/WhereExpression.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/WhereExpression.js?rev=1738933&view=auto
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/WhereExpression.js (added)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/WhereExpression.js Wed Apr 13 12:58:41 2016
@@ -0,0 +1,148 @@
+/*
+ *
+ * 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/declare",
+  "dojo/_base/array",
+  "dojo/_base/lang",
+  "dojo/dom-construct",
+  "dojo/Evented",
+  "dijit/layout/ContentPane",
+  "qpid/management/query/WhereCriteria",
+  "dojo/domReady!"
+],
+function(declare, array, lang, domConstruct, Evented, ContentPane, WhereCriteria)
+{
+    return declare("qpid.management.query.WhereExpression",
+                   [ContentPane, Evented],
+                   {
+                        whereExpression: "",
+                        whereFieldsSelector: null,
+                        _whereItems: {},
+
+                        postCreate: function()
+                                    {
+                                      this.inherited(arguments);
+                                      if (this.whereFieldsSelector)
+                                      {
+                                        this.whereFieldsSelector.on("change", lang.hitch(this, this._whereExpressionChanged));
+                                        var promise = this.whereFieldsSelector.get("selectedItems");
+                                        dojo.when(promise,
+                                                  lang.hitch(this,
+                                                             function(selectedItems)
+                                                             {
+                                                                this._whereExpressionChanged(selectedItems);
+                                                             }));
+
+                                      }
+                                    },
+                        _setWhereFieldsSelectorAttr: function(whereFieldsSelector)
+                                    {
+                                      this.whereFieldsSelector = whereFieldsSelector;
+                                      this.whereFieldsSelector.on("change", lang.hitch(this, this._whereExpressionChanged));
+                                      var promise = this.whereFieldsSelector.get("selectedItems");
+                                      dojo.when(promise, lang.hitch(this, function(items){this._whereExpressionChanged(items);}));
+                                    },
+                        _whereExpressionChanged: function(items)
+                                    {
+                                      this._buildWhereCriteriaWidgets(items);
+                                      this._notifyChanged();
+                                    },
+                        _buildWhereCriteriaWidgets: function(items)
+                                    {
+                                      for(var i =0; i< items.length; i++)
+                                      {
+                                          var name = items[i].attributeName;
+                                          if (!(name in this._whereItems))
+                                          {
+                                              this._whereItems[name] = this._createWhereCriteriaWidget(items[i]);
+                                          }
+                                      }
+                                    },
+                        _createWhereCriteriaWidget: function(item)
+                                    {
+                                      var whereCriteria = new WhereCriteria({attributeDetails: item},
+                                                                            domConstruct.create("div"));
+                                      this.addChild(whereCriteria);
+                                      whereCriteria.startup();
+                                      whereCriteria.on("change", lang.hitch(this, this._whereCriteriaChanged));
+                                      return whereCriteria;
+                                    },
+                        _notifyChanged:function()
+                                    {
+                                      this.whereExpression = this._getWhereExpression();
+                                      this.emit("change", this.whereExpression);
+                                    },
+                        _whereCriteriaChanged: function(whereCriteria)
+                                    {
+                                      if (whereCriteria.get("deleted"))
+                                      {
+                                        delete this._whereItems[whereCriteria.get("attributeDetails").attributeName];
+                                        this.removeChild(whereCriteria);
+                                      }
+                                      this._notifyChanged();
+                                    },
+                        _getWhereExpressionAttr: function()
+                                    {
+                                      if (!this.whereExpression)
+                                      {
+                                        this.whereExpression = this._getWhereExpression();
+                                      }
+                                      return this.whereExpression;
+                                    },
+                        _getWhereExpression: function()
+                                    {
+                                      var columnsAfterChange = [];
+                                      var whereExpression = "";
+                                      var children = this.getChildren();
+                                      var selected = [];
+                                      for(var i=0;i<children.length;i++)
+                                      {
+                                        if (!children[i].get("deleted"))
+                                        {
+                                            var details = children[i].get("attributeDetails");
+                                            columnsAfterChange.push(details);
+                                            selected.push(details.id);
+                                            var expression = children[i].getConditionExpression();
+                                            if (expression)
+                                            {
+                                               whereExpression = whereExpression + (whereExpression ? " and " : "") + expression;
+                                            }
+                                        }
+                                      }
+                                      this.whereFieldsSelector.set("data",{selected: selected});
+                                      return whereExpression;
+                                    },
+                        clearWhereCriteria: function()
+                                    {
+                                      this._whereItems = {};
+                                      var children = this.getChildren();
+                                      for(var i=children.length-1;i>=0;i--)
+                                      {
+                                        children[i].destroyRecursive(false);
+                                      }
+                                      if (this.whereFieldsSelector)
+                                      {
+                                        this.whereFieldsSelector.set("data", {selected:[]});
+                                      }
+                                    }
+                   });
+});
\ No newline at end of file

Added: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/query/CriteriaPane.html
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/query/CriteriaPane.html?rev=1738933&view=auto
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/query/CriteriaPane.html (added)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/query/CriteriaPane.html Wed Apr 13 12:58:41 2016
@@ -0,0 +1,42 @@
+<!--
+  ~ 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.
+  -->
+<div class="criteriaControl">
+    <div data-dojo-attach-point="contentPane" class="dijitTitlePane">
+        <div data-dojo-attach-point="titleNode" class="dijitReset dijitTitlePaneTitle dijitTitlePaneTitleOpen criteriaPanelTitle">
+            <div>
+                <div data-dojo-attach-point="conditionExpression" class="dijitInline alignLeft dijitTitlePaneTextNode criteriaPanelTitleText"></div>
+                <span data-dojo-attach-point="removeCriteria"
+                      data-dojo-type="dijit/form/Button"
+                      data-dojo-props="iconClass:'dijitIconDelete',
+                                   showLabel:false,
+                                   title: 'Remove'" class="dijitInline alignRight criteriaPanelTitleButton">Remove</span>
+            </div>
+            <div class="clear"></div>
+        </div>
+        <div class="dijitTitlePaneContentOuter dijitTitlePaneContentInner">
+            <select data-dojo-attach-point="criteriaCondition"
+                    data-dojo-type="dijit/form/Select"
+                    data-dojo-props="value: 'any',
+                                           placeHolder: 'Select Condition',
+                                           required: true" class="dijitInline">
+            </select>
+            <span data-dojo-attach-point="criteriaValueInputContainer" class="dijitInline"></span>
+        </div>
+    </div>
+</div>

Added: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/query/OptionsPanel.html
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/query/OptionsPanel.html?rev=1738933&view=auto
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/query/OptionsPanel.html (added)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/query/OptionsPanel.html Wed Apr 13 12:58:41 2016
@@ -0,0 +1,51 @@
+<!--
+  ~ 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.
+  -->
+<div id="${id}_contentPanel"
+     data-dojo-type="dijit/layout/ContentPane">
+    <div class="dijitDialogPaneContentArea">
+        <input id="${id}_search"
+               data-dojo-attach-point="search"
+               data-dojo-type="dijit/form/ValidationTextBox"
+               data-dojo-props="name: 'column',
+                                intermediateChanges: true,
+                                placeHolder: 'field name',
+                                title: 'Start typing field name'"  type="text"/></label>
+        <div id="${id}_clearButton"
+             data-dojo-type="dijit/form/Button"
+             data-dojo-attach-point="clearButton"
+             data-dojo-props="iconClass:'dijitIconDelete',
+                              showLabel:false,
+                              title: 'Clear Search'">Clear</div>
+        <div data-dojo-attach-point="optionsGrid" class="selectGrid">
+        </div>
+    </div>
+    <div class="dijitDialogPaneActionBar qpidDialogPaneActionBar">
+        <input id="${id}_cancelButton"
+               data-dojo-attach-point="cancelButton"
+               data-dojo-type="dijit/form/Button"
+               type="button"
+               label="Cancel"/>
+        <input id="${id}_doneButton"
+               data-dojo-attach-point="doneButton"
+               data-dojo-type="dijit/form/Button"
+               type="button" label="Done"/>
+    </div>
+</div>
+
+

Added: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/query/QueryBuilder.html
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/query/QueryBuilder.html?rev=1738933&view=auto
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/query/QueryBuilder.html (added)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/query/QueryBuilder.html Wed Apr 13 12:58:41 2016
@@ -0,0 +1,66 @@
+<!--
+  ~ 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.
+  -->
+
+<div>
+    <div class="dijit dijitToolbar">
+        <label>Scope : <span data-dojo-attach-point="scope"></span></label>
+        <label>Category : <span data-dojo-attach-point="categoryName"></span></label>
+        <span data-dojo-attach-point="advancedSearch"  style="display:none;">
+            <label>Select : <textarea  data-dojo-attach-point="selectExpression" type="text"
+                                   data-dojo-type="dijit/form/SimpleTextarea"
+                                   data-dojo-props="name: 'select',
+                                     rows: 1,
+                                     intermediateChanges: true,
+                                     placeHolder: 'comma separated attribute names',
+                                     title: 'Enter comma separated list of attributes to select',
+                                     promptMessage: 'Comma separated list of attributes to select, for example: name,type,description',
+                                     class: 'querySearchField'" rows="1"></textarea></label>
+            <label>Where : <textarea  data-dojo-attach-point="whereExpression" type="text"
+                                  data-dojo-type="dijit/form/SimpleTextarea"
+                                  data-dojo-props="name: 'where',
+                                    rows: 1,
+                                    intermediateChanges: true,
+                                    placeHolder: 'where expression',
+                                    title: 'Enter sql like where conditions',
+                                    promptMessage: 'Use JMS filter syntax to specify where conditions',
+                                    class: 'querySearchField'" rows="1"></textarea></label>
+        </span>
+        <span data-dojo-attach-point="standardSearch">
+            <span data-dojo-type="qpid/management/query/DropDownSelect"
+                 data-dojo-attach-point="selectColumnsButton"
+                 data-dojo-props="title: 'Select fields to display',label:'Columns'">
+            </span>
+
+            <span data-dojo-type="qpid/management/query/DropDownSelect"
+                  data-dojo-attach-point="selectWhereButton"
+                  data-dojo-props="title: 'Specify Filtering Conditions',label:'Conditions'">
+            </span>
+        </span>
+        <div data-dojo-type="dijit/form/Button"
+             data-dojo-attach-point="searchButton"
+             data-dojo-props="title: 'Search'">Search</div>
+        <div data-dojo-type="dijit/form/Button"
+             data-dojo-attach-point="modeButton"
+             data-dojo-props="title:'Switch to \'Advanced\' search using SQL-like expressions'">Advanced</div>
+
+        <div data-dojo-attach-point="whereExpressionBuilder"
+             data-dojo-type="qpid/management/query/WhereExpression"></div>
+    </div>
+    <div data-dojo-attach-point="queryResultGrid"  jsid='grid'></div>
+</div>
\ No newline at end of file

Added: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/query/WhereCriteria.html
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/query/WhereCriteria.html?rev=1738933&view=auto
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/query/WhereCriteria.html (added)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/query/WhereCriteria.html Wed Apr 13 12:58:41 2016
@@ -0,0 +1,74 @@
+<!--
+  ~ 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.
+  -->
+
+<div class="dijit dijitReset dijitInline dijitButtonNode">
+    <div id="${id}_whereCriteria_editCriteria"
+         data-dojo-attach-point="criteria"
+         data-dojo-type="dijit/form/DropDownButton"
+         data-dojo-props="showLabel:true, title: 'Set where criteria'">
+        <span>Edit</span>
+        <div data-dojo-type="dijit/TooltipDialog" data-dojo-attach-point="editDialog">
+            <div data-dojo-attach-point="conditionDialogContent"
+                 data-dojo-type="dijit/form/Form">
+                <script type="dojo/method" data-dojo-event="onSubmit">
+                return false;
+                </script>
+
+                <input class="criteriaControl"
+                          data-dojo-type="dijit/form/TextBox"
+                          data-dojo-attach-point="newColumnCondition"
+                          data-dojo-props="readOnly:true, title: 'Current where expression'"/>
+                <div class="criteriaControl">Match: <select data-dojo-attach-point="criteriaMatchCondition"
+                                  data-dojo-type="dijit/form/Select"
+                                  data-dojo-props="value: 'and',
+                                       required: true, title:'Select how to group multiple conditions'">
+                                <option value="and">All</option>
+                                <option value="or">Any</option>
+                            </select>
+                </div>
+
+                <div data-dojo-attach-point="criteriaContainer"
+                     data-dojo-type="dijit/layout/ContentPane" class="criteriaPanelTitle"></div>
+                <div class="dijitDialogPaneActionBar">
+                    <div id="${id}_whereCriteria_addButton"
+                         data-dojo-type="dijit/form/Button"
+                         data-dojo-attach-point="addButton"
+                         type="button"  label="Add" class="alignLeft"></div>
+                    <div class="alignRight">
+                        <div id="${id}_whereCriteria_cancelButton"
+                             data-dojo-type="dijit/form/Button"
+                             data-dojo-attach-point="cancelButton"
+                             type="button"  label="Cancel"></div>
+
+                        <div id="${id}_whereCriteria_doneButton"
+                             data-dojo-type="dijit/form/Button"
+                             data-dojo-attach-point="doneButton"
+                             type="submit"  label="Done"></div>
+                    </div>
+                    <div class="clear"></div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div data-dojo-attach-point="removeCriteria"
+          data-dojo-type="dijit/form/Button"
+          data-dojo-props="iconClass:'dijitIconDelete',
+                           showLabel:false,
+                           title: 'Remove'">Remove</div>
+</div>

Added: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showQueryTab.html
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showQueryTab.html?rev=1738933&view=auto
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showQueryTab.html (added)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showQueryTab.html Wed Apr 13 12:58:41 2016
@@ -0,0 +1,24 @@
+<!--
+ -
+ - 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.
+ -
+ -->
+<div class="query">
+    <div class="queryEditorNode"></div>
+</div>
+

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showVirtualHost.html
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showVirtualHost.html?rev=1738933&r1=1738932&r2=1738933&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showVirtualHost.html (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showVirtualHost.html Wed Apr 13 12:58:41 2016
@@ -115,11 +115,15 @@
     </div>
 
     <div class="dijitDialogPaneActionBar">
-        <button data-dojo-type="dijit.form.Button" class="startButton" type="button" data-dojo-props="disabled: true">Start</button>
-        <button data-dojo-type="dijit.form.Button" class="stopButton" type="button" data-dojo-props="disabled: true">Stop</button>
-        <button data-dojo-type="dijit.form.Button" class="editButton" type="button" data-dojo-props="disabled: true">Edit</button>
-        <button data-dojo-type="dijit.form.Button" class="downloadButton" type="button" data-dojo-props="disabled: true">Download</button>
-        <button data-dojo-type="dijit.form.Button" class="deleteButton" data-dojo-props="iconClass: 'dijitIconDelete'">Delete</button>
+        <button data-dojo-type="dijit.form.Button" class="addQuery alignLeft">Query</button>
+        <div class="alignRight">
+            <button data-dojo-type="dijit.form.Button" class="startButton" type="button" data-dojo-props="disabled: true">Start</button>
+            <button data-dojo-type="dijit.form.Button" class="stopButton" type="button" data-dojo-props="disabled: true">Stop</button>
+            <button data-dojo-type="dijit.form.Button" class="editButton" type="button" data-dojo-props="disabled: true">Edit</button>
+            <button data-dojo-type="dijit.form.Button" class="downloadButton" type="button" data-dojo-props="disabled: true">Download</button>
+            <button data-dojo-type="dijit.form.Button" class="deleteButton" data-dojo-props="iconClass: 'dijitIconDelete'">Delete</button>
+        </div>
+        <div class="clear"></div>
     </div>
 
     <br/>

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/resources-maven/dojoconfig.properties
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/resources-maven/dojoconfig.properties?rev=1738933&r1=1738932&r2=1738933&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/resources-maven/dojoconfig.properties (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/resources-maven/dojoconfig.properties Wed Apr 13 12:58:41 2016
@@ -22,4 +22,6 @@ dojo-version=${dojo-version}
 dojo-path=/dojo-${dojo-version}/dojo
 dijit-path=/dojo-${dojo-version}/dijit
 dojox-path=/dojo-${dojo-version}/dojox
+dgrid-path=/META-INF/resources/webjars/dgrid/${dgrid-version}
+dstore-path=/META-INF/resources/webjars/dstore/${dstore-version}
 



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