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/28 18:22:57 UTC

svn commit: r1741469 [1/3] - in /qpid/java/trunk: bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ broker-plugins/management-http/src/main/grammar/ broker-plugins/management-http/src/main/java/org/apache/qpid/server/...

Author: orudyy
Date: Thu Apr 28 16:22:56 2016
New Revision: 1741469

URL: http://svn.apache.org/viewvc?rev=1741469&view=rev
Log:
QPID-7165: [Java Broker] Allow query results to be sorted and paginated

Added:
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryStore.js
    qpid/java/trunk/common/src/main/java/org/apache/qpid/filter/OrderByExpression.java
    qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/QueryRestTest.java
Modified:
    qpid/java/trunk/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostNodeRestTest.java
    qpid/java/trunk/broker-plugins/management-http/src/main/grammar/ConfiguredObjectFilterParser.jj
    qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectFilterParser.java
    qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectFilterParserConstants.java
    qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectFilterParserTokenManager.java
    qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQuery.java
    qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/EvaluationException.java
    qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java
    qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueryServlet.java
    qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/DropDownSelect.js
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryBuilder.js
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/query/QueryBuilder.html
    qpid/java/trunk/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQueryTest.java
    qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java
    qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BindingRestTest.java
    qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BrokerRestTest.java
    qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/GroupProviderRestTest.java
    qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/HttpManagementRestTest.java
    qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/PortRestTest.java
    qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java
    qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java
    qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/acl/ExchangeRestACLTest.java

Modified: qpid/java/trunk/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostNodeRestTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostNodeRestTest.java?rev=1741469&r1=1741468&r2=1741469&view=diff
==============================================================================
--- qpid/java/trunk/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostNodeRestTest.java (original)
+++ qpid/java/trunk/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostNodeRestTest.java Thu Apr 28 16:22:56 2016
@@ -36,7 +36,8 @@ import com.sleepycat.je.EnvironmentConfi
 import com.sleepycat.je.rep.NoConsistencyRequiredPolicy;
 import com.sleepycat.je.rep.ReplicatedEnvironment;
 import com.sleepycat.je.rep.ReplicationConfig;
-import org.apache.qpid.server.management.plugin.servlet.rest.RestServlet;
+
+import org.apache.qpid.server.management.plugin.servlet.rest.AbstractServlet;
 import org.apache.qpid.server.model.RemoteReplicationNode;
 import org.apache.qpid.server.model.State;
 import org.apache.qpid.server.model.VirtualHost;
@@ -256,7 +257,7 @@ public class BDBHAVirtualHostNodeRestTes
 
         // try to add not permitted node
         Map<String, Object> nodeData = createNodeAttributeMap(NODE2, intruderPort, _node1HaPort);
-        getRestTestHelper().submitRequest(_baseNodeRestUrl + NODE2, "PUT", nodeData, RestServlet.SC_UNPROCESSABLE_ENTITY);
+        getRestTestHelper().submitRequest(_baseNodeRestUrl + NODE2, "PUT", nodeData, AbstractServlet.SC_UNPROCESSABLE_ENTITY);
 
         assertRemoteNodes(NODE1, NODE3);
     }

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/grammar/ConfiguredObjectFilterParser.jj
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/grammar/ConfiguredObjectFilterParser.jj?rev=1741469&r1=1741468&r2=1741469&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/grammar/ConfiguredObjectFilterParser.jj (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/grammar/ConfiguredObjectFilterParser.jj Thu Apr 28 16:22:56 2016
@@ -13,6 +13,7 @@
  * 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.
@@ -73,6 +74,7 @@ import org.apache.qpid.filter.BooleanExp
 import org.apache.qpid.filter.ComparisonExpression;
 import org.apache.qpid.filter.ConstantExpression;
 import org.apache.qpid.filter.Expression;
+import org.apache.qpid.filter.OrderByExpression;
 import org.apache.qpid.filter.LogicExpression;
 import org.apache.qpid.filter.UnaryExpression;
 
@@ -114,6 +116,13 @@ public class ConfiguredObjectFilterParse
 
     }
 
+    public List<OrderByExpression> parseOrderBy(String sql) throws ParseException
+    {
+        this.ReInit(new StringReader(sql));
+
+        return orderByClause();
+    }
+
     private BooleanExpression<ConfiguredObject<?>> asBooleanExpression(Expression<ConfiguredObject<?>> value) throws ParseException
     {
         if (value instanceof BooleanExpression)
@@ -168,6 +177,8 @@ TOKEN [IGNORE_CASE] :
   | <  FALSE   : "FALSE" >
   | <  NULL    : "NULL" >
   | <  AS      : "AS">
+  | <  ASC     : "ASC">
+  | <  DESC    : "DESC">
 
 }
 
@@ -714,3 +725,30 @@ Map<String, Expression> selectClauseElem
       }
     )
 }
+
+List<OrderByExpression> orderByClause() :
+{
+    List<OrderByExpression> returnVal = new ArrayList<OrderByExpression>();
+    OrderByExpression element;
+}
+{
+    ( element = orderByClauseElement() { returnVal.add( element ); }
+    ) ( "," element = orderByClauseElement() { returnVal.add( element ); } )*
+    {
+        return returnVal;
+    }
+}
+
+OrderByExpression orderByClauseElement() :
+{
+    Expression expr;
+    OrderByExpression orderByExpr;
+    OrderByExpression.Order order = OrderByExpression.Order.ASC;
+}
+{
+    ( expr = primaryExpr() ( <ASC> | <DESC> { order = OrderByExpression.Order.DESC; } )?
+      {
+          return new OrderByExpression(expr, order);
+      }
+    )
+}

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectFilterParser.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectFilterParser.java?rev=1741469&r1=1741468&r2=1741469&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectFilterParser.java (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectFilterParser.java Thu Apr 28 16:22:56 2016
@@ -33,6 +33,7 @@ import org.apache.qpid.filter.BooleanExp
 import org.apache.qpid.filter.ComparisonExpression;
 import org.apache.qpid.filter.ConstantExpression;
 import org.apache.qpid.filter.Expression;
+import org.apache.qpid.filter.OrderByExpression;
 import org.apache.qpid.filter.LogicExpression;
 import org.apache.qpid.filter.UnaryExpression;
 
@@ -73,6 +74,13 @@ public class ConfiguredObjectFilterParse
 
     }
 
+    public List<OrderByExpression> parseOrderBy(String sql) throws ParseException
+    {
+        this.ReInit(new StringReader(sql));
+
+        return orderByClause();
+    }
+
     private BooleanExpression<ConfiguredObject<?>> asBooleanExpression(Expression<ConfiguredObject<?>> value) throws ParseException
     {
         if (value instanceof BooleanExpression)
@@ -146,21 +154,21 @@ public class ConfiguredObjectFilterParse
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case IS:
-      case 29:
-      case 30:
+      case 31:
+      case 32:
         ;
         break;
       default:
         break label_3;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 29:
-        jj_consume_token(29);
+      case 31:
+        jj_consume_token(31);
         right = comparisonExpression();
                 left = ComparisonExpression.createEqual(left, right);
         break;
-      case 30:
-        jj_consume_token(30);
+      case 32:
+        jj_consume_token(32);
         right = comparisonExpression();
                 left = ComparisonExpression.createNotEqual(left, right);
         break;
@@ -204,33 +212,33 @@ public class ConfiguredObjectFilterParse
       case BETWEEN:
       case LIKE:
       case IN:
-      case 31:
-      case 32:
       case 33:
       case 34:
+      case 35:
+      case 36:
         ;
         break;
       default:
         break label_4;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 31:
-        jj_consume_token(31);
+      case 33:
+        jj_consume_token(33);
         right = addExpression();
                     left = ComparisonExpression.createGreaterThan(left, right);
         break;
-      case 32:
-        jj_consume_token(32);
+      case 34:
+        jj_consume_token(34);
         right = addExpression();
                     left = ComparisonExpression.createGreaterThanEqual(left, right);
         break;
-      case 33:
-        jj_consume_token(33);
+      case 35:
+        jj_consume_token(35);
         right = addExpression();
                     left = ComparisonExpression.createLessThan(left, right);
         break;
-      case 34:
-        jj_consume_token(34);
+      case 36:
+        jj_consume_token(36);
         right = addExpression();
                     left = ComparisonExpression.createLessThanEqual(left, right);
         break;
@@ -284,48 +292,48 @@ public class ConfiguredObjectFilterParse
               switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
               case IN:
                 jj_consume_token(IN);
-                jj_consume_token(35);
+                jj_consume_token(37);
                 right = primaryExpr();
                                     list = new ArrayList();
                                     list.add( right );
                 label_5:
                 while (true) {
                   switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-                  case 36:
+                  case 38:
                     ;
                     break;
                   default:
                     break label_5;
                   }
-                  jj_consume_token(36);
+                  jj_consume_token(38);
                   right = primaryExpr();
                                             list.add( right );
                 }
