You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2015/11/26 11:59:56 UTC

svn commit: r1716602 - in /qpid/java/trunk/broker-plugins/management-http/src/main/java: org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.java resources/css/apidocs.css resources/index.html resources/js/qpid/common/ConsoleHelper.js

Author: kwall
Date: Thu Nov 26 10:59:56 2015
New Revision: 1716602

URL: http://svn.apache.org/viewvc?rev=1716602&view=rev
Log:
QPID-6912: Add model operations in API docs

* Also added a link to the API docs from the top right hand menu

Modified:
    qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.java
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/css/apidocs.css
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/index.html
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ConsoleHelper.js

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.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/ApiDocsServlet.java?rev=1716602&r1=1716601&r2=1716602&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.java (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.java Thu Nov 26 10:59:56 2015
@@ -31,8 +31,10 @@ import org.apache.qpid.server.model.Brok
 import org.apache.qpid.server.model.ConfiguredAutomatedAttribute;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.ConfiguredObjectAttribute;
+import org.apache.qpid.server.model.ConfiguredObjectOperation;
 import org.apache.qpid.server.model.ManagedObject;
 import org.apache.qpid.server.model.Model;
+import org.apache.qpid.server.model.OperationParameter;
 
 public class ApiDocsServlet extends AbstractServlet
 {
@@ -133,6 +135,7 @@ public class ApiDocsServlet extends Abst
             writeUsage(writer, request);
             writeTypes(writer);
             writeAttributes(writer);
+            writeOperations(writer);
         }
 
         writeFoot(writer);
@@ -265,9 +268,7 @@ public class ApiDocsServlet extends Abst
 
         for(Class<? extends ConfiguredObject> type : _types)
         {
-
-            ManagedObject typeAnnotation = type.getAnnotation(ManagedObject.class);
-            String typeName = typeAnnotation.type() == null ? _model.getTypeRegistry().getTypeClass(type).getSimpleName() : typeAnnotation.type();
+            String typeName = getTypeName(type);
             Collection<ConfiguredObjectAttribute<?, ?>> typeSpecificAttributes =
                     _model.getTypeRegistry().getTypeSpecificAttributes(type);
             if(!typeSpecificAttributes.isEmpty())
@@ -298,7 +299,7 @@ public class ApiDocsServlet extends Abst
                                + attribute.getName()
                                + "</td><td class=\"type\">"
                                + renderType(attribute)
-                               + "</td class=\"description\"><td>"
+                               + "</td><td class=\"description\">"
                                + attribute.getDescription()
                                + "</td></tr>");
             }
@@ -309,6 +310,83 @@ public class ApiDocsServlet extends Abst
 
     }
 
