PageRenderTime 24ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SlimFrameworkServerCodegen.java

https://gitlab.com/akkhil2012/swagger-codegen
Java | 228 lines | 177 code | 35 blank | 16 comment | 17 complexity | 71e2f52d3e23d95406ea6692dd399688 MD5 | raw file
  1. package io.swagger.codegen.languages;
  2. import io.swagger.codegen.CodegenConfig;
  3. import io.swagger.codegen.CodegenConstants;
  4. import io.swagger.codegen.CodegenType;
  5. import io.swagger.codegen.DefaultCodegen;
  6. import io.swagger.codegen.SupportingFile;
  7. import io.swagger.models.properties.ArrayProperty;
  8. import io.swagger.models.properties.MapProperty;
  9. import io.swagger.models.properties.Property;
  10. import io.swagger.models.properties.RefProperty;
  11. import java.io.File;
  12. import java.util.Arrays;
  13. import java.util.HashMap;
  14. import java.util.HashSet;
  15. public class SlimFrameworkServerCodegen extends DefaultCodegen implements CodegenConfig {
  16. protected String invokerPackage;
  17. protected String groupId = "io.swagger";
  18. protected String artifactId = "swagger-server";
  19. protected String artifactVersion = "1.0.0";
  20. private String variableNamingConvention = "camelCase";
  21. public SlimFrameworkServerCodegen() {
  22. super();
  23. invokerPackage = camelize("SwaggerServer");
  24. String packagePath = "SwaggerServer";
  25. modelPackage = packagePath + "\\lib\\Models";
  26. apiPackage = packagePath + "\\lib";
  27. outputFolder = "generated-code" + File.separator + "slim";
  28. modelTemplateFiles.put("model.mustache", ".php");
  29. // no api files
  30. apiTemplateFiles.clear();
  31. embeddedTemplateDir = templateDir = "slim";
  32. setReservedWordsLowerCase(
  33. Arrays.asList(
  34. "__halt_compiler", "abstract", "and", "array", "as", "break", "callable", "case", "catch", "class", "clone", "const", "continue", "declare", "default", "die", "do", "echo", "else", "elseif", "empty", "enddeclare", "endfor", "endforeach", "endif", "endswitch", "endwhile", "eval", "exit", "extends", "final", "for", "foreach", "function", "global", "goto", "if", "implements", "include", "include_once", "instanceof", "insteadof", "interface", "isset", "list", "namespace", "new", "or", "print", "private", "protected", "public", "require", "require_once", "return", "static", "switch", "throw", "trait", "try", "unset", "use", "var", "while", "xor")
  35. );
  36. additionalProperties.put(CodegenConstants.INVOKER_PACKAGE, invokerPackage);
  37. additionalProperties.put(CodegenConstants.GROUP_ID, groupId);
  38. additionalProperties.put(CodegenConstants.ARTIFACT_ID, artifactId);
  39. additionalProperties.put(CodegenConstants.ARTIFACT_VERSION, artifactVersion);
  40. // ref: http://php.net/manual/en/language.types.intro.php
  41. languageSpecificPrimitives = new HashSet<String>(
  42. Arrays.asList(
  43. "boolean",
  44. "int",
  45. "integer",
  46. "double",
  47. "float",
  48. "string",
  49. "object",
  50. "DateTime",
  51. "mixed",
  52. "number")
  53. );
  54. instantiationTypes.put("array", "array");
  55. instantiationTypes.put("map", "map");
  56. // ref: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types
  57. typeMapping = new HashMap<String, String>();
  58. typeMapping.put("integer", "int");
  59. typeMapping.put("long", "int");
  60. typeMapping.put("float", "float");
  61. typeMapping.put("double", "double");
  62. typeMapping.put("string", "string");
  63. typeMapping.put("byte", "int");
  64. typeMapping.put("boolean", "bool");
  65. typeMapping.put("date", "\\DateTime");
  66. typeMapping.put("datetime", "\\DateTime");
  67. typeMapping.put("file", "\\SplFileObject");
  68. typeMapping.put("map", "map");
  69. typeMapping.put("array", "array");
  70. typeMapping.put("list", "array");
  71. typeMapping.put("object", "object");
  72. //TODO binary should be mapped to byte array
  73. // mapped to String as a workaround
  74. typeMapping.put("binary", "string");
  75. supportingFiles.add(new SupportingFile("README.mustache", packagePath.replace('/', File.separatorChar), "README.md"));
  76. supportingFiles.add(new SupportingFile("composer.json", packagePath.replace('/', File.separatorChar), "composer.json"));
  77. supportingFiles.add(new SupportingFile("index.mustache", packagePath.replace('/', File.separatorChar), "index.php"));
  78. supportingFiles.add(new SupportingFile(".htaccess", packagePath.replace('/', File.separatorChar), ".htaccess"));
  79. }
  80. @Override
  81. public CodegenType getTag() {
  82. return CodegenType.SERVER;
  83. }
  84. @Override
  85. public String getName() {
  86. return "slim";
  87. }
  88. @Override
  89. public String getHelp() {
  90. return "Generates a Slim Framework server library.";
  91. }
  92. @Override
  93. public String escapeReservedWord(String name) {
  94. return "_" + name;
  95. }
  96. @Override
  97. public String apiFileFolder() {
  98. return (outputFolder + "/" + apiPackage()).replace('/', File.separatorChar);
  99. }
  100. @Override
  101. public String modelFileFolder() {
  102. return (outputFolder + "/" + modelPackage()).replace('/', File.separatorChar);
  103. }
  104. @Override
  105. public String getTypeDeclaration(Property p) {
  106. if (p instanceof ArrayProperty) {
  107. ArrayProperty ap = (ArrayProperty) p;
  108. Property inner = ap.getItems();
  109. return getTypeDeclaration(inner) + "[]";
  110. } else if (p instanceof MapProperty) {
  111. MapProperty mp = (MapProperty) p;
  112. Property inner = mp.getAdditionalProperties();
  113. return getSwaggerType(p) + "[string," + getTypeDeclaration(inner) + "]";
  114. } else if (p instanceof RefProperty) {
  115. String type = super.getTypeDeclaration(p);
  116. return (!languageSpecificPrimitives.contains(type))
  117. ? "\\" + modelPackage + "\\" + type : type;
  118. }
  119. return super.getTypeDeclaration(p);
  120. }
  121. @Override
  122. public String getSwaggerType(Property p) {
  123. String swaggerType = super.getSwaggerType(p);
  124. String type = null;
  125. if (typeMapping.containsKey(swaggerType)) {
  126. type = typeMapping.get(swaggerType);
  127. if (languageSpecificPrimitives.contains(type)) {
  128. return type;
  129. } else if (instantiationTypes.containsKey(type)) {
  130. return type;
  131. }
  132. } else {
  133. type = swaggerType;
  134. }
  135. if (type == null) {
  136. return null;
  137. }
  138. return toModelName(type);
  139. }
  140. @Override
  141. public String getTypeDeclaration(String name) {
  142. if (!languageSpecificPrimitives.contains(name)) {
  143. return "\\" + modelPackage + "\\" + name;
  144. }
  145. return super.getTypeDeclaration(name);
  146. }
  147. @Override
  148. public String toDefaultValue(Property p) {
  149. return "null";
  150. }
  151. public void setParameterNamingConvention(String variableNamingConvention) {
  152. this.variableNamingConvention = variableNamingConvention;
  153. }
  154. @Override
  155. public String toVarName(String name) {
  156. name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'.
  157. if ("camelCase".equals(variableNamingConvention)) {
  158. // return the name in camelCase style
  159. // phone_number => phoneNumber
  160. name = camelize(name, true);
  161. } else { // default to snake case
  162. // return the name in underscore style
  163. // PhoneNumber => phone_number
  164. name = underscore(name);
  165. }
  166. // parameter name starting with number won't compile
  167. // need to escape it by appending _ at the beginning
  168. if (name.matches("^\\d.*")) {
  169. name = "_" + name;
  170. }
  171. return name;
  172. }
  173. @Override
  174. public String toParamName(String name) {
  175. // should be the same as variable name
  176. return toVarName(name);
  177. }
  178. @Override
  179. public String toModelName(String name) {
  180. // model name cannot use reserved keyword
  181. if (isReservedWord(name)) {
  182. escapeReservedWord(name); // e.g. return => _return
  183. }
  184. // camelize the model name
  185. // phone_number => PhoneNumber
  186. return camelize(name);
  187. }
  188. @Override
  189. public String toModelFilename(String name) {
  190. // should be the same as the model name
  191. return toModelName(name);
  192. }
  193. }