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