From 0d2be33b2df75ac811bf61cf85e64c5d888e9e8f Mon Sep 17 00:00:00 2001 From: alena Date: Fri, 14 Jan 2011 16:14:42 -0800 Subject: [PATCH] Changed response format in xml api doc generator --- server/src/com/cloud/api/doc/ApiXmlDocWriter.java | 13 ++++++++++++- server/src/com/cloud/api/doc/Argument.java | 6 +++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java index a53d015f2c5..11d46b7f913 100644 --- a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java +++ b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java @@ -303,7 +303,9 @@ public class ApiXmlDocWriter { private static ArrayList setResponseFields(Field[] responseFields) { ArrayList arguments = new ArrayList(); + ArrayList sortedChildlessArguments = new ArrayList(); ArrayList sortedArguments = new ArrayList(); + Argument id = null; for (Field responseField : responseFields) { @@ -311,6 +313,7 @@ public class ApiXmlDocWriter { Param paramAnnotation = responseField.getAnnotation(Param.class); Argument respArg = new Argument(nameAnnotation.value()); boolean toExpose = true; + boolean hasChildren = false; if (paramAnnotation != null) { String description = paramAnnotation.description(); Class fieldClass = paramAnnotation.responseObject(); @@ -328,6 +331,7 @@ public class ApiXmlDocWriter { Field[] fields = fieldClass.getDeclaredFields(); fieldArguments = setResponseFields(fields); respArg.setArguments(fieldArguments); + hasChildren = true; } } } @@ -337,16 +341,23 @@ public class ApiXmlDocWriter { if (nameAnnotation.value().equals("id")) { id = respArg; } else { - sortedArguments.add(respArg); + if (hasChildren) { + respArg.setName(nameAnnotation.value() + "(*)"); + sortedArguments.add(respArg); + } else { + sortedChildlessArguments.add(respArg); + } } } } Collections.sort(sortedArguments); + Collections.sort(sortedChildlessArguments); if (id != null) { arguments.add(id); } + arguments.addAll(sortedChildlessArguments); arguments.addAll(sortedArguments); return arguments; } diff --git a/server/src/com/cloud/api/doc/Argument.java b/server/src/com/cloud/api/doc/Argument.java index e11e1899873..37a2f958b1a 100644 --- a/server/src/com/cloud/api/doc/Argument.java +++ b/server/src/com/cloud/api/doc/Argument.java @@ -62,6 +62,10 @@ public class Argument implements Comparable{ throw new ClassCastException("An Argument object expected."); Argument argument = (Argument)anotherAgrument; return this.getName().compareToIgnoreCase(argument.getName()); - } + } + + public boolean hasArguments() { + return (arguments!= null && !arguments.isEmpty()); + } }