xmind -> 表

package javabase;

import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
import org.xmind.core.Core;
import org.xmind.core.CoreException;
import org.xmind.core.ISheet;
import org.xmind.core.ITopic;
import org.xmind.core.IWorkbook;
import org.xmind.core.IWorkbookBuilder;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.stream.Collectors;

public class XMindToMapper {
    public static final String SPACE = " ";
    public static final String TAB = "    ";
    public static final String LINE = "\n";
    public static final String XML_HEAD_1 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
            "<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\" >\n" +
            "<mapper namespace=\"com.pingan.stock.fss.core.service.dao.";
    public static final String XML_HEAD_2 = "\">";
    public static final String XML_TAIL = "</mapper>";

    public static void main(String[] args) {
        String a = XMindToMapper.Column.javaField("A");
        String t_ab_cd = XMindToMapper.Table.poName("T_AB_CD");
        String filePath = "C:\\Users\\21461\\Desktop\\商城\\表设计.xmind";
        List<Table> tables = analyseToTables(filePath);
        String sql = sql(tables);
        write(sql, "1.txt");

        for (XMindToMapper.Table table : tables) {
            String xml = xml(table);
            write(xml, table.getDaoName() + ".xml");
        }
    }

    public static String XML_HEAD(XMindToMapper.Table table) {
        StringBuilder ss = new StringBuilder("");
        ss.append(XML_HEAD_1).append(table.getDaoName()).append(XML_HEAD_2);
        ss.append(LINE);
        return ss.toString();
    }

    public static String BASE_COLUMN_LIST(XMindToMapper.Table table) {
        StringBuilder ss = new StringBuilder();

        List<XMindToMapper.Column> columns = table.getColumns();
        ss.append(TAB).append("<sql id=\"BASE_COLUMN_LIST\">").append("\n");
        ss.append(TAB).append(TAB).append(Joiner.on("," + SPACE).join(columns.stream().map(column -> column.getColumnName()).collect(Collectors.toList())));
        ss.append(LINE);
        ss.append(TAB).append("</sql>");
        ss.append(LINE);
        return ss.toString();
    }

    public static String PO(XMindToMapper.Table table) {
        StringBuilder ss = new StringBuilder();
        for (XMindToMapper.Column column : table.getColumns()) {
            ss.append(TAB).append("//").append(SPACE).append(column.getColumnConment());
            ss.append(LINE);
            ss.append(TAB).append("private").append(SPACE).append(column.getJavaFieldType()).append(SPACE).append(column.getJavaField()).append(";");
            ss.append(LINE);
        }
        ss.append(LINE);
        return ss.toString();
    }


    public static String BASE_RESULT_MAP(XMindToMapper.Table table) {
        StringBuilder ss = new StringBuilder();
        ss.append(TAB).append("<resultMap").append(SPACE).append("id=\"BASE_RESULT_MAP\"").append(SPACE).append("type=\"com.pingan.stock.fss.core.service.po." + XMindToMapper.Table.poName(table.getTableName()) + ("\">"));
        ss.append(LINE);
        for (XMindToMapper.Column column : table.getColumns()) {
            ss.append(TAB).append(TAB).append("<result").append(SPACE).append("column=\"").append(column.getColumnName()).append("\"").append(SPACE).append("jdbcType=\"").append(column.getJdbcType()).append("\"").append(SPACE).append("property=\"").append(column.getJavaField()).append("\"/>");
            ss.append(LINE);
        }
        ss.append(TAB).append("</resultMap>");
        ss.append(LINE);
        return ss.toString();
    }

