Skip to content

Commit 9f809ab

Browse files
authored
Merge pull request #10348 from swagger-api/issue-10272
override specific templates
2 parents ec18460 + 49ac159 commit 9f809ab

File tree

4 files changed

+32
-7
lines changed

4 files changed

+32
-7
lines changed

modules/swagger-codegen/src/main/java/io/swagger/codegen/v3/AbstractGenerator.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,25 @@ public String getFullTemplateFile(CodegenConfig config, String templateFile) {
8686
final String library = config.getLibrary();
8787
if (StringUtils.isNotEmpty(library)) {
8888
//look for the file in the library subfolder of the supplied template
89+
if (StringUtils.isNotBlank(config.customTemplateDir())) {
90+
final String libTemplateFile = buildLibraryFilePath(config.customTemplateDir(), library, templateFile);
91+
if (new File(libTemplateFile).exists()) {
92+
return libTemplateFile;
93+
}
94+
}
8995
final String libTemplateFile = buildLibraryFilePath(config.templateDir(), library, templateFile);
9096
if (new File(libTemplateFile).exists()) {
9197
return libTemplateFile;
9298
}
9399
}
94100

95101
//check the supplied template main folder for the file
102+
if (StringUtils.isNotBlank(config.customTemplateDir())) {
103+
final String template = config.customTemplateDir() + File.separator + templateFile;
104+
if (new File(template).exists()) {
105+
return template;
106+
}
107+
}
96108
final String template = config.templateDir() + File.separator + templateFile;
97109
if (new File(template).exists()) {
98110
return template;

modules/swagger-codegen/src/main/java/io/swagger/codegen/v3/CodegenConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ public interface CodegenConfig {
4141

4242
String embeddedTemplateDir();
4343

44+
String customTemplateDir();
45+
4446
String getTemplateVersion();
4547

4648
String modelFileFolder();

modules/swagger-codegen/src/main/java/io/swagger/codegen/v3/templates/HandlebarTemplateEngine.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.swagger.codegen.v3.CodegenConstants;
99
import org.apache.commons.lang3.StringUtils;
1010

11+
import java.io.File;
1112
import java.io.IOException;
1213
import java.util.Map;
1314

@@ -31,20 +32,30 @@ public String getName() {
3132
}
3233

3334
private com.github.jknack.handlebars.Template getHandlebars(String templateFile) throws IOException {
35+
final boolean needFileTemplateLoader = StringUtils.isNotBlank(config.customTemplateDir());
36+
final boolean fileExist = new File(templateFile).exists();
3437
templateFile = templateFile.replace(".mustache", StringUtils.EMPTY).replace("\\", "/");
35-
String templateDir = config.templateDir().replace(".mustache", StringUtils.EMPTY).replace("\\", "/");
36-
if (templateFile.startsWith(templateDir)) {
37-
templateFile = StringUtils.replaceOnce(templateFile, templateDir, StringUtils.EMPTY);
38-
}
38+
final String templateDir;
3939
TemplateLoader templateLoader = null;
40-
if (config.additionalProperties().get(CodegenConstants.TEMPLATE_DIR) != null) {
40+
if (needFileTemplateLoader && fileExist) {
41+
templateDir = config.customTemplateDir().replace("\\", "/");
42+
templateFile = resolveTemplateFile(templateDir, templateFile);
4143
templateLoader = new FileTemplateLoader(templateDir, ".mustache");
4244
} else {
45+
templateDir = config.templateDir().replace("\\", "/");
46+
templateFile = resolveTemplateFile(templateDir, templateFile);
4347
templateLoader = new ClassPathTemplateLoader("/" + templateDir, ".mustache");
4448
}
4549
final Handlebars handlebars = new Handlebars(templateLoader);
4650
handlebars.prettyPrint(true);
4751
config.addHandlebarHelpers(handlebars);
4852
return handlebars.compile(templateFile);
4953
}
54+
55+
private String resolveTemplateFile(String templateDir, String templateFile) {
56+
if (templateFile.startsWith(templateDir)) {
57+
templateFile = StringUtils.replaceOnce(templateFile, templateDir, StringUtils.EMPTY);
58+
}
59+
return templateFile;
60+
}
5061
}

modules/swagger-codegen/src/main/java/io/swagger/codegen/v3/templates/MustacheTemplateEngine.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public Reader getTemplateReader(String name) {
8787

8888
public String getFullTemplateFile(CodegenConfig config, String templateFile) {
8989
final String library = config.getLibrary();
90-
final String libTemplateFile = new StringBuilder(config.templateDir())
90+
final String libTemplateFile = new StringBuilder(config.customTemplateDir())
9191
.append(File.separator)
9292
.append("libraries")
9393
.append(File.separator)
@@ -98,7 +98,7 @@ public String getFullTemplateFile(CodegenConfig config, String templateFile) {
9898
return libTemplateFile;
9999
}
100100
}
101-
final String template = config.templateDir() + File.separator + templateFile;
101+
final String template = config.customTemplateDir() + File.separator + templateFile;
102102
if (new File(template).exists()) {
103103
return template;
104104
}

0 commit comments

Comments
 (0)