Author: orudyy Date: Thu Nov 26 14:35:29 2015 New Revision: 1716694 URL: http://svn.apache.org/viewvc?rev=1716694&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 ------------------------------------------------------------------------ Merged from trunk with command: svn merge -c r1716602 https://svn.apache.org/repos/asf/qpid/java/trunk Modified: qpid/java/branches/6.0.x/ (props changed) qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.java qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/resources/css/apidocs.css qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/resources/index.html qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ConsoleHelper.js Propchange: qpid/java/branches/6.0.x/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Thu Nov 26 14:35:29 2015 @@ -9,5 +9,5 @@ /qpid/branches/java-broker-vhost-refactor/java:1493674-1494547 /qpid/branches/java-network-refactor/qpid/java:805429-821809 /qpid/branches/qpid-2935/qpid/java:1061302-1072333 -/qpid/java/trunk:1715445-1715447,1715586,1715940,1716086-1716087,1716127-1716128,1716141,1716153,1716155,1716194,1716204,1716209,1716227,1716277,1716357,1716368,1716370,1716374,1716432,1716444-1716445,1716455,1716461,1716474,1716489,1716497,1716515,1716555 +/qpid/java/trunk:1715445-1715447,1715586,1715940,1716086-1716087,1716127-1716128,1716141,1716153,1716155,1716194,1716204,1716209,1716227,1716277,1716357,1716368,1716370,1716374,1716432,1716444-1716445,1716455,1716461,1716474,1716489,1716497,1716515,1716555,1716602 /qpid/trunk/qpid:796646-796653 Modified: qpid/java/branches/6.0.x/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/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.java?rev=1716694&r1=1716693&r2=1716694&view=diff ============================================================================== --- qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.java (original) +++ qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.java Thu Nov 26 14:35:29 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/branches/6.0.x/broker-plugins/management-http/src/main/java/resources/css/apidocs.css URL: http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/resources/css/apidocs.css?rev=1716694&r1=1716693&r2=1716694&view=diff ============================================================================== --- qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/resources/css/apidocs.css (original) +++ qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/resources/css/apidocs.css Thu Nov 26 14:35:29 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/branches/6.0.x/broker-plugins/management-http/src/main/java/resources/index.html URL: http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/resources/index.html?rev=1716694&r1=1716693&r2=1716694&view=diff ============================================================================== --- qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/resources/index.html (original) +++ qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/resources/index.html Thu Nov 26 14:35:29 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/branches/6.0.x/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ConsoleHelper.js URL: http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ConsoleHelper.js?rev=1716694&r1=1716693&r2=1716694&view=diff ============================================================================== --- qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ConsoleHelper.js (original) +++ qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ConsoleHelper.js Thu Nov 26 14:35:29 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: [email protected] For additional commands, e-mail: [email protected]
