package regexgolf2.services.persistence.database;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Arrays;
import java.util.List;
import com.google.java.contract.Requires;
public class DatabaseInitializer
{
private final Database _db;
@Requires("db != null")
public DatabaseInitializer(Database db)
{
_db = db;
}
/**
* Creates all the Tables that are needed for the Application to run
* properly. However, if a Table already exists, even if it does not have
* the correct columns, it is not replaced.
*/
public void createTablesIfNotExists() throws SQLException
{
String createChallengesTableSQL = "create table if not exists challenges ("
+ "id integer primary key autoincrement," + "regex text not null,"
+ "name text not null); ";
String createSolutionsTableSQL = "create table if not exists solutions ("
+ "id integer primary key autoincrement,"
+ "challenge integer not null references challenges(id) on delete cascade on update cascade,"
+ "regex text not null); ";
String createRequirementsTableSQL = "create table if not exists requirements ("
+ "id integer primary key autoincrement,"
+ "challenge integer not null references challenges(id) on delete cascade on update cascade,"
+ "expectedmatchresult boolean, " + "word text not null); ";
String createWordTableSQL = "create table if not exists words ("
+ "id integer primary key autoincrement," + "text text not null unique); ";
Statement stmt;
stmt = _db.getConnection().createStatement();
stmt.execute(createChallengesTableSQL);
stmt.execute(createSolutionsTableSQL);
stmt.execute(createRequirementsTableSQL);
stmt.execute(createWordTableSQL);
stmt.close();
}
/**
* Inserts some default Words into the Database which are used by the
* Challenge Generator.
*/
public void insertDefaultWords() throws SQLException
{
List<String> words = Arrays.asList("Haus", "Baum", "Auto", "Dach", "Gartenzaun",
"Kamikaze", "Fenster", "Test", "Waschmaschine", "Fahrrad", "Hallo Welt!",
"schwindelig", "Kollektiv Turmstrasse");
String sql = "INSERT OR IGNORE INTO words (text) VALUES (?); ";
PreparedStatement ps = _db.getConnection().prepareStatement(sql);
for (String word : words)
{
ps.setString(1, word);
ps.execute();
}
ps.close();
}
}