A one size fits all plugin for vanilla servers running Minecraft Beta 1.7.3
at master 2.5 kB view raw
1package dev.keii.goldenage.migration; 2 3import java.sql.ResultSet; 4import java.sql.SQLException; 5import java.sql.Statement; 6import java.util.ArrayList; 7import java.util.Collections; 8import java.util.List; 9 10import dev.keii.goldenage.GoldenAge; 11import dev.keii.goldenage.migration.migrations.V0001_CreateUsers; 12import dev.keii.goldenage.migration.migrations.V0002_CreateLogins; 13import dev.keii.goldenage.migration.migrations.V0003_CreateUserNames; 14import dev.keii.goldenage.migration.migrations.V0004_CreateWorlds; 15import dev.keii.goldenage.migration.migrations.V0005_CreateTransactions; 16import dev.keii.goldenage.utils.DatabaseUtility; 17 18public class Migrator { 19 public DatabaseUtility db; 20 private final List<Migration> migrations; 21 private GoldenAge plugin; 22 23 public Migrator(GoldenAge plugin) { 24 this.plugin = plugin; 25 this.db = plugin.getDatabaseUtility(); 26 migrations = new ArrayList<>(); 27 migrations.add(new V0001_CreateUsers(this)); 28 migrations.add(new V0002_CreateLogins(this)); 29 migrations.add(new V0003_CreateUserNames(this)); 30 migrations.add(new V0004_CreateWorlds(this)); 31 migrations.add(new V0005_CreateTransactions(this)); 32 } 33 34 public void setupMigrationsTable() throws SQLException { 35 Statement stmt = db.getConnection().createStatement(); 36 stmt.execute("CREATE TABLE IF NOT EXISTS migrations( id INTEGER PRIMARY KEY AUTOINCREMENT, migration TEXT NOT NULL, batch INTEGER NOT NULL )"); 37 db.getConnection().commit(); 38 stmt.close(); 39 } 40 41 public int getLatestBatch() throws SQLException { 42 Statement stmt = db.getConnection().createStatement(); 43 ResultSet rs = stmt.executeQuery("SELECT batch FROM migrations ORDER BY id DESC LIMIT 1"); 44 45 if (rs.next()) { 46 int latestBatch = rs.getInt(1); 47 rs.close(); 48 stmt.close(); 49 return latestBatch; 50 } 51 rs.close(); 52 stmt.close(); 53 return 0; 54 } 55 56 public void migrate() throws SQLException { 57 int newBatch = getLatestBatch() + 1; 58 59 for (Migration migration : migrations) { 60 migration.migrate(newBatch); 61 } 62 } 63 64 public void rollback() throws SQLException { 65 int latestBatch = getLatestBatch(); 66 67 Collections.reverse(migrations); 68 for (Migration migration : migrations) { 69 migration.rollback(latestBatch); 70 } 71 Collections.reverse(migrations); 72 } 73}