+    private void writeOperations(final PrintWriter writer)
+    {
+        writer.println("<a name=\"types\"><h2>Operations</h2></a>");
+        writer.println("<h2>Common Operations</h2>");
+
+        writeOperationsTables(writer, _model.getTypeRegistry().getOperations(getConfiguredClass()).values());
+        for(Class<? extends ConfiguredObject> type : _types)
+        {
+            String typeName = getTypeName(type);
+            final Collection<ConfiguredObjectOperation<?>> typeSpecificOperations = _model.getTypeRegistry().getOperations(type).values();
+            if(!typeSpecificOperations.isEmpty() && type != getConfiguredClass())
+            {
+                writer.println("<h2><span class=\"type\">"+typeName+"</span> Specific Operations</h2>");
+                writeOperationsTables(writer, typeSpecificOperations);
+            }
+        }
+
+    }
+
+    private void writeOperationsTables(PrintWriter writer,
+                                       Collection<ConfiguredObjectOperation<?>> operations)
+    {
+        for(ConfiguredObjectOperation<?> operation : operations)
+        {
+            writer.println("<table class=\"operation\">");
+            writer.println("<thead>");
+            writer.println("<tr><th class=\"name\">Operation Name</th><th class=\"returnType\">Return Type</th><th class=\"description\">Description</th></tr>");
+            writer.println("</thead>");
+            writer.println("<tbody>");
+
+            writer.println("<tr><td class=\"name\">"
+                           + operation.getName()
+                           + "</td><td class=\"type\">"
+                           + renderType(operation)
+                           + "</td><td class=\"description\">"
+                           + operation.getDescription()
+                           + "</td></tr>");
+            if (!operation.getParameters().isEmpty())
+            {
+                writer.println("<tr><td class=\"allparameters\" colspan=\"3\">"
+                               + renderParameters(operation.getParameters())
+                               + "</td></tr>");
+            }
+
+            writer.println("</tbody>");
+            writer.println("</table>");
+        }
+    }
+
+    private String renderParameters(final List<OperationParameter> parameters)
+    {
+        StringBuilder writer = new StringBuilder();
+
+        writer.append("<table class=\"parameters\">");
+        writer.append("<thead>");
+        writer.append(
+                "<tr><th class=\"name\">Parameter Name</th><th class=\"type\">Type</th><th class=\"description\">Description</th></tr>");
+        writer.append("</thead>");
+        writer.append("<tbody>");
+
+        for (OperationParameter param : parameters)
+        {
+            writer.append("<tr><td class=\"name\">"
+                          + param.getName()
+                          + "</td><td class=\"type\">"
+                          + renderType(param)
+                          + "</td><td class=\"description\">"
+                          + param.getDescription()
+                          + "</td></tr>");
+        }
+
+        writer.append("</tbody>");
+        writer.append("</table>");
+
+        return writer.toString();
+    }
+
     private String renderType(final ConfiguredObjectAttribute attribute)
     {
         final Class type = attribute.getType();
@@ -369,41 +447,78 @@ public class ApiDocsServlet extends Abst
         }
     }
 
-    private void writeFoot(final PrintWriter writer)
+    private String renderType(final OperationParameter parameter)
     {
-        writer.println("</body>");
-        writer.println("</html>");
-    }
-    private Class<? extends ConfiguredObject> getConfiguredClass()
-    {
-        return _hierarchy.length == 0 ? Broker.class : _hierarchy[_hierarchy.length-1];
-    }
-
-
-    private int getIntParameterFromRequest(final HttpServletRequest request,
-                                           final String paramName,
-                                           final int defaultValue)
-    {
-        int intValue = defaultValue;
-        final String stringValue = request.getParameter(paramName);
-        if(stringValue!=null)
+        final Class type = parameter.getType();
+        if(Enum.class.isAssignableFrom(type))
+        {
+            return "<div class=\"restriction\" title=\"enum: " + EnumSet.allOf(type) + "\">string</div>";
+        }
+        else if(ConfiguredObject.class.isAssignableFrom(type))
         {
-            try
+            return "<div class=\"restriction\" title=\"name or id of a" + (VOWELS.contains(type.getSimpleName().toLowerCase().charAt(0)) ? "n " : " ") + type.getSimpleName() + "\">string</div>";
+        }
+        else if(UUID.class == type)
+        {
+            return "<div class=\"restriction\" title=\"must be a UUID\">string</div>";
+        }
+        else
+        {
+            StringBuilder returnVal = new StringBuilder();
+            final boolean hasValuesRestriction = parameter.getValidValues() != null && !parameter.getValidValues().isEmpty();
+            if(hasValuesRestriction)
+            {
+                returnVal.append("<div class=\"restricted\" title=\"Valid values: " + parameter.getValidValues() + "\">");
+            }
+
+            if(Number.class.isAssignableFrom(type))
+            {
+                returnVal.append("number");
+            }
+            else if(Boolean.class == type)
+            {
+                returnVal.append("boolean");
+            }
+            else if(String.class == type)
+            {
+                returnVal.append("string");
+            }
+            else if(Collection.class.isAssignableFrom(type))
             {
-                intValue = Integer.parseInt(stringValue);
+                // TODO - generate a description of the type in the array
+                returnVal.append("array");
             }
-            catch (NumberFormatException e)
+            else if(Map.class.isAssignableFrom(type))
             {
-                LOGGER.warn("Could not parse " + stringValue + " as integer for parameter " + paramName);
+                // TODO - generate a description of the type in the object
+                returnVal.append("object");
             }
+            else
+            {
+                returnVal.append(type.getSimpleName());
+            }
+            if(hasValuesRestriction)
+            {
+                returnVal.append("</div>");
+            }
+            return returnVal.toString();
         }
-        return intValue;
     }
 
