You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2016/03/14 17:41:48 UTC

svn commit: r1734956 - in /qpid/java/trunk/broker-plugins/management-http/src/main: grammar/ java/org/apache/qpid/server/management/plugin/servlet/query/ java/org/apache/qpid/server/management/plugin/servlet/rest/

Author: rgodfrey
Date: Mon Mar 14 16:41:48 2016
New Revision: 1734956

URL: http://svn.apache.org/viewvc?rev=1734956&view=rev
Log:
QPID-6969 : Address some review comments from [~lorenz.quack]

Added:
    qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQuery.java   (with props)
    qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/QueryException.java   (with props)
Modified:
    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/rest/QueryServlet.java

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=1734956&r1=1734955&r2=1734956&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 Mon Mar 14 16:41:48 2016
@@ -81,7 +81,7 @@ import org.apache.qpid.server.model.Conf
 /**
  * JMS Selector Parser generated by JavaCC
  *
- * Do not edit this .java file directly - it is autogenerated from SelectorParser.jj
+ * Do not edit this .java file directly - it is autogenerated from ConfiguredObjectFilterParser.jj
  */
 public class ConfiguredObjectFilterParser
 {
@@ -195,7 +195,7 @@ TOKEN [IGNORE_CASE] :
 }
 
 // ----------------------------------------------------------------------------
-// Grammer
+// Grammar
 // ----------------------------------------------------------------------------
 BooleanExpression filter() :
 {

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=1734956&r1=1734955&r2=1734956&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 Mon Mar 14 16:41:48 2016
@@ -41,7 +41,7 @@ import org.apache.qpid.server.model.Conf
 /**
  * JMS Selector Parser generated by JavaCC
  *
- * Do not edit this .java file directly - it is autogenerated from SelectorParser.jj
+ * Do not edit this .java file directly - it is autogenerated from ConfiguredObjectFilterParser.jj
  */
 public class ConfiguredObjectFilterParser implements ConfiguredObjectFilterParserConstants {
     private ConfiguredObjectExpressionFactory _factory;
@@ -87,7 +87,7 @@ public class ConfiguredObjectFilterParse
     }
 
 // ----------------------------------------------------------------------------
-// Grammer
+// Grammar
 // ----------------------------------------------------------------------------
   final public BooleanExpression filter() throws ParseException {
     Expression left=null;
@@ -744,6 +744,58 @@ 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;
@@ -1248,58 +1300,6 @@ public class ConfiguredObjectFilterParse
     return false;
   }
 
-  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;
-  }
-
   /** Generated Token Manager. */
   public ConfiguredObjectFilterParserTokenManager token_source;
   SimpleCharStream jj_input_stream;