-                jj_consume_token(37);
+                jj_consume_token(39);
                            left = ComparisonExpression.createInFilter(left, list, true );
                 break;
               default:
                 if (jj_2_4(2)) {
                   jj_consume_token(NOT);
                   jj_consume_token(IN);
-                  jj_consume_token(35);
+                  jj_consume_token(37);
                   right = primaryExpr();
                                     list = new ArrayList();
                                     list.add( right );
                   label_6:
                   while (true) {
                     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-                    case 36:
+                    case 38:
                       ;
                       break;
                     default:
                       break label_6;
                     }
-                    jj_consume_token(36);
+                    jj_consume_token(38);
                     right = primaryExpr();
                                             list.add( right );
                   }
-                  jj_consume_token(37);
+                  jj_consume_token(39);
                            left = ComparisonExpression.createNotInFilter(left, list, true);
                 } else {
                   jj_consume_token(-1);
@@ -353,13 +361,13 @@ public class ConfiguredObjectFilterParse
         break label_7;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 38:
-        jj_consume_token(38);
+      case 40:
+        jj_consume_token(40);
         right = multExpr();
                     left = ArithmeticExpression.createPlus(left, right);
         break;
-      case 39:
-        jj_consume_token(39);
+      case 41:
+        jj_consume_token(41);
         right = multExpr();
                     left = ArithmeticExpression.createMinus(left, right);
         break;
@@ -379,27 +387,27 @@ public class ConfiguredObjectFilterParse
     label_8:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 40:
-      case 41:
       case 42:
+      case 43:
+      case 44:
         ;
         break;
       default:
         break label_8;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 40:
-        jj_consume_token(40);
+      case 42:
+        jj_consume_token(42);
         right = unaryExpr();
                 left = ArithmeticExpression.createMultiply(left, right);
         break;
-      case 41:
-        jj_consume_token(41);
+      case 43:
+        jj_consume_token(43);
         right = unaryExpr();
                 left = ArithmeticExpression.createDivide(left, right);
         break;
-      case 42:
-        jj_consume_token(42);
+      case 44:
+        jj_consume_token(44);
         right = unaryExpr();
                 left = ArithmeticExpression.createMod(left, right);
         break;
@@ -416,12 +424,12 @@ public class ConfiguredObjectFilterParse
     String s=null;
     Expression left=null;
     if (jj_2_6(2147483647)) {
-      jj_consume_token(38);
+      jj_consume_token(40);
       left = unaryExpr();
     } else {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 39:
-        jj_consume_token(39);
+      case 41:
+        jj_consume_token(41);
         left = unaryExpr();
                 left = UnaryExpression.createNegate(left);
         break;
@@ -441,7 +449,7 @@ public class ConfiguredObjectFilterParse
       case FUNCTIONNAME:
       case ID:
       case QUOTED_ID:
-      case 35:
+      case 37:
         left = primaryExpr();
         break;
       default:
@@ -473,10 +481,10 @@ public class ConfiguredObjectFilterParse
     case QUOTED_ID:
       left = variable();
       break;
-    case 35:
-      jj_consume_token(35);
-      left = orExpression();
+    case 37:
       jj_consume_token(37);
+      left = orExpression();
+      jj_consume_token(39);
       break;
     default:
       jj_consume_token(-1);
@@ -556,14 +564,14 @@ public class ConfiguredObjectFilterParse
     ConfiguredObjectExpression right;
     if (jj_2_7(2)) {
       s = identifier();
-      jj_consume_token(43);
+      jj_consume_token(45);
       right = variable();
         {if (true) return _factory.createConfiguredObjectExpression( s, right );}
     } else if (jj_2_8(2)) {
       s = identifier();
-      jj_consume_token(44);
+      jj_consume_token(46);
       t = jj_consume_token(DECIMAL_LITERAL);
-      jj_consume_token(45);
+      jj_consume_token(47);
         {if (true) return _factory.createConfiguredObjectExpression( s, Integer.valueOf( t.image ) );}
     } else {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -598,19 +606,19 @@ public class ConfiguredObjectFilterParse
     case FUNCTIONNAME:
     case ID:
     case QUOTED_ID:
-    case 35:
+    case 37:
       expr = primaryExpr();
                                                     args.add(expr);
       label_9:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-        case 36:
+        case 38:
           ;
           break;
         default:
           break label_9;
         }
-        jj_consume_token(36);
+        jj_consume_token(38);
         expr = primaryExpr();
                                                                                                    args.add(expr);
       }
@@ -618,7 +626,7 @@ public class ConfiguredObjectFilterParse
     default:
       ;
     }
-    jj_consume_token(37);
+    jj_consume_token(39);
         {if (true) return _factory.createFunctionExpression( t.image.substring(0, t.image.length() - 1), args );}
     throw new Error("Missing return statement in function");
   }
@@ -662,13 +670,13 @@ public class ConfiguredObjectFilterParse
     label_10:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 36:
+      case 38:
         ;
         break;
       default:
         break label_10;
       }
-      jj_consume_token(36);
+      jj_consume_token(38);
       element = selectClauseElement();
                                               returnVal.add( element );
     }
@@ -696,6 +704,56 @@ public class ConfiguredObjectFilterParse
     throw new Error("Missing return statement in function");
   }
 
+  final public List<OrderByExpression> orderByClause() throws ParseException {
+    List<OrderByExpression> returnVal = new ArrayList<OrderByExpression>();
+    OrderByExpression element;
+    element = orderByClauseElement();
+                                         returnVal.add( element );
+    label_11:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case 38:
+        ;
+        break;
+      default:
+        break label_11;
+      }
+      jj_consume_token(38);
+      element = orderByClauseElement();
+                                               returnVal.add( element );
+    }
+        {if (true) return returnVal;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public OrderByExpression orderByClauseElement() throws ParseException {
+    Expression expr;
+    OrderByExpression orderByExpr;
+    OrderByExpression.Order order = OrderByExpression.Order.ASC;
+    expr = primaryExpr();
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case ASC:
+    case DESC:
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case ASC:
+        jj_consume_token(ASC);
+        break;
+      case DESC:
+        jj_consume_token(DESC);
+                                              order = OrderByExpression.Order.DESC;
+        break;
+      default:
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+      break;
+    default:
+      ;
+    }
+          {if (true) return new OrderByExpression(expr, order);}
+    throw new Error("Missing return statement in function");
+  }
+
   private boolean jj_2_1(int xla) {
     jj_la = xla; jj_lastpos = jj_scanpos = token;
     try { return !jj_3_1(); }
@@ -744,98 +802,38 @@ public class ConfiguredObjectFilterParse
     catch(LookaheadSuccess ls) { return true; }
   }
 
