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

Commit 13280a9

Browse files
authored
Merge pull request #797 from tuichenchuxin/master
Support @JavaDoc tag for normal service
2 parents 8e33f5e + 21e087a commit 13280a9

19 files changed

Lines changed: 2253 additions & 0 deletions
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*
2+
* Copyright (C) 2018-2024 smart-doc
3+
*
4+
* Licensed to the Apache Software Foundation (ASF) under one
5+
* or more contributor license agreements. See the NOTICE file
6+
* distributed with this work for additional information
7+
* regarding copyright ownership. The ASF licenses this file
8+
* to you under the Apache License, Version 2.0 (the
9+
* "License"); you may not use this file except in compliance
10+
* with the License. You may obtain a copy of the License at
11+
*
12+
* http://www.apache.org/licenses/LICENSE-2.0
13+
*
14+
* Unless required by applicable law or agreed to in writing,
15+
* software distributed under the License is distributed on an
16+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17+
* KIND, either express or implied. See the License for the
18+
* specific language governing permissions and limitations
19+
* under the License.
20+
*/
21+
package com.ly.doc.builder.javadoc;
22+
23+
import com.ly.doc.constants.DocGlobalConstants;
24+
import com.ly.doc.helper.JavaProjectBuilderHelper;
25+
import com.ly.doc.model.ApiConfig;
26+
import com.ly.doc.model.javadoc.JavadocApiDoc;
27+
import com.thoughtworks.qdox.JavaProjectBuilder;
28+
29+
import java.util.List;
30+
31+
public class JavadocAdocBuilder {
32+
33+
private static final String API_EXTENSION = "JavadocApi.adoc";
34+
35+
private static final String INDEX_DOC = "javadoc-index.adoc";
36+
37+
/**
38+
* build adoc
39+
*
40+
* @param config ApiConfig
41+
*/
42+
public static void buildApiDoc(ApiConfig config) {
43+
JavaProjectBuilder javaProjectBuilder = JavaProjectBuilderHelper.create();
44+
buildApiDoc(config, javaProjectBuilder);
45+
}
46+
47+
/**
48+
* Only for smart-doc maven plugin and gradle plugin.
49+
*
50+
* @param config ApiConfig
51+
* @param javaProjectBuilder ProjectDocConfigBuilder
52+
*/
53+
public static void buildApiDoc(ApiConfig config, JavaProjectBuilder javaProjectBuilder) {
54+
config.setAdoc(true);
55+
JavadocDocBuilderTemplate builderTemplate = new JavadocDocBuilderTemplate();
56+
builderTemplate.checkAndInit(config,Boolean.TRUE);
57+
List<JavadocApiDoc> apiDocList = builderTemplate.getJavadocApiDoc(config, javaProjectBuilder);
58+
if (config.isAllInOne()) {
59+
String docName = builderTemplate.allInOneDocName(config, INDEX_DOC, ".adoc");
60+
builderTemplate.buildAllInOne(apiDocList, config, javaProjectBuilder, DocGlobalConstants.JAVADOC_ALL_IN_ONE_ADOC_TPL, docName);
61+
} else {
62+
builderTemplate.buildApiDoc(apiDocList, config, DocGlobalConstants.JAVADOC_API_DOC_ADOC_TPL, API_EXTENSION);
63+
builderTemplate.buildErrorCodeDoc(config, DocGlobalConstants.ERROR_CODE_LIST_ADOC_TPL, DocGlobalConstants.ERROR_CODE_LIST_ADOC, javaProjectBuilder);
64+
}
65+
}
66+
67+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* Copyright (C) 2018-2024 smart-doc
3+
*
4+
* Licensed to the Apache Software Foundation (ASF) under one
5+
* or more contributor license agreements. See the NOTICE file
6+
* distributed with this work for additional information
7+
* regarding copyright ownership. The ASF licenses this file
8+
* to you under the Apache License, Version 2.0 (the
9+
* "License"); you may not use this file except in compliance
10+
* with the License. You may obtain a copy of the License at
11+
*
12+
* http://www.apache.org/licenses/LICENSE-2.0
13+
*
14+
* Unless required by applicable law or agreed to in writing,
15+
* software distributed under the License is distributed on an
16+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17+
* KIND, either express or implied. See the License for the
18+
* specific language governing permissions and limitations
19+
* under the License.
20+
*/
21+
package com.ly.doc.builder.javadoc;
22+
23+
import com.ly.doc.constants.FrameworkEnum;
24+
import com.ly.doc.helper.JavaProjectBuilderHelper;
25+
import com.ly.doc.model.ApiConfig;
26+
import com.ly.doc.model.javadoc.JavadocApiAllData;
27+
import com.thoughtworks.qdox.JavaProjectBuilder;
28+
29+
public class JavadocApiDataBuilder {
30+
31+
/**
32+
* Get list of ApiDoc
33+
*
34+
* @param config JavadocApiAllData
35+
* @return List of ApiDoc
36+
*/
37+
public static JavadocApiAllData getApiData(ApiConfig config) {
38+
config.setShowJavaType(true);
39+
config.setFramework(FrameworkEnum.JAVADOC.getFramework());
40+
JavadocDocBuilderTemplate builderTemplate = new JavadocDocBuilderTemplate();
41+
builderTemplate.checkAndInitForGetApiData(config);
42+
JavaProjectBuilder javaProjectBuilder = JavaProjectBuilderHelper.create();
43+
builderTemplate.getApiData(config, javaProjectBuilder);
44+
return builderTemplate.getApiData(config, javaProjectBuilder);
45+
}
46+
}
Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,215 @@
1+
/*
2+
*
3+
* Copyright (C) 2018-2024 smart-doc
4+
*
5+
* Licensed to the Apache Software Foundation (ASF) under one
6+
* or more contributor license agreements. See the NOTICE file
7+
* distributed with this work for additional information
8+
* regarding copyright ownership. The ASF licenses this file
9+
* to you under the Apache License, Version 2.0 (the
10+
* "License"); you may not use this file except in compliance
11+
* with the License. You may obtain a copy of the License at
12+
*
13+
* http://www.apache.org/licenses/LICENSE-2.0
14+
*
15+
* Unless required by applicable law or agreed to in writing,
16+
* software distributed under the License is distributed on an
17+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
18+
* KIND, either express or implied. See the License for the
19+
* specific language governing permissions and limitations
20+
* under the License.
21+
*/
22+
package com.ly.doc.builder.javadoc;
23+
24+
import com.ly.doc.builder.BaseDocBuilderTemplate;
25+
import com.ly.doc.builder.ProjectDocConfigBuilder;
26+
import com.ly.doc.constants.DocGlobalConstants;
27+
import com.ly.doc.constants.FrameworkEnum;
28+
import com.ly.doc.constants.TemplateVariable;
29+
import com.ly.doc.factory.BuildTemplateFactory;
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.javadoc.JavadocApiAllData;
34+
import com.ly.doc.model.javadoc.JavadocApiDoc;
35+
import com.ly.doc.template.IDocBuildTemplate;
36+
import com.ly.doc.utils.BeetlTemplateUtil;
37+
import com.ly.doc.utils.DocUtil;
38+
import com.power.common.util.CollectionUtil;
39+
import com.power.common.util.DateTimeUtil;
40+
import com.power.common.util.FileUtil;
41+
import com.thoughtworks.qdox.JavaProjectBuilder;
42+
import org.beetl.core.Template;
43+
44+
import java.util.ArrayList;
45+
import java.util.List;
46+
import java.util.Map;
47+
import java.util.Objects;
48+
49+
public class JavadocDocBuilderTemplate extends BaseDocBuilderTemplate {
50+
51+
private static final String DEPENDENCY_TITLE = "Add dependency";
52+
private static final long NOW = System.currentTimeMillis();
53+
54+
@Override
55+
public void checkAndInit(ApiConfig config, boolean checkOutPath) {
56+
config.setFramework(FrameworkEnum.JAVADOC.getFramework());
57+
super.checkAndInit(config, checkOutPath);
58+
config.setOutPath(config.getOutPath() + DocGlobalConstants.FILE_SEPARATOR + DocGlobalConstants.JAVADOC_OUT_DIR);
59+
}
60+
61+
/**
62+
* Generate api documentation for all controllers.
63+
*
64+
* @param apiDocList list of api doc
65+
* @param config api config
66+
* @param template template
67+
* @param fileExtension file extension
68+
*/
69+
public void buildApiDoc(List<JavadocApiDoc> apiDocList, ApiConfig config, String template, String fileExtension) {
70+
FileUtil.mkdirs(config.getOutPath());
71+
for (JavadocApiDoc apiDoc : apiDocList) {
72+
Template mapper = BeetlTemplateUtil.getByName(template);
73+
mapper.binding(TemplateVariable.DESC.getVariable(), apiDoc.getDesc());
74+
mapper.binding(TemplateVariable.NAME.getVariable(), apiDoc.getName());
75+
mapper.binding(TemplateVariable.LIST.getVariable(), apiDoc.getList());
76+
mapper.binding(TemplateVariable.AUTHOR.getVariable(), apiDoc.getAuthor());
77+
mapper.binding(TemplateVariable.VERSION.getVariable(), apiDoc.getVersion());
78+
FileUtil.nioWriteFile(mapper.render(), config.getOutPath() + DocGlobalConstants.FILE_SEPARATOR + apiDoc.getShortName() + fileExtension);
79+
}
80+
}
81+
82+
/**
83+
* Merge all api doc into one document
84+
*
85+
* @param apiDocList list data of Api doc
86+
* @param config api config
87+
* @param javaProjectBuilder JavaProjectBuilder
88+
* @param template template
89+
* @param outPutFileName output file
90+
*/
91+
public void buildAllInOne(List<JavadocApiDoc> apiDocList, ApiConfig config, JavaProjectBuilder javaProjectBuilder, String template,
92+
String outPutFileName) {
93+
String outPath = config.getOutPath();
94+
String strTime = DateTimeUtil.long2Str(NOW, DateTimeUtil.DATE_FORMAT_SECOND);
95+
FileUtil.mkdirs(outPath);
96+
List<ApiErrorCode> errorCodeList = DocUtil.errorCodeDictToList(config, javaProjectBuilder);
97+
Template tpl = BeetlTemplateUtil.getByName(template);
98+
tpl.binding(TemplateVariable.API_DOC_LIST.getVariable(), apiDocList);
99+
tpl.binding(TemplateVariable.ERROR_CODE_LIST.getVariable(), errorCodeList);
100+
tpl.binding(TemplateVariable.VERSION_LIST.getVariable(), config.getRevisionLogs());
101+
tpl.binding(TemplateVariable.VERSION.getVariable(), NOW);
102+
tpl.binding(TemplateVariable.CREATE_TIME.getVariable(), strTime);
103+
tpl.binding(TemplateVariable.PROJECT_NAME.getVariable(), config.getProjectName());
104+
setDirectoryLanguageVariable(config, tpl);
105+
106+
List<ApiDocDict> apiDocDictList = DocUtil.buildDictionary(config, javaProjectBuilder);
107+
tpl.binding(TemplateVariable.DICT_LIST.getVariable(), apiDocDictList);
108+
109+
int codeIndex = apiDocList.isEmpty() ? 1 : apiDocDictList.size();
110+
111+
if (CollectionUtil.isNotEmpty(errorCodeList)) {
112+
tpl.binding(TemplateVariable.ERROR_CODE_ORDER.getVariable(), ++codeIndex);
113+
}
114+
115+
if (CollectionUtil.isNotEmpty(apiDocDictList)) {
116+
tpl.binding(TemplateVariable.DICT_ORDER.getVariable(), ++codeIndex);
117+
}
118+
119+
setCssCDN(config, tpl);
120+
FileUtil.nioWriteFile(tpl.render(), outPath + DocGlobalConstants.FILE_SEPARATOR + outPutFileName);
121+
}
122+
123+
/**
124+
* Build search js
125+
*
126+
* @param apiDocList list data of Api doc
127+
* @param config api config
128+
* @param javaProjectBuilder projectBuilder
129+
* @param template template
130+
* @param outPutFileName output file
131+
*/
132+
public void buildSearchJs(List<JavadocApiDoc> apiDocList, ApiConfig config, JavaProjectBuilder javaProjectBuilder
133+
, String template, String outPutFileName) {
134+
List<ApiErrorCode> errorCodeList = DocUtil.errorCodeDictToList(config, javaProjectBuilder);
135+
Template tpl = BeetlTemplateUtil.getByName(template);
136+
// directory tree
137+
List<JavadocApiDoc> apiDocs = new ArrayList<>();
138+
JavadocApiDoc apiDoc = new JavadocApiDoc();
139+
apiDoc.setAlias(DEPENDENCY_TITLE);
140+
apiDoc.setOrder(1);
141+
apiDoc.setDesc(DEPENDENCY_TITLE);
142+
apiDoc.setList(new ArrayList<>(0));
143+
apiDocs.add(apiDoc);
144+
for (JavadocApiDoc apiDoc1 : apiDocList) {
145+
apiDoc1.setOrder(apiDocs.size() + 1);
146+
apiDocs.add(apiDoc1);
147+
}
148+
Map<String, String> titleMap = setDirectoryLanguageVariable(config, tpl);
149+
if (CollectionUtil.isNotEmpty(errorCodeList)) {
150+
JavadocApiDoc apiDoc1 = new JavadocApiDoc();
151+
apiDoc1.setOrder(apiDocs.size() + 1);
152+
apiDoc1.setDesc(titleMap.get(TemplateVariable.ERROR_LIST_TITLE.getVariable()));
153+
apiDoc1.setList(new ArrayList<>(0));
154+
apiDocs.add(apiDoc1);
155+
}
156+
157+
// set dict list
158+
List<ApiDocDict> apiDocDictList = DocUtil.buildDictionary(config, javaProjectBuilder);
159+
tpl.binding(TemplateVariable.DICT_LIST.getVariable(), apiDocDictList);
160+
tpl.binding(TemplateVariable.DIRECTORY_TREE.getVariable(), apiDocs);
161+
FileUtil.nioWriteFile(tpl.render(), config.getOutPath() + DocGlobalConstants.FILE_SEPARATOR + outPutFileName);
162+
}
163+
164+
/**
165+
* build error_code adoc
166+
*
167+
* @param config api config
168+
* @param template template
169+
* @param outPutFileName output file
170+
* @param javaProjectBuilder javaProjectBuilder
171+
*/
172+
public void buildErrorCodeDoc(ApiConfig config, String template, String outPutFileName, JavaProjectBuilder javaProjectBuilder) {
173+
List<ApiErrorCode> errorCodeList = DocUtil.errorCodeDictToList(config, javaProjectBuilder);
174+
Template mapper = BeetlTemplateUtil.getByName(template);
175+
mapper.binding(TemplateVariable.LIST.getVariable(), errorCodeList);
176+
FileUtil.nioWriteFile(mapper.render(), config.getOutPath() + DocGlobalConstants.FILE_SEPARATOR + outPutFileName);
177+
}
178+
179+
/**
180+
* get all api data
181+
*
182+
* @param config ApiConfig
183+
* @param javaProjectBuilder JavaProjectBuilder
184+
* @return ApiAllData
185+
*/
186+
public JavadocApiAllData getApiData(ApiConfig config, JavaProjectBuilder javaProjectBuilder) {
187+
JavadocApiAllData apiAllData = new JavadocApiAllData();
188+
apiAllData.setLanguage(config.getLanguage().getCode());
189+
apiAllData.setProjectName(config.getProjectName());
190+
apiAllData.setProjectId(DocUtil.generateId(config.getProjectName()));
191+
apiAllData.setApiDocList(listOfApiData(config, javaProjectBuilder));
192+
apiAllData.setErrorCodeList(DocUtil.errorCodeDictToList(config, javaProjectBuilder));
193+
apiAllData.setRevisionLogs(config.getRevisionLogs());
194+
apiAllData.setApiDocDictList(DocUtil.buildDictionary(config, javaProjectBuilder));
195+
return apiAllData;
196+
}
197+
198+
private List<JavadocApiDoc> listOfApiData(ApiConfig config, JavaProjectBuilder javaProjectBuilder) {
199+
this.checkAndInitForGetApiData(config);
200+
config.setMd5EncryptedHtmlName(true);
201+
ProjectDocConfigBuilder configBuilder = new ProjectDocConfigBuilder(config, javaProjectBuilder);
202+
IDocBuildTemplate<JavadocApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(config.getFramework());
203+
Objects.requireNonNull(docBuildTemplate, "doc build template is null");
204+
return docBuildTemplate.getApiData(configBuilder);
205+
}
206+
207+
public List<JavadocApiDoc> getJavadocApiDoc(ApiConfig config, JavaProjectBuilder javaProjectBuilder) {
208+
config.setShowJavaType(true);
209+
ProjectDocConfigBuilder configBuilder = new ProjectDocConfigBuilder(config, javaProjectBuilder);
210+
IDocBuildTemplate<JavadocApiDoc> docBuildTemplate = BuildTemplateFactory.getDocBuildTemplate(config.getFramework());
211+
Objects.requireNonNull(docBuildTemplate, "doc build template is null");
212+
return docBuildTemplate.getApiData(configBuilder);
213+
}
214+
215+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*
2+
* Copyright (C) 2018-2024 smart-doc
3+
*
4+
* Licensed to the Apache Software Foundation (ASF) under one
5+
* or more contributor license agreements. See the NOTICE file
6+
* distributed with this work for additional information
7+
* regarding copyright ownership. The ASF licenses this file
8+
* to you under the Apache License, Version 2.0 (the
9+
* "License"); you may not use this file except in compliance
10+
* with the License. You may obtain a copy of the License at
11+
*
12+
* http://www.apache.org/licenses/LICENSE-2.0
13+
*
14+
* Unless required by applicable law or agreed to in writing,
15+
* software distributed under the License is distributed on an
16+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17+
* KIND, either express or implied. See the License for the
18+
* specific language governing permissions and limitations
19+
* under the License.
20+
*/
21+
package com.ly.doc.builder.javadoc;
22+
23+
import com.ly.doc.builder.BaseDocBuilderTemplate;
24+
import com.ly.doc.constants.DocGlobalConstants;
25+
import com.ly.doc.helper.JavaProjectBuilderHelper;
26+
import com.ly.doc.model.ApiConfig;
27+
import com.ly.doc.model.javadoc.JavadocApiDoc;
28+
import com.ly.doc.utils.BeetlTemplateUtil;
29+
import com.power.common.util.FileUtil;
30+
import com.thoughtworks.qdox.JavaProjectBuilder;
31+
import org.beetl.core.Template;
32+
33+
import java.util.List;
34+
35+
public class JavadocHtmlBuilder {
36+
37+
38+
/**
39+
* build controller api
40+
*
41+
* @param config config
42+
*/
43+
public static void buildApiDoc(ApiConfig config) {
44+
JavaProjectBuilder javaProjectBuilder = JavaProjectBuilderHelper.create();
45+
buildApiDoc(config, javaProjectBuilder);
46+
}
47+
48+
/**
49+
* Only for smart-doc maven plugin and gradle plugin.
50+
*
51+
* @param config ApiConfig
52+
* @param javaProjectBuilder ProjectDocConfigBuilder
53+
*/
54+
public static void buildApiDoc(ApiConfig config, JavaProjectBuilder javaProjectBuilder) {
55+
JavadocDocBuilderTemplate builderTemplate = new JavadocDocBuilderTemplate();
56+
builderTemplate.checkAndInit(config,Boolean.TRUE);
57+
List<JavadocApiDoc> apiDocList = builderTemplate.getJavadocApiDoc(config, javaProjectBuilder);
58+
Template indexCssTemplate = BeetlTemplateUtil.getByName(DocGlobalConstants.ALL_IN_ONE_CSS);
59+
FileUtil.nioWriteFile(indexCssTemplate.render(), config.getOutPath() + DocGlobalConstants.FILE_SEPARATOR + DocGlobalConstants.ALL_IN_ONE_CSS_OUT);
60+
BaseDocBuilderTemplate.copyJarFile("css/" + DocGlobalConstants.FONT_STYLE, config.getOutPath() + DocGlobalConstants.FILE_SEPARATOR + DocGlobalConstants.FONT_STYLE);
61+
BaseDocBuilderTemplate.copyJarFile("js/" + DocGlobalConstants.JQUERY, config.getOutPath() + DocGlobalConstants.FILE_SEPARATOR + DocGlobalConstants.JQUERY);
62+
String INDEX_HTML = "javadoc-index.html";
63+
builderTemplate.buildAllInOne(apiDocList, config, javaProjectBuilder, DocGlobalConstants.JAVADOC_ALL_IN_ONE_HTML_TPL, INDEX_HTML);
64+
String SEARCH_JS = "search.js";
65+
builderTemplate.buildSearchJs(apiDocList, config, javaProjectBuilder, DocGlobalConstants.JAVADOC_ALL_IN_ONE_SEARCH_TPL, SEARCH_JS);
66+
}
67+
}

0 commit comments

Comments
 (0)