diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConfig.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConfig.java index e91d00d4ce3..61b98db1bef 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConfig.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConfig.java @@ -23,6 +23,8 @@ import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.security.SecurityScheme; +import io.swagger.v3.oas.models.servers.Server; +import io.swagger.v3.oas.models.servers.ServerVariable; import java.util.List; import java.util.Map; @@ -113,6 +115,10 @@ public interface CodegenConfig { List fromSecurity(Map schemas); + List fromServers(List servers); + + List fromServerVariables(Map variables); + Set defaultIncludes(); Map typeMapping(); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenServer.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenServer.java new file mode 100644 index 00000000000..0708d4407fc --- /dev/null +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenServer.java @@ -0,0 +1,9 @@ +package org.openapitools.codegen; + +import java.util.List; + +public class CodegenServer { + public String url; + public String description; + public List variables; +} diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenServerVariable.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenServerVariable.java new file mode 100644 index 00000000000..15e9db55b67 --- /dev/null +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenServerVariable.java @@ -0,0 +1,10 @@ +package org.openapitools.codegen; + +import java.util.List; + +public class CodegenServerVariable { + public String name; + public String defaultValue; + public String description; + public List enumValues; +} diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index 46790890a85..8e1b5ea349b 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -43,6 +43,8 @@ import io.swagger.v3.oas.models.responses.ApiResponses; import io.swagger.v3.oas.models.security.OAuthFlow; import io.swagger.v3.oas.models.security.OAuthFlows; import io.swagger.v3.oas.models.security.SecurityScheme; +import io.swagger.v3.oas.models.servers.Server; +import io.swagger.v3.oas.models.servers.ServerVariable; import io.swagger.v3.parser.util.SchemaTypeUtil; import org.apache.commons.lang3.ObjectUtils; @@ -64,6 +66,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -4588,4 +4591,38 @@ public class DefaultCodegen implements CodegenConfig { public boolean isDataTypeString(String dataType) { return "String".equals(dataType); } + + @Override + public List fromServers(List servers) { + if (servers == null) { + return Collections.emptyList(); + } + List codegenServers = new LinkedList<>(); + for (Server server: servers) { + CodegenServer cs = new CodegenServer(); + cs.description = server.getDescription(); + cs.url = server.getUrl(); + cs.variables = this.fromServerVariables(server.getVariables()); + codegenServers.add(cs); + } + return codegenServers; + } + + @Override + public List fromServerVariables(Map variables) { + if (variables == null) { + return Collections.emptyList(); + } + List codegenServerVariables = new LinkedList<>(); + for (Entry variableEntry: variables.entrySet()) { + CodegenServerVariable codegenServerVariable = new CodegenServerVariable(); + ServerVariable variable = variableEntry.getValue(); + codegenServerVariable.defaultValue = variable.getDefault(); + codegenServerVariable.description = variable.getDescription(); + codegenServerVariable.enumValues = variable.getEnum(); + codegenServerVariable.name = variableEntry.getKey(); + codegenServerVariables.add(codegenServerVariable); + } + return codegenServerVariables; + } } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java index b583079e0ff..71e90105422 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java @@ -762,6 +762,12 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { bundle.put("authMethods", authMethods); bundle.put("hasAuthMethods", true); } + + List servers = config.fromServers(openAPI.getServers()); + if (servers != null && !servers.isEmpty()) { + bundle.put("servers", servers); + bundle.put("hasServers", true); + } if (openAPI.getExternalDocs() != null) { bundle.put("externalDocs", openAPI.getExternalDocs()); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/URLPathUtils.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/URLPathUtils.java index 91aba80d82c..fdfa6fdfd6b 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/URLPathUtils.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/URLPathUtils.java @@ -50,7 +50,7 @@ public class URLPathUtils { return getServerURL(servers.get(0)); } - static URL getServerURL(final Server server) { + public static URL getServerURL(final Server server) { String url = server.getUrl(); ServerVariables variables = server.getVariables(); if(variables == null) {