-  private boolean jj_3R_54() {
-    if (jj_scan_token(30)) return true;
-    if (jj_3R_49()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_13() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_19()) {
-    jj_scanpos = xsp;
-    if (jj_3R_20()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3_3() {
-    if (jj_scan_token(NOT)) return true;
-    if (jj_scan_token(BETWEEN)) return true;
-    if (jj_3R_51()) return true;
-    if (jj_scan_token(AND)) return true;
-    if (jj_3R_51()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_53() {
-    if (jj_scan_token(29)) return true;
-    if (jj_3R_49()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_50() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_53()) {
-    jj_scanpos = xsp;
-    if (jj_3R_54()) {
-    jj_scanpos = xsp;
-    if (jj_3_1()) {
-    jj_scanpos = xsp;
-    if (jj_3R_55()) return true;
-    }
-    }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_39() {
-    if (jj_scan_token(TRUE)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_62() {
-    if (jj_scan_token(BETWEEN)) return true;
-    if (jj_3R_51()) return true;
-    if (jj_scan_token(AND)) return true;
-    if (jj_3R_51()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_66() {
+  private boolean jj_3R_67() {
     if (jj_scan_token(ESCAPE)) return true;
-    if (jj_3R_46()) return true;
+    if (jj_3R_47()) return true;
     return false;
   }
 
-  private boolean jj_3R_38() {
+  private boolean jj_3R_39() {
     if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
     return false;
   }
 
-  private boolean jj_3R_23() {
-    if (jj_scan_token(42)) return true;
-    if (jj_3R_12()) return true;
+  private boolean jj_3R_24() {
+    if (jj_scan_token(44)) return true;
+    if (jj_3R_13()) return true;
     return false;
   }
 
-  private boolean jj_3R_29() {
+  private boolean jj_3R_30() {
     if (jj_scan_token(FUNCTIONNAME)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_33()) jj_scanpos = xsp;
-    if (jj_scan_token(37)) return true;
+    if (jj_3R_34()) jj_scanpos = xsp;
+    if (jj_scan_token(39)) return true;
     return false;
   }
 
-  private boolean jj_3R_47() {
-    if (jj_3R_49()) return true;
+  private boolean jj_3R_48() {
+    if (jj_3R_50()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_50()) { jj_scanpos = xsp; break; }
+      if (jj_3R_51()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
@@ -843,95 +841,95 @@ public class ConfiguredObjectFilterParse
   private boolean jj_3_2() {
     if (jj_scan_token(NOT)) return true;
     if (jj_scan_token(LIKE)) return true;
-    if (jj_3R_46()) return true;
+    if (jj_3R_47()) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_67()) jj_scanpos = xsp;
+    if (jj_3R_68()) jj_scanpos = xsp;
     return false;
   }
 
-  private boolean jj_3R_61() {
+  private boolean jj_3R_62() {
     if (jj_scan_token(LIKE)) return true;
-    if (jj_3R_46()) return true;
+    if (jj_3R_47()) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_66()) jj_scanpos = xsp;
+    if (jj_3R_67()) jj_scanpos = xsp;
     return false;
   }
 
-  private boolean jj_3R_37() {
+  private boolean jj_3R_38() {
     if (jj_scan_token(OCTAL_LITERAL)) return true;
     return false;
   }
 
-  private boolean jj_3R_22() {
-    if (jj_scan_token(41)) return true;
-    if (jj_3R_12()) return true;
+  private boolean jj_3R_23() {
+    if (jj_scan_token(43)) return true;
+    if (jj_3R_13()) return true;
     return false;
   }
 
-  private boolean jj_3R_14() {
+  private boolean jj_3R_15() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_21()) {
-    jj_scanpos = xsp;
     if (jj_3R_22()) {
     jj_scanpos = xsp;
-    if (jj_3R_23()) return true;
+    if (jj_3R_23()) {
+    jj_scanpos = xsp;
+    if (jj_3R_24()) return true;
     }
     }
     return false;
   }
 
-  private boolean jj_3R_21() {
-    if (jj_scan_token(40)) return true;
-    if (jj_3R_12()) return true;
+  private boolean jj_3R_22() {
+    if (jj_scan_token(42)) return true;
+    if (jj_3R_13()) return true;
     return false;
   }
 
-  private boolean jj_3R_48() {
+  private boolean jj_3R_49() {
     if (jj_scan_token(AND)) return true;
-    if (jj_3R_47()) return true;
+    if (jj_3R_48()) return true;
     return false;
   }
 
-  private boolean jj_3R_36() {
+  private boolean jj_3R_37() {
     if (jj_scan_token(HEX_LITERAL)) return true;
     return false;
   }
 
-  private boolean jj_3R_11() {
-    if (jj_3R_12()) return true;
+  private boolean jj_3R_12() {
+    if (jj_3R_13()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_14()) { jj_scanpos = xsp; break; }
+      if (jj_3R_15()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_42() {
-    if (jj_3R_13()) return true;
+  private boolean jj_3R_43() {
+    if (jj_3R_14()) return true;
     return false;
   }
 
-  private boolean jj_3R_35() {
+  private boolean jj_3R_36() {
     if (jj_scan_token(DECIMAL_LITERAL)) return true;
     return false;
   }
 
-  private boolean jj_3R_65() {
-    if (jj_scan_token(39)) return true;
-    if (jj_3R_11()) return true;
+  private boolean jj_3R_66() {
+    if (jj_scan_token(41)) return true;
+    if (jj_3R_12()) return true;
     return false;
   }
 
-  private boolean jj_3R_43() {
-    if (jj_3R_47()) return true;
+  private boolean jj_3R_44() {
+    if (jj_3R_48()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_48()) { jj_scanpos = xsp; break; }
+      if (jj_3R_49()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
@@ -939,56 +937,54 @@ public class ConfiguredObjectFilterParse
   private boolean jj_3_5() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_scan_token(38)) {
+    if (jj_scan_token(40)) {
     jj_scanpos = xsp;
-    if (jj_scan_token(39)) return true;
+    if (jj_scan_token(41)) return true;
     }
-    if (jj_3R_11()) return true;
+    if (jj_3R_12()) return true;
     return false;
   }
 
-  private boolean jj_3R_60() {
-    if (jj_scan_token(34)) return true;
-    if (jj_3R_51()) return true;
+  private boolean jj_3R_61() {
+    if (jj_scan_token(36)) return true;
+    if (jj_3R_52()) return true;
     return false;
   }
 
-  private boolean jj_3R_34() {
-    if (jj_3R_46()) return true;
+  private boolean jj_3R_35() {
+    if (jj_3R_47()) return true;
     return false;
   }
 
   private boolean jj_3_8() {
-    if (jj_3R_13()) return true;
-    if (jj_scan_token(44)) return true;
+    if (jj_3R_14()) return true;
+    if (jj_scan_token(46)) return true;
     if (jj_scan_token(DECIMAL_LITERAL)) return true;
-    if (jj_scan_token(45)) return true;
+    if (jj_scan_token(47)) return true;
     return false;
   }
 
-  private boolean jj_3R_45() {
-    if (jj_scan_token(36)) return true;
-    if (jj_3R_24()) return true;
+  private boolean jj_3R_46() {
+    if (jj_scan_token(38)) return true;
+    if (jj_3R_25()) return true;
     return false;
   }
 
-  private boolean jj_3R_64() {
-    if (jj_scan_token(38)) return true;
-    if (jj_3R_11()) return true;
+  private boolean jj_3R_65() {
+    if (jj_scan_token(40)) return true;
+    if (jj_3R_12()) return true;
     return false;
   }
 
-  private boolean jj_3R_59() {
-    if (jj_scan_token(33)) return true;
-    if (jj_3R_51()) return true;
+  private boolean jj_3R_60() {
+    if (jj_scan_token(35)) return true;
+    if (jj_3R_52()) return true;
     return false;
   }
 
-  private boolean jj_3R_30() {
+  private boolean jj_3R_31() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_34()) {
-    jj_scanpos = xsp;
     if (jj_3R_35()) {
     jj_scanpos = xsp;
     if (jj_3R_36()) {
@@ -1001,7 +997,9 @@ public class ConfiguredObjectFilterParse
     jj_scanpos = xsp;
     if (jj_3R_40()) {
     jj_scanpos = xsp;
-    if (jj_3R_41()) return true;
+    if (jj_3R_41()) {
+    jj_scanpos = xsp;
+    if (jj_3R_42()) return true;
     }
     }
     }
@@ -1012,65 +1010,63 @@ public class ConfiguredObjectFilterParse
     return false;
   }
 
-  private boolean jj_3R_69() {
-    if (jj_scan_token(36)) return true;
-    if (jj_3R_24()) return true;
+  private boolean jj_3R_70() {
+    if (jj_scan_token(38)) return true;
+    if (jj_3R_25()) return true;
     return false;
   }
 
-  private boolean jj_3R_56() {
+  private boolean jj_3R_57() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_64()) {
+    if (jj_3R_65()) {
     jj_scanpos = xsp;
-    if (jj_3R_65()) return true;
+    if (jj_3R_66()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_44() {
+  private boolean jj_3R_45() {
     if (jj_scan_token(OR)) return true;
-    if (jj_3R_43()) return true;
+    if (jj_3R_44()) return true;
     return false;
   }
 
   private boolean jj_3_7() {
-    if (jj_3R_13()) return true;
-    if (jj_scan_token(43)) return true;
-    if (jj_3R_31()) return true;
+    if (jj_3R_14()) return true;
+    if (jj_scan_token(45)) return true;
+    if (jj_3R_32()) return true;
     return false;
   }
 
-  private boolean jj_3R_31() {
+  private boolean jj_3R_32() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_7()) {
     jj_scanpos = xsp;
     if (jj_3_8()) {
     jj_scanpos = xsp;
-    if (jj_3R_42()) return true;
+    if (jj_3R_43()) return true;
     }
     }
     return false;
   }
 
-  private boolean jj_3R_58() {
-    if (jj_scan_token(32)) return true;
-    if (jj_3R_51()) return true;
+  private boolean jj_3R_59() {
+    if (jj_scan_token(34)) return true;
+    if (jj_3R_52()) return true;
     return false;
   }
 
-  private boolean jj_3R_57() {
-    if (jj_scan_token(31)) return true;
-    if (jj_3R_51()) return true;
+  private boolean jj_3R_58() {
+    if (jj_scan_token(33)) return true;
+    if (jj_3R_52()) return true;
     return false;
   }
 
-  private boolean jj_3R_52() {
+  private boolean jj_3R_53() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_57()) {
-    jj_scanpos = xsp;
     if (jj_3R_58()) {
     jj_scanpos = xsp;
     if (jj_3R_59()) {
@@ -1079,13 +1075,15 @@ public class ConfiguredObjectFilterParse
     jj_scanpos = xsp;
     if (jj_3R_61()) {
     jj_scanpos = xsp;
+    if (jj_3R_62()) {
+    jj_scanpos = xsp;
     if (jj_3_2()) {
     jj_scanpos = xsp;
-    if (jj_3R_62()) {
+    if (jj_3R_63()) {
     jj_scanpos = xsp;
     if (jj_3_3()) {
     jj_scanpos = xsp;
-    if (jj_3R_63()) {
+    if (jj_3R_64()) {
     jj_scanpos = xsp;
     if (jj_3_4()) return true;
     }
@@ -1100,33 +1098,38 @@ public class ConfiguredObjectFilterParse
     return false;
   }
 
-  private boolean jj_3R_51() {
-    if (jj_3R_11()) return true;
+  private boolean jj_3R_52() {
+    if (jj_3R_12()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_56()) { jj_scanpos = xsp; break; }
+      if (jj_3R_57()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_28() {
-    if (jj_scan_token(35)) return true;
-    if (jj_3R_32()) return true;
+  private boolean jj_3R_29() {
     if (jj_scan_token(37)) return true;
+    if (jj_3R_33()) return true;
+    if (jj_scan_token(39)) return true;
     return false;
   }
 
-  private boolean jj_3R_32() {
-    if (jj_3R_43()) return true;
+  private boolean jj_3R_33() {
+    if (jj_3R_44()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_44()) { jj_scanpos = xsp; break; }
+      if (jj_3R_45()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
+  private boolean jj_3R_28() {
+    if (jj_3R_32()) return true;
+    return false;
+  }
+
   private boolean jj_3R_27() {
     if (jj_3R_31()) return true;
     return false;
@@ -1137,44 +1140,39 @@ public class ConfiguredObjectFilterParse
     return false;
   }
 
-  private boolean jj_3R_25() {
-    if (jj_3R_29()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_68() {
-    if (jj_scan_token(36)) return true;
-    if (jj_3R_24()) return true;
+  private boolean jj_3R_69() {
+    if (jj_scan_token(38)) return true;
+    if (jj_3R_25()) return true;
     return false;
   }
 
-  private boolean jj_3R_24() {
+  private boolean jj_3R_25() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_25()) {
-    jj_scanpos = xsp;
     if (jj_3R_26()) {
     jj_scanpos = xsp;
     if (jj_3R_27()) {
     jj_scanpos = xsp;
-    if (jj_3R_28()) return true;
+    if (jj_3R_28()) {
+    jj_scanpos = xsp;
+    if (jj_3R_29()) return true;
     }
     }
     }
     return false;
   }
 
-  private boolean jj_3R_49() {
-    if (jj_3R_51()) return true;
+  private boolean jj_3R_50() {
+    if (jj_3R_52()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_52()) { jj_scanpos = xsp; break; }
+      if (jj_3R_53()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_46() {
+  private boolean jj_3R_47() {
     if (jj_scan_token(STRING_LITERAL)) return true;
     return false;
   }
@@ -1182,88 +1180,88 @@ public class ConfiguredObjectFilterParse
   private boolean jj_3_4() {
     if (jj_scan_token(NOT)) return true;
     if (jj_scan_token(IN)) return true;
-    if (jj_scan_token(35)) return true;
-    if (jj_3R_24()) return true;
+    if (jj_scan_token(37)) return true;
+    if (jj_3R_25()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_69()) { jj_scanpos = xsp; break; }
+      if (jj_3R_70()) { jj_scanpos = xsp; break; }
     }
-    if (jj_scan_token(37)) return true;
+    if (jj_scan_token(39)) return true;
     return false;
   }
 
   private boolean jj_3_6() {
-    if (jj_scan_token(38)) return true;
-    if (jj_3R_12()) return true;
+    if (jj_scan_token(40)) return true;
+    if (jj_3R_13()) return true;
     return false;
   }
 
-  private boolean jj_3R_67() {
+  private boolean jj_3R_68() {
     if (jj_scan_token(ESCAPE)) return true;
-    if (jj_3R_46()) return true;
+    if (jj_3R_47()) return true;
     return false;
   }
 
-  private boolean jj_3R_18() {
-    if (jj_3R_24()) return true;
+  private boolean jj_3R_19() {
+    if (jj_3R_25()) return true;
     return false;
   }
 
-  private boolean jj_3R_17() {
+  private boolean jj_3R_18() {
     if (jj_scan_token(NOT)) return true;
-    if (jj_3R_12()) return true;
+    if (jj_3R_13()) return true;
     return false;
   }
 
-  private boolean jj_3R_15() {
-    if (jj_scan_token(38)) return true;
-    if (jj_3R_12()) return true;
+  private boolean jj_3R_16() {
+    if (jj_scan_token(40)) return true;
+    if (jj_3R_13()) return true;
     return false;
   }
 
-  private boolean jj_3R_63() {
+  private boolean jj_3R_64() {
     if (jj_scan_token(IN)) return true;
-    if (jj_scan_token(35)) return true;
-    if (jj_3R_24()) return true;
+    if (jj_scan_token(37)) return true;
+    if (jj_3R_25()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_68()) { jj_scanpos = xsp; break; }
+      if (jj_3R_69()) { jj_scanpos = xsp; break; }
     }
-    if (jj_scan_token(37)) return true;
+    if (jj_scan_token(39)) return true;
     return false;
   }
 
-  private boolean jj_3R_55() {
+  private boolean jj_3R_56() {
     if (jj_scan_token(IS)) return true;
     if (jj_scan_token(NOT)) return true;
     if (jj_scan_token(NULL)) return true;
     return false;
   }
 
-  private boolean jj_3R_16() {
-    if (jj_scan_token(39)) return true;
-    if (jj_3R_12()) return true;
+  private boolean jj_3R_17() {
+    if (jj_scan_token(41)) return true;
+    if (jj_3R_13()) return true;
     return false;
   }
 
-  private boolean jj_3R_33() {
-    if (jj_3R_24()) return true;
+  private boolean jj_3R_34() {
+    if (jj_3R_25()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_45()) { jj_scanpos = xsp; break; }
+      if (jj_3R_46()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_20() {
+  private boolean jj_3R_21() {
     if (jj_scan_token(QUOTED_ID)) return true;
     return false;
   }
 
-  private boolean jj_3R_41() {
+  private boolean jj_3R_42() {
     if (jj_scan_token(NULL)) return true;
     return false;
   }
@@ -1274,32 +1272,92 @@ public class ConfiguredObjectFilterParse
     return false;
   }
 
-  private boolean jj_3R_19() {
+  private boolean jj_3R_20() {
     if (jj_scan_token(ID)) return true;
     return false;
   }
 
-  private boolean jj_3R_12() {
+  private boolean jj_3R_13() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_15()) {
-    jj_scanpos = xsp;
     if (jj_3R_16()) {
     jj_scanpos = xsp;
     if (jj_3R_17()) {
     jj_scanpos = xsp;
-    if (jj_3R_18()) return true;
+    if (jj_3R_18()) {
+    jj_scanpos = xsp;
+    if (jj_3R_19()) return true;
     }
     }
     }
     return false;
   }
 
-  private boolean jj_3R_40() {
+  private boolean jj_3R_41() {
     if (jj_scan_token(FALSE)) return true;
     return false;
   }
 
+  private boolean jj_3R_55() {
+    if (jj_scan_token(32)) return true;
+    if (jj_3R_50()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_14() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_20()) {
+    jj_scanpos = xsp;
+    if (jj_3R_21()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3_3() {
+    if (jj_scan_token(NOT)) return true;
+    if (jj_scan_token(BETWEEN)) return true;
+    if (jj_3R_52()) return true;
+    if (jj_scan_token(AND)) return true;
+    if (jj_3R_52()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_54() {
+    if (jj_scan_token(31)) return true;
+    if (jj_3R_50()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_51() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_54()) {
+    jj_scanpos = xsp;
+    if (jj_3R_55()) {
+    jj_scanpos = xsp;
+    if (jj_3_1()) {
+    jj_scanpos = xsp;
+    if (jj_3R_56()) return true;
+    }
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_40() {
+    if (jj_scan_token(TRUE)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_63() {
+    if (jj_scan_token(BETWEEN)) return true;
+    if (jj_3R_52()) return true;
+    if (jj_scan_token(AND)) return true;
+    if (jj_3R_52()) return true;
+    return false;
+  }
+
   /** Generated Token Manager. */
   public ConfiguredObjectFilterParserTokenManager token_source;
   SimpleCharStream jj_input_stream;

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectFilterParserConstants.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectFilterParserConstants.java?rev=1741469&r1=1741468&r2=1741469&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectFilterParserConstants.java (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectFilterParserConstants.java Thu Apr 28 16:22:56 2016
@@ -60,23 +60,27 @@ public interface ConfiguredObjectFilterP
   /** RegularExpression Id. */
   int AS = 19;
   /** RegularExpression Id. */
-  int DECIMAL_LITERAL = 20;
+  int ASC = 20;
   /** RegularExpression Id. */
-  int HEX_LITERAL = 21;
+  int DESC = 21;
   /** RegularExpression Id. */
-  int OCTAL_LITERAL = 22;
+  int DECIMAL_LITERAL = 22;
   /** RegularExpression Id. */
-  int FLOATING_POINT_LITERAL = 23;
+  int HEX_LITERAL = 23;
   /** RegularExpression Id. */
-  int EXPONENT = 24;
+  int OCTAL_LITERAL = 24;
   /** RegularExpression Id. */
-  int STRING_LITERAL = 25;
+  int FLOATING_POINT_LITERAL = 25;
   /** RegularExpression Id. */
-  int FUNCTIONNAME = 26;
+  int EXPONENT = 26;
   /** RegularExpression Id. */
-  int ID = 27;
+  int STRING_LITERAL = 27;
   /** RegularExpression Id. */
-  int QUOTED_ID = 28;
+  int FUNCTIONNAME = 28;
+  /** RegularExpression Id. */
+  int ID = 29;
+  /** RegularExpression Id. */
+  int QUOTED_ID = 30;
 
   /** Lexical state. */
   int DEFAULT = 0;
@@ -103,6 +107,8 @@ public interface ConfiguredObjectFilterP
     "\"FALSE\"",
     "\"NULL\"",
     "\"AS\"",
+    "\"ASC\"",
+    "\"DESC\"",
     "<DECIMAL_LITERAL>",
     "<HEX_LITERAL>",
     "<OCTAL_LITERAL>",

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectFilterParserTokenManager.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectFilterParserTokenManager.java?rev=1741469&r1=1741468&r2=1741469&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectFilterParserTokenManager.java (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectFilterParserTokenManager.java Thu Apr 28 16:22:56 2016
@@ -31,6 +31,7 @@ import org.apache.qpid.filter.BooleanExp
 import org.apache.qpid.filter.ComparisonExpression;
 import org.apache.qpid.filter.ConstantExpression;
 import org.apache.qpid.filter.Expression;
+import org.apache.qpid.filter.OrderByExpression;
 import org.apache.qpid.filter.LogicExpression;
 import org.apache.qpid.filter.UnaryExpression;
 import org.apache.qpid.server.model.ConfiguredObject;
@@ -69,45 +70,47 @@ private int jjMoveStringLiteralDfa0_0()
          jjmatchedKind = 1;
          return jjMoveNfa_0(5, 0);
       case 37:
-         jjmatchedKind = 42;
+         jjmatchedKind = 44;
          return jjMoveNfa_0(5, 0);
       case 40:
-         jjmatchedKind = 35;
+         jjmatchedKind = 37;
          return jjMoveNfa_0(5, 0);
       case 41:
-         jjmatchedKind = 37;
+         jjmatchedKind = 39;
          return jjMoveNfa_0(5, 0);
       case 42:
-         jjmatchedKind = 40;
+         jjmatchedKind = 42;
          return jjMoveNfa_0(5, 0);
       case 43:
-         jjmatchedKind = 38;
+         jjmatchedKind = 40;
          return jjMoveNfa_0(5, 0);
       case 44:
-         jjmatchedKind = 36;
+         jjmatchedKind = 38;
          return jjMoveNfa_0(5, 0);
       case 45:
-         jjmatchedKind = 39;
+         jjmatchedKind = 41;
          return jjMoveNfa_0(5, 0);
       case 46:
-         jjmatchedKind = 43;
+         jjmatchedKind = 45;
          return jjMoveNfa_0(5, 0);
       case 47:
-         jjmatchedKind = 41;
+         jjmatchedKind = 43;
          return jjMoveNfa_0(5, 0);
       case 60:
-         jjmatchedKind = 33;
-         return jjMoveStringLiteralDfa1_0(0x440000000L);
+         jjmatchedKind = 35;
+         return jjMoveStringLiteralDfa1_0(0x1100000000L);
       case 61:
-         jjmatchedKind = 29;
+         jjmatchedKind = 31;
          return jjMoveNfa_0(5, 0);
       case 62:
-         jjmatchedKind = 31;
-         return jjMoveStringLiteralDfa1_0(0x100000000L);
+         jjmatchedKind = 33;
+         return jjMoveStringLiteralDfa1_0(0x400000000L);
       case 65:
-         return jjMoveStringLiteralDfa1_0(0x80200L);
+         return jjMoveStringLiteralDfa1_0(0x180200L);
       case 66:
          return jjMoveStringLiteralDfa1_0(0x800L);
+      case 68:
+         return jjMoveStringLiteralDfa1_0(0x200000L);
       case 69:
          return jjMoveStringLiteralDfa1_0(0x2000L);
       case 70:
@@ -123,15 +126,17 @@ private int jjMoveStringLiteralDfa0_0()
       case 84:
          return jjMoveStringLiteralDfa1_0(0x10000L);
       case 91:
-         jjmatchedKind = 44;
+         jjmatchedKind = 46;
          return jjMoveNfa_0(5, 0);
       case 93:
-         jjmatchedKind = 45;
+         jjmatchedKind = 47;
          return jjMoveNfa_0(5, 0);
       case 97:
-         return jjMoveStringLiteralDfa1_0(0x80200L);
+         return jjMoveStringLiteralDfa1_0(0x180200L);
       case 98:
          return jjMoveStringLiteralDfa1_0(0x800L);
+      case 100:
+         return jjMoveStringLiteralDfa1_0(0x200000L);
       case 101:
          return jjMoveStringLiteralDfa1_0(0x2000L);
       case 102:
@@ -159,28 +164,28 @@ private int jjMoveStringLiteralDfa1_0(lo
    switch(curChar)
    {
       case 61:
-         if ((active0 & 0x100000000L) != 0L)
+         if ((active0 & 0x400000000L) != 0L)
          {
-            jjmatchedKind = 32;
+            jjmatchedKind = 34;
             jjmatchedPos = 1;
          }
-         else if ((active0 & 0x400000000L) != 0L)
+         else if ((active0 & 0x1000000000L) != 0L)
          {
-            jjmatchedKind = 34;
+            jjmatchedKind = 36;
             jjmatchedPos = 1;
          }
          break;
       case 62:
-         if ((active0 & 0x40000000L) != 0L)
+         if ((active0 & 0x100000000L) != 0L)
          {
-            jjmatchedKind = 30;
+            jjmatchedKind = 32;
             jjmatchedPos = 1;
          }
          break;
       case 65:
          return jjMoveStringLiteralDfa2_0(active0, 0x20000L);
       case 69:
-         return jjMoveStringLiteralDfa2_0(active0, 0x800L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x200800L);
       case 73:
          return jjMoveStringLiteralDfa2_0(active0, 0x1000L);
       case 78:
@@ -210,13 +215,13 @@ private int jjMoveStringLiteralDfa1_0(lo
             jjmatchedKind = 19;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x2000L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x102000L);
       case 85:
          return jjMoveStringLiteralDfa2_0(active0, 0x40000L);
       case 97:
          return jjMoveStringLiteralDfa2_0(active0, 0x20000L);
       case 101:
-         return jjMoveStringLiteralDfa2_0(active0, 0x800L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x200800L);
       case 105:
          return jjMoveStringLiteralDfa2_0(active0, 0x1000L);
       case 110:
@@ -246,7 +251,7 @@ private int jjMoveStringLiteralDfa1_0(lo
             jjmatchedKind = 19;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x2000L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x102000L);
       case 117:
          return jjMoveStringLiteralDfa2_0(active0, 0x40000L);
       default :
@@ -265,6 +270,11 @@ private int jjMoveStringLiteralDfa2_0(lo
    switch(curChar)
    {
       case 67:
+         if ((active0 & 0x100000L) != 0L)
+         {
+            jjmatchedKind = 20;
+            jjmatchedPos = 2;
+         }
          return jjMoveStringLiteralDfa3_0(active0, 0x2000L);
       case 68:
          if ((active0 & 0x200L) != 0L)
@@ -277,6 +287,8 @@ private int jjMoveStringLiteralDfa2_0(lo
          return jjMoveStringLiteralDfa3_0(active0, 0x1000L);
       case 76:
          return jjMoveStringLiteralDfa3_0(active0, 0x60000L);
+      case 83:
+         return jjMoveStringLiteralDfa3_0(active0, 0x200000L);
       case 84:
          if ((active0 & 0x100L) != 0L)
          {
@@ -287,6 +299,11 @@ private int jjMoveStringLiteralDfa2_0(lo
       case 85:
          return jjMoveStringLiteralDfa3_0(active0, 0x10000L);
       case 99:
+         if ((active0 & 0x100000L) != 0L)
+         {
+            jjmatchedKind = 20;
+            jjmatchedPos = 2;
+         }
          return jjMoveStringLiteralDfa3_0(active0, 0x2000L);
       case 100:
          if ((active0 & 0x200L) != 0L)
@@ -299,6 +316,8 @@ private int jjMoveStringLiteralDfa2_0(lo
          return jjMoveStringLiteralDfa3_0(active0, 0x1000L);
       case 108:
          return jjMoveStringLiteralDfa3_0(active0, 0x60000L);
+      case 115:
+         return jjMoveStringLiteralDfa3_0(active0, 0x200000L);
       case 116:
          if ((active0 & 0x100L) != 0L)
          {
@@ -325,6 +344,13 @@ private int jjMoveStringLiteralDfa3_0(lo
    {
       case 65:
          return jjMoveStringLiteralDfa4_0(active0, 0x2000L);
+      case 67:
+         if ((active0 & 0x200000L) != 0L)
+         {
+            jjmatchedKind = 21;
+            jjmatchedPos = 3;
+         }
+         break;
       case 69:
          if ((active0 & 0x1000L) != 0L)
          {
@@ -350,6 +376,13 @@ private int jjMoveStringLiteralDfa3_0(lo
          return jjMoveStringLiteralDfa4_0(active0, 0x800L);
       case 97:
          return jjMoveStringLiteralDfa4_0(active0, 0x2000L);
+      case 99:
+         if ((active0 & 0x200000L) != 0L)
+         {
+            jjmatchedKind = 21;
+            jjmatchedPos = 3;
+         }
+         break;
       case 101:
          if ((active0 & 0x1000L) != 0L)
          {
@@ -507,8 +540,8 @@ private int jjMoveNfa_0(int startState,
                      jjCheckNAddStates(4, 6);
                   else if (curChar == 36)
                   {
-                     if (kind > 27)
-                        kind = 27;
+                     if (kind > 29)
+                        kind = 29;
                      jjCheckNAdd(30);
                   }
                   else if (curChar == 39)
@@ -521,14 +554,14 @@ private int jjMoveNfa_0(int startState,
                      jjstateSet[jjnewStateCnt++] = 0;
                   if ((0x3fe000000000000L & l) != 0L)
                   {
-                     if (kind > 20)
-                        kind = 20;
+                     if (kind > 22)
+                        kind = 22;
                      jjCheckNAddTwoStates(14, 15);
                   }
                   else if (curChar == 48)
                   {
-                     if (kind > 22)
-                        kind = 22;
+                     if (kind > 24)
+                        kind = 24;
                      jjCheckNAddTwoStates(48, 50);
                   }
                   break;
@@ -583,15 +616,15 @@ private int jjMoveNfa_0(int startState,
                case 13:
                   if ((0x3fe000000000000L & l) == 0L)
                      break;
-                  if (kind > 20)
-                     kind = 20;
+                  if (kind > 22)
+                     kind = 22;
                   jjCheckNAddTwoStates(14, 15);
                   break;
                case 14:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 20)
-                     kind = 20;
+                  if (kind > 22)
+                     kind = 22;
                   jjCheckNAddTwoStates(14, 15);
                   break;
                case 16:
@@ -601,8 +634,8 @@ private int jjMoveNfa_0(int startState,
                case 17:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 23)
-                     kind = 23;
+                  if (kind > 25)
+                     kind = 25;
                   jjCheckNAddTwoStates(17, 18);
                   break;
                case 19:
@@ -612,8 +645,8 @@ private int jjMoveNfa_0(int startState,
                case 20:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 23)
-                     kind = 23;
+                  if (kind > 25)
+                     kind = 25;
                   jjCheckNAdd(20);
                   break;
                case 21:
@@ -630,29 +663,29 @@ private int jjMoveNfa_0(int startState,
                      jjCheckNAddStates(7, 9);
                   break;
                case 25:
-                  if (curChar == 39 && kind > 25)
-                     kind = 25;
+                  if (curChar == 39 && kind > 27)
+                     kind = 27;
                   break;
                case 27:
                   if ((0x3ff000000000000L & l) != 0L)
                      jjAddStates(16, 17);
                   break;
                case 28:
-                  if (curChar == 40 && kind > 26)
-                     kind = 26;
+                  if (curChar == 40 && kind > 28)
+                     kind = 28;
                   break;
                case 29:
                   if (curChar != 36)
                      break;
-                  if (kind > 27)
-                     kind = 27;
+                  if (kind > 29)
+                     kind = 29;
                   jjCheckNAdd(30);
                   break;
                case 30:
                   if ((0x3ff001000000000L & l) == 0L)
                      break;
-                  if (kind > 27)
-                     kind = 27;
+                  if (kind > 29)
+                     kind = 29;
                   jjCheckNAdd(30);
                   break;
                case 31:
@@ -669,8 +702,8 @@ private int jjMoveNfa_0(int startState,
                      jjCheckNAddStates(4, 6);
                   break;
                case 35:
-                  if (curChar == 34 && kind > 28)
-                     kind = 28;
+                  if (curChar == 34 && kind > 30)
+                     kind = 30;
                   break;
                case 36:
                   if ((0x3ff000000000000L & l) != 0L)
@@ -683,15 +716,15 @@ private int jjMoveNfa_0(int startState,
                case 38:
                   if (curChar != 46)
                      break;
-                  if (kind > 23)
-                     kind = 23;
+                  if (kind > 25)
+                     kind = 25;
                   jjCheckNAddTwoStates(39, 40);
                   break;
                case 39:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 23)
-                     kind = 23;
+                  if (kind > 25)
+                     kind = 25;
                   jjCheckNAddTwoStates(39, 40);
                   break;
                case 41:
@@ -701,8 +734,8 @@ private int jjMoveNfa_0(int startState,
                case 42:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 23)
-                     kind = 23;
+                  if (kind > 25)
+                     kind = 25;
                   jjCheckNAdd(42);
                   break;
                case 43:
@@ -716,29 +749,29 @@ private int jjMoveNfa_0(int startState,
                case 46:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 23)
-                     kind = 23;
+                  if (kind > 25)
+                     kind = 25;
                   jjCheckNAdd(46);
                   break;
                case 47:
                   if (curChar != 48)
                      break;
-                  if (kind > 22)
-                     kind = 22;
+                  if (kind > 24)
+                     kind = 24;
                   jjCheckNAddTwoStates(48, 50);
                   break;
                case 49:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 21)
-                     kind = 21;
+                  if (kind > 23)
+                     kind = 23;
                   jjstateSet[jjnewStateCnt++] = 49;
                   break;
                case 50:
                   if ((0xff000000000000L & l) == 0L)
                      break;
-                  if (kind > 22)
-                     kind = 22;
+                  if (kind > 24)
+                     kind = 24;
                   jjCheckNAdd(50);
                   break;
                default : break;
@@ -755,8 +788,8 @@ private int jjMoveNfa_0(int startState,
                case 5:
                   if ((0x7fffffe87fffffeL & l) != 0L)
                   {
-                     if (kind > 27)
-                        kind = 27;
+                     if (kind > 29)
+                        kind = 29;
                      jjCheckNAdd(30);
                   }
                   if ((0x7fffffe87fffffeL & l) != 0L)
@@ -773,8 +806,8 @@ private int jjMoveNfa_0(int startState,
                   jjCheckNAddTwoStates(10, 8);
                   break;
                case 15:
-                  if ((0x100000001000L & l) != 0L && kind > 20)
-                     kind = 20;
+                  if ((0x100000001000L & l) != 0L && kind > 22)
+                     kind = 22;
                   break;
                case 18:
                   if ((0x2000000020L & l) != 0L)
@@ -792,8 +825,8 @@ private int jjMoveNfa_0(int startState,
                case 30:
                   if ((0x7fffffe87fffffeL & l) == 0L)
                      break;
-                  if (kind > 27)
-                     kind = 27;
+                  if (kind > 29)
+                     kind = 29;
                   jjCheckNAdd(30);
                   break;
                case 34:
@@ -814,8 +847,8 @@ private int jjMoveNfa_0(int startState,
                case 49:
                   if ((0x7e0000007eL & l) == 0L)
                      break;
-                  if (kind > 21)
-                     kind = 21;
+                  if (kind > 23)
+                     kind = 23;
                   jjCheckNAdd(49);
                   break;
                default : break;
@@ -911,15 +944,15 @@ private static final boolean jjCanMove_0
 public static final String[] jjstrLiteralImages = {
 "", null, null, null, null, null, null, null, null, null, null, null, null, 
 null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
-null, null, "\75", "\74\76", "\76", "\76\75", "\74", "\74\75", "\50", "\54", "\51", 
-"\53", "\55", "\52", "\57", "\45", "\56", "\133", "\135", };
+null, null, null, null, "\75", "\74\76", "\76", "\76\75", "\74", "\74\75", "\50", 
+"\54", "\51", "\53", "\55", "\52", "\57", "\45", "\56", "\133", "\135", };
 
 /** Lexer state names. */
 public static final String[] lexStateNames = {
    "DEFAULT",
 };
 static final long[] jjtoToken = {
-   0x3ffffeffff01L, 
+   0xfffffbffff01L, 
 };
 static final long[] jjtoSkip = {
    0xfeL, 

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQuery.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQuery.java?rev=1741469&r1=1741468&r2=1741469&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQuery.java (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQuery.java Thu Apr 28 16:22:56 2016
@@ -21,7 +21,10 @@
 package org.apache.qpid.server.management.plugin.servlet.query;
 
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
+import java.util.ListIterator;
 import java.util.Map;
 
 import org.slf4j.Logger;
@@ -30,6 +33,7 @@ import org.slf4j.LoggerFactory;
 import org.apache.qpid.filter.BooleanExpression;
 import org.apache.qpid.filter.Expression;
 import org.apache.qpid.filter.SelectorParsingException;
+import org.apache.qpid.filter.OrderByExpression;
 import org.apache.qpid.server.model.ConfiguredObject;
 
 public final class ConfiguredObjectQuery
@@ -42,6 +46,7 @@ public final class ConfiguredObjectQuery
 
     private final List<List<Object>> _results;
     private final List<String> _headers;
+    private final int _totalNumberOfRows;
 
     interface HeadersAndValueExpressions
     {
@@ -51,14 +56,38 @@ public final class ConfiguredObjectQuery
 
     public ConfiguredObjectQuery(List<ConfiguredObject<?>> objects, String selectClause, String whereClause)
     {
+        this(objects, selectClause, whereClause, null);
+    }
+
+    public ConfiguredObjectQuery(List<ConfiguredObject<?>> objects,
+                                 String selectClause,
+                                 String whereClause,
+                                 String orderByClause)
+    {
+        this(objects, selectClause, whereClause, orderByClause, null, null);
+    }
+
+    public ConfiguredObjectQuery(List<ConfiguredObject<?>> objects,
+                                 String selectClause,
+                                 String whereClause,
+                                 String orderByClause,
+                                 String limitClause,
+                                 String offsetClause)
+    {
+        int limit = toInt(limitClause, -1);
+        int offset = toInt(offsetClause, 0);
 
         HeadersAndValueExpressions headersAndValueExpressions = parseSelectClause(selectClause);
 
         List<ConfiguredObject<?>> filteredObjects = whereClause == null ? objects : filterObjects(objects, whereClause);
+        List<ConfiguredObject<?>> orderedObjects = orderByClause == null ? filteredObjects : orderObjects(filteredObjects,
+                                                                                                          orderByClause,
+                                                                                                          headersAndValueExpressions.getValueExpressions());
+        List<ConfiguredObject<?>> limitedOrderedObjects = applyLimitAndOffset(orderedObjects, limit, offset);
 
         _headers = headersAndValueExpressions.getHeaders();
-        _results = evaluateResults(filteredObjects, headersAndValueExpressions.getValueExpressions());
-
+        _results = evaluateResults(limitedOrderedObjects, headersAndValueExpressions.getValueExpressions());
+        _totalNumberOfRows = filteredObjects.size();
     }
 
     public List<List<Object>> getResults()
@@ -71,6 +100,27 @@ public final class ConfiguredObjectQuery
         return _headers;
     }
 
+    public int getTotalNumberOfRows()
+    {
+        return _totalNumberOfRows;
+    }
+
+    private int toInt(String value, int defaultValue)
+    {
+        int returnValue = defaultValue;
+        if (value != null)
+        {
+            try
+            {
+                returnValue = Integer.parseInt(value);
+            }
+            catch (NumberFormatException e)
+            {
+            }
+        }
+        return returnValue;
+    }
+
     private HeadersAndValueExpressions parseSelectClause(final String selectClause)
     {
         final List<String> headers = new ArrayList<>();
@@ -154,7 +204,6 @@ public final class ConfiguredObjectQuery
         return filteredObjects;
     }
 
-
     private List<List<Object>> evaluateResults(final List<ConfiguredObject<?>> filteredObjects, List<Expression> valueExpressions)
     {
         List<List<Object>> values = new ArrayList<>();
@@ -180,6 +229,114 @@ public final class ConfiguredObjectQuery
         return values;
     }
 
+    private List<ConfiguredObject<?>> applyLimitAndOffset(final List<ConfiguredObject<?>> orderedObjects, final int limit, int offset)
+    {
+        int size = orderedObjects.size();
+        int firstIndex = offset < 0 ? Math.max(0, size + offset) : Math.min(size, offset);
+        int lastIndex = limit < 0 ? size : Math.min(size, firstIndex + limit);
+
+        return orderedObjects.subList(firstIndex, lastIndex);
+    }
+
+
+    class OrderByComparator implements Comparator<Object>
+    {
+        private final List<OrderByExpression> _orderByExpressions;
+
+        public OrderByComparator(final List<OrderByExpression> orderByExpressions,
+                                 final List<Expression> valueExpressions)
+        {
+            _orderByExpressions = new ArrayList<>(orderByExpressions);
+            for (ListIterator<OrderByExpression> iterator = _orderByExpressions.listIterator(); iterator.hasNext(); )
+            {
+                OrderByExpression orderByExpression = iterator.next();
+                if (orderByExpression.isColumnIndex())
+                {
+                    // column indices are starting from 1 by SQL spec
+                    int index = orderByExpression.getColumnIndex();
+                    if (index <= 0 || index > valueExpressions.size())
+                    {
+                        throw new EvaluationException(String.format("Invalid column index '%d' in orderBy clause", index));
+                    }
+                    else
+                    {
+                        orderByExpression = new OrderByExpression(valueExpressions.get(index - 1), orderByExpression.getOrder());
+                        iterator.set(orderByExpression);
+                    }
+                }
+            }
+        }
+
+        @Override
+        public int compare(final Object o1, final Object o2)
+        {
+            int index = 0;
+            int comparisonResult = 0;
+            for (OrderByExpression orderByExpression : _orderByExpressions)
+            {
+                try
+                {
+                    Comparable left = (Comparable) orderByExpression.evaluate(o1);
+                    Comparable right = (Comparable) orderByExpression.evaluate(o2);
+                    if (left == null && right != null)
+                    {
+                        comparisonResult = -1;
+                    }
+                    else if (left != null && right == null)
+                    {
+                        comparisonResult = 1;
+                    }
+                    else if (left != null && right != null)
+                    {
+                        comparisonResult = left.compareTo(right);
+                    }
+                    if (comparisonResult != 0)
+                    {
+                        int order = 1;
+                        if (orderByExpression.getOrder() == OrderByExpression.Order.DESC)
+                        {
+                            order = -1;
+                        }
+                        return order * comparisonResult;
+                    }
+                    index++;
+                }
+                catch (ClassCastException e)
+                {
+                    throw new EvaluationException(String.format("The orderBy expression at position '%d' is unsupported", index), e);
+                }
+            }
+            return comparisonResult;
+        }
+    }
+
+    private List<ConfiguredObject<?>> orderObjects(final List<ConfiguredObject<?>> unorderedResults,
+                                                   String orderByClause,
+                                                   final List<Expression> valueExpressions)
+    {
+        List<OrderByExpression> orderByExpressions = parseOrderByClause(orderByClause);
+        List<ConfiguredObject<?>> orderedObjects = new ArrayList<>(unorderedResults.size());
+        orderedObjects.addAll(unorderedResults);
+        Comparator<Object> comparator = new OrderByComparator(orderByExpressions, valueExpressions);
+        Collections.sort(orderedObjects, comparator);
+        return orderedObjects;
+    }
+
+    private List<OrderByExpression> parseOrderByClause(final String orderByClause)
+    {
+        final List<OrderByExpression> orderByExpressions;
+        ConfiguredObjectFilterParser parser = new ConfiguredObjectFilterParser();
+        parser.setConfiguredObjectExpressionFactory(_expressionFactory);
+        try
+        {
+            orderByExpressions = parser.parseOrderBy(orderByClause);
+        }
+        catch (ParseException | TokenMgrError e)
+        {
+            throw new SelectorParsingException("Unable to parse orderBy clause", e);
+        }
+        return orderByExpressions;
+    }
 
 
 }

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/EvaluationException.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/EvaluationException.java?rev=1741469&r1=1741468&r2=1741469&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/EvaluationException.java (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/EvaluationException.java Thu Apr 28 16:22:56 2016
@@ -23,6 +23,11 @@ package org.apache.qpid.server.managemen
 
 public class EvaluationException extends RuntimeException
 {
+    public EvaluationException(final String s)
+    {
+        super(s);
+    }
+
     public EvaluationException(final String s, final RuntimeException e)
     {
         super(s,e);

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java?rev=1741469&r1=1741468&r2=1741469&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java Thu Apr 28 16:22:56 2016
@@ -57,6 +57,7 @@ import org.apache.qpid.server.util.Conne
 
 public abstract class AbstractServlet extends HttpServlet
 {
+    public static final int SC_UNPROCESSABLE_ENTITY = 422;
     private static final Logger LOGGER = LoggerFactory.getLogger(AbstractServlet.class);
     public static final String CONTENT_DISPOSITION = "Content-disposition";
 

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueryServlet.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueryServlet.java?rev=1741469&r1=1741468&r2=1741469&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueryServlet.java (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueryServlet.java Thu Apr 28 16:22:56 2016
@@ -34,6 +34,7 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.qpid.filter.SelectorParsingException;
 import org.apache.qpid.server.management.plugin.servlet.query.ConfiguredObjectQuery;
+import org.apache.qpid.server.management.plugin.servlet.query.EvaluationException;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.Model;
 
@@ -71,23 +72,34 @@ public abstract class QueryServlet<X ext
             if (category != null)
             {
                 List<ConfiguredObject<?>> objects = getAllObjects(parent, category, request);
-                Map<String, List<?>> resultsObject = new LinkedHashMap<>();
+                Map<String, Object> resultsObject = new LinkedHashMap<>();
 
                 try
                 {
                     ConfiguredObjectQuery query = new ConfiguredObjectQuery(objects,
                                                                             request.getParameter("select"),
-                                                                            request.getParameter("where"));
+                                                                            request.getParameter("where"),
+                                                                            request.getParameter("orderBy"),
+                                                                            request.getParameter("limit"),
+                                                                            request.getParameter("offset"));
 
                     resultsObject.put("headers", query.getHeaders());
                     resultsObject.put("results", query.getResults());
+                    resultsObject.put("total", query.getTotalNumberOfRows());
                     sendJsonResponse(resultsObject, request, response);
                 }
                 catch (SelectorParsingException e)
                 {
                     sendJsonErrorResponse(request,
                                           response,
-                                          HttpServletResponse.SC_NOT_FOUND,
+                                          HttpServletResponse.SC_BAD_REQUEST,
+                                          e.getMessage());
+                }
+                catch (EvaluationException e)
+                {
+                    sendJsonErrorResponse(request,
+                                          response,
+                                          SC_UNPROCESSABLE_ENTITY,
                                           e.getMessage());
                 }
             }

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java?rev=1741469&r1=1741468&r2=1741469&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java Thu Apr 28 16:22:56 2016
@@ -74,7 +74,6 @@ public class RestServlet extends Abstrac
     public static final String INCLUDE_SYS_CONTEXT_PARAM = "includeSysContext";
     public static final String INHERITED_ACTUALS_PARAM = "inheritedActuals";
     public static final String EXTRACT_INITIAL_CONFIG_PARAM = "extractInitialConfig";
-    public static final int SC_UNPROCESSABLE_ENTITY = 422;
 
     /**
      * Signifies that the agent wishes the servlet to set the Content-Disposition on the

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js?rev=1741469&r1=1741468&r2=1741469&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js Thu Apr 28 16:22:56 2016
@@ -558,37 +558,15 @@ define(["dojo/_base/lang",
     //                     Virtual host query scope can be defined by setting parent
     //                     into corresponding object representing a virtual host hierarchy
     //
-    //   requestOptions: Object?
-    //               is optional request settings
-    //
     // returns: promise of type dojo.promise.Promise
     //      Promise returned by dojo.request.xhr with modified then method allowing to use default error handler if none is specified.
-    Management.prototype.query = function(query, requestOptions)
+    Management.prototype.query = function(query)
     {
         var url = "api/latest/"  + (query.parent &&  query.parent.type === "virtualhost" ?
                                     "queryvhost/" +  this.objectToPath({parent: query.parent}) :
                                     "querybroker") +  (query.category ? "/" + query.category  : "");
-        url =  this.getFullUrl(url);
-        var request = {url: url};
-
-        if (requestOptions)
-        {
-            lang.mixin(request,requestOptions);
-        }
-
-        // id should be always selected
-        // and present with index 0
-        var select = "id";
-        if (query.select)
-        {
-           select =  select + "," + query.select;
-        }
-        var parameters = {select: select};
-        if (query.where)
-        {
-          parameters.where=query.where
-        }
-        request.query = parameters;
+        var request = {url: this.getFullUrl(url), query: {}};
+        shallowCopy(query, request.query, ["parent", "category"]);
         return this.get(request);
     };
 



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