feat: databasir init

This commit is contained in:
vran
2021-12-27 17:39:24 +08:00
commit 31d71256dd
37 changed files with 746 additions and 0 deletions

4
core/build.gradle Normal file
View File

@@ -0,0 +1,4 @@
dependencies {
}

View File

@@ -0,0 +1,5 @@
package com.databasir.core.doc.config;
public class DocConfiguration {
}

View File

@@ -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);
}

View File

@@ -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());
}
}

View File

@@ -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);
}

View File

@@ -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;
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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;
}
}

View File

@@ -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();
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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();
}
}

View File

@@ -0,0 +1,4 @@
package com.databasir.core.doc.model;
public class ColumnDoc {
}

View File

@@ -0,0 +1,7 @@
package com.databasir.core.doc.model;
import lombok.Data;
@Data
public class DatabaseDoc {
}

View File

@@ -0,0 +1,4 @@
package com.databasir.core.doc.model;
public class IndexDoc {
}

View File

@@ -0,0 +1,4 @@
package com.databasir.core.doc.model;
public class TableDoc {
}

View File

@@ -0,0 +1,4 @@
package com.databasir.core.doc.model;
public class TriggerDoc {
}

View File

@@ -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" : "";
}
}

View File

@@ -0,0 +1,4 @@
package com.databasir.core.doc.render;
public class DefaultColumnValueConverter implements ColumnValueConverter {
}

View 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);
}

View File

@@ -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();
}

View File

@@ -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);
}
}

View File

@@ -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();
}
}

View File

@@ -0,0 +1,4 @@
package com.databasir.core.doc.render.markdown;
public class MarkdownRender {
}