package arcade.database;
import arcade.games.Comment;
import arcade.games.GameData;
import arcade.games.Score;
import arcade.games.UserGameData;
import arcade.model.datapacket.UserSpecificData;
import java.util.ArrayList;
import java.util.List;
import util.Pixmap;
/**
* Creates overall database
* @author Natalia Carvalho
*/
public class Database {
private GameTable myGameTable;
private UserTable myUserTable;
private ScoreTable myScoreTable;
private CommentTable myCommentTable;
private S3Connections myS3Instance;
/**
* Database constructor
*/
public Database () {
myGameTable = new GameTable();
myUserTable = new UserTable();
myScoreTable = new ScoreTable();
myCommentTable = new CommentTable();
myS3Instance = new S3Connections();
}
/**
* Closes the database connection
*/
public void closeDatabaseConnection () {
myGameTable.closeConnection();
myUserTable.closeConnection();
myScoreTable.closeConnection();
myCommentTable.closeConnection();
}
/**
* Creates a user when given username, pw, firstname, lastname, and dataofbirth
* @param username is user
* @param pw is password
* @param firstname is first name
* @param lastname is last name
* @param dataOfBirth is DOB
*/
public boolean createUser (String username,
String pw,
String firstname,
String lastname,
String dataOfBirth) {
return myUserTable.createUser(username, pw, firstname, lastname, dataOfBirth);
}
/**
* Creates a user when given username, pw, firstname, lastname, and dataofbirth and avatar
* @param username is user
* @param pw is password
* @param firstname is first name
* @param lastname is last name
* @param dataOfBirth is DOB
* @param filepath is the filepath for the avatar
*/
public boolean createUser (String username, String pw, String firstname, String lastname,
String dataOfBirth, String filepath) {
insertAvatar(username, filepath);
return myUserTable.createUser(username, pw, firstname, lastname, dataOfBirth);
}
/**
* Creates a user when given username, pw, firstname, lastname, and dataofbirth and avatar
* @param data is a wrapper for user data
*/
public boolean createUser(UserSpecificData data) {
return createUser(data.getUsername(), data.getPassword(), data.getFirstName(),
data.getLastName(), data.getDOB(), data.getImageFilePath());
}
/**
* Creates a new game
* @param gameName is name of game
* @param author is author
* @param genre is genre
* @param price is price of game
* @param extendsGame string
* @param extendsMultiplayerGame string
* @param ageRating permissions
* @param singlePlayer game
* @param multiplayer game
* @param thumbnailPath location of thumbnail
* @param adscreenPath location of adscreen
* @param description of game
*/
public boolean createGame (String gameName,
String author,
String genre,
double price,
String extendsGame,
String extendsMultiplayerGame,
int ageRating,
boolean singlePlayer,
boolean multiplayer,
String thumbnailPath,
String adscreenPath,
String description) {
insertGameThumbnail(gameName, thumbnailPath);
insertAdScreenPath(gameName, adscreenPath);
return myGameTable.createGame(gameName, author, genre, price, extendsGame,
extendsMultiplayerGame, ageRating, singlePlayer, multiplayer,
thumbnailPath, adscreenPath, description);
}
/**
* Inserts avatar into S3 Instance
* @param username user
* @param filepath of new avatar image
*/
public void insertAvatar (String username, String filepath) {
myS3Instance.putAvatarIntoBucket(username, filepath);
}
/**
* Returns pixmap of avatar
* @param username user
*/
public Pixmap getAvatar (String username) {
return new Pixmap(myS3Instance.getAvatar(username));
}
/**
* Returns date of birth of a user
* @param username user
*/
public String retrieveDOB (String username) {
return myUserTable.retrieveDOB(username);
}
/**
* Returns list of games
*/
public List<String> retrieveListOfGames () {
return myGameTable.retrieveGameList();
}
/**
* Returns list of users
*/
public List<String> retrieveListOfUsers() {
return myUserTable.retrieveUsernames();
}
/**
* Returns true if username and password match up, false otherwise
* @param username is user
* @param password is password
*/
public boolean authenticateUsernameAndPassword (String username, String password) {
return myUserTable.authenticateUsernameAndPassword(username, password);
}
/**
* Deletes user
* @param username is user
*/
public void deleteUser (String username) {
//myUserGameDataTable.deleteUser(retrieveUserId(username));
myUserTable.deleteUser(username);
}
/**
* Deletes game
* @param gameName is game to be deleted
*/
public void deleteGame (String gameName) {
myGameTable.deleteGame(gameName);
}
/**
* Returns true if usernameExists, false otherwise
* @param username is user
*/
public boolean usernameExists (String username) {
return myUserTable.usernameExists(username);
}
/**
* Returns true if usernameExists, false otherwise
* @param username is user
* @param gameName is game name
* @param newHighScore is high score to be inserted
*/
public void addNewHighScore (String username, String gameName, int newHighScore) {
myScoreTable.addNewHighScore(retrieveUserId(username), retrieveGameId(gameName),
newHighScore);
}
/**
* Returns list of scores for a game
* @param gameName is game name
*/
public List<Score> getScoresForGame(String gameName) {
List<String> usernames = retrieveListOfUsers();
List<Score> myScores = new ArrayList<Score>();
for (String user : usernames) {
myScores.addAll(myScoreTable.getScoresForGame(retrieveGameId(gameName),
retrieveUserId(user), gameName, user));
}
return myScores;
}
/**
* Returns list of scores for a user
* @param username is user
*/
public List<Score> getScoresForUser(String username) {
List<String> games = retrieveListOfGames();
List<Score> myScores = new ArrayList<Score>();
for (String game : games) {
myScores.addAll(myScoreTable.getScoresForGame(retrieveGameId(game),
retrieveUserId(username), game, username));
}
return myScores;
}
/**
* Returns list of scores for a game and user
* @param gameName is game name
* @param username is user
*/
public List<Score> getScoresForGameAndUser(String username, String gameName) {
return myScoreTable.getScoresForGame(retrieveGameId(gameName),
retrieveUserId(username), gameName, username);
}
/**
* Stores user game data on S3 instance
* @param gameName is game name
* @param username is user
* @param usd is UserGameData
*/
public void storeUserGameData (String gameName,
String username,
UserGameData usd) {
myS3Instance.putUserGameDataIntoBucket(username, gameName, usd);
}
/**
* Gets UserGameData from S3 Instance
* @param gameName is game name
* @param username is user
*/
public UserGameData getUserGameData (String gameName, String username) {
return myS3Instance.getUserGameDataFromBucket(username, gameName);
}
/**
* Stores GameData from S3 Instance
* @param gameName is game name
* @param gd is gameData
*/
public void storeGameData (String gameName, GameData gd) {
myS3Instance.putGameDataIntoBucket(gameName, gd);
}
/**
* Gets GameData from S3 Instance
* @param gameName is game name
*/
public GameData getGameData (String gameName) {
return myS3Instance.getGameDataFromBucket(gameName);
}
/**
* Inserts comment for a user and game
* @param username is user
* @param gameName is game name
* @param comment is comment to be inserted
* @param rating is rating
*/
public void insertCommentAndRating (String username, String gameName,
String comment, double rating) {
myCommentTable.addNewCommentAndRating(retrieveGameId(gameName),
retrieveUserId(username), comment, rating);
}
/**
* Retrieves all comments for game
* @param gameName is game name
*/
public List<Comment> retrieveCommentsForGame (String gameName) {
List<Comment> myComments = new ArrayList<Comment>();
List<String> myUsers = myUserTable.retrieveUsernames();
for (String s : myUsers) {
myComments.addAll(myCommentTable.getAllCommentsAndRatingsForGame(
retrieveGameId(gameName), s, retrieveUserId(s)));
}
return myComments;
}
/**
* Prints gameTable
*/
public void printGameTable () {
myGameTable.printEntireTable();
}
/**
* Retrieves user table
*/
public void printUserTable () {
myUserTable.printEntireTable();
}
/**
* Retrieves score table
*/
public void printScoreTable () {
myScoreTable.printEntireTable();
}
/**
* Retrieves comment table
*/
public void printCommentTable () {
myCommentTable.printEntireTable();
}
/**
* Retrieves a gameID from game
* @param gameName for gameID
*/
private String retrieveGameId (String gameName) {
return myGameTable.retrieveGameId(gameName);
}
/**
* Retrieves a userID for user
* @param username is user
*/
private String retrieveUserId (String username) {
return myUserTable.retrieveUserId(username);
}
/**
* Retrieves genre for game
* @param gameName is game
*/
public String getGenre (String gameName) {
return myGameTable.getGenre(gameName);
}
/**
* Retrieves author for game
* @param gameName is game
*/
public String getAuthor (String gameName) {
return myGameTable.getAuthor(gameName);
}
/**
* Retrieves age permission for game
* @param gameName is game
*/
public int getAgePermission (String gameName) {
return myGameTable.getAgePermission(gameName);
}
/**
* Retrieves price of game
* @param gameName is game
*/
public double getPrice (String gameName) {
return myGameTable.getPrice(gameName);
}
/**
* Retrieves SingleplayerGameClassKeyword of game
* @param gameName is game
*/
public String getSingleplayerGameClassKeyword (String gameName) {
return myGameTable.getExtendsGame(gameName);
}
/**
* Retrieves MultiplayerGameClassKeyword of game
* @param gameName is game
*/
public String getMultiplayerGameClassKeyword (String gameName) {
return myGameTable.getExtendsGameMultiplayer(gameName);
}
/**
* Returns true if game is single player
* @param gameName is game
*/
public boolean getIsSinglePlayer (String gameName) {
return myGameTable.getIsSinglePlayer(gameName);
}
/**
* Returns true if game is multiplayer
* @param gameName is game
*/
public boolean getIsMultiplayer (String gameName) {
return myGameTable.getIsMultiplayer(gameName);
}
/**
* Retrieves gameDescription for game
* @param gameName is game
*/
public String getGameDescription (String gameName) {
return myGameTable.getDescription(gameName);
}
/**
* Inserts game thumbnail into Amazon S3 instance
* @param gameName is game
* @param filepath is where game is located
*/
public void insertGameThumbnail (String gameName, String filepath) {
myS3Instance.putGameThumbnailIntoBucket(gameName, filepath);
}
/**
* Inserts ad screen into Amazon S3 instance
* @param gameName is game
* @param filepath is where the adscreen is located
*/
public void insertAdScreenPath (String gameName, String filepath) {
myS3Instance.putAdScreenIntoBucket(gameName, filepath);
}
/**
* Returns path of saved location of game thumbnail
* @param gameName is game
*/
public String getGameThumbnail (String gameName) {
return myS3Instance.getThumbnail(gameName);
}
/**
* Returns path of saved location of adscreen
* @param gameName is game
*/
public String getGameAdScreen (String gameName) {
return myS3Instance.getThumbnail(gameName);
}
}