package com.turtleplayer.persistance.turtle.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import com.turtleplayer.persistance.source.relational.FieldPersistable;
import com.turtleplayer.persistance.turtle.db.structure.Tables;
import java.util.Arrays;
/**
* TURTLE PLAYER
* <p/>
* Licensed under MIT & GPL
* <p/>
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
* OR OTHER DEALINGS IN THE SOFTWARE.
* <p/>
* More Information @ www.turtle-player.co.uk
*
* @author Simon Honegger (Hoene84)
*/
public abstract class TurtleDatabaseImpl extends SQLiteOpenHelper
{
public static final int DATABASE_VERSION = 11;
public static final String DATABASE_NAME = "TurtlePlayer";
public TurtleDatabaseImpl(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
String createTracksSql = "CREATE TABLE " + Tables.TRACKS.getName() + " ("
+ Tables.SongsReadable.TITLE.getName() + " TEXT COLLATE LOCALIZED, "
+ Tables.Tracks.NUMBER.getName() + " INTEGER, "
+ Tables.ArtistsReadable.ARTIST.getName() + " TEXT COLLATE LOCALIZED, "
+ Tables.AlbumsReadable.ALBUM.getName() + " TEXT COLLATE LOCALIZED, "
+ Tables.GenresReadable.GENRE.getName() + " TEXT, "
+ Tables.FsObjects.PATH.getName() + " TEXT, "
+ Tables.FsObjects.NAME.getName() + " TEXT, "
+ " PRIMARY KEY (" + Tables.Tracks.NAME.getName() + ", " + Tables.Tracks.PATH.getName() + "));";
db.execSQL(createTracksSql);
for(FieldPersistable<?,?> field : Arrays.asList(
Tables.ArtistsReadable.ARTIST,
Tables.AlbumsReadable.ALBUM,
Tables.Tracks.NUMBER,
Tables.SongsReadable.TITLE
))
{
String createTracksIndeces = "CREATE INDEX " + Tables.TRACKS.getName() + "_" + field.getName() + "_idx " +
" ON " + Tables.TRACKS.getName() + "(" + field.getName() + ");";
db.execSQL(createTracksIndeces);
}
String createAlbumArtSql = "CREATE TABLE " + Tables.ALBUM_ART_LOCATIONS.getName() + " ("
+ Tables.AlbumArtLocations.PATH.getName() + " TEXT PRIMARY KEY, "
+ Tables.AlbumArtLocations.ALBUM_ART_PATH.getName() + " TEXT);";
db.execSQL(createAlbumArtSql);
for(FieldPersistable<?,?> field : Arrays.asList(
Tables.AlbumArtLocations.PATH
))
{
String createAlbumArtIndeces = "CREATE INDEX " + Tables.ALBUM_ART_LOCATIONS.getName() + "_" + field.getName() + "_idx " +
" ON " + Tables.ALBUM_ART_LOCATIONS.getName() + "(" + field.getName() + ");";
db.execSQL(createAlbumArtIndeces);
}
String createDirsSql = "CREATE TABLE " + Tables.DIRS.getName() + " ("
+ Tables.Dirs.NAME.getName() + " TEXT COLLATE LOCALIZED, "
+ Tables.Dirs.PATH.getName() + " TEXT COLLATE LOCALIZED,"
+ " PRIMARY KEY (" + Tables.Dirs.NAME.getName() + ", " + Tables.Dirs.PATH.getName() + "));";
db.execSQL(createDirsSql);
for(FieldPersistable<?,?> field : Arrays.asList(
Tables.Dirs.PATH,
Tables.Dirs.NAME
))
{
String createAlbumArtIndeces = "CREATE INDEX " + Tables.DIRS.getName() + "_" + field.getName() + "_idx " +
" ON " + Tables.DIRS.getName() + "(" + field.getName() + ");";
db.execSQL(createAlbumArtIndeces);
}
}
@Override
public void onUpgrade(SQLiteDatabase db,
int oldVersion,
int newVersion)
{
db.execSQL("DROP TABLE IF EXISTS " + Tables.TRACKS.getName());
db.execSQL("DROP TABLE IF EXISTS " + Tables.ALBUM_ART_LOCATIONS.getName());
db.execSQL("DROP TABLE IF EXISTS " + Tables.DIRS.getName());
onCreate(db);
dbResetted();
}
public abstract void dbResetted();
}