|
|
|
@ -5,7 +5,6 @@ import freemarker.template.TemplateException;
|
|
|
|
|
import io.github.yedaxia.apidocs.DocContext;
|
|
|
|
|
import io.github.yedaxia.apidocs.IPluginSupport;
|
|
|
|
|
import io.github.yedaxia.apidocs.Resources;
|
|
|
|
|
import io.github.yedaxia.apidocs.Utils;
|
|
|
|
|
import io.github.yedaxia.apidocs.parser.ControllerNode;
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
@ -14,35 +13,85 @@ import java.io.IOException;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.logging.Logger;
|
|
|
|
|
import java.util.logging.Level;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Postman文档生成插件
|
|
|
|
|
* 用于生成Postman格式的API文档
|
|
|
|
|
*/
|
|
|
|
|
public class PostmanDocPlugin implements IPluginSupport {
|
|
|
|
|
|
|
|
|
|
private static final Logger LOGGER = Logger.getLogger(PostmanDocPlugin.class.getName());
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 默认构造函数
|
|
|
|
|
*/
|
|
|
|
|
public PostmanDocPlugin() {
|
|
|
|
|
// 默认构造函数
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 执行文档生成
|
|
|
|
|
*
|
|
|
|
|
* @param controllerNodeList 控制器节点列表
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void execute(List<ControllerNode> controllerNodeList) {
|
|
|
|
|
FileWriter docFileWriter = null;
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
Template ctrlTemplate = this.getDocTpl();
|
|
|
|
|
|
|
|
|
|
String docFileName = String.format("%s-%s-api-docs.json", DocContext.getDocsConfig().getProjectName(), DocContext.getDocsConfig().getApiVersion());
|
|
|
|
|
Template template = getDocTemplate();
|
|
|
|
|
String docFileName = generateDocFileName();
|
|
|
|
|
File docFile = new File(DocContext.getDocPath(), docFileName);
|
|
|
|
|
docFileWriter = new FileWriter(docFile);
|
|
|
|
|
Map<String, Object> data = new HashMap();
|
|
|
|
|
data.put("controllerNodes", controllerNodeList);
|
|
|
|
|
data.put("currentApiVersion", DocContext.getCurrentApiVersion());
|
|
|
|
|
data.put("projectName", DocContext.getDocsConfig().getProjectName());
|
|
|
|
|
data.put("i18n", DocContext.getI18n());
|
|
|
|
|
ctrlTemplate.process(data, docFileWriter);
|
|
|
|
|
|
|
|
|
|
} catch (IOException | TemplateException var10) {
|
|
|
|
|
var10.printStackTrace();
|
|
|
|
|
} finally {
|
|
|
|
|
Utils.closeSilently(docFileWriter);
|
|
|
|
|
|
|
|
|
|
// 使用try-with-resources自动管理资源
|
|
|
|
|
try (FileWriter docFileWriter = new FileWriter(docFile)) {
|
|
|
|
|
Map<String, Object> templateData = createTemplateData(controllerNodeList);
|
|
|
|
|
template.process(templateData, docFileWriter);
|
|
|
|
|
LOGGER.info("Postman文档生成成功: " + docFile.getAbsolutePath());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
LOGGER.log(Level.SEVERE, "文件操作异常", e);
|
|
|
|
|
throw new RuntimeException("生成Postman文档时发生IO异常", e);
|
|
|
|
|
} catch (TemplateException e) {
|
|
|
|
|
LOGGER.log(Level.SEVERE, "模板处理异常", e);
|
|
|
|
|
throw new RuntimeException("处理Freemarker模板时发生异常", e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Template getDocTpl() throws IOException {
|
|
|
|
|
/**
|
|
|
|
|
* 获取文档模板
|
|
|
|
|
*
|
|
|
|
|
* @return Freemarker模板对象
|
|
|
|
|
* @throws IOException 当模板文件读取失败时抛出
|
|
|
|
|
*/
|
|
|
|
|
private Template getDocTemplate() throws IOException {
|
|
|
|
|
return Resources.getFreemarkerTemplate("postman-doc.json.ftl");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 生成文档文件名
|
|
|
|
|
*
|
|
|
|
|
* @return 文档文件名
|
|
|
|
|
*/
|
|
|
|
|
private String generateDocFileName() {
|
|
|
|
|
return String.format("%s-%s-api-docs.json",
|
|
|
|
|
DocContext.getDocsConfig().getProjectName(),
|
|
|
|
|
DocContext.getDocsConfig().getApiVersion());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 创建模板数据
|
|
|
|
|
*
|
|
|
|
|
* @param controllerNodeList 控制器节点列表
|
|
|
|
|
* @return 模板数据Map
|
|
|
|
|
*/
|
|
|
|
|
private Map<String, Object> createTemplateData(List<ControllerNode> controllerNodeList) {
|
|
|
|
|
Map<String, Object> data = new HashMap<>();
|
|
|
|
|
data.put("controllerNodes", controllerNodeList);
|
|
|
|
|
data.put("currentApiVersion", DocContext.getCurrentApiVersion());
|
|
|
|
|
data.put("projectName", DocContext.getDocsConfig().getProjectName());
|
|
|
|
|
data.put("i18n", DocContext.getI18n());
|
|
|
|
|
return data;
|
|
|
|
|
}
|
|
|
|
|
}
|