Added: 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=1734956&view=auto
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQuery.java (added)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQuery.java Mon Mar 14 16:41:48 2016
@@ -0,0 +1,184 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.server.management.plugin.servlet.query;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.qpid.filter.BooleanExpression;
+import org.apache.qpid.filter.Expression;
+import org.apache.qpid.server.model.ConfiguredObject;
+
+public final class ConfiguredObjectQuery
+{
+    private static final Logger LOGGER = LoggerFactory.getLogger(ConfiguredObjectQuery.class);
+
+    private static final String[] STANDARD_FIELDS = new String[]{ConfiguredObject.ID, ConfiguredObject.NAME};
+
+    private final ConfiguredObjectExpressionFactory _expressionFactory = new ConfiguredObjectExpressionFactory();
+
+    private final List<List<Object>> _results;
+    private final List<String> _headers;
+
+    interface HeadersAndValueExpressions
+    {
+        List<String> getHeaders();
+        List<Expression> getValueExpressions();
+    }
+
+    public ConfiguredObjectQuery(List<ConfiguredObject<?>> objects, String selectClause, String whereClause)
+    {
+
+        HeadersAndValueExpressions headersAndValueExpressions = parseSelectClause(selectClause);
+
+        List<ConfiguredObject<?>> filteredObjects = filterObjects(objects, whereClause);
+
+        _headers = headersAndValueExpressions.getHeaders();
+        _results = evaluateResults(filteredObjects, headersAndValueExpressions.getValueExpressions());
+
+    }
+
+    public List<List<Object>> getResults()
+    {
+        return _results;
+    }
+
+    public List<String> getHeaders()
+    {
+        return _headers;
+    }
+
+    private HeadersAndValueExpressions parseSelectClause(final String selectClause)
+    {
+        final List<String> headers = new ArrayList<>();
+        final List<Expression> valueExpressions = new ArrayList<>();
+        if (selectClause != null)
+        {
+            ConfiguredObjectFilterParser parser = new ConfiguredObjectFilterParser();
+            parser.setConfiguredObjectExpressionFactory(_expressionFactory);
+
+            try
+            {
+                final List<Map<String, Expression>> expressions =
+                        parser.parseSelect(selectClause);
+                for (Map<String, Expression> expression : expressions)
+                {
+                    final Map.Entry<String, Expression> entry = expression.entrySet().iterator().next();
+                    headers.add(entry.getKey());
+                    valueExpressions.add(entry.getValue());
+                }
+            }
+            catch (ParseException | TokenMgrError e)
+            {
+                throw new QueryException("Unable to parse select clause");
+            }
+        }
+        else
+        {
+            for (String field : STANDARD_FIELDS)
+            {
+                headers.add(field);
+                valueExpressions.add(_expressionFactory.createConfiguredObjectExpression(field));
+            }
+        }
+        return new HeadersAndValueExpressions()
+                {
+                    @Override
+                    public List<String> getHeaders()
+                    {
+                        return headers;
+                    }
+
+                    @Override
+                    public List<Expression> getValueExpressions()
+                    {
+                        return valueExpressions;
+                    }
+                };
+    }
+
+    private List<ConfiguredObject<?>> filterObjects(final List<ConfiguredObject<?>> objects, final String whereClause)
+    {
+        List<ConfiguredObject<?>> filteredObjects = new ArrayList<>();
+        ConfiguredObjectFilterParser parser = new ConfiguredObjectFilterParser();
+        parser.setConfiguredObjectExpressionFactory(_expressionFactory);
+        try
+        {
+            final BooleanExpression<ConfiguredObject> expression =
+                    parser.parseWhere(whereClause);
+
+
+            for (ConfiguredObject<?> object : objects)
+            {
+                try
+                {
+                    if (expression.matches(object))
+                    {
+                        filteredObjects.add(object);
+                    }
+                }
+                catch (RuntimeException e)
+                {
+                    LOGGER.debug("Error while evaluating object against where clause", e);
+                }
+            }
+
+        }
+        catch (ParseException | TokenMgrError e)
+        {
+            throw new QueryException("Unable to parse where clause");
+        }
+        return filteredObjects;
+    }
+
+
+    private List<List<Object>> evaluateResults(final List<ConfiguredObject<?>> filteredObjects, List<Expression> valueExpressions)
+    {
+        List<List<Object>> values = new ArrayList<>();
+        for (ConfiguredObject<?> object : filteredObjects)
+        {
+            List<Object> objectVals = new ArrayList<>();
+            for (Expression<ConfiguredObject<?>> evaluator : valueExpressions)
+            {
+                Object value;
+                try
+                {
+                    value = evaluator.evaluate(object);
+                }
+                catch (RuntimeException e)
+                {
+                    LOGGER.debug("Error while evaluating select clause", e);
+                    value = null;
+                }
+                objectVals.add(value);
+            }
+            values.add(objectVals);
+        }
+        return values;
+    }
+
+
+
+}

Propchange: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQuery.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/QueryException.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/QueryException.java?rev=1734956&view=auto
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/QueryException.java (added)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/QueryException.java Mon Mar 14 16:41:48 2016
@@ -0,0 +1,29 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.server.management.plugin.servlet.query;
+
+public class QueryException extends RuntimeException
+{
+    public QueryException(final String message)
+    {
+        super(message);
+    }
+}

