diff --git a/.gitignore b/.gitignore index 915cbc2..e381f10 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ # Project exclude paths /out/ /target/ -/T-DataBasesAPI.iml \ No newline at end of file +/T-DataBasesAPI.iml +/database.db +/.idea/ +/javadocs/ diff --git a/pom.xml b/pom.xml index 10bff2b..1912ab7 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pl.timsixth T-DataBasesAPI - 1.9.2 + 1.10.0 diff --git a/src/main/java/pl/timsixth/databasesapi/DatabasesApiPlugin.java b/src/main/java/pl/timsixth/databasesapi/DatabasesApiPlugin.java index 02e465d..ce6a8c2 100644 --- a/src/main/java/pl/timsixth/databasesapi/DatabasesApiPlugin.java +++ b/src/main/java/pl/timsixth/databasesapi/DatabasesApiPlugin.java @@ -1,6 +1,5 @@ package pl.timsixth.databasesapi; -import lombok.SneakyThrows; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.plugin.PluginDescriptionFile; @@ -9,14 +8,15 @@ import pl.timsixth.databasesapi.api.IDataBasesApi; import pl.timsixth.databasesapi.config.ConfigFileSpigot; import pl.timsixth.databasesapi.config.IConfigFile; +import pl.timsixth.databasesapi.database.DatabaseConnector; +import pl.timsixth.databasesapi.database.DatabaseFactory; import pl.timsixth.databasesapi.database.ISQLDataBase; -import pl.timsixth.databasesapi.database.ISQLite; import pl.timsixth.databasesapi.database.migration.DataBaseMigrations; import pl.timsixth.databasesapi.database.migration.Migrations; -import pl.timsixth.databasesapi.database.type.MySQL; -import pl.timsixth.databasesapi.database.type.SQLite; import java.io.File; +import java.io.IOException; +import java.sql.SQLException; public final class DatabasesApiPlugin extends JavaPlugin { ISQLDataBase currentSQLDataBase; @@ -32,7 +32,7 @@ public DatabasesApiPlugin(JavaPluginLoader loader, PluginDescriptionFile descrip super(loader, description, dataFolder, file); } - @SneakyThrows + @Override public void onEnable() { configFile = new ConfigFileSpigot(this); @@ -43,32 +43,17 @@ public void onEnable() { getConfig().options().copyDefaults(true); saveConfig(); - switch (configFile.getDataBaseType()) { - case MYSQL: - ISQLDataBase mysql = new MySQL(); - mysql.setDataBase(getConfig().getString("database")); - mysql.setHostname(getConfig().getString("hostname")); - mysql.setPassword(getConfig().getString("password")); - mysql.setPort(getConfig().getInt("port")); - mysql.setUsername(getConfig().getString("username")); - mysql.openConnection(); - currentSQLDataBase = mysql; - Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "Successful connected to MySQL"); - break; - case SQLITE: - ISQLite sqlite = new SQLite(this); - sqlite.setDataBase(getConfig().getString("database")); - File database = sqlite.createDataBase(sqlite.getDataBase() + ".db"); - sqlite.openConnection(database); - currentSQLDataBase = sqlite; - Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "Successful connected to SQLite"); - break; - default: - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "This database doesn't exists"); - } + try { + currentSQLDataBase = (ISQLDataBase) DatabaseFactory.createDatabase(configFile.getDataBaseType(), this); + DatabaseConnector.connect(currentSQLDataBase); - dataBaseMigrations.createMigrationsTable(); - dataBaseMigrations.checkMigrations(); + Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "Successful connected to " + configFile.getDataBaseType()); + + dataBaseMigrations.createMigrationsTable(); + dataBaseMigrations.checkMigrations(); + } catch (SQLException | IOException | ClassNotFoundException ex) { + Bukkit.getLogger().severe(ex.getMessage()); + } } @Override diff --git a/src/main/java/pl/timsixth/databasesapi/database/DatabaseConnector.java b/src/main/java/pl/timsixth/databasesapi/database/DatabaseConnector.java new file mode 100644 index 0000000..930769f --- /dev/null +++ b/src/main/java/pl/timsixth/databasesapi/database/DatabaseConnector.java @@ -0,0 +1,28 @@ +package pl.timsixth.databasesapi.database; + +import java.io.File; +import java.io.IOException; +import java.sql.SQLException; + +public final class DatabaseConnector { + + /** + * Connects to database + * + * @param dataBase database to connect + * @throws SQLException when can not connect to database + * @throws IOException when can not create file + * @throws ClassNotFoundException when can not find database driver + */ + public static void connect(IDataBase dataBase) throws SQLException, IOException, ClassNotFoundException { + if (dataBase instanceof ISQLite) { + ISQLite sqlLite = (ISQLite) dataBase; + + File database = sqlLite.createDataBase(dataBase.getDataBase() + ".db"); + sqlLite.openConnection(database); + return; + } + + dataBase.openConnection(); + } +} diff --git a/src/main/java/pl/timsixth/databasesapi/database/DatabaseFactory.java b/src/main/java/pl/timsixth/databasesapi/database/DatabaseFactory.java new file mode 100644 index 0000000..6d31d67 --- /dev/null +++ b/src/main/java/pl/timsixth/databasesapi/database/DatabaseFactory.java @@ -0,0 +1,36 @@ +package pl.timsixth.databasesapi.database; + +import org.bukkit.configuration.file.FileConfiguration; +import pl.timsixth.databasesapi.DatabasesApiPlugin; +import pl.timsixth.databasesapi.database.type.MySQL; +import pl.timsixth.databasesapi.database.type.SQLite; + +public final class DatabaseFactory { + + /** + * Creates database instance + * + * @param dataBaseType type from config.yml + * @param databasesApiPlugin database api plugin, to get config + * @return created database instance + */ + public static IDataBase createDatabase(DataBaseType dataBaseType, DatabasesApiPlugin databasesApiPlugin) { + FileConfiguration fileConfiguration = databasesApiPlugin.getConfig(); + + if (dataBaseType == DataBaseType.MYSQL) { + ISQLDataBase mysql = new MySQL(); + mysql.setDataBase(fileConfiguration.getString("database")); + mysql.setHostname(fileConfiguration.getString("hostname")); + mysql.setPassword(fileConfiguration.getString("password")); + mysql.setPort(fileConfiguration.getInt("port")); + mysql.setUsername(fileConfiguration.getString("username")); + + return mysql; + } + + ISQLite sqlite = new SQLite(databasesApiPlugin); + sqlite.setDataBase(fileConfiguration.getString("database")); + + return sqlite; + } +} diff --git a/src/main/java/pl/timsixth/databasesapi/database/structure/AbstractTable.java b/src/main/java/pl/timsixth/databasesapi/database/structure/AbstractTable.java index f18e23b..53f1141 100644 --- a/src/main/java/pl/timsixth/databasesapi/database/structure/AbstractTable.java +++ b/src/main/java/pl/timsixth/databasesapi/database/structure/AbstractTable.java @@ -61,6 +61,11 @@ public ITable createColumn(String columnName, IDataType dataType, boolean nullab return this; } + @Override + public ITable createColumn(String columnName, IDataType type) { + return createColumn(columnName, type, false); + } + @Override public boolean createTable(String name) { if (columns.size() < 2) { diff --git a/src/main/java/pl/timsixth/databasesapi/database/structure/ITable.java b/src/main/java/pl/timsixth/databasesapi/database/structure/ITable.java index b2e3ca6..daf653e 100644 --- a/src/main/java/pl/timsixth/databasesapi/database/structure/ITable.java +++ b/src/main/java/pl/timsixth/databasesapi/database/structure/ITable.java @@ -71,4 +71,13 @@ public interface ITable { * @return ITable */ ITable id(); + + /** + * Creates new column, nullable is set to false be default + * + * @param columnName column which will be set primaryKey + * @param type DataType which will be set to column @{@link IDataType} + * @return ITable + */ + ITable createColumn(String columnName, IDataType type); } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 5ac055c..5ac9cf6 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -3,6 +3,6 @@ username: 'root' password: '' database: 'servertestowy' port: 3306 -type: MYSQL +type: SQLITE #Avaiable types of databases MYSQL,SQLITE. #Please type this databases uppercase. \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 7913694..495ee36 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,4 +1,4 @@ name: T-DatabasesApi main: pl.timsixth.databasesapi.DatabasesApiPlugin -version: '1.9.2' +version: '1.10.0' author: timsixth \ No newline at end of file