diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConfig.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConfig.java index 4b0ef89593f..d6194c89e64 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConfig.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConfig.java @@ -29,6 +29,8 @@ public interface CodegenConfig { String apiFileFolder(); + String repoFileFolder(); + String apiTestFileFolder(); String apiDocFileFolder(); @@ -49,6 +51,8 @@ public interface CodegenConfig { String modelPackage(); + String repoPackage(); + String toApiName(String name); String toApiVarName(String name); @@ -107,6 +111,8 @@ public interface CodegenConfig { Map apiTemplateFiles(); + Map repoTemplateFiles(); + Map modelTemplateFiles(); Map apiTestTemplateFiles(); @@ -159,6 +165,8 @@ public interface CodegenConfig { String apiFilename(String templateName, String tag); + String repoFilename(String templateName, String tag); + String apiTestFilename(String templateName, String tag); String apiDocFilename(String templateName, String tag); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index 3eba155581b..52b233c295c 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -85,8 +85,10 @@ public class DefaultCodegen { protected String modelPackage = "", apiPackage = "", fileSuffix; protected String modelNamePrefix = "", modelNameSuffix = ""; protected String testPackage = ""; + protected String repoPackage = ""; protected Map apiTemplateFiles = new HashMap(); protected Map modelTemplateFiles = new HashMap(); + protected Map repoTemplateFiles = new HashMap<>(); protected Map apiTestTemplateFiles = new HashMap(); protected Map modelTestTemplateFiles = new HashMap(); protected Map apiDocTemplateFiles = new HashMap(); @@ -414,6 +416,10 @@ public String apiPackage() { return apiPackage; } + public String repoPackage() { + return repoPackage; + } + public String fileSuffix() { return fileSuffix; } @@ -458,6 +464,10 @@ public Map apiTemplateFiles() { return apiTemplateFiles; } + public Map repoTemplateFiles() { + return repoTemplateFiles; + } + public Map modelTemplateFiles() { return modelTemplateFiles; } @@ -466,6 +476,10 @@ public String apiFileFolder() { return outputFolder + "/" + apiPackage().replace('.', '/'); } + public String repoFileFolder() { + return outputFolder + "/" + repoPackage().replace('.', '/'); + } + public String modelFileFolder() { return outputFolder + "/" + modelPackage().replace('.', '/'); } @@ -566,6 +580,10 @@ public String toApiFilename(String name) { return toApiName(name); } + public String toRepoFilename(String name) { + return toRepoName(name); + } + /** * Return the file name of the Api Documentation * @@ -1131,6 +1149,16 @@ public String initialCaps(String name) { return StringUtils.capitalize(name); } + /** + * Makes the string lower case + * + * @param s string to be lowered + * @return lowered string + */ + public String toLowerCase(String s) { + return StringUtils.lowerCase(s); + } + /** * Output the type declaration of a given name * @@ -1170,6 +1198,20 @@ public String toApiName(String name) { return initialCaps(name) + "Api"; } + /** + * Output the repository name (snake-case) + * Return 'default' when name is empty + * + * @param name the name of repository + * @return snaked name + */ + public String toRepoName(String name) { + if (name.length() == 0) { + return "DefaultRepository"; + } + return initialCaps(name) + "Repository"; + } + /** * Output the proper model name (capitalized) * @@ -2959,6 +3001,11 @@ public String apiFilename(String templateName, String tag) { return apiFileFolder() + '/' + toApiFilename(tag) + suffix; } + public String repoFilename(String templateName, String tag) { + String suffix = repoTemplateFiles().get(templateName); + return repoFileFolder() + '/' + toRepoFilename(tag) + suffix; + } + /** * Return the full path and API documentation file * diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java index fd893f5d52f..9acc6c7d0f4 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java @@ -441,6 +441,19 @@ public int compare(CodegenOperation one, CodegenOperation another) { } } + for (String templateName : config.repoTemplateFiles().keySet()) { + String filename = config.repoFilename(templateName, tag); + if (!config.shouldOverwrite(filename) && new File(filename).exists()) { + LOGGER.info("Skipped overwriting " + filename); + continue; + } + + File written = processTemplateToFile(operation, templateName, filename); + if(written != null) { + files.add(written); + } + } + if(generateApiTests) { // to generate api test files for (String templateName : config.apiTestTemplateFiles().keySet()) { @@ -490,6 +503,7 @@ public int compare(CodegenOperation one, CodegenOperation another) { Map bundle = new HashMap(); bundle.putAll(config.additionalProperties()); bundle.put("apiPackage", config.apiPackage()); + bundle.put("repoPackage", config.repoPackage()); Map apis = new HashMap(); apis.put("apis", allOperations); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/MercuriusGoServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/MercuriusGoServerCodegen.java index 1f9f44078ec..dc2d5a58e57 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/MercuriusGoServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/MercuriusGoServerCodegen.java @@ -38,6 +38,7 @@ public MercuriusGoServerCodegen() { * class */ apiTemplateFiles.put("handler/handler.mustache", ".go"); + repoTemplateFiles.put("repository/repository.mustache", ".go"); /* * Template Location. This is the location which templates will be read from. The generator @@ -143,9 +144,6 @@ public MercuriusGoServerCodegen() { supportingFiles.add(new SupportingFile("public/static", "public", "static")); supportingFiles.add(new SupportingFile("public/templates/jade", "public/templates", "jade")); - // repository files - supportingFiles.add(new SupportingFile("repository/repository", "repository", "repository")); - // lib files supportingFiles.add(new SupportingFile("lib/auth/token.mustache", "lib/auth", "token.go")); supportingFiles.add(new SupportingFile("lib/auth/verifier.mustache", "lib/auth", "verifier.go")); @@ -227,6 +225,11 @@ public String modelFileFolder() { return outputFolder + File.separator + "model"; } + @Override + public String repoFileFolder() { + return outputFolder + File.separator + "repository"; + } + @Override public String toModelName(String name) { // camelize the model name @@ -234,6 +237,14 @@ public String toModelName(String name) { return camelize(toModelFilename(name)); } + @Override + public String toRepoName(String name) { + if (name.length() == 0) { + return "default"; + } + return snakeCase(name); + } + @Override public String toOperationId(String operationId) { // method name cannot use reserved keyword, e.g. return @@ -275,6 +286,15 @@ public String toApiFilename(String name) { return underscore(name); } + @Override + public String toRepoFilename(String name) { + // replace - with _ e.g. created-at => created_at + name = name.replaceAll("-", "_"); + + // e.g. PetApi.go => pet_api.go + return underscore(name); + } + @Override public String escapeQuotationMark(String input) { // remove " to avoid code injection @@ -294,7 +314,8 @@ public String toVarName(String name) { @Override public void processSwagger(Swagger swagger) { // rewrite handlers file - rewriteHandlersFile(swagger); + rewriteFiles(swagger, "handler"); + rewriteFiles(swagger, "repository"); rewriteRoutes(); super.processSwagger(swagger); } @@ -326,19 +347,36 @@ private void rewriteRoutes() { } catch (IOException e) { e.printStackTrace(); } finally { - try { - if (br != null)br.close(); - if (bw != null)bw.close(); - } catch (IOException ex) { - ex.printStackTrace(); - } + closeBuffRW(bw, br); + } + } + + private void closeBuffRW(BufferedWriter bw, BufferedReader br) { + try { + if (br != null)br.close(); + if (bw != null)bw.close(); + } catch (IOException ex) { + ex.printStackTrace(); } } - private void rewriteHandlersFile(Swagger swagger) { + private void rewriteFiles(Swagger swagger, String folder) { String url = swagger.getExternalDocs().getUrl(); url = url + "/lib/context"; - File dir = new File(outputFolder + "/handler"); + + StringBuilder sb = new StringBuilder(); + sb.append("/"); + sb.append(folder); + + folder = sb.toString(); + + File dir = new File(outputFolder + folder); + + if (dir.listFiles() == null) { + LOGGER.debug("No files to rewrite"); + return; + } + for (File handler : dir.listFiles()) { BufferedReader br = null; BufferedWriter bw = null; @@ -347,7 +385,7 @@ private void rewriteHandlersFile(Swagger swagger) { String sCurrentLine; br = new BufferedReader(new FileReader(handler)); - File file = new File(outputFolder + "/handler/" + handler.getName() + ".generated"); + File file = new File(outputFolder + folder + "/" + handler.getName() + ".generated"); bw = new BufferedWriter(new FileWriter(file)); boolean changeTime = false; while ((sCurrentLine = br.readLine()) != null) { @@ -366,12 +404,7 @@ private void rewriteHandlersFile(Swagger swagger) { } catch (IOException e) { e.printStackTrace(); } finally { - try { - if (br != null)br.close(); - if (bw != null)bw.close(); - } catch (IOException ex) { - ex.printStackTrace(); - } + closeBuffRW(bw, br); } } } diff --git a/modules/swagger-codegen/src/main/resources/mercurius-go-server/repository/repository.mustache b/modules/swagger-codegen/src/main/resources/mercurius-go-server/repository/repository.mustache new file mode 100644 index 00000000000..40fc74e4dcc --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/mercurius-go-server/repository/repository.mustache @@ -0,0 +1,25 @@ +package repository + +import ( + "{{importPath}}/lib/context" +) + +type {{classname}}Repo struct { + {{classname}}List []model.{{classname}} + datasetSize int +} + +func New{{classname}}Repository() *{{classname}}Repo { + return &{{classname}}Repo { + {{classname}}List: make([]model.{{classname}}, 0), + datasetSize: 30, + } +} + +{{#operations}} +{{#operation}} + func (r *{{classname}}Repo) {{nickname}}() { + + } +{{/operation}} +{{/operations}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/mercurius-go-server/repository/respository b/modules/swagger-codegen/src/main/resources/mercurius-go-server/repository/respository deleted file mode 100644 index e69de29bb2d..00000000000