mirror of
https://github.com/vran-dev/databasir.git
synced 2025-08-08 18:10:26 +08:00
feat: databasir init
This commit is contained in:
4
core/build.gradle
Normal file
4
core/build.gradle
Normal file
@@ -0,0 +1,4 @@
|
||||
dependencies {
|
||||
|
||||
|
||||
}
|
@@ -0,0 +1,5 @@
|
||||
package com.databasir.core.doc.config;
|
||||
|
||||
public class DocConfiguration {
|
||||
|
||||
}
|
@@ -0,0 +1,12 @@
|
||||
package com.databasir.core.doc.factory;
|
||||
|
||||
import com.databasir.core.doc.model.DatabaseDoc;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface DatabaseDocFactory extends Sortable<DatabaseDocFactory> {
|
||||
|
||||
Optional<DatabaseDoc> create(Connection connection, String databaseName);
|
||||
|
||||
}
|
@@ -0,0 +1,16 @@
|
||||
package com.databasir.core.doc.factory;
|
||||
|
||||
public interface Sortable<T extends Sortable<?>> extends Comparable<T> {
|
||||
|
||||
/**
|
||||
* @return priority, min -> max means low -> high
|
||||
*/
|
||||
default int priority() {
|
||||
return Integer.MIN_VALUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
default int compareTo(T o) {
|
||||
return Integer.compare(this.priority(), o.priority());
|
||||
}
|
||||
}
|
@@ -0,0 +1,10 @@
|
||||
package com.databasir.core.doc.factory;
|
||||
|
||||
import com.databasir.core.doc.model.ColumnDoc;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface TableColumnDocFactory extends Sortable<TableColumnDocFactory> {
|
||||
|
||||
List<ColumnDoc> create(TableDocCreateContext context);
|
||||
}
|
@@ -0,0 +1,25 @@
|
||||
package com.databasir.core.doc.factory;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DatabaseMetaData;
|
||||
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public class TableDocCreateContext {
|
||||
|
||||
private String database;
|
||||
|
||||
private String tableName;
|
||||
|
||||
private Connection connection;
|
||||
|
||||
private DatabaseMetaData databaseMetaData;
|
||||
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
package com.databasir.core.doc.factory;
|
||||
|
||||
import com.databasir.core.doc.model.TableDoc;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface TableDocFactory extends Sortable<TableDocFactory> {
|
||||
|
||||
List<TableDoc> create(TableDocCreateContext context);
|
||||
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
package com.databasir.core.doc.factory;
|
||||
|
||||
import com.databasir.core.doc.model.IndexDoc;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface TableIndexDocFactory extends Sortable<TableIndexDocFactory> {
|
||||
|
||||
List<IndexDoc> create(TableDocCreateContext context);
|
||||
|
||||
}
|
@@ -0,0 +1,10 @@
|
||||
package com.databasir.core.doc.factory;
|
||||
|
||||
import com.databasir.core.doc.model.TriggerDoc;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface TableTriggerDocFactory extends Sortable<TableTriggerDocFactory> {
|
||||
|
||||
List<TriggerDoc> create(TableDocCreateContext context);
|
||||
}
|
@@ -0,0 +1,16 @@
|
||||
package com.databasir.core.doc.factory.extension;
|
||||
|
||||
import com.databasir.core.doc.factory.TableDocCreateContext;
|
||||
import com.databasir.core.doc.factory.TableTriggerDocFactory;
|
||||
import com.databasir.core.doc.model.TriggerDoc;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class MysqlTableTriggerDocFactory implements TableTriggerDocFactory {
|
||||
|
||||
@Override
|
||||
public List<TriggerDoc> create(TableDocCreateContext context) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,24 @@
|
||||
package com.databasir.core.doc.factory.jdbc;
|
||||
|
||||
import com.databasir.core.doc.factory.*;
|
||||
import com.databasir.core.doc.model.DatabaseDoc;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.util.Optional;
|
||||
|
||||
public class JdbcDatabaseDocFactory implements DatabaseDocFactory {
|
||||
|
||||
private TableDocFactory tableDocFactory;
|
||||
|
||||
private TableColumnDocFactory tableColumnDocFactory;
|
||||
|
||||
private TableTriggerDocFactory tableTriggerDocFactory;
|
||||
|
||||
private TableIndexDocFactory tableIndexDocFactory;
|
||||
|
||||
@Override
|
||||
public Optional<DatabaseDoc> create(Connection connection, String database) {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,24 @@
|
||||
package com.databasir.core.doc.factory.jdbc;
|
||||
|
||||
import com.databasir.core.doc.factory.TableColumnDocFactory;
|
||||
import com.databasir.core.doc.factory.TableDocCreateContext;
|
||||
import com.databasir.core.doc.model.ColumnDoc;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
public class JdbcTableColumnDocFactory implements TableColumnDocFactory {
|
||||
@Override
|
||||
public List<ColumnDoc> create(TableDocCreateContext context) {
|
||||
|
||||
try {
|
||||
ResultSet indexResults = context.getDatabaseMetaData().getIndexInfo(context.getDatabase(), null, context.getTableName(), false, false);
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
@@ -0,0 +1,15 @@
|
||||
package com.databasir.core.doc.factory.jdbc;
|
||||
|
||||
import com.databasir.core.doc.factory.TableDocCreateContext;
|
||||
import com.databasir.core.doc.factory.TableDocFactory;
|
||||
import com.databasir.core.doc.model.TableDoc;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class JdbcTableDocFactory implements TableDocFactory {
|
||||
|
||||
@Override
|
||||
public List<TableDoc> create(TableDocCreateContext context) {
|
||||
return null;
|
||||
}
|
||||
}
|
@@ -0,0 +1,14 @@
|
||||
package com.databasir.core.doc.factory.jdbc;
|
||||
|
||||
import com.databasir.core.doc.factory.TableDocCreateContext;
|
||||
import com.databasir.core.doc.factory.TableIndexDocFactory;
|
||||
import com.databasir.core.doc.model.IndexDoc;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class JdbcTableIndexDocFactory implements TableIndexDocFactory {
|
||||
@Override
|
||||
public List<IndexDoc> create(TableDocCreateContext context) {
|
||||
return null;
|
||||
}
|
||||
}
|
@@ -0,0 +1,18 @@
|
||||
package com.databasir.core.doc.factory.jdbc;
|
||||
|
||||
import com.databasir.core.doc.factory.TableDocCreateContext;
|
||||
import com.databasir.core.doc.factory.TableTriggerDocFactory;
|
||||
import com.databasir.core.doc.model.TriggerDoc;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class JdbcTableTriggerDocFactory implements TableTriggerDocFactory {
|
||||
|
||||
@Override
|
||||
public List<TriggerDoc> create(TableDocCreateContext context) {
|
||||
// note: jdbc not support get triggers
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,4 @@
|
||||
package com.databasir.core.doc.model;
|
||||
|
||||
public class ColumnDoc {
|
||||
}
|
@@ -0,0 +1,7 @@
|
||||
package com.databasir.core.doc.model;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class DatabaseDoc {
|
||||
}
|
@@ -0,0 +1,4 @@
|
||||
package com.databasir.core.doc.model;
|
||||
|
||||
public class IndexDoc {
|
||||
}
|
@@ -0,0 +1,4 @@
|
||||
package com.databasir.core.doc.model;
|
||||
|
||||
public class TableDoc {
|
||||
}
|
@@ -0,0 +1,4 @@
|
||||
package com.databasir.core.doc.model;
|
||||
|
||||
public class TriggerDoc {
|
||||
}
|
@@ -0,0 +1,19 @@
|
||||
package com.databasir.core.doc.render;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public interface ColumnValueConverter {
|
||||
|
||||
default String convertDataType(String originType) {
|
||||
return originType;
|
||||
}
|
||||
|
||||
default String convertIsNotNull(Boolean isNotNull) {
|
||||
return Objects.equals(isNotNull, true) ? "YES" : "";
|
||||
}
|
||||
|
||||
default String convertIsAutoIncrement(Boolean isAutoIncrement) {
|
||||
return Objects.equals(isAutoIncrement, true) ? "YES" : "";
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,4 @@
|
||||
package com.databasir.core.doc.render;
|
||||
|
||||
public class DefaultColumnValueConverter implements ColumnValueConverter {
|
||||
}
|
11
core/src/main/java/com/databasir/core/doc/render/Render.java
Normal file
11
core/src/main/java/com/databasir/core/doc/render/Render.java
Normal file
@@ -0,0 +1,11 @@
|
||||
package com.databasir.core.doc.render;
|
||||
|
||||
import com.databasir.core.doc.model.DatabaseDoc;
|
||||
|
||||
import java.io.OutputStream;
|
||||
|
||||
public interface Render {
|
||||
|
||||
void rendering(DatabaseDoc doc, OutputStream outputStream);
|
||||
|
||||
}
|
@@ -0,0 +1,18 @@
|
||||
package com.databasir.core.doc.render;
|
||||
|
||||
public class RenderConfiguration {
|
||||
|
||||
private Boolean renderTables = true;
|
||||
|
||||
private Boolean renderColumns = true;
|
||||
|
||||
private Boolean renderIndexes = true;
|
||||
|
||||
private Boolean renderViews = false;
|
||||
|
||||
private Boolean renderTriggers = false;
|
||||
|
||||
private Boolean renderProducers = false;
|
||||
|
||||
private ColumnValueConverter columnValueConverter = new DefaultColumnValueConverter();
|
||||
}
|
@@ -0,0 +1,16 @@
|
||||
package com.databasir.core.doc.render;
|
||||
|
||||
import com.databasir.core.doc.model.DatabaseDoc;
|
||||
|
||||
import java.io.OutputStream;
|
||||
|
||||
public class Renders {
|
||||
|
||||
private Render markdownRender = null;
|
||||
|
||||
public void render(DatabaseDoc doc,
|
||||
OutputStream outputStream,
|
||||
RenderConfiguration config) {
|
||||
markdownRender.rendering(doc, outputStream);
|
||||
}
|
||||
}
|
@@ -0,0 +1,108 @@
|
||||
package com.databasir.core.doc.render.markdown;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class MarkdownBuilder {
|
||||
|
||||
private static final String LINE = "\n";
|
||||
|
||||
private static final String DOUBLE_LINE = LINE + LINE;
|
||||
|
||||
private StringBuilder builder = new StringBuilder(1024);
|
||||
|
||||
private MarkdownBuilder() {
|
||||
}
|
||||
|
||||
public static MarkdownBuilder builder() {
|
||||
return new MarkdownBuilder();
|
||||
}
|
||||
|
||||
public MarkdownBuilder primaryTitle(String title) {
|
||||
builder.append("# ").append(title).append(DOUBLE_LINE);
|
||||
return this;
|
||||
}
|
||||
|
||||
public MarkdownBuilder secondTitle(String title) {
|
||||
builder.append("## ").append(title).append(DOUBLE_LINE);
|
||||
return this;
|
||||
}
|
||||
|
||||
public MarkdownBuilder thirdTitle(String title) {
|
||||
builder.append("### ").append(title).append(DOUBLE_LINE);
|
||||
return this;
|
||||
}
|
||||
|
||||
public MarkdownBuilder text(String text) {
|
||||
builder.append(text).append(DOUBLE_LINE);
|
||||
return this;
|
||||
}
|
||||
|
||||
public MarkdownBuilder table(List<String> titles, List<List<String>> rows) {
|
||||
if (titles == null || titles.isEmpty()) {
|
||||
throw new IllegalArgumentException("titles must not be null or empty");
|
||||
}
|
||||
// build titles
|
||||
builder.append("| ");
|
||||
for (String title : titles) {
|
||||
builder.append(title).append(" | ");
|
||||
}
|
||||
builder.append(LINE);
|
||||
|
||||
// build separators
|
||||
builder.append("| ");
|
||||
for (String title : titles) {
|
||||
builder.append("------").append(" | ");
|
||||
}
|
||||
builder.append(LINE);
|
||||
|
||||
// build rows
|
||||
for (List<String> row : rows) {
|
||||
builder.append("| ");
|
||||
for (String column : row) {
|
||||
builder.append(column).append(" | ");
|
||||
}
|
||||
builder.append(LINE);
|
||||
}
|
||||
builder.append(LINE);
|
||||
return this;
|
||||
}
|
||||
|
||||
public MarkdownBuilder orderedList(List<String> list) {
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
builder.append(i + 1).append(". ").append(list.get(i)).append(LINE);
|
||||
}
|
||||
builder.append(LINE);
|
||||
return this;
|
||||
}
|
||||
|
||||
public MarkdownBuilder unorderedList(List<String> list) {
|
||||
for (String item : list) {
|
||||
builder.append("- ").append(item).append(LINE);
|
||||
}
|
||||
builder.append(LINE);
|
||||
return this;
|
||||
}
|
||||
|
||||
public MarkdownBuilder blockquotes(String content) {
|
||||
builder.append("> ").append(content).append(DOUBLE_LINE);
|
||||
return this;
|
||||
}
|
||||
|
||||
public MarkdownBuilder code(String languageType, String statement) {
|
||||
builder.append("```").append(languageType).append(LINE)
|
||||
.append(statement)
|
||||
.append("```")
|
||||
.append(DOUBLE_LINE);
|
||||
return this;
|
||||
}
|
||||
|
||||
public MarkdownBuilder link(String text, String link) {
|
||||
builder.append("[").append(text).append("]")
|
||||
.append("(").append(link).append(")");
|
||||
return this;
|
||||
}
|
||||
|
||||
public String build() {
|
||||
return builder.toString();
|
||||
}
|
||||
}
|
@@ -0,0 +1,4 @@
|
||||
package com.databasir.core.doc.render.markdown;
|
||||
|
||||
public class MarkdownRender {
|
||||
}
|
Reference in New Issue
Block a user