All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.treeleafj.xdoc.jfinal.XDocJfinalController Maven / Gradle / Ivy

The newest version!
package org.treeleafj.xdoc.jfinal;

import com.jfinal.core.Controller;
import com.jfinal.kit.PropKit;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.treeleafj.xdoc.XDoc;
import org.treeleafj.xdoc.format.http.HtmlForamt;
import org.treeleafj.xdoc.model.ApiDoc;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

/**
 * xDoc-jfinal 入口
 */
public class XDocJfinalController extends Controller {


    private Logger logger = LoggerFactory.getLogger(XDocJfinalController.class);

    private static String html;

    private static ApiDoc apiDoc;

    public XDocJfinalController() {
        boolean enable = PropKit.getBoolean("xdoc.enable", true);

        if (!enable || apiDoc != null) {
            return;
        }

        synchronized (XDocJfinalController.class) {
            if (apiDoc != null) {
                return;
            }
            init();
        }

    }

    /**
     * 访问接口文档首页
     */
    public void index() {
        renderHtml(html);
    }

    /**
     * 获取所有文档api
     *
     * @return 系统所有文档接口的数据(json格式)
     */
    public void apis() {
        renderJson(this.apiDoc);
    }

    /**
     * 重新构建文档
     *
     * @return 文档页面
     */
    public void rebuild() {
        init();
        redirect("index");
    }

    /**
     * 初始化Xdoc文档内容
     */
    private void init() {

        String path = PropKit.get("xdoc.sourcePath");
        String version = PropKit.get("xdoc.version");
        String title = PropKit.get("xdoc.title");

        if (StringUtils.isBlank(path)) {
            path = ".";//默认为当前目录
        }

        List paths = Arrays.asList(path.split(","));

        List srcDirs = new ArrayList<>(paths.size());
        List srcDirPaths = new ArrayList<>(paths.size());

        try {
            for (String s : paths) {
                File dir = new File(s);
                srcDirs.add(dir);
                srcDirPaths.add(dir.getCanonicalPath());
            }
        } catch (Exception e) {
            logger.error("获取源码目录路径错误", e);
            return;
        }

        logger.debug("starting XDoc, source path:{}", srcDirPaths);

        XDoc xDoc = new XDoc(srcDirs, new JfinalHttpFramework());

        try {
            apiDoc = xDoc.resolve();
            HashMap properties = new HashMap<>();
            properties.put("version", version);
            properties.put("title", title);
            apiDoc.setProperties(properties);

            //生成接口文档的html
            try(ByteArrayOutputStream out = new ByteArrayOutputStream()) {
                xDoc.build(out, new HtmlForamt());
                html = out.toString("UTF-8");
            } catch (Exception e) {
                logger.error("生成html文档失败");
            }

        } catch (Exception e) {
            logger.error("start up XDoc error", e);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy