Skip to content

Commit 678bbd6

Browse files
committed
made dynamic swagger config example
1 parent 5853326 commit 678bbd6

File tree

4 files changed

+83
-32
lines changed

4 files changed

+83
-32
lines changed

modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.*;
77

88
public interface CodegenConfig {
9+
CodegenType getTag();
910
String getName();
1011
String getHelp();
1112
Map<String, Object> additionalProperties();

modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/Bootstrap.java

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,19 @@
2525

2626
public class Bootstrap extends HttpServlet {
2727
public void init(ServletConfig config) throws ServletException {
28-
Info info = new Info()
29-
.title("Swagger Generator")
30-
.description("This is an online swagger codegen server. You can find out more " +
31-
"at <a href=\"https://github.com/wordnik/swagger-generator\">https://github.com/wordnik/swagger-generator</a> or on irc.freenode.net, #swagger." +
32-
"http://helloreverb.com/terms/")
33-
.termsOfService("http://helloreverb.com/terms/")
34-
.contact(new Contact()
35-
.email("[email protected]"))
36-
.license(new License()
37-
.name("Apache 2.0")
38-
.url("http://www.apache.org/licenses/LICENSE-2.0.html"));
39-
4028
ServletContext context = config.getServletContext();
41-
Swagger swagger = new Swagger().info(info);
42-
context.setAttribute("swagger", swagger);
29+
30+
DynamicSwaggerConfig bc = new DynamicSwaggerConfig();
31+
bc.setBasePath("/api");
32+
bc.setTitle("Swagger Generator");
33+
bc.setDescription("This is an online swagger codegen server. You can find out more " +
34+
"at <a href=\"https://github.com/wordnik/swagger-generator\">https://github.com/wordnik/swagger-generator</a> or on irc.freenode.net, #swagger." +
35+
"http://helloreverb.com/terms/");
36+
bc.setTermsOfServiceUrl("http://helloreverb.com/terms/");
37+
bc.setContact("[email protected]");
38+
bc.setLicense("Apache 2.0");
39+
bc.setLicenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html");
40+
bc.setResourcePackage("com.wordnik.swagger.generator.resource");
41+
bc.setScan(true);
4342
}
4443
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package com.wordnik.swagger.generator;
2+
3+
import com.wordnik.swagger.models.*;
4+
import com.wordnik.swagger.models.parameters.*;
5+
import com.wordnik.swagger.models.properties.*;
6+
import com.wordnik.swagger.codegen.*;
7+
8+
import com.wordnik.swagger.util.Json;
9+
10+
import com.wordnik.swagger.jaxrs.config.BeanConfig;
11+
12+
import java.util.*;
13+
14+
public class DynamicSwaggerConfig extends BeanConfig {
15+
static List<String> clients = new ArrayList<String>();
16+
static List<String> servers = new ArrayList<String>();
17+
static {
18+
List<CodegenConfig> extensions = Codegen.getExtensions();
19+
for(CodegenConfig config : extensions) {
20+
if(config.getTag().equals(CodegenType.CLIENT) || config.getTag().equals(CodegenType.DOCUMENTATION)) {
21+
clients.add(config.getName());
22+
}
23+
else if(config.getTag().equals(CodegenType.SERVER)) {
24+
servers.add(config.getName());
25+
}
26+
}
27+
}
28+
29+
@Override
30+
public Swagger configure(Swagger swagger) {
31+
Path clientPath = swagger.getPaths().get("/gen/clients/{language}");
32+
// update the path description based on what clients are available via SPI
33+
if(clientPath != null) {
34+
Operation post = clientPath.getPost();
35+
Parameter framework = post.getParameters().get(0);
36+
if(framework instanceof PathParameter) {
37+
PathParameter param = (PathParameter) framework;
38+
StringBuilder b = new StringBuilder();
39+
for(String client : clients) {
40+
if(b.toString().length() > 0)
41+
b.append(", ");
42+
b.append(client);
43+
}
44+
param.setDescription("available clients: " + b.toString());
45+
}
46+
}
47+
48+
Path serverPath = swagger.getPaths().get("/gen/servers/{framework}");
49+
// update the path description based on what servers are available via SPI
50+
if(serverPath != null) {
51+
Operation post = serverPath.getPost();
52+
Parameter framework = post.getParameters().get(0);
53+
if(framework instanceof PathParameter) {
54+
PathParameter param = (PathParameter) framework;
55+
StringBuilder b = new StringBuilder();
56+
for(String server : servers) {
57+
if(b.toString().length() > 0)
58+
b.append(", ");
59+
b.append(server);
60+
}
61+
param.setDescription("available clients: " + b.toString());
62+
}
63+
}
64+
65+
return swagger.info(getInfo())
66+
.host(getHost())
67+
.basePath("/api");
68+
}
69+
}

modules/swagger-generator/src/main/webapp/WEB-INF/web.xml

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -34,24 +34,6 @@
3434
<url-pattern>/api/*</url-pattern>
3535
</servlet-mapping>
3636

37-
<servlet>
38-
<servlet-name>Jersey2Config</servlet-name>
39-
<servlet-class>com.wordnik.swagger.jersey.config.JerseyJaxrsConfig</servlet-class>
40-
<init-param>
41-
<param-name>api.version</param-name>
42-
<param-value>1.0.0</param-value>
43-
</init-param>
44-
<init-param>
45-
<param-name>swagger.api.basepath</param-name>
46-
<param-value>http://generator.wordnik.com/online/api</param-value>
47-
</init-param>
48-
<init-param>
49-
<param-name>swagger.filter</param-name>
50-
<param-value>com.wordnik.swagger.generator.util.ApiAuthorizationFilterImpl</param-value>
51-
</init-param>
52-
<load-on-startup>2</load-on-startup>
53-
</servlet>
54-
5537
<filter>
5638
<filter-name>ApiOriginFilter</filter-name>
5739
<filter-class>com.wordnik.swagger.generator.util.ApiOriginFilter</filter-class>

0 commit comments

Comments
 (0)