/* * */ package xplayer.presenter; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.LinkedHashSet; import java.util.Set; import java.util.logging.Level; import application.Main; import application.tools.InfoTool; /** * The Class PlayedSongs. */ public class PlayedMediaList { /** The LinkedHashSet */ private Set<String> set = new LinkedHashSet<>(); /** * The name of the database table */ private final String dataBaseTableName = "PlayedMediaList"; //------------Prepared Statements--------------- private PreparedStatement insert; private PreparedStatement rename; /** * Prepares the DataBase table (if not exists) , i do this to keep backward * compatibility with previous XR3Player Versions ( Update 57<) Also it * creates the PreparedStatement to insert Files Paths into the Table */ private void prepareMediaListTable() { try { //Check if it does already exists if (!Main.dbManager.doesTableExist(dataBaseTableName)) Main.dbManager.getConnection().createStatement().executeUpdate("CREATE TABLE '" + dataBaseTableName + "'(PATH TEXT PRIMARY KEY NOT NULL ,TIMESPLAYED INT NOT NULL,DATE TEXT NOT NULL , HOUR TEXT NOT NULL)"); //Create the PreparedStatements String string = "UPDATE '" + dataBaseTableName + "'"; insert = Main.dbManager.getConnection() .prepareStatement("INSERT OR IGNORE INTO '" + dataBaseTableName + "' (PATH,TIMESPLAYED,DATE,HOUR) VALUES (?,?,?,?)"); rename = Main.dbManager.getConnection().prepareStatement(string + " SET PATH=? WHERE PATH=?"); } catch (SQLException ex) { ex.printStackTrace(); } } /** * Uploads the data from the database table to the list , i call this method * when i loggin into a user to upload the Media that he/she has * previously heard */ public void uploadFromDataBase() { //Check existance prepareMediaListTable(); //Now Upload try (ResultSet resultSet = Main.dbManager.getConnection().createStatement().executeQuery("SELECT* FROM '" + dataBaseTableName + "'")) { //Add all while (resultSet.next()) set.add(resultSet.getString("PATH")); } catch (SQLException ex) { ex.printStackTrace(); } } /** * Add a new item. * * @param item * the item * @return True if succeeded or False if not */ public boolean add(String item) { try { insert.setString(1, item); insert.setInt(2, 0); insert.setString(3, InfoTool.getCurrentDate()); insert.setString(4, InfoTool.getLocalTime()); insert.executeUpdate(); //Commit Main.dbManager.commit(); return set.add(item); } catch (SQLException ex) { ex.printStackTrace(); return false; } } /** * Check if a media has been already played. * * @param filePath * The absolute file path * @return true, if successful */ public boolean containsFile(String filePath) { return set.contains(filePath); } /** * Prints all the Songs that had been played. */ public void printPlayedSongs() { set.stream().forEach(System.out::println); } /** * Renames the media with this name if exists [ in list ]. * * @param oldName * the old name * @param newName * the new name * @return true, if successful */ public boolean renameMedia(String oldName , String newName) { if (set.remove(oldName)) { //Update in the database try { rename.setString(1, newName); rename.setString(2, oldName); rename.executeUpdate(); //Commit Main.dbManager.commit(); } catch (SQLException ex) { ex.printStackTrace(); return false; } //Add to the Set return set.add(newName); } return true; } /** * Clears all the Media from the List and Database * * @return True if succeeded or False if not */ public boolean clearAll() { try { //Clear the table Main.dbManager.getConnection().createStatement().executeUpdate("DELETE FROM '" + dataBaseTableName + "'"); Main.dbManager.commit(); //Clear from Set set.clear(); } catch (Exception ex) { Main.logger.log(Level.WARNING, "", ex); return false; } return true; } /** * Returns the Set. * * @return the sets the */ public Set<String> getSet() { return set; } }