Skip to content
This repository was archived by the owner on Dec 4, 2025. It is now read-only.

Commit 84b7ee4

Browse files
authored
Merge pull request #839 from linwumingshi/refactor/build-template
refactor(build-template): ♻️ utilize ServiceLoader for dynamic loading
2 parents cc3bc2c + 9ab1ed5 commit 84b7ee4

22 files changed

Lines changed: 216 additions & 93 deletions

src/main/java/com/ly/doc/builder/AdocDocBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ public static void buildApiDoc(ApiConfig config, JavaProjectBuilder javaProjectB
6464
config.setParamsDataToTree(false);
6565
config.setAdoc(true);
6666
ProjectDocConfigBuilder configBuilder = new ProjectDocConfigBuilder(config, javaProjectBuilder);
67-
IDocBuildTemplate<ApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(config.getFramework());
67+
IDocBuildTemplate<ApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(
68+
config.getFramework(), config.getClassLoader());
6869
Objects.requireNonNull(docBuildTemplate, "doc build template is null");
6970
List<ApiDoc> apiDocList = docBuildTemplate.getApiData(configBuilder).getApiDatas();
7071
if (config.isAllInOne()) {

src/main/java/com/ly/doc/builder/ApiDocBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ public static void buildApiDoc(ApiConfig config, JavaProjectBuilder javaProjectB
6161
config.setAdoc(false);
6262
config.setParamsDataToTree(false);
6363
ProjectDocConfigBuilder configBuilder = new ProjectDocConfigBuilder(config, javaProjectBuilder);
64-
IDocBuildTemplate<ApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(config.getFramework());
64+
IDocBuildTemplate<ApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(
65+
config.getFramework(), config.getClassLoader());
6566
Objects.requireNonNull(docBuildTemplate, "doc build template is null");
6667
List<ApiDoc> apiDocList = docBuildTemplate.getApiData(configBuilder).getApiDatas();
6768
if (config.isAllInOne()) {

src/main/java/com/ly/doc/builder/DocBuilderTemplate.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ public void buildSearchJs(ApiConfig config, JavaProjectBuilder javaProjectBuilde
285285
ApiDoc apiDoc1 = new ApiDoc();
286286
int codeIndex = 0;
287287
if (isOnlyDefaultGroup) {
288-
if (apiDocs.size() > 0) {
288+
if (!apiDocs.isEmpty()) {
289289
codeIndex = apiDocs.get(0).getChildrenApiDocs().size();
290290
}
291291
} else {
@@ -320,7 +320,7 @@ public void buildSearchJs(ApiConfig config, JavaProjectBuilder javaProjectBuilde
320320
apiDoc1.setChildrenApiDocs(childrenApiDocs);
321321
apiDoc1.setList(methodDocs);
322322
if (isOnlyDefaultGroup) {
323-
if (apiDocs.size() > 0) {
323+
if (!apiDocs.isEmpty()) {
324324
apiDocs.get(0).getChildrenApiDocs().add(apiDoc1);
325325
}
326326
} else {
@@ -483,7 +483,8 @@ private List<ApiDoc> listOfApiData(ApiConfig config, JavaProjectBuilder javaProj
483483
this.checkAndInitForGetApiData(config);
484484
config.setMd5EncryptedHtmlName(true);
485485
ProjectDocConfigBuilder configBuilder = new ProjectDocConfigBuilder(config, javaProjectBuilder);
486-
IDocBuildTemplate<ApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(config.getFramework());
486+
IDocBuildTemplate<ApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(
487+
config.getFramework(), config.getClassLoader());
487488
Objects.requireNonNull(docBuildTemplate, "doc build template is null");
488489
return docBuildTemplate.getApiData(configBuilder).getApiDatas();
489490
}

src/main/java/com/ly/doc/builder/HtmlApiDocBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ public static void buildApiDoc(ApiConfig config, JavaProjectBuilder javaProjectB
6666
builderTemplate.checkAndInit(config, Boolean.TRUE);
6767
config.setParamsDataToTree(false);
6868
ProjectDocConfigBuilder configBuilder = new ProjectDocConfigBuilder(config, javaProjectBuilder);
69-
IDocBuildTemplate<ApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(config.getFramework());
69+
IDocBuildTemplate<ApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(
70+
config.getFramework(), config.getClassLoader());
7071
Objects.requireNonNull(docBuildTemplate, "doc build template is null");
7172
List<ApiDoc> apiDocList = docBuildTemplate.getApiData(configBuilder).getApiDatas();
7273
builderTemplate.copyJQueryAndCss(config);

src/main/java/com/ly/doc/builder/JMeterBuilder.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,16 @@ public static void buildApiDoc(ApiConfig config, JavaProjectBuilder javaProjectB
6464
config.setShowJavaType(true);
6565
config.setParamsDataToTree(Boolean.FALSE);
6666
ProjectDocConfigBuilder configBuilder = new ProjectDocConfigBuilder(config, javaProjectBuilder);
67-
IDocBuildTemplate<ApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(config.getFramework());
67+
IDocBuildTemplate<ApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(
68+
config.getFramework(), config.getClassLoader());
6869
Objects.requireNonNull(docBuildTemplate, "doc build template is null");
6970
List<ApiDoc> apiDocList = docBuildTemplate.getApiData(configBuilder).getApiDatas();
7071
String version = config.isCoverOld() ? "" : "-V" + DateTimeUtil.long2Str(System.currentTimeMillis(), DocGlobalConstants.DATE_FORMAT_YYYY_MM_DD_HH_MM);
7172
String docName;
7273
if (StringUtil.isNotEmpty(config.getProjectName())) {
7374
docName = config.getProjectName() + version + JMETER_SCRIPT_EXTENSION;
7475
} else {
75-
docName = "jmeter-script"+ version + JMETER_SCRIPT_EXTENSION;
76+
docName = "jmeter-script" + version + JMETER_SCRIPT_EXTENSION;
7677
}
7778
builderTemplate.buildAllInOne(apiDocList, config, javaProjectBuilder, DocGlobalConstants.JMETER_TPL, docName);
7879
}

src/main/java/com/ly/doc/builder/PostmanJsonBuilder.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -192,14 +192,16 @@ private static UrlBean buildUrlBean(ApiMethodDoc apiMethodDoc) {
192192
private static BodyBean buildBodyBean(ApiMethodDoc apiMethodDoc) {
193193
BodyBean bodyBean;
194194
if (apiMethodDoc.getContentType().contains(MediaType.APPLICATION_JSON)) {
195-
bodyBean = new BodyBean(Boolean.FALSE);// Json request
195+
// Json request
196+
bodyBean = new BodyBean(Boolean.FALSE);
196197
bodyBean.setMode(convertContentTypeToPostmanType(apiMethodDoc.getContentType()));
197198
if (apiMethodDoc.getRequestExample() != null) {
198199
bodyBean.setRaw(apiMethodDoc.getRequestExample().getJsonBody());
199200
}
200201
} else {
201202
if (apiMethodDoc.getType().equals(Methods.POST.getValue())) {
202-
bodyBean = new BodyBean(Boolean.TRUE); // Formdata
203+
// Formdata
204+
bodyBean = new BodyBean(Boolean.TRUE);
203205
bodyBean.setMode(convertContentTypeToPostmanType(apiMethodDoc.getContentType()));
204206
if (CollectionUtil.isNotEmpty(apiMethodDoc.getRequestExample().getFormDataList())) {
205207
bodyBean.setFormdata(apiMethodDoc.getRequestExample().getFormDataList());
@@ -248,7 +250,8 @@ private static List<HeaderBean> buildHeaderBeanList(ApiMethodDoc apiMethodDoc) {
248250
}
249251

250252
private static void postManCreate(ApiConfig config, ProjectDocConfigBuilder configBuilder) {
251-
IDocBuildTemplate<ApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(config.getFramework());
253+
IDocBuildTemplate<ApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(
254+
config.getFramework(), config.getClassLoader());
252255
Objects.requireNonNull(docBuildTemplate, "doc build template is null");
253256
config.setShowJavaType(true);
254257
List<ApiDoc> apiDocList = docBuildTemplate.getApiData(configBuilder).getApiDatas();
@@ -270,13 +273,13 @@ private static void postManCreate(ApiConfig config, ProjectDocConfigBuilder conf
270273

271274
/**
272275
* Converts the request Content-Type to its corresponding Postman request type.
273-
*
276+
* <p>
274277
* Postman is a popular API testing tool that supports various request types. This method aims to map common
275278
* Content-Types to the formats recognized by Postman, facilitating more accurate HTTP request simulations.
276279
*
277280
* @param contentType The MIME type of the data in the request, indicating how it should be processed.
278281
* @return The Postman request type corresponding to the given Content-Type.
279-
*
282+
* <p>
280283
* Note: This mapping covers typical use cases and Postman's supported range; it may not include all possible Content-Types.
281284
*/
282285
private static String convertContentTypeToPostmanType(String contentType) {

src/main/java/com/ly/doc/builder/TornaBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ public static void buildApiDoc(ApiConfig config, JavaProjectBuilder javaProjectB
6868
DocBuilderTemplate builderTemplate = new DocBuilderTemplate();
6969
builderTemplate.checkAndInit(config, Boolean.FALSE);
7070
ProjectDocConfigBuilder configBuilder = new ProjectDocConfigBuilder(config, javaProjectBuilder);
71-
IDocBuildTemplate<ApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(config.getFramework());
71+
IDocBuildTemplate<ApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(
72+
config.getFramework(), config.getClassLoader());
7273
Objects.requireNonNull(docBuildTemplate, "doc build template is null");
7374
ApiSchema<ApiDoc> apiSchema = docBuildTemplate.getApiData(configBuilder);
7475
List<ApiDoc> apiDocList = docBuildTemplate.handleApiGroup(apiSchema.getApiDatas(), config);

src/main/java/com/ly/doc/builder/WordDocBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ public static void buildApiDoc(ApiConfig config, JavaProjectBuilder javaProjectB
7777
builderTemplate.checkAndInit(config, Boolean.TRUE);
7878
config.setParamsDataToTree(false);
7979
ProjectDocConfigBuilder configBuilder = new ProjectDocConfigBuilder(config, javaProjectBuilder);
80-
IDocBuildTemplate<ApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(config.getFramework());
80+
IDocBuildTemplate<ApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(
81+
config.getFramework(), config.getClassLoader());
8182
Objects.requireNonNull(docBuildTemplate, "doc build template is null");
8283
ApiSchema<ApiDoc> apiSchema = docBuildTemplate.getApiData(configBuilder);
8384
List<ApiDoc> apiDocList = apiSchema.getApiDatas();

src/main/java/com/ly/doc/builder/javadoc/JavadocDocBuilderTemplate.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,16 @@
2727
import com.ly.doc.constants.FrameworkEnum;
2828
import com.ly.doc.constants.TemplateVariable;
2929
import com.ly.doc.factory.BuildTemplateFactory;
30-
import com.ly.doc.model.*;
30+
import com.ly.doc.model.ApiConfig;
31+
import com.ly.doc.model.ApiDocDict;
32+
import com.ly.doc.model.ApiErrorCode;
33+
import com.ly.doc.model.ApiSchema;
3134
import com.ly.doc.model.javadoc.JavadocApiAllData;
3235
import com.ly.doc.model.javadoc.JavadocApiDoc;
3336
import com.ly.doc.template.IDocBuildTemplate;
3437
import com.ly.doc.utils.BeetlTemplateUtil;
3538
import com.ly.doc.utils.DocUtil;
3639
import com.power.common.util.CollectionUtil;
37-
import com.power.common.util.DateTimeUtil;
3840
import com.power.common.util.FileUtil;
3941
import com.thoughtworks.qdox.JavaProjectBuilder;
4042
import org.beetl.core.Template;
@@ -44,6 +46,10 @@
4446
import java.util.Map;
4547
import java.util.Objects;
4648

49+
/**
50+
* java doc build template.
51+
* @author chenchuxin
52+
*/
4753
public class JavadocDocBuilderTemplate extends BaseDocBuilderTemplate {
4854

4955
private static final String DEPENDENCY_TITLE = "Add dependency";
@@ -92,7 +98,7 @@ public void buildAllInOne(List<JavadocApiDoc> apiDocList, ApiConfig config, Java
9298
Template tpl = BeetlTemplateUtil.getByName(template);
9399
tpl.binding(TemplateVariable.API_DOC_LIST.getVariable(), apiDocList);
94100
// binding common variable
95-
super.bindingCommonVariable(config,javaProjectBuilder,tpl, apiDocList.isEmpty());
101+
super.bindingCommonVariable(config, javaProjectBuilder, tpl, apiDocList.isEmpty());
96102

97103
FileUtil.nioWriteFile(tpl.render(), outPath + DocGlobalConstants.FILE_SEPARATOR + outPutFileName);
98104
}
@@ -176,7 +182,8 @@ private List<JavadocApiDoc> listOfApiData(ApiConfig config, JavaProjectBuilder j
176182
this.checkAndInitForGetApiData(config);
177183
config.setMd5EncryptedHtmlName(true);
178184
ProjectDocConfigBuilder configBuilder = new ProjectDocConfigBuilder(config, javaProjectBuilder);
179-
IDocBuildTemplate<JavadocApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(config.getFramework());
185+
IDocBuildTemplate<JavadocApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(
186+
config.getFramework(), config.getClassLoader());
180187
Objects.requireNonNull(docBuildTemplate, "doc build template is null");
181188
ApiSchema<JavadocApiDoc> apiSchema = docBuildTemplate.getApiData(configBuilder);
182189
return apiSchema.getApiDatas();
@@ -185,7 +192,8 @@ private List<JavadocApiDoc> listOfApiData(ApiConfig config, JavaProjectBuilder j
185192
public List<JavadocApiDoc> getJavadocApiDoc(ApiConfig config, JavaProjectBuilder javaProjectBuilder) {
186193
config.setShowJavaType(true);
187194
ProjectDocConfigBuilder configBuilder = new ProjectDocConfigBuilder(config, javaProjectBuilder);
188-
IDocBuildTemplate<JavadocApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(config.getFramework());
195+
IDocBuildTemplate<JavadocApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(
196+
config.getFramework(), config.getClassLoader());
189197
Objects.requireNonNull(docBuildTemplate, "doc build template is null");
190198
return docBuildTemplate.getApiData(configBuilder).getApiDatas();
191199
}

src/main/java/com/ly/doc/builder/openapi/AbstractOpenApiBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -572,7 +572,8 @@ public ApiSchema<ApiDoc> getOpenApiDocs(ApiConfig config, JavaProjectBuilder pro
572572
builderTemplate.checkAndInit(config, Boolean.TRUE);
573573
ProjectDocConfigBuilder configBuilder = new ProjectDocConfigBuilder(config, projectBuilder);
574574
config.setParamsDataToTree(true);
575-
IDocBuildTemplate docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(config.getFramework());
575+
IDocBuildTemplate docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(
576+
config.getFramework(), config.getClassLoader());
576577
Objects.requireNonNull(docBuildTemplate, "doc build template is null");
577578
return docBuildTemplate.getApiData(configBuilder);
578579
}

0 commit comments

Comments
 (0)