    public static String INSERT(XMindToMapper.Table table) {
        StringBuilder ss = new StringBuilder();
        ss.append(TAB).append("<insert id=\"insert\"").append(SPACE).append("parameterType=\"com.pingan.stock.fss.core.service.po.").append(table.getPoName()).append("\">");
        ss.append(LINE);
        ss.append(TAB).append(TAB).append("INSERT").append(SPACE).append("INTO").append(SPACE).append(table.getTableName()).append(SPACE).append("(");
        ss.append(LINE);
        for (int i = 0; i < table.getColumns().size(); i++) {
            XMindToMapper.Column column = table.getColumns().get(i);
            ss.append(TAB).append(TAB).append(TAB).append(column.getColumnName());
            if (i != table.getColumns().size() - 1) {
                ss.append(",");
            }
            ss.append(LINE);
        }
        ss.append(TAB).append(TAB).append(")");
        ss.append(LINE);
        ss.append(TAB).append(TAB).append("VALUES(");
        ss.append(LINE);
        for (int i = 0; i < table.getColumns().size(); i++) {
            XMindToMapper.Column column = table.getColumns().get(i);
            ss.append(TAB).append(TAB).append(TAB);
            if ("INSERT_TIME||UPDATE_TIME||H_INSERT_TIME".contains(column.getColumnName())) {
                ss.append("SYSDATE");
            } else {
                ss.append("#{").append(column.getJavaField()).append(",").append("jdbcType=").append(column.getJdbcType()).append("}");
            }
            if (i != table.getColumns().size() - 1) {
                ss.append(",");
            }
            ss.append(LINE);
        }
        ss.append(TAB).append(TAB).append(")");
        ss.append(LINE);
        ss.append(TAB).append("</insert>");
        ss.append(LINE);
        return ss.toString();
    }

    private static String xml(XMindToMapper.Table table) {
        StringBuilder ss = new StringBuilder("");

        //XML_HEADER
        ss.append(XML_HEAD(table));
//        ss.append(LINE);
        // BASE_COLUMN_LIST
        ss.append(BASE_COLUMN_LIST(table));
        ss.append(LINE);
        // BASE_RESULT_MAP
        ss.append(BASE_RESULT_MAP((table)));
        ss.append(LINE);
        //insert
        ss.append(INSERT(table));
//        ss.append(LINE);
        // XML_TAIL
        ss.append(XML_TAIL);
        ss.append(LINE);
        // PO
        ss.append(PO(table));
        ss.append(LINE);
        ss.append(LINE);
        ss.append(LINE);
        return ss.toString();
    }

    public static String CREATE(XMindToMapper.Table table) {
        StringBuilder ss = new StringBuilder("");

        ss.append("--CREATE TABLE").append("\n");
        ss.append("CREATE TABLE ").append(table.getTableName()).append(" ( ").append("\n");
        List<XMindToMapper.Column> columns = table.getColumns();
        for (int i = 0; i < columns.size(); i++) {
            String columnName = columns.get(i).getColumnName().toUpperCase();
            String columnType = columns.get(i).getColumnType();
            String primaryKey = "";
            if ("SERIAL_NO".contains(columnName)) {
                primaryKey = "PRIMARY KEY";
            }
            ss.append("    ");
            StringBuilder createRowBuilder = new StringBuilder("");
            createRowBuilder.append(columnName).append(" ").append(columnType).append(" ").append(primaryKey);
            if (i != columns.size() - 1) {
                createRowBuilder.append(",");
            }
            ss.append(createRowBuilder);
            ss.append("\n");
        }
        ss.append(");").append("\n");
        return ss.toString();
    }

    public static String COMMENT(XMindToMapper.Table table) {
        StringBuilder ss = new StringBuilder("");

        ss.append("--Comments").append("\n");
        ss.append("COMMENT ON TABLE ").append(table.getTableName()).append(" IS ").append("'").append(table.getTableComment()).append("';");
        ss.append("\n");
        for (XMindToMapper.Column column : table.getColumns()) {
            ss.append("COMMENT ON COLUMN ").append(table.getTableName()).append(".").append(column.getColumnName().toUpperCase()).append(" IS ").append("'").append(column.getColumnConment().toUpperCase()).append("';");
            ss.append("\n");
        }
        return ss.toString();
    }

    public static String GTRANT(XMindToMapper.Table table) {
        StringBuilder ss = new StringBuilder("");

        ss.append("--Grants").append("\n");

        String tableName = table.getTableName();
        ss.append("CREATE PUBLIC SYNONYM ").append(tableName).append(" FOR ").append(tableName).append(";\n");
        ss.append("GRANT SELECT,UPDATE,INSERT,DELETE ON ").append(tableName).append(" TO FSSCOPR;").append("\n");
        ss.append("GRANT SELECT ON ").append(tableName).append(" TO DEVSUP01;").append("\n");
        ss.append("GRANT SELECT ON ").append(tableName).append(" TO DEVSUP03;").append("\n");
        ss.append("GRANT SELECT,UPDATE,INSERT,DELETE ON ").append(tableName).append(" TO DSPJOB;").append("\n");
        ss.append("GRANT SELECT,UPDATE,INSERT,DELETE ON ").append(tableName).append(" TO BIEBQRY;").append("\n");
        return ss.toString();
    }

