Skip to content

Commit

Permalink
refactor(api): 重新设计API结构
Browse files Browse the repository at this point in the history
  • Loading branch information
CarmJos committed Dec 17, 2022
1 parent fa30bda commit 350b845
Show file tree
Hide file tree
Showing 8 changed files with 242 additions and 141 deletions.
45 changes: 43 additions & 2 deletions api/src/main/java/cc/carm/plugin/minesql/IMineSQL.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,22 @@
package cc.carm.plugin.minesql;

import cc.carm.lib.easysql.api.SQLManager;
import cc.carm.lib.easysql.api.SQLQuery;
import cc.carm.plugin.minesql.api.SQLRegistry;
import cc.carm.plugin.minesql.api.source.SQLSourceConfig;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import javax.sql.DataSource;
import java.io.File;
import java.util.Map;
import java.util.Properties;
import java.util.UUID;
import java.util.function.Consumer;
import java.util.logging.Logger;

interface IMineSQL {

@NotNull SQLRegistry getRegistry();

@NotNull File getPluginFolder();

default @NotNull File getSourceFolder() {
Expand All @@ -18,4 +25,38 @@ interface IMineSQL {

@NotNull Logger getLogger();

@NotNull SQLRegistry getRegistry();

/**
* 创建一个新的 SQLManager 实例
*
* @param name 实例名称
* @param configuration SQLManager 实例的配置
* @return {@link SQLManager} 实例
* @throws Exception 若创建失败则抛出异常
*/
@NotNull SQLManager create(@NotNull String name,
@NotNull SQLSourceConfig configuration) throws Exception;

/**
* 创建一个新的 SQLManager 实例
*
* @param name 实例名称
* @param properties SQLManager 实例的配置文件
* @return {@link SQLManager} 实例
* @throws Exception 若创建失败则抛出异常
*/
@NotNull SQLManager create(@NotNull String name,
@NotNull Properties properties) throws Exception;

@NotNull SQLManager create(@NotNull String name, @NotNull DataSource source) throws Exception;

/**
* 终止并关闭一个 SQLManager 实例。
*
* @param manager SQLManager实例
* @param activeQueries 终止前仍未被关闭的SQLQuery列表
*/
void shutdown(SQLManager manager, @Nullable Consumer<Map<UUID, SQLQuery>> activeQueries);

}
83 changes: 80 additions & 3 deletions api/src/main/java/cc/carm/plugin/minesql/MineSQL.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,18 @@
package cc.carm.plugin.minesql;

import cc.carm.lib.easysql.api.SQLManager;
import cc.carm.lib.easysql.api.SQLQuery;
import cc.carm.plugin.minesql.api.SQLRegistry;
import cc.carm.plugin.minesql.api.source.SQLSourceConfig;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import javax.sql.DataSource;
import java.io.File;
import java.util.Map;
import java.util.Properties;
import java.util.UUID;
import java.util.function.Consumer;
import java.util.logging.Logger;

public class MineSQL {
Expand All @@ -17,15 +27,82 @@ public static Logger getLogger() {
return instance.getLogger();
}

/**
* @return 数据库源文件所在目录,非插件数据目录。
*/
public static File getDataSourceFolder() {
return instance.getSourceFolder();
}

/**
* 得到管理器注册池
*
* @return {@link SQLRegistry} 注册池
*/
public static SQLRegistry getRegistry() {
return instance.getRegistry();
}

/**
* @return 数据库源文件所在目录,非插件数据目录。
* 创建一个新的 SQLManager 实例
*
* @param name 实例名称
* @param configuration SQLManager 实例的配置
* @return {@link SQLManager} 实例
* @throws Exception 若创建失败则抛出异常
*/
public static File getDataSourceFolder() {
return instance.getSourceFolder();
public static @NotNull SQLManager create(@NotNull String name,
@NotNull SQLSourceConfig configuration) throws Exception {
return instance.create(name, configuration);
}

/**
* 创建一个新的 SQLManager 实例
*
* @param name 实例名称
* @param properties SQLManager 实例的配置文件
* @return {@link SQLManager} 实例
* @throws Exception 若创建失败则抛出异常
*/
public static @NotNull SQLManager create(@NotNull String name,
@NotNull Properties properties) throws Exception {
return instance.create(name, properties);
}

public static @NotNull SQLManager create(@NotNull String name, @NotNull DataSource source) throws Exception {
return instance.create(name, source);
}

/**
* 终止并关闭一个 SQLManager 实例。
*
* @param manager SQLManager实例
* @param activeQueries 终止前仍未被关闭的SQLQuery列表
*/
public static void shutdown(SQLManager manager, @Nullable Consumer<Map<UUID, SQLQuery>> activeQueries) {
instance.shutdown(manager, activeQueries);
}

/**
* 终止并关闭一个 SQLManager 实例。
*
* @param manager SQLManager实例
* @param forceClose 是否强制关闭进行中的查询
*/
public static void shutdown(SQLManager manager, boolean forceClose) {
shutdown(manager, (unclosedQueries) -> {
if (forceClose) unclosedQueries.values().forEach(SQLQuery::close);
});
}

/**
* 终止并关闭一个 SQLManager 实例。
* <br>若在终止时仍有活跃的查询,则将会强制关闭。
*
* @param manager SQLManager实例
*/
public static void shutdown(SQLManager manager) {
shutdown(manager, true);
}

}
75 changes: 23 additions & 52 deletions api/src/main/java/cc/carm/plugin/minesql/api/SQLRegistry.java
Original file line number Diff line number Diff line change
@@ -1,32 +1,39 @@
package cc.carm.plugin.minesql.api;

import cc.carm.lib.easysql.api.SQLManager;
import cc.carm.lib.easysql.api.SQLQuery;
import cc.carm.plugin.minesql.api.source.SQLSourceConfig;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.Unmodifiable;

import javax.sql.DataSource;
import java.util.Map;
import java.util.Optional;
import java.util.Properties;
import java.util.UUID;
import java.util.function.Consumer;

/**
* 入口类
*/
public interface SQLRegistry {


/**
* 获取原生注册的指定名称的 SQLManager 实例
*
* @param name 要获取的 SQLManager 实例名称, 如果为 null 则获取首个实例
* @return {@link SQLManager} 实例
*/
default @Nullable SQLManager get(@Nullable String name) {
return getOptional(name).orElse(null);
}

/**
* 获取原生注册的指定名称的 SQLManager 实例,并要求其不得为空
*
* @param name 要获取的 SQLManager 实例名称, 如果为 null 则获取首个实例
* @return {@link SQLManager} 实例
* @throws NullPointerException 若不存在对应实例则抛出空指针异常
*/
@NotNull SQLManager get(@Nullable String name) throws NullPointerException;
default @NotNull SQLManager getNotNull(@Nullable String name) throws NullPointerException {
return getOptional(name).orElseThrow(() -> new NullPointerException("并不存在ID为 #" + name + " 的SQLManager."));
}

/**
* 获取原生注册的指定名称的 SQLManager 实例
Expand All @@ -45,57 +52,21 @@ public interface SQLRegistry {
@NotNull Map<String, ? extends SQLManager> list();

/**
* 创建并注册一个新的 SQLManager 实例
*
* @param name 实例名称
* @param configuration SQLManager 实例的配置
* @return {@link SQLManager} 实例
* @throws Exception 若创建失败则抛出异常
*/
@NotNull SQLManager create(@NotNull String name,
@NotNull SQLSourceConfig configuration) throws Exception;

/**
* 创建并注册一个新的 SQLManager 实例
* 注册一个新的 SQLManager 实例
*
* @param name 实例名称
* @param properties SQLManager 实例的配置文件
* @return {@link SQLManager} 实例
* @throws Exception 若创建失败则抛出异常
*/
@NotNull SQLManager create(@NotNull String name,
@NotNull Properties properties) throws Exception;

@NotNull SQLManager create(@NotNull String name, @NotNull DataSource source) throws Exception;

/**
* 终止并关闭一个 SQLManager 实例。
*
* @param manager SQLManager实例
* @param activeQueries 终止前仍未被关闭的SQLQuery列表
* @param sqlManager 实例
* @throws IllegalStateException 当所要注册的实例已经存在时抛出
*/
void shutdown(SQLManager manager, @Nullable Consumer<Map<UUID, SQLQuery>> activeQueries);
void register(@NotNull String name, @NotNull SQLManager sqlManager) throws IllegalStateException;

/**
* 终止并关闭一个 SQLManager 实例
* 从注册池中注销一个新的 SQLManager 实例
*
* @param manager SQLManager实例
* @param forceClose 是否强制关闭进行中的查询
* @param name 实例名称
* @return 所被注销的 {@link SQLManager}
* @throws NullPointerException 当所要注销的实例不存在时抛出
*/
default void shutdown(SQLManager manager, boolean forceClose) {
shutdown(manager, (unclosedQueries) -> {
if (forceClose) unclosedQueries.values().forEach(SQLQuery::close);
});
}

/**
* 终止并关闭一个 SQLManager 实例。
* <br>若在终止时仍有活跃的查询,则将会强制关闭。
*
* @param manager SQLManager实例
*/
default void shutdown(SQLManager manager) {
shutdown(manager, true);
}
@NotNull SQLManager unregister(@NotNull String name) throws NullPointerException;

}
Loading

0 comments on commit 350b845

Please sign in to comment.