diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/DynamicSwaggerConfig.java b/modules/swagger-generator/src/main/java/io/swagger/generator/DynamicSwaggerConfig.java index ee5792850c5..974b938a1aa 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/DynamicSwaggerConfig.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/DynamicSwaggerConfig.java @@ -26,35 +26,36 @@ public class DynamicSwaggerConfig extends BeanConfig { 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()); 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}"); - // 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 servers: " + b.toString()); 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()) diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java b/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java index e709e777dd4..a5c14e43715 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/online/Generator.java @@ -109,7 +109,7 @@ public class Generator { codegenConfig.setOutputDir(outputFolder); - Json.prettyPrint(clientOpts); + LOGGER.debug(Json.pretty(clientOpts)); clientOptInput.setConfig(codegenConfig); @@ -124,6 +124,20 @@ public class Generator { } else { 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) { throw new BadRequestException(500, "Unable to build target: " + e.getMessage()); } diff --git a/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java b/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java index 4f9e5d99c5b..343692f8385 100644 --- a/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java +++ b/modules/swagger-generator/src/main/java/io/swagger/generator/resource/SwaggerResource.java @@ -12,16 +12,14 @@ import io.swagger.generator.model.Generated; import io.swagger.generator.model.GeneratorInput; import io.swagger.generator.model.ResponseCode; 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.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.Response; -import javax.servlet.http.HttpServletRequest; +import java.io.File; import java.util.*; @Path("/gen") @@ -35,6 +33,9 @@ public class SwaggerResource { @Path("/download/{fileId}") @Produces({MediaType.APPLICATION_OCTET_STREAM}) @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, tags = {"clients", "servers"}) 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("got filename " + g.getFilename()); 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") .header("Content-Disposition", "attachment; filename=\"" + g.getFriendlyName() + "-generated.zip\"") @@ -57,7 +66,8 @@ public class SwaggerResource { @POST @Path("/clients/{language}") @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, tags = "clients") public Response generateClient( @@ -78,7 +88,7 @@ public class SwaggerResource { String host = scheme + "://" + request.getServerName() + port; if (filename != null) { - String code = String.valueOf(System.currentTimeMillis()); + String code = String.valueOf(UUID.randomUUID().toString()); Generated g = new Generated(); g.setFilename(filename); g.setFriendlyName(language + "-client"); @@ -114,7 +124,7 @@ public class SwaggerResource { } @GET - @Path("/server/{framework}") + @Path("/servers/{framework}") @Produces({MediaType.APPLICATION_JSON}) @ApiOperation( value = "Returns options for a server framework", @@ -161,7 +171,8 @@ public class SwaggerResource { @POST @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, tags = "servers") public Response generateServerForLanguage( @@ -178,7 +189,7 @@ public class SwaggerResource { String host = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort(); if (filename != null) { - String code = String.valueOf(System.currentTimeMillis()); + String code = String.valueOf(UUID.randomUUID().toString()); Generated g = new Generated(); g.setFilename(filename); g.setFriendlyName(framework + "-server");