    public static String sql(List<XMindToMapper.Table> tables) {
        StringBuffer ss = new StringBuffer("");
        for (XMindToMapper.Table table : tables) {
            ss.append(CREATE(table));
            ss.append(COMMENT(table));
            ss.append(GTRANT(table));
            ss.append("\n\n");
        }
        return ss.toString();
    }

    public static void write(String data, String to) {
        FileOutputStream fis = null;
        try {
            fis = new FileOutputStream(to);
            fis.write(data.getBytes(StandardCharsets.UTF_8));
            fis.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static List<XMindToMapper.Table> analyseToTables(String filePath) {
        IWorkbook iWorkbook = null;
        try {
            IWorkbookBuilder builder = Core.getWorkbookBuilder();
            iWorkbook = builder.loadFromFile(new File(filePath));
        } catch (IOException e) {
            e.printStackTrace();
        } catch (CoreException e) {
            e.printStackTrace();
        }
        ISheet primarySheet = iWorkbook.getPrimarySheet();
        ITopic rootTopic = primarySheet.getRootTopic();
        List<ITopic> tables = rootTopic.getAllChildren().stream().filter(e -> e.getTitleText().contains("表")).collect(Collectors.toList());
        List<XMindToMapper.Table> ts = Lists.newArrayList();
        for (ITopic table : tables) {
            XMindToMapper.Table t = new XMindToMapper.Table();
            t.setTableComment(table.getTitleText());

            ITopic tableName = table.getAllChildren().get(0);
            t.setTableName(tableName.getTitleText().toUpperCase());
            t.setPoName(XMindToMapper.Table.poName(t.getTableName()));
            t.setDaoName(XMindToMapper.Table.daoName(t.getPoName()));

            List<ITopic> columns = tableName.getAllChildren();
            List<XMindToMapper.Column> cs = Lists.newArrayList();
            for (ITopic column : columns) {
                XMindToMapper.Column c = new XMindToMapper.Column();
                String columnName = column.getTitleText().toUpperCase();
                c.setColumnName(columnName);
                List<ITopic> comments = column.getAllChildren();
                String columnConment = Joiner.on(";").join(comments.stream().map(comment -> comment.getTitleText()).collect(Collectors.toList()));
                c.setColumnConment(columnConment);
                String columnType = "VARCHAR2(32)";
                String jdbcType = "VARCHAR";
                if (columnName.equals("UPDATE_TIME")
                        || columnName.equals("INSERT_TIME")
                        || columnName.equals("H_INSERT_TIME")) {
                    columnType = "DATE";
                    jdbcType = "TIMESTAMP";
                }
                c.setColumnType(columnType);
                c.setJdbcType(jdbcType);
                c.setJavaField(XMindToMapper.Column.javaField(columnName));
                c.setJavaFieldType(XMindToMapper.Column.javaFieldType(columnType));
                cs.add(c);
            }
            t.setColumns(cs);
            ts.add(t);
        }
        return ts;
    }

    public static class Table implements Serializable {
        private String tableName;
        private String tableComment;

        private List<XMindToMapper.Column> columns;
        private String poName;
        private String daoName;

        public String getTableName() {
            return tableName;
        }

        public void setTableName(String tableName) {
            this.tableName = tableName;
        }

        public String getTableComment() {
            return tableComment;
        }

        public void setTableComment(String tableComment) {
            this.tableComment = tableComment;
        }

        public List<XMindToMapper.Column> getColumns() {
            return columns;
        }

        public void setColumns(List<XMindToMapper.Column> columns) {
            this.columns = columns;
        }

        public String getPoName() {
            return poName;
        }

        public void setPoName(String poName) {
            this.poName = poName;
        }

        public String getDaoName() {
            return daoName;
        }

        public void setDaoName(String daoName) {
            this.daoName = daoName;
        }

        public static String poName(String tableName) {
            StringBuilder ss = new StringBuilder("");

            List<String> names = Lists.newArrayList(tableName.split("_"));
            names.remove(0);
            for (String name : names) {
                ss.append(String.valueOf(name.toUpperCase().charAt(0)) + name.toLowerCase().substring(1));
            }
            return ss.toString() + "PO";
        }

        public static String daoName(String poName) {
            return poName.substring(0, poName.length() - 2) + "Dao";
        }
    }

    public static class Column implements Serializable {
        private String columnName;
        private String columnType;
        private String columnConment;
        private String javaField;
        private String javaFieldType;
        private String jdbcType;

        public String getColumnName() {
            return columnName;
        }

        public void setColumnName(String columnName) {
            this.columnName = columnName;
        }

        public String getColumnType() {
            return columnType;
        }

        public void setColumnType(String columnType) {
            this.columnType = columnType;
        }

        public String getColumnConment() {
            return columnConment;
        }

        public void setColumnConment(String columnConment) {
            this.columnConment = columnConment;
        }

        public String getJavaField() {
            return javaField;
        }

        public void setJavaField(String javaField) {
            this.javaField = javaField;
        }

        public String getJavaFieldType() {
            return javaFieldType;
        }

        public void setJavaFieldType(String javaFieldType) {
            this.javaFieldType = javaFieldType;
        }

        public String getJdbcType() {
            return jdbcType;
        }

        public void setJdbcType(String jdbcType) {
            this.jdbcType = jdbcType;
        }

        public static String javaField(String columnName) {
            StringBuilder ss = new StringBuilder("");
            List<String> names = Lists.newArrayList(columnName.split("_"));
            ss.append(names.get(0).toLowerCase());
            names.remove(0);
            for (String name : names) {
                ss.append(String.valueOf(name.toUpperCase().charAt(0)) + name.toLowerCase().substring(1));
            }
            return ss.toString();
        }

        public static String javaFieldType(String columnType) {
            if (columnType.contains("VARCHAR")) {
                return "String";
            }
            if (columnType.contains("DATE")) {
                return "Date";
            }
            return "XXX";
        }
    }
}

package javabase;

import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
import org.xmind.core.Core;
import org.xmind.core.CoreException;
import org.xmind.core.ISheet;
import org.xmind.core.ITopic;
import org.xmind.core.IWorkbook;
import org.xmind.core.IWorkbookBuilder;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.stream.Collectors;

public class XMindToMapper_NOT {
    public static final String SPACE = " ";
    public static final String TAB = "    ";
    public static final String LINE = "\n";
    public static final String XML_HEAD_1 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
            "<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\" >\n" +
            "<mapper namespace=\"com.pingan.stock.fss.core.service.dao.";
    public static final String XML_HEAD_2 = "\">";
    public static final String XML_TAIL = "</mapper>";

    public static void main(String[] args) {
        String a = XMindToMapper_NOT.Column.javaField("A");
        String t_ab_cd = XMindToMapper_NOT.Table.poName("T_AB_CD");
        String filePath = "C:\\Users\\21461\\Desktop\\商城\\表设计.xmind";
        List<XMindToMapper_NOT.Table> tables = analyseToTables(filePath);
        String sql = sql(tables);
        write(sql, "1.txt");

        for (XMindToMapper_NOT.Table table : tables) {
            String xml = xml(table);
            write(xml, table.getDaoName() + ".xml");
        }

        // 删除脚本 删同义词,删表  不包含索引那些

        write(dropSql(tables), "drop.sql");
    }

    private static String dropSql(List<XMindToMapper_NOT.Table> tables) {
        StringBuffer dropSql = new StringBuffer("");
        tables.forEach(e -> {
            dropSql.append("DROP PUBLIC SYNONYM " + e.getTableName() + ";").append(LINE);
            dropSql.append("DROP TABLE " + e.getTableName() + ";").append(LINE);
            dropSql.append(LINE);
        });
        dropSql.append("COMMIT;");
        return dropSql.toString();
    }

    public static String XML_HEAD(XMindToMapper_NOT.Table table) {
        StringBuilder ss = new StringBuilder("");
        ss.append(XML_HEAD_1).append(table.getDaoName()).append(XML_HEAD_2);
        ss.append(LINE);
        return ss.toString();
    }

    public static String BASE_COLUMN_LIST(XMindToMapper_NOT.Table table) {
        StringBuilder ss = new StringBuilder();

        List<XMindToMapper_NOT.Column> columns = table.getColumns();
        ss.append(TAB).append("<sql id=\"BASE_COLUMN_LIST\">").append("\n");
        ss.append(TAB).append(TAB).append(Joiner.on("," + SPACE).join(columns.stream().map(column -> column.getColumnName()).collect(Collectors.toList())));
        ss.append(LINE);
        ss.append(TAB).append("</sql>");
        ss.append(LINE);
        return ss.toString();
    }

    public static String PO(XMindToMapper_NOT.Table table) {
        StringBuilder ss = new StringBuilder();
        for (XMindToMapper_NOT.Column column : table.getColumns()) {
            ss.append(TAB).append("//").append(SPACE).append(column.getColumnConment());
            ss.append(LINE);
            ss.append(TAB).append("private").append(SPACE).append(column.getJavaFieldType()).append(SPACE).append(column.getJavaField()).append(";");
            ss.append(LINE);
        }
        ss.append(LINE);
        return ss.toString();
    }


    public static String BASE_RESULT_MAP(XMindToMapper_NOT.Table table) {
        StringBuilder ss = new StringBuilder();
        ss.append(TAB).append("<resultMap").append(SPACE).append("id=\"BASE_RESULT_MAP\"").append(SPACE).append("type=\"com.pingan.stock.fss.core.service.po." + XMindToMapper_NOT.Table.poName(table.getTableName()) + ("\">"));
        ss.append(LINE);
        for (XMindToMapper_NOT.Column column : table.getColumns()) {
            ss.append(TAB).append(TAB).append("<result").append(SPACE).append("column=\"").append(column.getColumnName()).append("\"").append(SPACE).append("jdbcType=\"").append(column.getJdbcType()).append("\"").append(SPACE).append("property=\"").append(column.getJavaField()).append("\"/>");
            ss.append(LINE);
        }
        ss.append(TAB).append("</resultMap>");
        ss.append(LINE);
        return ss.toString();
    }

    public static String INSERT(XMindToMapper_NOT.Table table) {
        StringBuilder ss = new StringBuilder();
        ss.append(TAB).append("<insert id=\"insert\"").append(SPACE).append("parameterType=\"com.pingan.stock.fss.core.service.po.").append(table.getPoName()).append("\">");
        ss.append(LINE);
        ss.append(TAB).append(TAB).append("INSERT").append(SPACE).append("INTO").append(SPACE).append(table.getTableName()).append(SPACE).append("(");
        ss.append(LINE);
        for (int i = 0; i < table.getColumns().size(); i++) {
            XMindToMapper_NOT.Column column = table.getColumns().get(i);
            ss.append(TAB).append(TAB).append(TAB).append(column.getColumnName());
            if (i != table.getColumns().size() - 1) {
                ss.append(",");
            }
            ss.append(LINE);
        }
        ss.append(TAB).append(TAB).append(")");
        ss.append(LINE);
        ss.append(TAB).append(TAB).append("VALUES(");
        ss.append(LINE);
        for (int i = 0; i < table.getColumns().size(); i++) {
            XMindToMapper_NOT.Column column = table.getColumns().get(i);
            ss.append(TAB).append(TAB).append(TAB);
            if ("INSERT_TIME||UPDATE_TIME||H_INSERT_TIME".contains(column.getColumnName())) {
                ss.append("SYSDATE");
            } else {
                ss.append("#{").append(column.getJavaField()).append(",").append("jdbcType=").append(column.getJdbcType()).append("}");
            }
            if (i != table.getColumns().size() - 1) {
                ss.append(",");
            }
            ss.append(LINE);
        }
        ss.append(TAB).append(TAB).append(")");
        ss.append(LINE);
        ss.append(TAB).append("</insert>");
        ss.append(LINE);
        return ss.toString();
    }

    private static String xml(XMindToMapper_NOT.Table table) {
        StringBuilder ss = new StringBuilder("");

        //XML_HEADER
        ss.append(XML_HEAD(table));
//        ss.append(LINE);
        // BASE_COLUMN_LIST
        ss.append(BASE_COLUMN_LIST(table));
        ss.append(LINE);
        // BASE_RESULT_MAP
        ss.append(BASE_RESULT_MAP((table)));
        ss.append(LINE);
        //insert
        ss.append(INSERT(table));
//        ss.append(LINE);
        // XML_TAIL
        ss.append(XML_TAIL);
        ss.append(LINE);
        // PO
        ss.append(PO(table));
        ss.append(LINE);
        ss.append(LINE);
        ss.append(LINE);
        return ss.toString();
    }

    public static String CREATE(XMindToMapper_NOT.Table table) {
        StringBuilder ss = new StringBuilder("");

        ss.append("--CREATE TABLE").append("\n");
        ss.append("CREATE TABLE ").append(table.getTableName()).append(" ( ").append("\n");
        List<XMindToMapper_NOT.Column> columns = table.getColumns();
        for (int i = 0; i < columns.size(); i++) {
            String columnName = columns.get(i).getColumnName().toUpperCase();
            String columnType = columns.get(i).getColumnType();
            String primaryKey = "";
            if ("SERIAL_NO".contains(columnName)) {
                primaryKey = "PRIMARY KEY";
            }
            ss.append("    ");
            StringBuilder createRowBuilder = new StringBuilder("");
            createRowBuilder.append(columnName).append(" ").append(columnType).append(" ").append(primaryKey);
            if (i != columns.size() - 1) {
                createRowBuilder.append(",");
            }
            ss.append(createRowBuilder);
            ss.append("\n");
        }
        ss.append(");").append("\n");
        return ss.toString();
    }

    public static String COMMENT(XMindToMapper_NOT.Table table) {
        StringBuilder ss = new StringBuilder("");

        ss.append("--Comments").append("\n");
        ss.append("COMMENT ON TABLE ").append(table.getTableName()).append(" IS ").append("'").append(table.getTableComment()).append("';");
        ss.append("\n");
        for (XMindToMapper_NOT.Column column : table.getColumns()) {
            ss.append("COMMENT ON COLUMN ").append(table.getTableName()).append(".").append(column.getColumnName().toUpperCase()).append(" IS ").append("'").append(column.getColumnConment().toUpperCase()).append("';");
            ss.append("\n");
        }
        return ss.toString();
    }

    public static String GTRANT(XMindToMapper_NOT.Table table) {
        StringBuilder ss = new StringBuilder("");

        ss.append("--Grants").append("\n");

        String tableName = table.getTableName();
        ss.append("CREATE PUBLIC SYNONYM ").append(tableName).append(" FOR ").append(tableName).append(";\n");
        ss.append("GRANT SELECT,UPDATE,INSERT,DELETE ON ").append(tableName).append(" TO FSSCOPR;").append("\n");
        ss.append("GRANT SELECT ON ").append(tableName).append(" TO DEVSUP01;").append("\n");
        ss.append("GRANT SELECT ON ").append(tableName).append(" TO DEVSUP03;").append("\n");
        ss.append("GRANT SELECT,UPDATE,INSERT,DELETE ON ").append(tableName).append(" TO DSPJOB;").append("\n");
        ss.append("GRANT SELECT,UPDATE,INSERT,DELETE ON ").append(tableName).append(" TO BIEBQRY;").append("\n");
        return ss.toString();
    }

    public static String sql(List<XMindToMapper_NOT.Table> tables) {
        StringBuffer ss = new StringBuffer("");
        for (XMindToMapper_NOT.Table table : tables) {
            ss.append(CREATE(table));
            ss.append(COMMENT(table));
            ss.append(GTRANT(table));
            ss.append("\n\n");
        }
        return ss.toString();
    }

    public static void write(String data, String to) {
        FileOutputStream fis = null;
        try {
            fis = new FileOutputStream(to);
            fis.write(data.getBytes(StandardCharsets.UTF_8));
            fis.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static List<XMindToMapper_NOT.Table> analyseToTables(String filePath) {
        IWorkbook iWorkbook = null;
        try {
            IWorkbookBuilder builder = Core.getWorkbookBuilder();
            iWorkbook = builder.loadFromFile(new File(filePath));
        } catch (IOException e) {
            e.printStackTrace();
        } catch (CoreException e) {
            e.printStackTrace();
        }
        ISheet primarySheet = iWorkbook.getPrimarySheet();
        ITopic rootTopic = primarySheet.getRootTopic();
        List<ITopic> tables = rootTopic.getAllChildren().stream().filter(e -> e.getTitleText().contains("表")).collect(Collectors.toList());
        List<XMindToMapper_NOT.Table> ts = Lists.newArrayList();
        for (ITopic table : tables) {
            XMindToMapper_NOT.Table t = new XMindToMapper_NOT.Table();
            t.setTableComment(table.getTitleText());

            ITopic tableName = table.getAllChildren().get(0);
            t.setTableName(tableName.getTitleText().toUpperCase());
            t.setPoName(XMindToMapper_NOT.Table.poName(t.getTableName()));
            t.setDaoName(XMindToMapper_NOT.Table.daoName(t.getPoName()));

            List<ITopic> columns = tableName.getAllChildren();
            List<XMindToMapper_NOT.Column> cs = Lists.newArrayList();
            for (ITopic column : columns) {
                XMindToMapper_NOT.Column c = new XMindToMapper_NOT.Column();
                String columnName = column.getTitleText().toUpperCase();
                c.setColumnName(columnName);
                List<ITopic> comments = column.getAllChildren();
                String columnConment = Joiner.on(";").join(comments.stream().map(comment -> comment.getTitleText()).collect(Collectors.toList()));
                c.setColumnConment(columnConment);
                String columnType = "VARCHAR2(32)";
                String jdbcType = "VARCHAR";
                if (columnName.equals("UPDATE_TIME")
                        || columnName.equals("INSERT_TIME")
                        || columnName.equals("H_INSERT_TIME")) {
                    columnType = "DATE";
                    jdbcType = "TIMESTAMP";
                }
                c.setColumnType(columnType);
                c.setJdbcType(jdbcType);
                c.setJavaField(XMindToMapper_NOT.Column.javaField(columnName));
                c.setJavaFieldType(XMindToMapper_NOT.Column.javaFieldType(columnType));
                cs.add(c);
            }
            t.setColumns(cs);
            ts.add(t);
        }
        return ts;
    }

    public static class Table implements Serializable {
        private String tableName;
        private String tableComment;

        private List<XMindToMapper_NOT.Column> columns;
        private String poName;
        private String daoName;

        public String getTableName() {
            return tableName;
        }

        public void setTableName(String tableName) {
            this.tableName = tableName;
        }

        public String getTableComment() {
            return tableComment;
        }

        public void setTableComment(String tableComment) {
            this.tableComment = tableComment;
        }

        public List<XMindToMapper_NOT.Column> getColumns() {
            return columns;
        }

        public void setColumns(List<XMindToMapper_NOT.Column> columns) {
            this.columns = columns;
        }

        public String getPoName() {
            return poName;
        }

        public void setPoName(String poName) {
            this.poName = poName;
        }

        public String getDaoName() {
            return daoName;
        }

        public void setDaoName(String daoName) {
            this.daoName = daoName;
        }

        public static String poName(String tableName) {
            StringBuilder ss = new StringBuilder("");

            List<String> names = Lists.newArrayList(tableName.split("_"));
//            names.remove(0);
            for (String name : names) {
                ss.append(String.valueOf(name.toUpperCase().charAt(0)) + name.toLowerCase().substring(1));
            }
            return ss.toString() + "PO";
        }

        public static String daoName(String poName) {
            return poName.substring(0, poName.length() - 2) + "Dao";
        }
    }

    public static class Column implements Serializable {
        private String columnName;
        private String columnType;
        private String columnConment;
        private String javaField;
        private String javaFieldType;
        private String jdbcType;

        public String getColumnName() {
            return columnName;
        }

        public void setColumnName(String columnName) {
            this.columnName = columnName;
        }

        public String getColumnType() {
            return columnType;
        }

        public void setColumnType(String columnType) {
            this.columnType = columnType;
        }

        public String getColumnConment() {
            return columnConment;
        }

        public void setColumnConment(String columnConment) {
            this.columnConment = columnConment;
        }

        public String getJavaField() {
            return javaField;
        }

        public void setJavaField(String javaField) {
            this.javaField = javaField;
        }

        public String getJavaFieldType() {
            return javaFieldType;
        }

        public void setJavaFieldType(String javaFieldType) {
            this.javaFieldType = javaFieldType;
        }

        public String getJdbcType() {
            return jdbcType;
        }

        public void setJdbcType(String jdbcType) {
            this.jdbcType = jdbcType;
        }

        public static String javaField(String columnName) {
            StringBuilder ss = new StringBuilder("");
            List<String> names = Lists.newArrayList(columnName.split("_"));
            ss.append(names.get(0).toLowerCase());
            names.remove(0);
            for (String name : names) {
                ss.append(String.valueOf(name.toUpperCase().charAt(0)) + name.toLowerCase().substring(1));
            }
            return ss.toString();
        }

        public static String javaFieldType(String columnType) {
            if (columnType.contains("VARCHAR")) {
                return "String";
            }
            if (columnType.contains("DATE")) {
                return "Date";
            }
            return "XXX";
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值