Propchange: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/QueryException.java
------------------------------------------------------------------------------
    svn:eol-style = native

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=1734956&r1=1734955&r2=1734956&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 Mon Mar 14 16:41:48 2016
@@ -21,7 +21,6 @@
 package org.apache.qpid.server.management.plugin.servlet.rest;
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -33,20 +32,15 @@ import javax.servlet.http.HttpServletRes
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.qpid.filter.BooleanExpression;
-import org.apache.qpid.filter.Expression;
-import org.apache.qpid.server.management.plugin.HttpManagementUtil;
-import org.apache.qpid.server.management.plugin.servlet.query.ConfiguredObjectExpressionFactory;
-import org.apache.qpid.server.management.plugin.servlet.query.ConfiguredObjectFilterParser;
-import org.apache.qpid.server.management.plugin.servlet.query.ParseException;
-import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.management.plugin.servlet.query.ConfiguredObjectQuery;
+import org.apache.qpid.server.management.plugin.servlet.query.QueryException;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.Model;
 
 public abstract class QueryServlet<X extends ConfiguredObject<?>> extends AbstractServlet
 {
     private static final Logger LOGGER = LoggerFactory.getLogger(QueryServlet.class);
-    private static final String[] STANDARD_FIELDS = new String[]{ConfiguredObject.ID, ConfiguredObject.NAME};
+
 
     @Override
     protected void doGetWithSubjectAndActor(HttpServletRequest request, HttpServletResponse response)
@@ -71,7 +65,6 @@ public abstract class QueryServlet<X ext
         if( parent != null && ((categoryName = getRequestedCategory(request)) != null))
         {
             Model model = parent.getModel();
-            ConfiguredObjectExpressionFactory expressionFactory = new ConfiguredObjectExpressionFactory();
 
             Class<? extends ConfiguredObject> category = getSupportedCategory(categoryName, model);
 
@@ -79,110 +72,25 @@ public abstract class QueryServlet<X ext
             {
                 List<ConfiguredObject<?>> objects = getAllObjects(parent, category, request);
                 Map<String, List<?>> resultsObject = new LinkedHashMap<>();
-                List<String> headers = new ArrayList<>();
-                List<Expression<ConfiguredObject<?>>> valueEvaluators = new ArrayList<>();
 
-                if (request.getParameterMap().containsKey("select"))
-                {
-                    ConfiguredObjectFilterParser parser = new ConfiguredObjectFilterParser();
-                    parser.setConfiguredObjectExpressionFactory(expressionFactory);
-                    String selectClause = request.getParameter("select");
-
-                    try
-                    {
-                        final List<Map<String, Expression>> expressions =
-                                parser.parseSelect(selectClause);
-                        for (Map<String, Expression> expression : expressions)
-                        {
-                            final Map.Entry<String, Expression> entry = expression.entrySet().iterator().next();
-                            headers.add(entry.getKey());
-                            valueEvaluators.add(entry.getValue());
-                        }
-                    }
-                    catch (ParseException e)
-                    {
-                        sendJsonErrorResponse                               (request,
-                                                                             response,
-                                                                             HttpServletResponse.SC_NOT_FOUND,
-                                                                             "Unable to parse where clause");
-                        return;
-                    }
-                }
-                else
+                try
                 {
-                    for (String field : STANDARD_FIELDS)
-                    {
-                        headers.add(field);
-                        valueEvaluators.add(expressionFactory.createConfiguredObjectExpression(field));
-                    }
+                    ConfiguredObjectQuery query = new ConfiguredObjectQuery(objects,
+                                                                            request.getParameter("select"),
+                                                                            request.getParameter("where"));
+
+                    resultsObject.put("headers", query.getHeaders());
+                    resultsObject.put("results", query.getResults());
+                    sendJsonResponse(resultsObject, request, response);
                 }
-
-                if (request.getParameterMap().containsKey("where"))
+                catch(QueryException e)
                 {
-                    String whereClause = request.getParameter("where");
-
-                    ConfiguredObjectFilterParser parser = new ConfiguredObjectFilterParser();
-                    parser.setConfiguredObjectExpressionFactory(expressionFactory);
-                    try
-                    {
-                        final BooleanExpression<ConfiguredObject> expression =
-                                parser.parseWhere(whereClause);
-
-                        List<ConfiguredObject<?>> filteredObjects = new ArrayList<>();
-
-                        for (ConfiguredObject<?> object : objects)
-                        {
-                            try
-                            {
-                                if (expression.matches(object))
-                                {
-                                    filteredObjects.add(object);
-                                }
-                            }
-                            catch (RuntimeException e)
-                            {
-                                LOGGER.debug("Error while evaluating object against where clause", e);
-                            }
-                        }
-
-                        objects = filteredObjects;
-                    }
-                    catch (ParseException e)
-                    {
-                        sendJsonErrorResponse                               (request,
-                                                                             response,
-                                                                             HttpServletResponse.SC_NOT_FOUND,
-                                                                             "Unable to parse where clause");
-                        return;
-                    }
-
+                    sendJsonErrorResponse(request,
+                                          response,
+                                          HttpServletResponse.SC_NOT_FOUND,
+                                          e.getMessage());
                 }
-
-                resultsObject.put("headers", headers);
-                List<List<Object>> values = new ArrayList<>();
-                for (ConfiguredObject<?> object : objects)
-                {
-                    List<Object> objectVals = new ArrayList<>();
-                    for (Expression<ConfiguredObject<?>> evaluator : valueEvaluators)
-                    {
-                        Object value;
-                        try
-                        {
-                            value = evaluator.evaluate(object);
-                        }
-                        catch (RuntimeException e)
-                        {
-                            LOGGER.debug("Error while evaluating select clause", e);
-                            value = null;
-                        }
-                        objectVals.add(value);
-                    }
-                    values.add(objectVals);
-                }
-                resultsObject.put("results", values);
-                sendJsonResponse(resultsObject, request, response);
             }
-
             else
             {
                 sendJsonErrorResponse(request,
@@ -208,4 +116,5 @@ public abstract class QueryServlet<X ext
     abstract protected List<ConfiguredObject<?>> getAllObjects(final X parent,
                                                                final Class<? extends ConfiguredObject> category,
                                                                final HttpServletRequest request);
+
 }



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