Added support for game and onlyAvailable when retireving data

From now on, it is possible for the API to retrieve only object which
are assigned to a specific game or only objects that are available or both.
This might (pretty sure it is) needed in the future
This commit is contained in:
Alexander Doerflinger
2017-08-09 16:18:33 +02:00
parent 05076a01f1
commit 8e5791d35e
2 changed files with 288 additions and 190 deletions

View File

@@ -7,8 +7,8 @@ android {
applicationId "com.de.aldo_apps.aldo.mariokartcircuitselector"
minSdkVersion 16
targetSdkVersion 25
versionCode 6
versionName "0.1.6"
versionCode 7
versionName "0.1.7"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {

View File

@@ -5,6 +5,7 @@ import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteDatabase;
import android.support.annotation.Nullable;
import android.util.Log;
import com.de.aldo_apps.aldo.mariokartcircuitselector.database_models.Accessory;
@@ -18,36 +19,6 @@ import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;
import java.util.ArrayList;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.KEY_100_CCM;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.KEY_150_CCM;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.KEY_200_CCM;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.KEY_50_CCM;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.KEY_ACCESSORY;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.KEY_AVAILABLE;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.KEY_BIKES;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.KEY_COVER_URI;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.KEY_FREE_FOR_ALL;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.KEY_GAME;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.KEY_ID;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.KEY_KART_FREE_FOR_ALL;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.KEY_MIRROR_CLASS;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.KEY_NAME;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.KEY_NUMBER;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.KEY_PACKAGE;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.KEY_WEIGHT;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.KEY_WHEELS;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.PROJECTION_CHARACTER;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.PROJECTION_GAME;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.PROJECTION_KART;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.PROJECTION_RULESET;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.PROJECTION_TRACK;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.TABLE_CHARACTER;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.TABLE_GAME;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.TABLE_KART;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.TABLE_RULESET;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.TABLE_TRACK;
import static com.de.aldo_apps.aldo.mariokartcircuitselector.Constants.TABLE_WHEELS;
/**
* The Database Handler class which opens/closes connection and handles all CRUD Operations
* on the Database.
@@ -63,8 +34,16 @@ public class DatabaseHandler extends SQLiteAssetHelper {
*/
private static final String TAG = "DatabaseHandler";
/**
* The context from which this Handler was called.
*/
private final Context mContext;
/**
* The default constructor of the DatabaseHandler.
*
* @param context The context from which this Handler was called.
*/
public DatabaseHandler(final Context context) {
super(context, Constants.DATABASE_NAME, null, Constants.DATABASE_VERSION);
mContext = context;
@@ -80,23 +59,25 @@ public class DatabaseHandler extends SQLiteAssetHelper {
*
* @param track The track which should be marked as available/unavailable.
* @param isAvailable The status of availability to be set.
*
* @return The result code of the update function.
*/
public int changeTrackAvailability(final Track track, final boolean isAvailable) {
public int changeTrackAvailability(final Track track,
final boolean isAvailable) {
final SQLiteDatabase db = this.getWritableDatabase();
final ContentValues values = new ContentValues();
values.put(Constants.KEY_GAME, track.getGame());
values.put(KEY_NAME, track.getName());
values.put(Constants.KEY_NAME, track.getName());
values.put(Constants.KEY_PACKAGE, track.getPackage());
values.put(Constants.KEY_NUMBER, track.getmNumber());
if (isAvailable) {
values.put(KEY_AVAILABLE, Constants.TRUE);
values.put(Constants.KEY_AVAILABLE, String.valueOf(Constants.TRUE));
} else {
values.put(KEY_AVAILABLE, Constants.FALSE);
values.put(Constants.KEY_AVAILABLE, Constants.FALSE);
}
return db.update(Constants.TABLE_TRACK, values, KEY_ID + " = ?",
return db.update(Constants.TABLE_TRACK, values, Constants.KEY_ID + " = ?",
new String[]{String.valueOf(track.getId())});
}
@@ -105,22 +86,24 @@ public class DatabaseHandler extends SQLiteAssetHelper {
*
* @param character The character which should be marked as available/unavailable.
* @param isAvailable The status of availability to be set.
*
* @return The result code of the update function.
*/
public int changeCharacterAvailability(final Character character, final boolean isAvailable) {
public int changeCharacterAvailability(final Character character,
final boolean isAvailable) {
final SQLiteDatabase db = this.getWritableDatabase();
final ContentValues values = new ContentValues();
values.put(Constants.KEY_GAME, character.getGame());
values.put(KEY_NAME, character.getName());
values.put(Constants.KEY_NAME, character.getName());
values.put(Constants.KEY_WEIGHT, character.getWeight());
if (isAvailable) {
values.put(KEY_AVAILABLE, Constants.TRUE);
values.put(Constants.KEY_AVAILABLE, String.valueOf(Constants.TRUE));
} else {
values.put(KEY_AVAILABLE, Constants.FALSE);
values.put(Constants.KEY_AVAILABLE, Constants.FALSE);
}
return db.update(Constants.TABLE_CHARACTER, values, KEY_ID + " = ?",
return db.update(Constants.TABLE_CHARACTER, values, Constants.KEY_ID + " = ?",
new String[]{String.valueOf(character.getId())});
}
@@ -129,26 +112,28 @@ public class DatabaseHandler extends SQLiteAssetHelper {
*
* @param kart The kart which should be marked as available/unavailable.
* @param isAvailable The status of availability to be set.
*
* @return The result code of the update function.
*/
public int changeKartAvailability(final Kart kart, final boolean isAvailable) {
public int changeKartAvailability(final Kart kart,
final boolean isAvailable) {
final SQLiteDatabase db = this.getWritableDatabase();
final ContentValues values = new ContentValues();
values.put(Constants.KEY_GAME, kart.getGame());
values.put(KEY_NAME, kart.getName());
values.put(Constants.KEY_NAME, kart.getName());
values.put(Constants.KEY_WEIGHT, kart.getWeight());
values.put(Constants.KEY_WHEELS, kart.getWheels());
values.put(Constants.KEY_ACCESSORY, kart.getAccessory());
values.put(Constants.KEY_DEDICATED_DRIVER, kart.getDedicatedDriver());
values.put(Constants.KEY_FREE_FOR_ALL, kart.getFreeForAll());
if (isAvailable) {
values.put(KEY_AVAILABLE, Constants.TRUE);
values.put(Constants.KEY_AVAILABLE, String.valueOf(Constants.TRUE));
} else {
values.put(KEY_AVAILABLE, Constants.FALSE);
values.put(Constants.KEY_AVAILABLE, Constants.FALSE);
}
return db.update(Constants.TABLE_KART, values, KEY_ID + " = ?",
return db.update(Constants.TABLE_KART, values, Constants.KEY_ID + " = ?",
new String[]{String.valueOf(kart.getId())});
}
@@ -157,21 +142,23 @@ public class DatabaseHandler extends SQLiteAssetHelper {
*
* @param accessory The accessory which should be marked as available/unavailable.
* @param isAvailable The status of availability to be set.
*
* @return The result code of the update function.
*/
public int changeAccessoryAvailability(final Accessory accessory, final boolean isAvailable) {
public int changeAccessoryAvailability(final Accessory accessory,
final boolean isAvailable) {
final SQLiteDatabase db = this.getWritableDatabase();
final ContentValues values = new ContentValues();
values.put(Constants.KEY_GAME, accessory.getGame());
values.put(KEY_NAME, accessory.getName());
values.put(Constants.KEY_NAME, accessory.getName());
if (isAvailable) {
values.put(KEY_AVAILABLE, Constants.TRUE);
values.put(Constants.KEY_AVAILABLE, String.valueOf(Constants.TRUE));
} else {
values.put(KEY_AVAILABLE, Constants.FALSE);
values.put(Constants.KEY_AVAILABLE, Constants.FALSE);
}
return db.update(Constants.TABLE_ACCESSORY, values, KEY_ID + " = ?",
return db.update(Constants.TABLE_ACCESSORY, values, Constants.KEY_ID + " = ?",
new String[]{String.valueOf(accessory.getId())});
}
@@ -180,21 +167,23 @@ public class DatabaseHandler extends SQLiteAssetHelper {
*
* @param wheels The wheels which should be marked as available/unavailable.
* @param isAvailable The status of availability to be set.
*
* @return The result code of the update function.
*/
public int changeWheelsAvailability(final Wheels wheels, final boolean isAvailable) {
public int changeWheelsAvailability(final Wheels wheels,
final boolean isAvailable) {
final SQLiteDatabase db = this.getWritableDatabase();
final ContentValues values = new ContentValues();
values.put(Constants.KEY_GAME, wheels.getGame());
values.put(KEY_NAME, wheels.getGame());
values.put(Constants.KEY_NAME, wheels.getGame());
if (isAvailable) {
values.put(KEY_AVAILABLE, Constants.TRUE);
values.put(Constants.KEY_AVAILABLE, String.valueOf(Constants.TRUE));
} else {
values.put(KEY_AVAILABLE, Constants.FALSE);
values.put(Constants.KEY_AVAILABLE, Constants.FALSE);
}
return db.update(TABLE_WHEELS, values, KEY_ID + " = ?",
return db.update(Constants.TABLE_WHEELS, values, Constants.KEY_ID + " = ?",
new String[]{String.valueOf(wheels.getId())});
}
@@ -203,15 +192,36 @@ public class DatabaseHandler extends SQLiteAssetHelper {
// -------------------------------------------------------------------------------------------
/**
* Retrieves all Tracks from Database.
* Retrieves all Tracks from Database. If a Game is provided, all tracks of this specific
* game will be retrieved.
*
* @param game The game of which all tracks should be retrieved.
* @param onlyAvailable If true, only available objects will be returned, otherwise all
*
* @return List containing all Track Objects retrieved from Database.
*/
public ArrayList<Track> getAllTracks() {
public ArrayList<Track> getAllTracks(@Nullable final Game game,
final boolean onlyAvailable) {
final SQLiteDatabase database = this.getReadableDatabase();
final Cursor cursor = database.query(TABLE_TRACK, PROJECTION_TRACK, null,
null, null, null, null, null);
final String selectionClause;
final String[] selectionArgs;
if (game != null && onlyAvailable) {
selectionClause = Constants.KEY_GAME + "=? AND " + Constants.KEY_AVAILABLE + "=?";
selectionArgs = new String[]{game.getName(), String.valueOf(Constants.TRUE)};
} else if (game != null) {
selectionClause = Constants.KEY_GAME + "=?";
selectionArgs = new String[]{game.getName()};
} else if (onlyAvailable) {
selectionClause = Constants.KEY_AVAILABLE + "=?";
selectionArgs = new String[]{String.valueOf(Constants.TRUE)};
} else {
selectionClause = null;
selectionArgs = null;
}
final Cursor cursor = database.query(Constants.TABLE_TRACK, Constants.PROJECTION_TRACK,
selectionClause, selectionArgs, null, null, null, null);
if (cursor != null) {
Log.d(TAG, "getAllTracks: Moving cursor to first.");
cursor.moveToFirst();
@@ -223,54 +233,54 @@ public class DatabaseHandler extends SQLiteAssetHelper {
final ArrayList<Track> allAvailableTrack = new ArrayList<>();
do {
final int idIdx = cursor.getColumnIndex(KEY_ID);
final int nameIdx = cursor.getColumnIndex(KEY_NAME);
final int gameIdx = cursor.getColumnIndex(KEY_GAME);
final int packageIdx = cursor.getColumnIndex(KEY_PACKAGE);
final int numberIdx = cursor.getColumnIndex(KEY_NUMBER);
final int availableIdx = cursor.getColumnIndex(KEY_AVAILABLE);
final int idIdx = cursor.getColumnIndex(Constants.KEY_ID);
final int nameIdx = cursor.getColumnIndex(Constants.KEY_NAME);
final int gameIdx = cursor.getColumnIndex(Constants.KEY_GAME);
final int packageIdx = cursor.getColumnIndex(Constants.KEY_PACKAGE);
final int numberIdx = cursor.getColumnIndex(Constants.KEY_NUMBER);
final int availableIdx = cursor.getColumnIndex(Constants.KEY_AVAILABLE);
final Track track = new Track();
boolean isValid = true;
if (idIdx >= 0) {
track.setId(cursor.getInt(idIdx));
} else {
Log.d(TAG, "getAllTracks: No such column [" + KEY_ID + "]");
Log.d(TAG, "getAllTracks: No such column [" + Constants.KEY_ID + "]");
isValid = false;
}
if (nameIdx >= 0) {
track.setName(cursor.getString(nameIdx));
} else {
Log.d(TAG, "getAllTracks: No such column [" + KEY_NAME + "]");
Log.d(TAG, "getAllTracks: No such column [" + Constants.KEY_NAME + "]");
isValid = false;
}
if (gameIdx >= 0) {
track.setGame(cursor.getString(gameIdx));
} else {
Log.d(TAG, "getAllTracks: No such column [" + KEY_GAME + "]");
Log.d(TAG, "getAllTracks: No such column [" + Constants.KEY_GAME + "]");
isValid = false;
}
if (packageIdx >= 0) {
track.setPackage(cursor.getString(packageIdx));
} else {
Log.d(TAG, "getAllTracks: No such column [" + KEY_PACKAGE + "]");
Log.d(TAG, "getAllTracks: No such column [" + Constants.KEY_PACKAGE + "]");
isValid = false;
}
if (numberIdx >= 0) {
track.setPackage(cursor.getString(numberIdx));
} else {
Log.d(TAG, "getAllTracks: No such column [" + KEY_NUMBER + "]");
Log.d(TAG, "getAllTracks: No such column [" + Constants.KEY_NUMBER + "]");
isValid = false;
}
if (availableIdx < 0) {
track.setAvailable(cursor.getInt(availableIdx));
} else {
Log.d(TAG, "getAllTracks: No such column [" + KEY_AVAILABLE + "]");
Log.d(TAG, "getAllTracks: No such column [" + Constants.KEY_AVAILABLE + "]");
isValid = false;
}
@@ -290,15 +300,36 @@ public class DatabaseHandler extends SQLiteAssetHelper {
}
/**
* Retrieves all Karts from Database.
* Retrieves all Karts from Database. If a Game is provided, all karts of this specific
* game will be retrieved.
*
* @param game The game of which all tracks should be retrieved.
* @param onlyAvailable If true, only available objects will be returned, otherwise all
*
* @return List containing all Kart Objects retrieved from Database.
*/
public ArrayList<Kart> getAllKarts() {
public ArrayList<Kart> getAllKarts(@Nullable final Game game,
final boolean onlyAvailable) {
final SQLiteDatabase database = this.getReadableDatabase();
final Cursor cursor = database.query(TABLE_KART, PROJECTION_KART, null,
null, null, null, null, null);
final String selectionClause;
final String[] selectionArgs;
if (game != null && onlyAvailable) {
selectionClause = Constants.KEY_GAME + "=? AND " + Constants.KEY_AVAILABLE + "=?";
selectionArgs = new String[]{game.getName(), String.valueOf(Constants.TRUE)};
} else if (game != null) {
selectionClause = Constants.KEY_GAME + "=?";
selectionArgs = new String[]{game.getName()};
} else if (onlyAvailable) {
selectionClause = Constants.KEY_AVAILABLE + "=?";
selectionArgs = new String[]{String.valueOf(Constants.TRUE)};
} else {
selectionClause = null;
selectionArgs = null;
}
final Cursor cursor = database.query(Constants.TABLE_KART, Constants.PROJECTION_KART,
selectionClause, selectionArgs, null, null, null, null);
if (cursor != null) {
Log.d(TAG, "getAllKarts: Moving cursor to first.");
cursor.moveToFirst();
@@ -310,70 +341,70 @@ public class DatabaseHandler extends SQLiteAssetHelper {
final ArrayList<Kart> allAvailableKarts = new ArrayList<>();
do {
final int idIdx = cursor.getColumnIndex(KEY_ID);
final int nameIdx = cursor.getColumnIndex(KEY_NAME);
final int gameIdx = cursor.getColumnIndex(KEY_GAME);
final int weightIdx = cursor.getColumnIndex(KEY_WEIGHT);
final int accessoryIdx = cursor.getColumnIndex(KEY_ACCESSORY);
final int wheelsIdx = cursor.getColumnIndex(KEY_WHEELS);
final int freeForAllIdx = cursor.getColumnIndex(KEY_FREE_FOR_ALL);
final int availableIdx = cursor.getColumnIndex(KEY_AVAILABLE);
final int idIdx = cursor.getColumnIndex(Constants.KEY_ID);
final int nameIdx = cursor.getColumnIndex(Constants.KEY_NAME);
final int gameIdx = cursor.getColumnIndex(Constants.KEY_GAME);
final int weightIdx = cursor.getColumnIndex(Constants.KEY_WEIGHT);
final int accessoryIdx = cursor.getColumnIndex(Constants.KEY_ACCESSORY);
final int wheelsIdx = cursor.getColumnIndex(Constants.KEY_WHEELS);
final int freeForAllIdx = cursor.getColumnIndex(Constants.KEY_FREE_FOR_ALL);
final int availableIdx = cursor.getColumnIndex(Constants.KEY_AVAILABLE);
final Kart kart = new Kart();
boolean isValid = true;
if (idIdx >= 0) {
kart.setId(cursor.getInt(idIdx));
} else {
Log.d(TAG, "getAllKarts: No such column [" + KEY_ID + "]");
Log.d(TAG, "getAllKarts: No such column [" + Constants.KEY_ID + "]");
isValid = false;
}
if (nameIdx >= 0) {
kart.setName(cursor.getString(nameIdx));
} else {
Log.d(TAG, "getAllKarts: No such column [" + KEY_NAME + "]");
Log.d(TAG, "getAllKarts: No such column [" + Constants.KEY_NAME + "]");
isValid = false;
}
if (gameIdx >= 0) {
kart.setGame(cursor.getString(gameIdx));
} else {
Log.d(TAG, "getAllKarts: No such column [" + KEY_GAME + "]");
Log.d(TAG, "getAllKarts: No such column [" + Constants.KEY_GAME + "]");
isValid = false;
}
if (weightIdx >= 0) {
kart.setWeight(cursor.getString(weightIdx));
} else {
Log.d(TAG, "getAllKarts: No such column [" + KEY_WEIGHT + "]");
Log.d(TAG, "getAllKarts: No such column [" + Constants.KEY_WEIGHT + "]");
isValid = false;
}
if (accessoryIdx >= 0) {
kart.setAccessory(cursor.getInt(accessoryIdx));
} else {
Log.d(TAG, "getAllKarts: No such column [" + KEY_ACCESSORY + "]");
Log.d(TAG, "getAllKarts: No such column [" + Constants.KEY_ACCESSORY + "]");
isValid = false;
}
if (wheelsIdx >= 0) {
kart.setWheels(cursor.getInt(wheelsIdx));
} else {
Log.d(TAG, "getAllKarts: No such column [" + KEY_WHEELS + "]");
Log.d(TAG, "getAllKarts: No such column [" + Constants.KEY_WHEELS + "]");
isValid = false;
}
if (freeForAllIdx >= 0) {
kart.setFreeForAll(cursor.getInt(freeForAllIdx));
} else {
Log.d(TAG, "getAllKarts: No such column [" + KEY_FREE_FOR_ALL + "]");
Log.d(TAG, "getAllKarts: No such column [" + Constants.KEY_FREE_FOR_ALL + "]");
isValid = false;
}
if (availableIdx < 0) {
kart.setAvailable(cursor.getInt(availableIdx));
} else {
Log.d(TAG, "getAllKarts: No such column [" + KEY_AVAILABLE + "]");
Log.d(TAG, "getAllKarts: No such column [" + Constants.KEY_AVAILABLE + "]");
isValid = false;
}
@@ -393,31 +424,46 @@ public class DatabaseHandler extends SQLiteAssetHelper {
}
/**
* Retrieves all Characters from Database.
* Retrieves all Characters from Database. If a Game is provided, all characters of this
* specific game will be retrieved.
*
* @param game The game of which all tracks should be retrieved.
* @param onlyAvailable If true, only available objects will be returned, otherwise all
*
* @return List containing all Character Objects retrieved from Database.
*/
public ArrayList<Character> getAllCharacters() {
public ArrayList<Character> getAllCharacters(@Nullable final Game game,
final boolean onlyAvailable) {
final SQLiteDatabase database = this.getReadableDatabase();
final Cursor cursor = database.query(TABLE_CHARACTER, PROJECTION_CHARACTER, null,
null, null, null, null, null);
if (cursor != null) {
Log.d(TAG, "getAllCharacters: Moving cursor to first.");
cursor.moveToFirst();
final String selectionClause;
final String[] selectionArgs;
if (game != null && onlyAvailable) {
selectionClause = Constants.KEY_GAME + "=? AND " + Constants.KEY_AVAILABLE + "=?";
selectionArgs = new String[]{game.getName(), String.valueOf(Constants.TRUE)};
} else if (game != null) {
selectionClause = Constants.KEY_GAME + "=?";
selectionArgs = new String[]{game.getName()};
} else if (onlyAvailable) {
selectionClause = Constants.KEY_AVAILABLE + "=?";
selectionArgs = new String[]{String.valueOf(Constants.TRUE)};
} else {
Log.d(TAG, "getAllCharacters: cursor is null");
return null;
selectionClause = null;
selectionArgs = null;
}
final Cursor cursor = database.query(Constants.TABLE_CHARACTER,
Constants.PROJECTION_CHARACTER, selectionClause, selectionArgs, null, null, null,
null);
final ArrayList<Character> allAvailableCharacters = new ArrayList<>();
do {
final int idIdx = cursor.getColumnIndex(KEY_ID);
final int nameIdx = cursor.getColumnIndex(KEY_NAME);
final int gameIdx = cursor.getColumnIndex(KEY_GAME);
final int weightIdx = cursor.getColumnIndex(KEY_WEIGHT);
final int availableIdx = cursor.getColumnIndex(KEY_AVAILABLE);
final int idIdx = cursor.getColumnIndex(Constants.KEY_ID);
final int nameIdx = cursor.getColumnIndex(Constants.KEY_NAME);
final int gameIdx = cursor.getColumnIndex(Constants.KEY_GAME);
final int weightIdx = cursor.getColumnIndex(Constants.KEY_WEIGHT);
final int availableIdx = cursor.getColumnIndex(Constants.KEY_AVAILABLE);
final Character character = new Character();
boolean isValid = true;
@@ -425,35 +471,35 @@ public class DatabaseHandler extends SQLiteAssetHelper {
if (idIdx >= 0) {
character.setId(cursor.getInt(idIdx));
} else {
Log.d(TAG, "getAllCharacters: No such column [" + KEY_ID + "]");
Log.d(TAG, "getAllCharacters: No such column [" + Constants.KEY_ID + "]");
isValid = false;
}
if (nameIdx >= 0) {
character.setName(cursor.getString(nameIdx));
} else {
Log.d(TAG, "getAllCharacters: No such column [" + KEY_NAME + "]");
Log.d(TAG, "getAllCharacters: No such column [" + Constants.KEY_NAME + "]");
isValid = false;
}
if (gameIdx >= 0) {
character.setGame(cursor.getString(gameIdx));
} else {
Log.d(TAG, "getAllCharacters: No such column [" + KEY_GAME + "]");
Log.d(TAG, "getAllCharacters: No such column [" + Constants.KEY_GAME + "]");
isValid = false;
}
if (weightIdx >= 0) {
character.setWeight(cursor.getString(weightIdx));
} else {
Log.d(TAG, "getAllCharacters: No such column [" + KEY_WEIGHT + "]");
Log.d(TAG, "getAllCharacters: No such column [" + Constants.KEY_WEIGHT + "]");
isValid = false;
}
if (availableIdx < 0) {
character.setAvailable(cursor.getInt(availableIdx));
} else {
Log.d(TAG, "getAllCharacters: No such column [" + KEY_AVAILABLE + "]");
Log.d(TAG, "getAllCharacters: No such column [" + Constants.KEY_AVAILABLE + "]");
isValid = false;
}
@@ -474,34 +520,48 @@ public class DatabaseHandler extends SQLiteAssetHelper {
}
/**
* Retrieves all Rulesets from Database.
* Retrieves all Rulesets from Database. If a Game is provided, the ruleset of this specific
* game will be retrieved.
*
* @param game The game of which all tracks should be retrieved.
* @param onlyAvailable If true, only available objects will be returned, otherwise all
*
* @return List containing all Ruleset Objects retrieved from Database.
*/
public ArrayList<Ruleset> getAllRulesets() {
public ArrayList<Ruleset> getAllRulesets(@Nullable final Game game,
final boolean onlyAvailable) {
final SQLiteDatabase database = this.getReadableDatabase();
final Cursor cursor = database.query(TABLE_RULESET, PROJECTION_RULESET, null,
null, null, null, null, null);
if (cursor != null) {
Log.d(TAG, "getAllRulesets: Moving cursor to first.");
cursor.moveToFirst();
final String selectionClause;
final String[] selectionArgs;
if (game != null && onlyAvailable) {
selectionClause = Constants.KEY_GAME + "=? AND " + Constants.KEY_AVAILABLE + "=?";
selectionArgs = new String[]{game.getName(), String.valueOf(Constants.TRUE)};
} else if (game != null) {
selectionClause = Constants.KEY_GAME + "=?";
selectionArgs = new String[]{game.getName()};
} else if (onlyAvailable) {
selectionClause = Constants.KEY_AVAILABLE + "=?";
selectionArgs = new String[]{String.valueOf(Constants.TRUE)};
} else {
Log.d(TAG, "getAllRulesets: cursor is null");
return null;
selectionClause = null;
selectionArgs = null;
}
final Cursor cursor = database.query(Constants.TABLE_RULESET, Constants.PROJECTION_RULESET,
selectionClause, selectionArgs, null, null, null, null);
final ArrayList<Ruleset> allAvailableRulesets = new ArrayList<>();
do {
final int idIdx = cursor.getColumnIndex(KEY_ID);
final int gameIdx = cursor.getColumnIndex(KEY_GAME);
final int mirrorIdx = cursor.getColumnIndex(KEY_MIRROR_CLASS);
final int ccm50Idx = cursor.getColumnIndex(KEY_50_CCM);
final int ccm100Idx = cursor.getColumnIndex(KEY_100_CCM);
final int ccm150Idx = cursor.getColumnIndex(KEY_150_CCM);
final int ccm200Idx = cursor.getColumnIndex(KEY_200_CCM);
final int freeForAllIdx = cursor.getColumnIndex(KEY_KART_FREE_FOR_ALL);
final int bikesIdx = cursor.getColumnIndex(KEY_BIKES);
final int idIdx = cursor.getColumnIndex(Constants.KEY_ID);
final int gameIdx = cursor.getColumnIndex(Constants.KEY_GAME);
final int mirrorIdx = cursor.getColumnIndex(Constants.KEY_MIRROR_CLASS);
final int ccm50Idx = cursor.getColumnIndex(Constants.KEY_50_CCM);
final int ccm100Idx = cursor.getColumnIndex(Constants.KEY_100_CCM);
final int ccm150Idx = cursor.getColumnIndex(Constants.KEY_150_CCM);
final int ccm200Idx = cursor.getColumnIndex(Constants.KEY_200_CCM);
final int freeForAllIdx = cursor.getColumnIndex(Constants.KEY_KART_FREE_FOR_ALL);
final int bikesIdx = cursor.getColumnIndex(Constants.KEY_BIKES);
final Ruleset ruleset = new Ruleset();
boolean isValid = true;
@@ -509,63 +569,64 @@ public class DatabaseHandler extends SQLiteAssetHelper {
if (idIdx >= 0) {
ruleset.setId(cursor.getInt(idIdx));
} else {
Log.d(TAG, "getAllRulesets: No such column [" + KEY_ID + "]");
Log.d(TAG, "getAllRulesets: No such column [" + Constants.KEY_ID + "]");
isValid = false;
}
if (gameIdx >= 0) {
ruleset.setGame(cursor.getString(gameIdx));
} else {
Log.d(TAG, "getAllRulesets: No such column [" + KEY_GAME + "]");
Log.d(TAG, "getAllRulesets: No such column [" + Constants.KEY_GAME + "]");
isValid = false;
}
if (mirrorIdx >= 0) {
ruleset.setGame(cursor.getString(gameIdx));
} else {
Log.d(TAG, "getAllRulesets: No such column [" + KEY_GAME + "]");
Log.d(TAG, "getAllRulesets: No such column [" + Constants.KEY_GAME + "]");
isValid = false;
}
if (ccm50Idx >= 0) {
ruleset.set50CcmAvailable(cursor.getInt(ccm50Idx));
} else {
Log.d(TAG, "getAllRulesets: No such column [" + KEY_50_CCM + "]");
Log.d(TAG, "getAllRulesets: No such column [" + Constants.KEY_50_CCM + "]");
isValid = false;
}
if (ccm100Idx >= 0) {
ruleset.set100CcmAvailable(cursor.getInt(ccm100Idx));
} else {
Log.d(TAG, "getAllRulesets: No such column [" + KEY_100_CCM + "]");
Log.d(TAG, "getAllRulesets: No such column [" + Constants.KEY_100_CCM + "]");
isValid = false;
}
if (ccm150Idx >= 0) {
ruleset.set150CcmAvailable(cursor.getInt(ccm150Idx));
} else {
Log.d(TAG, "getAllRulesets: No such column [" + KEY_150_CCM + "]");
Log.d(TAG, "getAllRulesets: No such column [" + Constants.KEY_150_CCM + "]");
isValid = false;
}
if (ccm200Idx >= 0) {
ruleset.set200CcmAvailable(cursor.getInt(ccm200Idx));
} else {
Log.d(TAG, "getAllRulesets: No such column [" + KEY_200_CCM + "]");
Log.d(TAG, "getAllRulesets: No such column [" + Constants.KEY_200_CCM + "]");
isValid = false;
}
if (freeForAllIdx >= 0) {
ruleset.setKartsFreeForAll(cursor.getInt(freeForAllIdx));
} else {
Log.d(TAG, "getAllRulesets: No such column [" + KEY_KART_FREE_FOR_ALL + "]");
Log.d(TAG, "getAllRulesets: No such column [" + Constants.KEY_KART_FREE_FOR_ALL
+ "]");
isValid = false;
}
if (bikesIdx >= 0) {
ruleset.setBikesAvailable(cursor.getInt(bikesIdx));
} else {
Log.d(TAG, "getAllRulesets: No such column [" + KEY_BIKES + "]");
Log.d(TAG, "getAllRulesets: No such column [" + Constants.KEY_BIKES + "]");
isValid = false;
}
@@ -586,58 +647,73 @@ public class DatabaseHandler extends SQLiteAssetHelper {
}
/**
* Retrieves all Accessories from Database.
* Retrieves all Accessories from Database. If a Game is provided, all accessories of this
* specific game will be retrieved.
*
* @param game The game of which all tracks should be retrieved.
* @param onlyAvailable If true, only available objects will be returned, otherwise all
*
* @return List containing all Accessory Objects retrieved from Database.
*/
public ArrayList<Accessory> getAllAccessories() {
public ArrayList<Accessory> getAllAccessories(@Nullable final Game game,
final boolean onlyAvailable) {
final SQLiteDatabase database = this.getReadableDatabase();
final Cursor cursor = database.query(TABLE_TRACK, PROJECTION_TRACK, null,
null, null, null, null, null);
if (cursor != null) {
Log.d(TAG, "getAllAccessories: Moving cursor to first.");
cursor.moveToFirst();
final String selectionClause;
final String[] selectionArgs;
if (game != null && onlyAvailable) {
selectionClause = Constants.KEY_GAME + "=? AND " + Constants.KEY_AVAILABLE + "=?";
selectionArgs = new String[]{game.getName(), String.valueOf(Constants.TRUE)};
} else if (game != null) {
selectionClause = Constants.KEY_GAME + "=?";
selectionArgs = new String[]{game.getName()};
} else if (onlyAvailable) {
selectionClause = Constants.KEY_AVAILABLE + "=?";
selectionArgs = new String[]{String.valueOf(Constants.TRUE)};
} else {
Log.d(TAG, "getAllAccessories: cursor is null");
return null;
selectionClause = null;
selectionArgs = null;
}
final Cursor cursor = database.query(Constants.TABLE_ACCESSORY,
Constants.PROJECTION_ACCESSORY, selectionClause, selectionArgs, null, null, null,
null);
final ArrayList<Accessory> allAvailableAccessories = new ArrayList<>();
do {
final int idIdx = cursor.getColumnIndex(KEY_ID);
final int nameIdx = cursor.getColumnIndex(KEY_NAME);
final int gameIdx = cursor.getColumnIndex(KEY_GAME);
final int availableIdx = cursor.getColumnIndex(KEY_AVAILABLE);
final int idIdx = cursor.getColumnIndex(Constants.KEY_ID);
final int nameIdx = cursor.getColumnIndex(Constants.KEY_NAME);
final int gameIdx = cursor.getColumnIndex(Constants.KEY_GAME);
final int availableIdx = cursor.getColumnIndex(Constants.KEY_AVAILABLE);
final Accessory accessory = new Accessory();
boolean isValid = true;
if (idIdx >= 0) {
accessory.setId(cursor.getInt(idIdx));
} else {
Log.d(TAG, "getAllAccessories: No such column [" + KEY_ID + "]");
Log.d(TAG, "getAllAccessories: No such column [" + Constants.KEY_ID + "]");
isValid = false;
}
if (nameIdx >= 0) {
accessory.setName(cursor.getString(nameIdx));
} else {
Log.d(TAG, "getAllAccessories: No such column [" + KEY_NAME + "]");
Log.d(TAG, "getAllAccessories: No such column [" + Constants.KEY_NAME + "]");
isValid = false;
}
if (gameIdx >= 0) {
accessory.setGame(cursor.getString(gameIdx));
} else {
Log.d(TAG, "getAllAccessories: No such column [" + KEY_GAME + "]");
Log.d(TAG, "getAllAccessories: No such column [" + Constants.KEY_GAME + "]");
isValid = false;
}
if (availableIdx < 0) {
accessory.setAvailable(cursor.getInt(availableIdx));
} else {
Log.d(TAG, "getAllAccessories: No such column [" + KEY_AVAILABLE + "]");
Log.d(TAG, "getAllAccessories: No such column [" + Constants.KEY_AVAILABLE + "]");
isValid = false;
}
@@ -658,15 +734,36 @@ public class DatabaseHandler extends SQLiteAssetHelper {
}
/**
* Retrieves all Wheels from Database.
* Retrieves all Wheels from Database. If a Game is provided, all wheels of this specific
* game will be retrieved.
*
* @param game The game of which all tracks should be retrieved.
* @param onlyAvailable If true, only available objects will be returned, otherwise all
*
* @return List containing all Wheels Objects retrieved from Database.
*/
public ArrayList<Wheels> getAllWheels() {
public ArrayList<Wheels> getAllWheels(@Nullable final Game game,
final boolean onlyAvailable) {
final SQLiteDatabase database = this.getReadableDatabase();
final Cursor cursor = database.query(TABLE_TRACK, PROJECTION_TRACK, null,
null, null, null, null, null);
final String selectionClause;
final String[] selectionArgs;
if (game != null && onlyAvailable) {
selectionClause = Constants.KEY_GAME + "=? AND " + Constants.KEY_AVAILABLE + "=?";
selectionArgs = new String[]{game.getName(), String.valueOf(Constants.TRUE)};
} else if (game != null) {
selectionClause = Constants.KEY_GAME + "=?";
selectionArgs = new String[]{game.getName()};
} else if (onlyAvailable) {
selectionClause = Constants.KEY_AVAILABLE + "=?";
selectionArgs = new String[]{String.valueOf(Constants.TRUE)};
} else {
selectionClause = null;
selectionArgs = null;
}
final Cursor cursor = database.query(Constants.TABLE_WHEELS, Constants.PROJECTION_WHEELS,
selectionClause, selectionArgs, null, null, null, null);
if (cursor != null) {
Log.d(TAG, "getAllWheels: Moving cursor to first.");
cursor.moveToFirst();
@@ -678,38 +775,38 @@ public class DatabaseHandler extends SQLiteAssetHelper {
final ArrayList<Wheels> allAvailableWheels = new ArrayList<>();
do {
final int idIdx = cursor.getColumnIndex(KEY_ID);
final int nameIdx = cursor.getColumnIndex(KEY_NAME);
final int gameIdx = cursor.getColumnIndex(KEY_GAME);
final int availableIdx = cursor.getColumnIndex(KEY_AVAILABLE);
final int idIdx = cursor.getColumnIndex(Constants.KEY_ID);
final int nameIdx = cursor.getColumnIndex(Constants.KEY_NAME);
final int gameIdx = cursor.getColumnIndex(Constants.KEY_GAME);
final int availableIdx = cursor.getColumnIndex(Constants.KEY_AVAILABLE);
final Wheels wheels = new Wheels();
boolean isValid = true;
if (idIdx >= 0) {
wheels.setId(cursor.getInt(idIdx));
} else {
Log.d(TAG, "getAllWheels: No such column [" + KEY_ID + "]");
Log.d(TAG, "getAllWheels: No such column [" + Constants.KEY_ID + "]");
isValid = false;
}
if (nameIdx >= 0) {
wheels.setName(cursor.getString(nameIdx));
} else {
Log.d(TAG, "getAllWheels: No such column [" + KEY_NAME + "]");
Log.d(TAG, "getAllWheels: No such column [" + Constants.KEY_NAME + "]");
isValid = false;
}
if (gameIdx >= 0) {
wheels.setGame(cursor.getString(gameIdx));
} else {
Log.d(TAG, "getAllWheels: No such column [" + KEY_GAME + "]");
Log.d(TAG, "getAllWheels: No such column [" + Constants.KEY_GAME + "]");
isValid = false;
}
if (availableIdx < 0) {
wheels.setAvailable(cursor.getInt(availableIdx));
} else {
Log.d(TAG, "getAllWheels: No such column [" + KEY_AVAILABLE + "]");
Log.d(TAG, "getAllWheels: No such column [" + Constants.KEY_AVAILABLE + "]");
isValid = false;
}
@@ -736,7 +833,7 @@ public class DatabaseHandler extends SQLiteAssetHelper {
public ArrayList<Game> getAllGames() {
final SQLiteDatabase database = this.getReadableDatabase();
final Cursor cursor = database.query(TABLE_GAME, PROJECTION_GAME, null,
final Cursor cursor = database.query(Constants.TABLE_GAME, Constants.PROJECTION_GAME, null,
null, null, null, null, null);
if (cursor != null) {
Log.d(TAG, "getAllGames: Moving cursor to first.");
@@ -749,30 +846,30 @@ public class DatabaseHandler extends SQLiteAssetHelper {
final ArrayList<Game> allAvailableGames = new ArrayList<>();
do {
final int idIdx = cursor.getColumnIndex(KEY_ID);
final int nameIdx = cursor.getColumnIndex(KEY_NAME);
final int coverUriIdx = cursor.getColumnIndex(KEY_COVER_URI);
final int idIdx = cursor.getColumnIndex(Constants.KEY_ID);
final int nameIdx = cursor.getColumnIndex(Constants.KEY_NAME);
final int coverUriIdx = cursor.getColumnIndex(Constants.KEY_COVER_URI);
final Game game = new Game();
boolean isValid = true;
if (idIdx >= 0) {
game.setId(cursor.getInt(idIdx));
} else {
Log.d(TAG, "getAllGames: No such column [" + KEY_ID + "]");
Log.d(TAG, "getAllGames: No such column [" + Constants.KEY_ID + "]");
isValid = false;
}
if (nameIdx >= 0) {
game.setName(cursor.getString(nameIdx));
} else {
Log.d(TAG, "getAllGames: No such column [" + KEY_NAME + "]");
Log.d(TAG, "getAllGames: No such column [" + Constants.KEY_NAME + "]");
isValid = false;
}
if (coverUriIdx >= 0) {
game.setCoverUri(cursor.getString(coverUriIdx));
} else {
Log.d(TAG, "getAllGames: No such column [" + KEY_COVER_URI + "]");
Log.d(TAG, "getAllGames: No such column [" + Constants.KEY_COVER_URI + "]");
isValid = false;
}
@@ -795,14 +892,15 @@ public class DatabaseHandler extends SQLiteAssetHelper {
// ------------------------------ T E S T F U N C T I O N S -------------------------------
// -------------------------------------------------------------------------------------------
// TODO: This is only an intermediate state and can be removed later on
public Track testDBConnection(final int id) {
Log.d(TAG, "testDBConnection: Opening Readable Database.");
final SQLiteDatabase database = this.getReadableDatabase();
Log.d(TAG, "testDBConnection: Query a single track for id = [" + id + "]");
final Cursor cursor = database.query(TABLE_TRACK, new String[]{KEY_ID,
KEY_NAME, KEY_GAME, KEY_AVAILABLE}, KEY_ID + "=?",
new String[]{String.valueOf(id)}, null, null, null, null);
final Cursor cursor = database.query(Constants.TABLE_TRACK, new String[]{Constants.KEY_ID,
Constants.KEY_NAME, Constants.KEY_GAME, Constants.KEY_AVAILABLE},
Constants.KEY_ID + "=?", new String[]{String.valueOf(id)}, null, null, null, null);
if (cursor != null) {
Log.d(TAG, "testDBConnection: Moving cursor to first.");
cursor.moveToFirst();
@@ -813,30 +911,30 @@ public class DatabaseHandler extends SQLiteAssetHelper {
DatabaseUtils.dumpCursor(cursor);
final int nameIdx = cursor.getColumnIndex(KEY_NAME);
final int gameIdx = cursor.getColumnIndex(KEY_GAME);
final int idIdx = cursor.getColumnIndex(KEY_ID);
final int availableIdx = cursor.getColumnIndex(KEY_AVAILABLE);
final int nameIdx = cursor.getColumnIndex(Constants.KEY_NAME);
final int gameIdx = cursor.getColumnIndex(Constants.KEY_GAME);
final int idIdx = cursor.getColumnIndex(Constants.KEY_ID);
final int availableIdx = cursor.getColumnIndex(Constants.KEY_AVAILABLE);
if (nameIdx < 0) {
Log.d(TAG, "testDBConnection: No such column [" + KEY_NAME + "]");
Log.d(TAG, "testDBConnection: No such column [" + Constants.KEY_NAME + "]");
}
if (gameIdx < 0) {
Log.d(TAG, "testDBConnection: No such column [" + KEY_GAME + "]");
Log.d(TAG, "testDBConnection: No such column [" + Constants.KEY_GAME + "]");
}
if (idIdx < 0) {
Log.d(TAG, "testDBConnection: No such column [" + KEY_ID + "]");
Log.d(TAG, "testDBConnection: No such column [" + Constants.KEY_ID + "]");
}
if (availableIdx < 0) {
Log.d(TAG, "testDBConnection: No such column [" + KEY_AVAILABLE + "]");
Log.d(TAG, "testDBConnection: No such column [" + Constants.KEY_AVAILABLE + "]");
}
if (availableIdx >= 0 && idIdx >= 0 && gameIdx >= 0 && nameIdx >= 0) {
final Track track = new Track();
track.setName(cursor.getString(cursor.getColumnIndex(KEY_NAME)));
track.setGame(cursor.getString(cursor.getColumnIndex(KEY_GAME)));
track.setId(Integer.parseInt(cursor.getString(cursor.getColumnIndex(KEY_ID))));
track.setAvailable(Integer.parseInt(cursor.getString(cursor.getColumnIndex(KEY_AVAILABLE))));
track.setName(cursor.getString(nameIdx));
track.setGame(cursor.getString(gameIdx));
track.setId(Integer.parseInt(cursor.getString(idIdx)));
track.setAvailable(Integer.parseInt(cursor.getString(availableIdx)));
database.close();
// return contact