// Path: xDoc-core/src/main/java/org/treeleafj/xdoc/format/Format.java
// public interface Format {
// 
//     String format(ApiDoc apiDoc);
// }
// 
// Path: xDoc-core/src/main/java/org/treeleafj/xdoc/model/ApiDoc.java
// @Data
// public class ApiDoc {
// 
//     /**
//      * 附带的属性
//      */
//     private Map<String, Object> properties = new HashMap<>();
// 
//     /**
//      * 所有API模块
//      */
//     private List<ApiModule> apiModules;
// 
//     public ApiDoc(List<ApiModule> apiModules) {
//         this.apiModules = apiModules;
//     }
// }
// 
// Path: xDoc-core/src/main/java/org/treeleafj/xdoc/utils/JsonUtils.java
// public class JsonUtils {
// 
//     private static ObjectMapper objectMapper = new ObjectMapper();
// 
//     static {
//         objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
//         objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
//     }
// 
//     /**
//      * 将一个对象转为json字符窜
//      */
//     public static String toJson(Object obj) {
//         try {
//             return objectMapper.writeValueAsString(obj);
//         } catch (JsonProcessingException e) {
//             throw new RuntimeException(e);
//         }
//     }
// 
// 
//     /**
//      * 格式化json字符串
//      *
//      * @param jsonStr 未格式化前的JSON窜
//      * @return 格式化好的JSON窜
//      */
//     public static String formatJson(String jsonStr) {
//         if (StringUtils.isBlank(jsonStr)) {
//             return StringUtils.EMPTY;
//         }
//         StringBuilder sb = new StringBuilder();
//         char last;
//         char current = '\0';
//         int indent = 0;
//         for (int i = 0; i < jsonStr.length(); i++) {
//             last = current;
//             current = jsonStr.charAt(i);
//             switch (current) {
//                 case '{':
//                 case '[':
//                     sb.append(current);
//                     sb.append('\n');
//                     indent++;
//                     addIndentBlank(sb, indent);
//                     break;
//                 case '}':
//                 case ']':
//                     sb.append('\n');
//                     indent--;
//                     addIndentBlank(sb, indent);
//                     sb.append(current);
//                     break;
//                 case ',':
//                     sb.append(current);
//                     if (last != '\\') {
//                         sb.append('\n');
//                         addIndentBlank(sb, indent);
//                     }
//                     break;
//                 default:
//                     sb.append(current);
//             }
//         }
// 
//         return sb.toString();
//     }
// 
//     /**
//      * 添加space
//      *
//      * @param sb     要追加空格的字符串
//      * @param indent 追加的空格数
//      */
//     private static void addIndentBlank(StringBuilder sb, int indent) {
//         for (int i = 0; i < indent; i++) {
//             sb.append('\t');
//         }
//     }
// }


import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.treeleafj.xdoc.format.Format;
import org.treeleafj.xdoc.model.ApiDoc;
import org.treeleafj.xdoc.utils.JsonUtils;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
package org.treeleafj.xdoc.format.http;



/**
 * Created by leaf on 2017/3/18 0018.
 */
public class HtmlForamt implements Format {

    @Override
    public String format(ApiDoc apiDoc) {
        InputStream in = HtmlForamt.class.getResourceAsStream("html.vm");
        if (in != null) {
            try {
                String s = IOUtils.toString(in, "utf-8");

                Map<String, Object> model = new HashMap<>();
                model.put("title", StringUtils.defaultString((String) apiDoc.getProperties().get("title"), "接口文档"));
                model.put("apiModules", apiDoc.getApiModules());

// Path: xDoc-core/src/main/java/org/treeleafj/xdoc/format/Format.java
// public interface Format {
// 
//     String format(ApiDoc apiDoc);
// }
// 
// Path: xDoc-core/src/main/java/org/treeleafj/xdoc/model/ApiDoc.java
// @Data
// public class ApiDoc {
// 
//     /**
//      * 附带的属性
//      */
//     private Map<String, Object> properties = new HashMap<>();
// 
//     /**
//      * 所有API模块
//      */
//     private List<ApiModule> apiModules;
// 
//     public ApiDoc(List<ApiModule> apiModules) {
//         this.apiModules = apiModules;
//     }
// }
// 
// Path: xDoc-core/src/main/java/org/treeleafj/xdoc/utils/JsonUtils.java
// public class JsonUtils {
// 
//     private static ObjectMapper objectMapper = new ObjectMapper();
// 
//     static {
//         objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
//         objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
//     }
// 
//     /**
//      * 将一个对象转为json字符窜
//      */
//     public static String toJson(Object obj) {
//         try {
//             return objectMapper.writeValueAsString(obj);
//         } catch (JsonProcessingException e) {
//             throw new RuntimeException(e);
//         }
//     }
// 
// 
//     /**
//      * 格式化json字符串
//      *
//      * @param jsonStr 未格式化前的JSON窜
//      * @return 格式化好的JSON窜
//      */
//     public static String formatJson(String jsonStr) {
//         if (StringUtils.isBlank(jsonStr)) {
//             return StringUtils.EMPTY;
//         }
//         StringBuilder sb = new StringBuilder();
//         char last;
//         char current = '\0';
//         int indent = 0;
//         for (int i = 0; i < jsonStr.length(); i++) {
//             last = current;
//             current = jsonStr.charAt(i);
//             switch (current) {
//                 case '{':
//                 case '[':
//                     sb.append(current);
//                     sb.append('\n');
//                     indent++;
//                     addIndentBlank(sb, indent);
//                     break;
//                 case '}':
//                 case ']':
//                     sb.append('\n');
//                     indent--;
//                     addIndentBlank(sb, indent);
//                     sb.append(current);
//                     break;
//                 case ',':
//                     sb.append(current);
//                     if (last != '\\') {
//                         sb.append('\n');
//                         addIndentBlank(sb, indent);
//                     }
//                     break;
//                 default:
//                     sb.append(current);
//             }
//         }
// 
//         return sb.toString();
//     }
// 
//     /**
//      * 添加space
//      *
//      * @param sb     要追加空格的字符串
//      * @param indent 追加的空格数
//      */
//     private static void addIndentBlank(StringBuilder sb, int indent) {
//         for (int i = 0; i < indent; i++) {
//             sb.append('\t');
//         }
//     }
// }


// Path: xDoc-core/src/main/java/org/treeleafj/xdoc/format/http/HtmlForamt.java
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.treeleafj.xdoc.format.Format;
import org.treeleafj.xdoc.model.ApiDoc;
import org.treeleafj.xdoc.utils.JsonUtils;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

package org.treeleafj.xdoc.format.http;



/**
 * Created by leaf on 2017/3/18 0018.
 */
public class HtmlForamt implements Format {

    @Override
    public String format(ApiDoc apiDoc) {
        InputStream in = HtmlForamt.class.getResourceAsStream("html.vm");
        if (in != null) {
            try {
                String s = IOUtils.toString(in, "utf-8");

                Map<String, Object> model = new HashMap<>();
                model.put("title", StringUtils.defaultString((String) apiDoc.getProperties().get("title"), "接口文档"));
                model.put("apiModules", apiDoc.getApiModules());

                return s.replace("_apis_json", JsonUtils.toJson(model));