From 678bbd667676686d904ce2b6426540d6b5d13358 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 16 Feb 2015 20:17:00 -0800 Subject: [PATCH] made dynamic swagger config example --- .../swagger/codegen/CodegenConfig.java | 1 + .../wordnik/swagger/generator/Bootstrap.java | 27 ++++---- .../generator/DynamicSwaggerConfig.java | 69 +++++++++++++++++++ .../src/main/webapp/WEB-INF/web.xml | 18 ----- 4 files changed, 83 insertions(+), 32 deletions(-) create mode 100644 modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/DynamicSwaggerConfig.java diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenConfig.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenConfig.java index 19b3473024e5..940cde4deb93 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenConfig.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenConfig.java @@ -6,6 +6,7 @@ import com.wordnik.swagger.models.properties.*; import java.util.*; public interface CodegenConfig { + CodegenType getTag(); String getName(); String getHelp(); Map additionalProperties(); diff --git a/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/Bootstrap.java b/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/Bootstrap.java index 2bafc0e84166..0909f593b66e 100644 --- a/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/Bootstrap.java +++ b/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/Bootstrap.java @@ -25,20 +25,19 @@ import javax.servlet.ServletException; public class Bootstrap extends HttpServlet { public void init(ServletConfig config) throws ServletException { - Info info = new Info() - .title("Swagger Generator") - .description("This is an online swagger codegen server. You can find out more " + - "at https://github.com/wordnik/swagger-generator or on irc.freenode.net, #swagger." + - "http://helloreverb.com/terms/") - .termsOfService("http://helloreverb.com/terms/") - .contact(new Contact() - .email("apiteam@swagger.io")) - .license(new License() - .name("Apache 2.0") - .url("http://www.apache.org/licenses/LICENSE-2.0.html")); - ServletContext context = config.getServletContext(); - Swagger swagger = new Swagger().info(info); - context.setAttribute("swagger", swagger); + + DynamicSwaggerConfig bc = new DynamicSwaggerConfig(); + bc.setBasePath("/api"); + bc.setTitle("Swagger Generator"); + bc.setDescription("This is an online swagger codegen server. You can find out more " + + "at https://github.com/wordnik/swagger-generator or on irc.freenode.net, #swagger." + + "http://helloreverb.com/terms/"); + bc.setTermsOfServiceUrl("http://helloreverb.com/terms/"); + bc.setContact("apiteam@swagger.io"); + bc.setLicense("Apache 2.0"); + bc.setLicenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html"); + bc.setResourcePackage("com.wordnik.swagger.generator.resource"); + bc.setScan(true); } } diff --git a/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/DynamicSwaggerConfig.java b/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/DynamicSwaggerConfig.java new file mode 100644 index 000000000000..60983c230ac8 --- /dev/null +++ b/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/DynamicSwaggerConfig.java @@ -0,0 +1,69 @@ +package com.wordnik.swagger.generator; + +import com.wordnik.swagger.models.*; +import com.wordnik.swagger.models.parameters.*; +import com.wordnik.swagger.models.properties.*; +import com.wordnik.swagger.codegen.*; + +import com.wordnik.swagger.util.Json; + +import com.wordnik.swagger.jaxrs.config.BeanConfig; + +import java.util.*; + +public class DynamicSwaggerConfig extends BeanConfig { + static List clients = new ArrayList(); + static List servers = new ArrayList(); + static { + List extensions = Codegen.getExtensions(); + for(CodegenConfig config : extensions) { + if(config.getTag().equals(CodegenType.CLIENT) || config.getTag().equals(CodegenType.DOCUMENTATION)) { + clients.add(config.getName()); + } + else if(config.getTag().equals(CodegenType.SERVER)) { + servers.add(config.getName()); + } + } + } + + @Override + public Swagger configure(Swagger swagger) { + Path clientPath = swagger.getPaths().get("/gen/clients/{language}"); + // update the path description based on what clients are available via SPI + if(clientPath != null) { + Operation post = clientPath.getPost(); + Parameter framework = post.getParameters().get(0); + if(framework instanceof PathParameter) { + PathParameter param = (PathParameter) framework; + StringBuilder b = new StringBuilder(); + for(String client : clients) { + if(b.toString().length() > 0) + b.append(", "); + b.append(client); + } + param.setDescription("available clients: " + b.toString()); + } + } + + Path serverPath = swagger.getPaths().get("/gen/servers/{framework}"); + // update the path description based on what servers are available via SPI + if(serverPath != null) { + Operation post = serverPath.getPost(); + Parameter framework = post.getParameters().get(0); + if(framework instanceof PathParameter) { + PathParameter param = (PathParameter) framework; + StringBuilder b = new StringBuilder(); + for(String server : servers) { + if(b.toString().length() > 0) + b.append(", "); + b.append(server); + } + param.setDescription("available clients: " + b.toString()); + } + } + + return swagger.info(getInfo()) + .host(getHost()) + .basePath("/api"); + } +} \ No newline at end of file diff --git a/modules/swagger-generator/src/main/webapp/WEB-INF/web.xml b/modules/swagger-generator/src/main/webapp/WEB-INF/web.xml index 79d21b95f84d..7b363b797ed7 100644 --- a/modules/swagger-generator/src/main/webapp/WEB-INF/web.xml +++ b/modules/swagger-generator/src/main/webapp/WEB-INF/web.xml @@ -34,24 +34,6 @@ /api/* - - Jersey2Config - com.wordnik.swagger.jersey.config.JerseyJaxrsConfig - - api.version - 1.0.0 - - - swagger.api.basepath - http://generator.wordnik.com/online/api - - - swagger.filter - com.wordnik.swagger.generator.util.ApiAuthorizationFilterImpl - - 2 - - ApiOriginFilter com.wordnik.swagger.generator.util.ApiOriginFilter