use of dev.rosewood.rosegarden.database.SQLiteConnector in project RoseGarden by Rosewood-Development.
the class DataMigrationManager method reload.
@Override
public void reload() {
AbstractDataManager dataManager = this.rosePlugin.getManager(AbstractDataManager.class);
DatabaseConnector databaseConnector = dataManager.getDatabaseConnector();
databaseConnector.connect((connection -> {
int currentMigration = -1;
boolean migrationsExist;
String query;
if (databaseConnector instanceof SQLiteConnector) {
query = "SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?";
} else {
query = "SHOW TABLES LIKE ?";
}
try (PreparedStatement statement = connection.prepareStatement(query)) {
statement.setString(1, this.getMigrationsTableName());
migrationsExist = statement.executeQuery().next();
}
if (!migrationsExist) {
// No migration table exists, create one
String createTable = "CREATE TABLE " + this.getMigrationsTableName() + " (migration_version INT NOT NULL)";
try (PreparedStatement statement = connection.prepareStatement(createTable)) {
statement.execute();
}
// Insert primary row into migration table
String insertRow = "INSERT INTO " + this.getMigrationsTableName() + " VALUES (?)";
try (PreparedStatement statement = connection.prepareStatement(insertRow)) {
statement.setInt(1, -1);
statement.execute();
}
} else {
// Grab the current migration version
String selectVersion = "SELECT migration_version FROM " + this.getMigrationsTableName();
try (PreparedStatement statement = connection.prepareStatement(selectVersion)) {
ResultSet result = statement.executeQuery();
result.next();
currentMigration = result.getInt("migration_version");
}
}
// Grab required migrations
int finalCurrentMigration = currentMigration;
List<DataMigration> requiredMigrations = this.migrations.stream().filter(x -> x.getRevision() > finalCurrentMigration).sorted(Comparator.comparingInt(DataMigration::getRevision)).collect(Collectors.toList());
// Nothing to migrate, abort
if (requiredMigrations.isEmpty())
return;
// Migrate the data
for (DataMigration dataMigration : requiredMigrations) dataMigration.migrate(databaseConnector, connection, dataManager.getTablePrefix());
// Set the new current migration to be the highest migrated to
currentMigration = requiredMigrations.stream().mapToInt(DataMigration::getRevision).max().orElse(-1);
String updateVersion = "UPDATE " + this.getMigrationsTableName() + " SET migration_version = ?";
try (PreparedStatement statement = connection.prepareStatement(updateVersion)) {
statement.setInt(1, currentMigration);
statement.execute();
}
}));
}
use of dev.rosewood.rosegarden.database.SQLiteConnector in project RoseStacker by Rosewood-Development.
the class EpicSpawnersPluginConverter method convert.
@Override
public void convert() {
// Query their database ourselves
DatabaseConnector connector = new SQLiteConnector(this.epicSpawners);
connector.connect(connection -> {
Set<StackedSpawner> stackedSpawners = new HashSet<>();
String tablePrefix = this.epicSpawners.getDataManager().getTablePrefix();
try (Statement statement = connection.createStatement()) {
String query = "SELECT amount, world, x, y, z FROM " + tablePrefix + "placed_spawners ps JOIN " + tablePrefix + "spawner_stacks ss ON ps.id = ss.spawner_id";
ResultSet result = statement.executeQuery(query);
while (result.next()) {
World world = Bukkit.getWorld(result.getString("world"));
if (world == null)
continue;
int amount = result.getInt("amount");
double x = result.getDouble("x");
double y = result.getDouble("y");
double z = result.getDouble("z");
Location location = new Location(world, x, y, z);
stackedSpawners.add(new StackedSpawner(amount, location));
}
}
if (!stackedSpawners.isEmpty()) {
Bukkit.getScheduler().runTask(this.rosePlugin, () -> {
StackManager stackManager = this.rosePlugin.getManager(StackManager.class);
for (StackedSpawner stackedSpawner : stackedSpawners) stackManager.createSpawnerStack(stackedSpawner.getLocation().getBlock(), stackedSpawner.getStackSize(), false);
});
}
});
}
use of dev.rosewood.rosegarden.database.SQLiteConnector in project RoseStacker by Rosewood-Development.
the class DataManager method setConversionHandlers.
public void setConversionHandlers(Set<ConverterType> converterTypes) {
this.databaseConnector.connect(connection -> {
String insertIgnore;
if (this.databaseConnector instanceof SQLiteConnector) {
insertIgnore = "INSERT OR IGNORE INTO ";
} else {
insertIgnore = "INSERT IGNORE ";
}
String query = insertIgnore + this.getTablePrefix() + "convert_handler (name) VALUES (?)";
try (PreparedStatement statement = connection.prepareStatement(query)) {
for (ConverterType converterType : converterTypes) {
statement.setString(1, converterType.name());
statement.addBatch();
}
statement.executeBatch();
}
});
}
use of dev.rosewood.rosegarden.database.SQLiteConnector in project RoseStacker by Rosewood-Development.
the class WildStackerPluginConverter method convert.
@Override
public void convert() {
StackManager stackManager = this.rosePlugin.getManager(StackManager.class);
// Force save loaded data
SystemManager systemHandler = WildStackerAPI.getWildStacker().getSystemManager();
systemHandler.performCacheSave();
// Go through the database to be able to load all information
DatabaseConnector connector = new SQLiteConnector(this.wildStacker, "database");
connector.connect(connection -> {
// Load barrels (blocks)
Set<StackedBlock> stackedBlocks = new HashSet<>();
try (Statement statement = connection.createStatement()) {
ResultSet result = statement.executeQuery("SELECT location, stackAmount FROM barrels");
while (result.next()) {
Location location = this.parseLocation(result.getString("location"), ',');
if (location == null)
continue;
int amount = result.getInt("stackAmount");
Material type = systemHandler.getStackedSnapshot(location.getChunk()).getStackedBarrelItem(location).getValue().getType();
Block block = location.getBlock();
// Remove hologram thingy
StackedBarrel barrel = systemHandler.getStackedBarrel(block);
if (barrel != null)
barrel.removeDisplayBlock();
// Set the block type to the stack type since we just removed the hologram thingy
block.setType(type);
// Stacks of 1 aren't really stacks
if (amount == 1)
continue;
stackedBlocks.add(new StackedBlock(amount, block));
}
}
// Load spawners
Set<StackedSpawner> stackedSpawners = new HashSet<>();
try (Statement statement = connection.createStatement()) {
ResultSet result = statement.executeQuery("SELECT location, stackAmount FROM spawners");
while (result.next()) {
Location location = this.parseLocation(result.getString("location"), ',');
if (location == null)
continue;
Block block = location.getBlock();
BlockState blockState = block.getState();
if (!(blockState instanceof CreatureSpawner))
continue;
int amount = result.getInt("stackAmount");
stackedSpawners.add(new StackedSpawner(amount, location));
}
}
if (!stackedBlocks.isEmpty() || !stackedSpawners.isEmpty()) {
Bukkit.getScheduler().runTask(this.rosePlugin, () -> {
for (StackedBlock stackedBlock : stackedBlocks) stackManager.createBlockStack(stackedBlock.getLocation().getBlock(), stackedBlock.getStackSize());
for (StackedSpawner stackedSpawner : stackedSpawners) stackManager.createSpawnerStack(stackedSpawner.getLocation().getBlock(), stackedSpawner.getStackSize(), false);
});
}
});
}
use of dev.rosewood.rosegarden.database.SQLiteConnector in project RoseGarden by Rosewood-Development.
the class AbstractDataManager method reload.
@Override
public final void reload() {
try {
AbstractConfigurationManager configurationManager = this.rosePlugin.getManager(AbstractConfigurationManager.class);
Map<String, RoseSetting> roseSettings = configurationManager.getSettings();
if (roseSettings.get("mysql-settings.enabled").getBoolean()) {
String hostname = roseSettings.get("mysql-settings.hostname").getString();
int port = roseSettings.get("mysql-settings.port").getInt();
String database = roseSettings.get("mysql-settings.database-name").getString();
String username = roseSettings.get("mysql-settings.user-name").getString();
String password = roseSettings.get("mysql-settings.user-password").getString();
boolean useSSL = roseSettings.get("mysql-settings.use-ssl").getBoolean();
int poolSize = roseSettings.get("mysql-settings.connection-pool-size").getInt();
this.databaseConnector = new MySQLConnector(this.rosePlugin, hostname, port, database, username, password, useSSL, poolSize);
this.rosePlugin.getLogger().info("Data handler connected using MySQL.");
} else {
this.databaseConnector = new SQLiteConnector(this.rosePlugin);
this.databaseConnector.cleanup();
this.rosePlugin.getLogger().info("Data handler connected using SQLite.");
}
} catch (Exception ex) {
this.rosePlugin.getLogger().severe("Fatal error trying to connect to database. Please make sure all your connection settings are correct and try again. Plugin has been disabled.");
ex.printStackTrace();
Bukkit.getPluginManager().disablePlugin(this.rosePlugin);
}
}
Aggregations