package br.com.ftt.bettaserver.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.LinkedList; import java.util.List; import br.com.ftt.bettaserver.database.util.DataBaseUtil; import br.com.ftt.bettaserver.form.Filme; import br.com.ftt.bettaserver.form.Playlist; public class FilmesDAO { public void atualizarDuracao( int filmeId, long duracao ) { Connection con = null ; PreparedStatement pstmt = null ; String sql = "UPDATE filmes SET duracao = ? where ID = ?"; try { con = DataBaseUtil.getConnection( ) ; con.setAutoCommit( false ) ; pstmt = con.prepareStatement( sql ) ; { pstmt.setLong( 1, duracao ) ; pstmt.setInt( 2, filmeId ); } pstmt.executeUpdate( ) ; con.commit( ) ; } catch( SQLException e ) { e.printStackTrace( ) ; try { if( con != null ) { con.rollback( ) ; } } catch( SQLException e1 ) { e1.printStackTrace( ) ; } } finally { DataBaseUtil.close( con, pstmt, null ) ; } } public List<Filme> pesquisaFilmes( String nome ) { List<Filme> filmes = null ; Connection con = null ; PreparedStatement pstmt = null ; ResultSet rs = null ; String sql = "SELECT ID , NOME FROM filmes where LOWER(NOME) LIKE ? ORDER BY NOME" ; try { con = DataBaseUtil.getConnection( ) ; pstmt = con.prepareStatement( sql ); { pstmt.setString( 1, "%" + nome.toLowerCase( ) + "%" ) ; } rs = pstmt.executeQuery( ) ; if( rs.next( ) ) { filmes = new LinkedList<Filme>( ) ; do { Filme filme = new Filme( ) ; filme.setId( rs.getInt( "id" ) ); filme.setNome( rs.getString( "nome" ) ) ; filmes.add( filme ); } while( rs.next( ) ) ; } } catch( SQLException e ) { e.printStackTrace( ) ; } finally { DataBaseUtil.close( con, pstmt, rs ) ; } return filmes; } public boolean excluirFilme( int filmeId ) { Connection con = null ; PreparedStatement pstmt = null ; String sql = "delete from filmes where id = ?" ; try { con = DataBaseUtil.getConnection( ) ; con.setAutoCommit( false ) ; pstmt = con.prepareStatement( sql ) ; { pstmt.setInt( 1, filmeId ) ; } pstmt.executeUpdate( ) ; excluirCategoriasFilmes(con, filmeId) ; excluirPlaylistsFilme(con, filmeId) ; excluirAvaliacaoUsuarios(con, filmeId) ; con.commit( ); } catch (SQLException e) { e.printStackTrace( ) ; try { if( con != null ) { con.rollback( ) ; } } catch( SQLException e1 ) { e1.printStackTrace( ) ; } } finally { DataBaseUtil.close( con, pstmt, null ); } return true ; } private void excluirCategoriasFilmes( Connection con, int filmeId ) throws SQLException { PreparedStatement pstmt = null ; String sql = "delete from categorias_filmes where id_filmes = ?" ; pstmt = con.prepareStatement(sql) ; { pstmt.setInt(1, filmeId) ; } pstmt.executeUpdate(); } private void excluirPlaylistsFilme( Connection con, int filmeId ) throws SQLException { PreparedStatement pstmt = null ; String sql = "delete from playlists_filmes where id_filme = ?" ; pstmt = con.prepareStatement(sql) ; { pstmt.setInt(1, filmeId) ; } pstmt.executeUpdate(); } private void excluirAvaliacaoUsuarios( Connection con, int filmeId ) throws SQLException { PreparedStatement pstmt = null ; String sql = "delete from avaliacao_usuario where id_filme = ?" ; pstmt = con.prepareStatement(sql) ; { pstmt.setInt(1, filmeId) ; } pstmt.executeUpdate(); } public List<Filme> carregaTodosFilmes( ) { List<Filme> filmes = null ; Connection con = null ; PreparedStatement pstmt = null ; ResultSet rs = null ; String sql = "SELECT ID , NOME FROM filmes ORDER BY NOME" ; try { con = DataBaseUtil.getConnection( ) ; pstmt = con.prepareStatement( sql ) ; rs = pstmt.executeQuery( ) ; if( rs.next( ) ) { filmes = new LinkedList<Filme>( ) ; do { Filme filme = new Filme( ) ; filme.setId( rs.getInt( "ID" ) ) ; filme.setNome( rs.getString( "NOME" ) ) ; filmes.add( filme ) ; } while( rs.next( ) ) ; } } catch (SQLException e) { e.printStackTrace( ) ; } finally { DataBaseUtil.close( con, pstmt, rs ) ; } return filmes; } public int incuirFilme( Filme filme ) { Connection con = null ; PreparedStatement pstmt = null; String sql = "INSERT INTO filmes (ID,NOME,URL_IMAGEM,DURACAO,DIRETORES,ATORES,SINOPSE,ANO) VALUES (?,?,?,?,?,?,?,?)" ; int filmeId = 0; try { con = DataBaseUtil.getConnection( ) ; con.setAutoCommit( false ) ; filmeId = DataBaseUtil.getNextId( "filmes", con ) ; pstmt = con.prepareStatement( sql ) ; { pstmt.setInt( 1, filmeId ) ; pstmt.setString( 2, filme.getNome( ) ) ; pstmt.setString( 3, filme.getUrlImagemFileName( ) ) ; pstmt.setString( 4, filme.getDuracao( ) ) ; pstmt.setString( 5, filme.getDiretores( ) ) ; pstmt.setString( 6, filme.getAtores( ) ) ; pstmt.setString( 7, filme.getSinopse( ) ) ; pstmt.setInt(8, filme.getAno( ) ) ; } pstmt.executeUpdate( ) ; inserirCategoriasDeFilme( filmeId, filme.getListaCategorias( ), con ) ; con.commit( ) ; } catch( SQLException e ) { try { if( con != null ) { con.rollback( ) ; } } catch ( SQLException e1 ) { e1.printStackTrace(); } e.printStackTrace( ) ; } finally { DataBaseUtil.close( con, pstmt, null ) ; } return filmeId ; } private void inserirCategoriasDeFilme( int filmeId, String[ ] categorias, Connection con ) throws SQLException { PreparedStatement pstmt = null ; String sql = "INSERT INTO categorias_filmes (id_categorias, id_filmes) VALUES (?,?)" ; try { for( String cat : categorias ) { pstmt = con.prepareStatement( sql ) ; { pstmt.setInt( 1, Integer.parseInt( cat ) ) ; pstmt.setInt( 2, filmeId ) ; } pstmt.executeUpdate( ) ; } } finally { DataBaseUtil.close( null, pstmt, null ); } } public boolean cadastrarPlaylistsDeFilmes( List<Playlist> playlists ) { Connection con = null; PreparedStatement pstmt = null; String sql = "INSERT INTO playlists_filmes (id_filme,id_idiomas_filmes,bitrate,playlist) VALUES (?,?,?,?)" ; try { con = DataBaseUtil.getConnection( ) ; con.setAutoCommit( false ) ; for( Playlist playlist : playlists ) { pstmt = con.prepareStatement( sql ) ; { pstmt.setInt( 1, playlist.getIdFilme( ) ) ; pstmt.setInt( 2, playlist.getIdIdiomaFilme( ) ) ; pstmt.setInt( 3, playlist.getBitrate( ) ) ; pstmt.setString( 4, playlist.getPlaylistName( ) ) ; } pstmt.executeUpdate( ) ; } con.commit( ) ; } catch( SQLException e ) { try { if( con != null ) { con.rollback( ) ; } } catch ( SQLException e1 ) { e1.printStackTrace(); } e.printStackTrace( ) ; return false; } finally { DataBaseUtil.close( con, pstmt, null ) ; } return true ; } }