package de.avalax.fitbuddy.port.adapter.persistence; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import de.avalax.fitbuddy.port.adapter.persistence.exception.DatabaseResourceNotFoundException; import static java.nio.charset.StandardCharsets.UTF_8; public class FitbuddySQLiteOpenHelper extends SQLiteOpenHelper { private Context context; private int resourceId; public FitbuddySQLiteOpenHelper(String name, int version, Context context, int resourceId) { super(context, name, null, version); this.context = context; this.resourceId = resourceId; } @Override public void onConfigure(SQLiteDatabase db) { super.onConfigure(db); db.setForeignKeyConstraintsEnabled(true); } @Override public void onCreate(SQLiteDatabase database) { InputStream inputStream = context.getResources().openRawResource(resourceId); try { insertFromStream(inputStream, database); } catch (IOException e) { throw new DatabaseResourceNotFoundException(e); } } @Override public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) { // No upgrade script at this time } protected void insertFromStream(InputStream inputStream, SQLiteDatabase database) throws IOException { InputStreamReader inputStreamReader = new InputStreamReader(inputStream, UTF_8); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); while (bufferedReader.ready()) { String insertStmt = bufferedReader.readLine(); database.execSQL(insertStmt); } bufferedReader.close(); } }