Swagger annotations library support
Change-Id: Ib2843e541580c4accca2a6411449f77a7ea7a02b
diff --git a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/SwaggerGenerator.java b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/SwaggerGenerator.java
index 2f54899..40ba70d 100644
--- a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/SwaggerGenerator.java
+++ b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/SwaggerGenerator.java
@@ -62,6 +62,7 @@
private static final String CONSUMES = "javax.ws.rs.Consumes";
private static final String JSON = "MediaType.APPLICATION_JSON";
private static final String OCTET_STREAM = "MediaType.APPLICATION_OCTET_STREAM";
+ private static final String RESPONSES = "io.swagger.annotations.ApiResponses";
private final List<File> srcs;
private final List<File> resources;
@@ -258,11 +259,10 @@
processConsumesProduces(methodNode, "consumes", consumes);
processConsumesProduces(methodNode, "produces", produces);
- if (tag == null || ((method.toLowerCase().equals("post") || method.toLowerCase().equals("put"))
- && !(tag.getParameters().size() > 1))) {
- addResponses(methodNode, tag, false);
+ if (tag == null || !(tag.getParameters().size() > 1)) {
+ addResponses(javaMethod, methodNode, tag, false);
} else {
- addResponses(methodNode, tag, true);
+ addResponses(javaMethod, methodNode, tag, true);
}
ObjectNode operations = pathMap.get(fullPath);
@@ -327,24 +327,49 @@
}
}
- // Temporary solution to add responses to a method
- private void addResponses(ObjectNode methodNode, DocletTag tag, boolean responseJson) {
+ private Optional<JavaAnnotation> getResponsesAnnotation(JavaMethod javaMethod) {
+ return javaMethod.getAnnotations().stream().filter(
+ a -> a.getType().getName().equals(RESPONSES)
+ ).findAny();
+ }
+
+ // TODO: add json schema for responses
+ private void addResponses(JavaMethod javaMethod, ObjectNode methodNode, DocletTag tag, boolean responseJson) {
ObjectNode responses = mapper.createObjectNode();
methodNode.set("responses", responses);
- ObjectNode success = mapper.createObjectNode();
- success.put("description", "successful operation");
- responses.set("200", success);
- if (tag != null && responseJson) {
- ObjectNode schema = mapper.createObjectNode();
- tag.getParameters().stream().forEach(
- param -> schema.put("$ref", "#/definitions/" + param));
- success.set("schema", schema);
- }
+ Optional<JavaAnnotation> responsesAnnotation = getResponsesAnnotation(javaMethod);
- ObjectNode defaultObj = mapper.createObjectNode();
- defaultObj.put("description", "Unexpected error");
- responses.set("default", defaultObj);
+ if (responsesAnnotation.isPresent()) {
+ Object annotationsObj = responsesAnnotation.get().getNamedParameter("value");
+ if (annotationsObj != null && annotationsObj instanceof List) {
+ List<JavaAnnotation> responseAnnotation = (List<JavaAnnotation>) annotationsObj;
+ responseAnnotation.forEach(
+ javaAnnotation -> {
+ ObjectNode response = mapper.createObjectNode();
+ response.put("description",
+ String.valueOf(javaAnnotation.getNamedParameter("message"))
+ .replaceAll("^\"|\"$", ""));
+ responses.set(String.valueOf(javaAnnotation.getNamedParameter("code")), response);
+ }
+ );
+ }
+ } else {
+ ObjectNode success = mapper.createObjectNode();
+ success.put("description", "successful operation");
+ responses.set("200", success);
+
+ ObjectNode defaultObj = mapper.createObjectNode();
+ defaultObj.put("description", "Unexpected error");
+ responses.set("default", defaultObj);
+
+ if (tag != null && responseJson) {
+ ObjectNode schema = mapper.createObjectNode();
+ tag.getParameters().stream().forEach(
+ param -> schema.put("$ref", "#/definitions/" + param));
+ success.set("schema", schema);
+ }
+ }
}
// Checks if the annotations has a value of JSON and returns the string