updated swagger definitions for opts

This commit is contained in:
Tony Tam 2015-11-05 18:19:21 -08:00
parent b3d29bfb56
commit cdd20ac408
3 changed files with 56 additions and 30 deletions

View File

@ -26,35 +26,36 @@ public class DynamicSwaggerConfig extends BeanConfig {
Parameter framework = post.getParameters().get(0); Parameter framework = post.getParameters().get(0);
if (framework instanceof PathParameter) { if (framework instanceof PathParameter) {
PathParameter param = (PathParameter) framework; 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());
param.setEnum(clients); param.setEnum(clients);
} }
Operation get = clientPath.getGet();
if(get != null) {
framework = get.getParameters().get(0);
if (framework instanceof PathParameter) {
PathParameter param = (PathParameter) framework;
param.setEnum(clients);
}
}
} }
Path serverPath = swagger.getPaths().get("/gen/servers/{framework}"); Path serverPath = swagger.getPaths().get("/gen/servers/{framework}");
// update the path description based on what servers are available via SPI
if (serverPath != null) { if (serverPath != null) {
Operation post = serverPath.getPost(); Operation post = serverPath.getPost();
Parameter framework = post.getParameters().get(0); Parameter framework = post.getParameters().get(0);
if (framework instanceof PathParameter) { if (framework instanceof PathParameter) {
PathParameter param = (PathParameter) framework; 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 servers: " + b.toString());
param.setEnum(servers); param.setEnum(servers);
} }
Operation get = serverPath.getGet();
if(get != null) {
framework = get.getParameters().get(0);
if (framework instanceof PathParameter) {
PathParameter param = (PathParameter) framework;
param.setEnum(servers);
}
}
} }
return swagger.info(getInfo()) return swagger.info(getInfo())

View File

@ -109,7 +109,7 @@ public class Generator {
codegenConfig.setOutputDir(outputFolder); codegenConfig.setOutputDir(outputFolder);
Json.prettyPrint(clientOpts); LOGGER.debug(Json.pretty(clientOpts));
clientOptInput.setConfig(codegenConfig); clientOptInput.setConfig(codegenConfig);
@ -124,6 +124,20 @@ public class Generator {
} else { } else {
throw new BadRequestException(400, "A target generation was attempted, but no files were created!"); throw new BadRequestException(400, "A target generation was attempted, but no files were created!");
} }
for(File file: files) {
try {
file.delete();
}
catch(Exception e) {
LOGGER.error("unable to delete file " + file.getAbsolutePath());
}
}
try {
new File(outputFolder).delete();
}
catch (Exception e) {
LOGGER.error("unable to delete output folder " + outputFolder);
}
} catch (Exception e) { } catch (Exception e) {
throw new BadRequestException(500, "Unable to build target: " + e.getMessage()); throw new BadRequestException(500, "Unable to build target: " + e.getMessage());
} }

View File

@ -12,16 +12,14 @@ import io.swagger.generator.model.Generated;
import io.swagger.generator.model.GeneratorInput; import io.swagger.generator.model.GeneratorInput;
import io.swagger.generator.model.ResponseCode; import io.swagger.generator.model.ResponseCode;
import io.swagger.generator.online.Generator; import io.swagger.generator.online.Generator;
import org.apache.commons.io.FileUtils;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.*;
import javax.ws.rs.core.Context; import javax.ws.rs.core.Context;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import javax.servlet.http.HttpServletRequest; import java.io.File;
import java.util.*; import java.util.*;
@Path("/gen") @Path("/gen")
@ -35,6 +33,9 @@ public class SwaggerResource {
@Path("/download/{fileId}") @Path("/download/{fileId}")
@Produces({MediaType.APPLICATION_OCTET_STREAM}) @Produces({MediaType.APPLICATION_OCTET_STREAM})
@ApiOperation(value = "Downloads a pre-generated file", @ApiOperation(value = "Downloads a pre-generated file",
notes = "A valid `fileId` is generated by the `/clients/{language}` or `/servers/{language}` POST " +
"operations. The fileId code can be used just once, after which a new `fileId` will need to " +
"be requested.",
response = String.class, response = String.class,
tags = {"clients", "servers"}) tags = {"clients", "servers"})
public Response downloadFile(@PathParam("fileId") String fileId) throws Exception { public Response downloadFile(@PathParam("fileId") String fileId) throws Exception {
@ -42,7 +43,15 @@ public class SwaggerResource {
System.out.println("looking for fileId " + fileId); System.out.println("looking for fileId " + fileId);
System.out.println("got filename " + g.getFilename()); System.out.println("got filename " + g.getFilename());
if (g.getFilename() != null) { if (g.getFilename() != null) {
byte[] bytes = org.apache.commons.io.FileUtils.readFileToByteArray(new java.io.File(g.getFilename())); File file = new java.io.File(g.getFilename());
byte[] bytes = org.apache.commons.io.FileUtils.readFileToByteArray(file);
try {
FileUtils.deleteDirectory(file.getParentFile());
}
catch (Exception e) {
System.out.println("failed to delete file " + file.getAbsolutePath());
}
return Response.ok(bytes, "application/zip") return Response.ok(bytes, "application/zip")
.header("Content-Disposition", "attachment; filename=\"" + g.getFriendlyName() + "-generated.zip\"") .header("Content-Disposition", "attachment; filename=\"" + g.getFriendlyName() + "-generated.zip\"")
@ -57,7 +66,8 @@ public class SwaggerResource {
@POST @POST
@Path("/clients/{language}") @Path("/clients/{language}")
@ApiOperation( @ApiOperation(
value = "Generates a client library based on the config", value = "Generates a client library",
notes = "Accepts a `GeneratorInput` options map for spec location and generation options",
response = ResponseCode.class, response = ResponseCode.class,
tags = "clients") tags = "clients")
public Response generateClient( public Response generateClient(
@ -78,7 +88,7 @@ public class SwaggerResource {
String host = scheme + "://" + request.getServerName() + port; String host = scheme + "://" + request.getServerName() + port;
if (filename != null) { if (filename != null) {
String code = String.valueOf(System.currentTimeMillis()); String code = String.valueOf(UUID.randomUUID().toString());
Generated g = new Generated(); Generated g = new Generated();
g.setFilename(filename); g.setFilename(filename);
g.setFriendlyName(language + "-client"); g.setFriendlyName(language + "-client");
@ -114,7 +124,7 @@ public class SwaggerResource {
} }
@GET @GET
@Path("/server/{framework}") @Path("/servers/{framework}")
@Produces({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON})
@ApiOperation( @ApiOperation(
value = "Returns options for a server framework", value = "Returns options for a server framework",
@ -161,7 +171,8 @@ public class SwaggerResource {
@POST @POST
@Path("/servers/{framework}") @Path("/servers/{framework}")
@ApiOperation(value = "Generates a server library for the supplied server framework", @ApiOperation(value = "Generates a server library",
notes = "Accepts a `GeneratorInput` options map for spec location and generation options.",
response = ResponseCode.class, response = ResponseCode.class,
tags = "servers") tags = "servers")
public Response generateServerForLanguage( public Response generateServerForLanguage(
@ -178,7 +189,7 @@ public class SwaggerResource {
String host = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort(); String host = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();
if (filename != null) { if (filename != null) {
String code = String.valueOf(System.currentTimeMillis()); String code = String.valueOf(UUID.randomUUID().toString());
Generated g = new Generated(); Generated g = new Generated();
g.setFilename(filename); g.setFilename(filename);
g.setFriendlyName(framework + "-server"); g.setFriendlyName(framework + "-server");