-    private boolean getBooleanParameterFromRequest(HttpServletRequest request, final String paramName)
+    private String renderType(final ConfiguredObjectOperation<?> operation)
     {
-        return Boolean.parseBoolean(request.getParameter(paramName));
+        return operation.getGenericReturnType() instanceof Class ?
+                ((Class) operation.getGenericReturnType()).getName() :
+                operation.getGenericReturnType().toString();
     }
 
-
+    private void writeFoot(final PrintWriter writer)
+    {
+        writer.println("</body>");
+        writer.println("</html>");
+    }
+    private Class<? extends ConfiguredObject> getConfiguredClass()
+    {
+        return _hierarchy.length == 0 ? Broker.class : _hierarchy[_hierarchy.length-1];
+    }
 }

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/css/apidocs.css
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/css/apidocs.css?rev=1716602&r1=1716601&r2=1716602&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/css/apidocs.css (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/css/apidocs.css Thu Nov 26 10:59:56 2015
@@ -50,6 +50,24 @@ table.attributes td.type {
     width: 7em;
 }
 
+table.operation td.name {
+    font-family: "Courier New", courier, monospace;
+    width: 20em;
+}
+
+table.operation td.type {
+    width: 20em;
+}
+
+table.parameters td.name {
+    font-family: "Courier New", courier, monospace;
+    width: 20em;
+}
+
+table.parameters td.type {
+    width: 20em;
+}
+
 table.api td,th {
     vertical-align: top;
 }

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/index.html
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/index.html?rev=1716602&r1=1716601&r2=1716602&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/index.html (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/index.html Thu Nov 26 10:59:56 2015
@@ -105,9 +105,10 @@
             <div data-dojo-type="dijit.Menu">
                 <div data-dojo-type="dijit.MenuItem" data-dojo-props="onClick: function(){window.location='logout';}" >Log out</div>
                 <div data-dojo-type="dijit.MenuItem"
-                    data-dojo-props="iconClass:'dijitIconFunction',onClick: function(){qpidManagementHelper.showPreferencesDialog();}">Preferences</div>
+                    data-dojo-props="iconClass:'dijitIconFunction',onClick: function(){qpidManagementHelper.showPreferencesDialogshowPreferencesDialog();}">Preferences</div>
+                <div data-dojo-type="dijit.MenuItem" data-dojo-props="onClick: function(){qpidManagementHelper.showAPI();}">REST API</div>
                 <div data-dojo-type="dijit.MenuItem"
-                    data-dojo-props="iconClass: 'helpIcon', onClick: function(){qpidManagementHelper.showHelp();}">Help</div>
+                     data-dojo-props="iconClass: 'helpIcon', onClick: function(){qpidManagementHelper.showHelp();}">Help</div>
             </div>
           </div>
         </div>

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ConsoleHelper.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ConsoleHelper.js?rev=1716602&r1=1716601&r2=1716602&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ConsoleHelper.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ConsoleHelper.js Thu Nov 26 10:59:56 2015
@@ -74,7 +74,18 @@ define(["dojo/domReady!"], function () {
           {
             this.getHelpUrl(openWindow);
           }
+        },
+        showAPI: function()
+        {
+          var openWindow = function(url)
+          {
+            var newWindow = window.open(url,'Qpid REST API','height=800,width=800,scrollbars=1,location=1,resizable=1,status=0,toolbar=1,titlebar=1,menubar=1', true);
+            newWindow.focus();
+          }
+
+          openWindow("/apidocs");
         }
+
     };
 
 });



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