From 4eeee3b24dbddd47888b7948719879aa4c745b2e Mon Sep 17 00:00:00 2001 From: Nadezhda Makarkina Date: Tue, 3 Nov 2015 11:12:28 +0300 Subject: [PATCH] changed resource, method stub for generator options --- .../swagger/generator/online/Generator.java | 18 +++++- .../generator/resource/SwaggerResource.java | 33 ++++++++-- .../online/OnlineGeneratorOptionsTest.java | 63 ++++++++++++++++++- 3 files changed, 107 insertions(+), 7 deletions(-) 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 7a5802ea7838..e709e777dd4a 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 @@ -1,6 +1,8 @@ package io.swagger.generator.online; import com.fasterxml.jackson.databind.JsonNode; + +import io.swagger.codegen.CliOption; import io.swagger.codegen.ClientOptInput; import io.swagger.codegen.ClientOpts; import io.swagger.codegen.Codegen; @@ -14,19 +16,31 @@ import io.swagger.generator.util.ZipUtil; import io.swagger.models.Swagger; import io.swagger.parser.SwaggerParser; import io.swagger.util.Json; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; public class Generator { static Logger LOGGER = LoggerFactory.getLogger(Generator.class); - public static Map getOptions(String language) { - return null; + public static Map getOptions(String language) throws ApiException { + CodegenConfig config = null; + try { + config = CodegenConfigLoader.forName(language); + } catch (Exception e) { + throw new BadRequestException(400, String.format("Unsupported target %s supplied. %s", language, e)); + } + Map map = new LinkedHashMap(); + for (CliOption option : config.cliOptions()) { + map.put(option.getOpt(), option); + } + return map; } public enum Type { 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 256a13d3adf9..d6fa88efcf88 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 @@ -3,6 +3,7 @@ package io.swagger.generator.resource; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; +import io.swagger.codegen.CliOption; import io.swagger.codegen.Codegen; import io.swagger.codegen.CodegenConfig; import io.swagger.codegen.CodegenType; @@ -89,19 +90,43 @@ public class SwaggerResource { return Response.status(500).build(); } } - + @GET @Path("/clients/{language}") + @Produces({MediaType.APPLICATION_JSON}) @ApiOperation( value = "Returns options for a client library", - response = String.class, + response = CliOption.class, responseContainer = "map", tags = "clients") public Response getClientOptions( @Context HttpServletRequest request, - @ApiParam(value = "The target language for the client library", required = true) @PathParam("language") String language) throws Exception { + @ApiParam(value = "The target language for the client library", required = true) + @PathParam("language") String language) throws Exception { - Map opts = Generator.getOptions(language); + Map opts = Generator.getOptions(language); + + if (opts != null) { + return Response.ok().entity(opts).build(); + } else { + return Response.status(404).build(); + } + } + + @GET + @Path("/server/{framework}") + @Produces({MediaType.APPLICATION_JSON}) + @ApiOperation( + value = "Returns options for a server framework", + response = CliOption.class, + responseContainer = "map", + tags = "clients") + public Response getServerOptions( + @Context HttpServletRequest request, + @ApiParam(value = "The target language for the server framework", required = true) + @PathParam("framework") String framework) throws Exception { + + Map opts = Generator.getOptions(framework); if (opts != null) { return Response.ok().entity(opts).build(); diff --git a/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java b/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java index 31262a24a9a8..4a3113613bb8 100644 --- a/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java +++ b/modules/swagger-generator/src/test/java/io/swagger/generator/online/OnlineGeneratorOptionsTest.java @@ -1,7 +1,11 @@ package io.swagger.generator.online; +import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotEquals; +import static org.testng.Assert.assertNotNull; +import io.swagger.codegen.CliOption; +import io.swagger.codegen.CodegenConfigLoader; import io.swagger.codegen.options.AkkaScalaClientOptionsProvider; import io.swagger.codegen.options.AndroidClientOptionsProvider; import io.swagger.codegen.options.AsyncScalaClientOptionsProvider; @@ -37,6 +41,9 @@ import io.swagger.generator.exception.ApiException; import io.swagger.generator.model.GeneratorInput; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.base.Function; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; @@ -47,8 +54,13 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.Objects; + +import javax.annotation.Nullable; public class OnlineGeneratorOptionsTest { private static final String OPTIONS_PROVIDER = "optionsProvider"; @@ -74,7 +86,7 @@ public class OnlineGeneratorOptionsTest { } @Test(dataProvider = OPTIONS_PROVIDER) - public void optionsTest(OptionsProvider provider) throws ApiException, IOException { + public void generateOptionsTest(OptionsProvider provider) throws ApiException, IOException { final GeneratorInput input = new GeneratorInput(); final HashMap options = convertOptions(provider); @@ -137,4 +149,53 @@ public class OnlineGeneratorOptionsTest { return value; } } + + @Test(dataProvider = OPTIONS_PROVIDER) + public void getOptionsTest(OptionsProvider provider) throws ApiException { + final Map opts = Generator.getOptions(provider.getLanguage()); + + final Function cliOptionWrapper = new Function() { + @Nullable + @Override + public CliOptionProxy apply(@Nullable CliOption option) { + return new CliOptionProxy(option); + } + }; + + final List actual = Lists.transform(new ArrayList(opts.values()), cliOptionWrapper); + final List expected = Lists.transform( + CodegenConfigLoader.forName(provider.getLanguage()).cliOptions(), cliOptionWrapper); + assertEquals(actual, expected); + } + + private static class CliOptionProxy { + private final CliOption wrapped; + + public CliOptionProxy(CliOption wrapped){ + this.wrapped = wrapped; + } + + public CliOption getWrapped() { + return wrapped; + } + + @Override + public int hashCode() { + return Objects.hash(wrapped.getOpt(), wrapped.getDescription(), wrapped.getType(), + wrapped.getDefault(), wrapped.getEnum()); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof CliOptionProxy) { + final CliOption that = ((CliOptionProxy) obj).getWrapped(); + return Objects.equals(wrapped.getOpt(), that.getOpt()) + && Objects.equals(wrapped.getDescription(), that.getDescription()) + && Objects.equals(wrapped.getType(), that.getType()) + && Objects.equals(wrapped.getDefault(), that.getDefault()) + && Objects.equals(wrapped.getEnum(), that.getEnum()); + } + return false; + } + } }