package br.com.ftt.bettaserver.restful.dao;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
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.restful.database.util.DataBaseUtil;
import br.com.ftt.bettaserver.restful.database.util.StringConstants;
import br.com.ftt.bettaserver.restful.form.ChaveParametro;
import br.com.ftt.bettaserver.restful.form.Filmes;
import br.com.ftt.bettaserver.restful.form.Idioma;
import br.com.ftt.bettaserver.restful.form.Playlist;
public class FilmeDAO
{
public int buscaIdiomaPadrao( int idFilme )
{
int idiomaPadrao = 0 ;
Connection con = null ;
PreparedStatement pstmt = null;
ResultSet rs = null ;
String sql = "select id from idiomas_filmes where id = ( select MIN(id_idiomas_filmes) from bettaserver.playlists_filmes where id_filme = ? )" ;
try
{
con = DataBaseUtil.getConnection( ) ;
pstmt = con.prepareStatement( sql ) ;
{
pstmt.setInt( 1, idFilme ) ;
}
rs = pstmt.executeQuery( ) ;
if( rs.next( ) )
{
idiomaPadrao = rs.getInt( "id" ) ;
}
}
catch( SQLException e )
{
e.printStackTrace( );
}
finally
{
DataBaseUtil.close( con, pstmt, rs ) ;
}
return idiomaPadrao ;
}
private List<Idioma> listarIdiomasFilmes( Connection con, int idFilme ) throws SQLException
{
List<Idioma> idiomas = null ;
PreparedStatement pstmt = null ;
ResultSet rs = null ;
String sql = "select distinct idiomas_filmes.id, idiomas_filmes.codigo, idiomas_filmes.nome from idiomas_filmes inner join playlists_filmes on playlists_filmes.id_idiomas_filmes = idiomas_filmes.id where playlists_filmes.id_filme = ? order by idiomas_filmes.id";
ParametrosDAO dao = new ParametrosDAO( ) ;
String urlServidor = dao.buscaValorDeParametro( ChaveParametro.MOBILE_REQUEST ) ;
pstmt = con.prepareStatement( sql ) ;
{
pstmt.setInt( 1, idFilme ) ;
}
rs = pstmt.executeQuery( ) ;
if( rs.next( ) )
{
idiomas = new LinkedList<Idioma>( ) ;
do
{
Idioma idioma = new Idioma( ) ;
idioma.setId( rs.getInt( "id" ) ) ;
idioma.setCodigo( rs.getString( "codigo" ) ) ;
idioma.setNome( rs.getString( "nome" ) ) ;
String urlIdioma = urlServidor + "/procuraPlaylist?idFilme=" + idFilme + "&idIdioma=" + rs.getInt( "id" ) ;
idioma.setUrlIdioma( StringConstants.encode(urlIdioma) );
idiomas.add( idioma ) ;
}
while( rs.next( ) ) ;
}
DataBaseUtil.close( null, pstmt, rs ) ;
return idiomas;
}
public List<Playlist> buscarFilmePlaylist( int idFilme, int idIdioma )
{
List<Playlist> playlists = null ;
ParametrosDAO dao = new ParametrosDAO( ) ;
String urlStreaming = dao.buscaValorDeParametro( ChaveParametro.STREAMING_PATH ) ;
Connection con = null ;
PreparedStatement pstmt = null;
ResultSet rs = null ;
String sql = "select bitrate, playlist from playlists_filmes where id_filme = ? and id_idiomas_filmes = ? order by bitrate" ;
try
{
con = DataBaseUtil.getConnection( ) ;
pstmt = con.prepareStatement( sql ) ;
{
pstmt.setInt( 1, idFilme ) ;
pstmt.setInt( 2, idIdioma ) ;
}
rs = pstmt.executeQuery( ) ;
if( rs.next( ) )
{
playlists = new LinkedList<Playlist>( ) ;
do
{
Playlist playlist = new Playlist( ) ;
playlist.setBitrate( rs.getString( "bitrate" ) ) ;
playlist.setPlaylistPath( rs.getString( "playlist" ) ) ;
playlist.setServerPath( urlStreaming ) ;
playlists.add( playlist ) ;
}
while( rs.next( ) ) ;
}
}
catch( SQLException e )
{
e.printStackTrace( ) ;
}
finally
{
DataBaseUtil.close( con, pstmt, rs ) ;
}
return playlists ;
}
public List<Filmes> buscarFilme( String nome )
{
List<Filmes> filmes = null ;
Connection con = null ;
PreparedStatement pstmt = null ;
ResultSet rs = null ;
ParametrosDAO dao = new ParametrosDAO( ) ;
String urlServidor = dao.buscaValorDeParametro( ChaveParametro.MOBILE_REQUEST ) ;
String urlStreaming = dao.buscaValorDeParametro( ChaveParametro.STREAMING_PATH ) ;
StringBuffer sql = new StringBuffer();
sql.append("SELECT id, ");
sql.append(" nome, ");
sql.append(" url_imagem, ");
sql.append(" duracao, ");
sql.append(" diretores, ");
sql.append(" atores, ");
sql.append(" sinopse, ");
sql.append(" avaliacao, ");
sql.append(" ano ");
sql.append("FROM filmes ");
sql.append("WHERE LOWER(nome) like ? ");
try
{
con = DataBaseUtil.getConnection( );
pstmt = con.prepareStatement( sql.toString( ) ) ;
{
pstmt.setString( 1, "%" + nome.toLowerCase( ) + "%" ) ;
}
rs = pstmt.executeQuery( ) ;
if( rs.next( ) )
{
filmes = new LinkedList<Filmes>( ) ;
do
{
Filmes filme = new Filmes( ) ;
filme.setId( rs.getInt( "id" ) ) ;
filme.setNome( rs.getString( "nome" ) ) ;
String urlFilme = urlStreaming + URLEncoder.encode( rs.getString( "url_imagem" ), "UTF-8" ) ;
filme.setUrlImagem( urlFilme ) ;
filme.setDuracao( rs.getString( "duracao" ) ) ;
filme.setDiretores( rs.getString( "diretores" ) ) ;
filme.setAtores( rs.getString( "atores" ) );
filme.setSinopse( rs.getString( "sinopse" ) ) ;
filme.setAvaliacao( rs.getInt( "avaliacao" ) ) ;
filme.setAno( rs.getInt( "ano" ) ) ;
filme.setUrlFilme( urlServidor + "/procuraPlaylistPadrao?idFilme=" + rs.getInt( "id" ) ) ;
filme.setIdioms( listarIdiomasFilmes( con, rs.getInt( "id" ) ) ) ;
filmes.add( filme ) ;
}
while( rs.next( ) ) ;
}
}
catch( SQLException e )
{
e.printStackTrace( );
}
catch ( UnsupportedEncodingException e )
{
e.printStackTrace();
}
finally
{
DataBaseUtil.close( con, pstmt, rs ) ;
}
return filmes ;
}
public Filmes buscarFilme( int filmeId, int userId )
{
Filmes filme = null;
Connection con = null ;
PreparedStatement pstmt = null ;
ResultSet rs = null ;
ParametrosDAO dao = new ParametrosDAO( ) ;
String urlServidor = dao.buscaValorDeParametro( ChaveParametro.MOBILE_REQUEST ) ;
String urlStreaming = dao.buscaValorDeParametro( ChaveParametro.STREAMING_PATH ) ;
StringBuffer sql = new StringBuffer();
sql.append("SELECT id, ");
sql.append(" nome, ");
sql.append(" url_imagem, ");
sql.append(" duracao, ");
sql.append(" diretores, ");
sql.append(" atores, ");
sql.append(" sinopse, ");
sql.append(" CASE WHEN avaliacao_usuario.avaliacao IS NOT NULL THEN 1 ELSE 0 END avaliacao_usuario, ");
sql.append(" CASE WHEN user_playlist.id_filme IS NOT NULL THEN 1 ELSE 0 END playlist_usuario, ");
sql.append(" filmes.avaliacao, ");
sql.append(" ano ");
sql.append("FROM filmes ");
sql.append("LEFT JOIN avaliacao_usuario ON avaliacao_usuario.id_filme = filmes.id AND avaliacao_usuario.id_usuario = ? ") ;
sql.append("LEFT JOIN user_playlist ON user_playlist.id_filme = filmes.id AND user_playlist.id_user = ? ");
sql.append("WHERE id = ? ");
try
{
con = DataBaseUtil.getConnection( );
pstmt = con.prepareStatement( sql.toString( ) ) ;
{
pstmt.setInt( 1, userId ) ;
pstmt.setInt( 2, userId ) ;
pstmt.setInt( 3, filmeId ) ;
}
rs = pstmt.executeQuery( ) ;
if( rs.next( ) )
{
filme = new Filmes( ) ;
filme.setId( rs.getInt( "id" ) ) ;
filme.setNome( rs.getString( "nome" ) ) ;
String urlFilme = urlStreaming + URLEncoder.encode( rs.getString( "url_imagem" ), "UTF-8" ) ;
filme.setUrlImagem( urlFilme ) ;
filme.setDuracao( rs.getString( "duracao" ) ) ;
filme.setDiretores( rs.getString( "diretores" ) ) ;
filme.setAtores( rs.getString( "atores" ) );
filme.setSinopse( rs.getString( "sinopse" ) ) ;
filme.setAvaliacaoUsuario( rs.getInt( "avaliacao_usuario" ) ) ;
filme.setPlaylistUsuario( rs.getInt( "playlist_usuario" ) ) ;
filme.setAvaliacao( rs.getInt( "avaliacao" ) ) ;
filme.setAno( rs.getInt( "ano" ) ) ;
filme.setUrlFilme( urlServidor + "/procuraPlaylistPadrao?idFilme=" + rs.getInt( "id" ) ) ;
filme.setIdioms( listarIdiomasFilmes( con, rs.getInt( "id" ) ) ) ;
}
}
catch( SQLException e )
{
e.printStackTrace( );
}
catch ( UnsupportedEncodingException e )
{
e.printStackTrace();
}
finally
{
DataBaseUtil.close( con, pstmt, rs ) ;
}
return filme;
}
public List<Filmes> buscaFavoritos( int idUsuario )
{
List<Filmes> filmes = null ;
Connection con = null ;
PreparedStatement pstmt = null ;
ResultSet rs = null;
ParametrosDAO dao = new ParametrosDAO( ) ;
String urlServidor = dao.buscaValorDeParametro( ChaveParametro.MOBILE_REQUEST ) ;
String urlStreaming = dao.buscaValorDeParametro( ChaveParametro.STREAMING_PATH ) ;
StringBuffer sql = new StringBuffer();
sql.append("SELECT id, ");
sql.append(" nome, ");
sql.append(" url_imagem, ");
sql.append(" duracao, ");
sql.append(" diretores, ");
sql.append(" atores, ");
sql.append(" sinopse, ");
sql.append(" avaliacao, ");
sql.append(" ano ");
sql.append("FROM filmes ");
sql.append("INNER JOIN user_playlist ");
sql.append("ON filmes.id = user_playlist.id_filme ");
sql.append("WHERE user_playlist.id_user = ?");
try
{
con = DataBaseUtil.getConnection( );
pstmt = con.prepareStatement( sql.toString( ) ) ;
{
pstmt.setInt( 1, idUsuario ) ;
}
rs = pstmt.executeQuery( ) ;
if( rs.next( ) )
{
filmes = new LinkedList<Filmes>( ) ;
do
{
Filmes filme = new Filmes( ) ;
filme.setId( rs.getInt( "id" ) ) ;
filme.setNome( rs.getString( "nome" ) ) ;
String urlFilme = urlStreaming + URLEncoder.encode( rs.getString( "url_imagem" ), "UTF-8" ) ;
filme.setUrlImagem( urlFilme ) ;
filme.setDuracao( rs.getString( "duracao" ) ) ;
filme.setDiretores( rs.getString( "diretores" ) ) ;
filme.setAtores( rs.getString( "atores" ) );
filme.setSinopse( rs.getString( "sinopse" ) ) ;
filme.setAvaliacao( rs.getInt( "avaliacao" ) ) ;
filme.setAno( rs.getInt( "ano" ) ) ;
filme.setUrlFilme( urlServidor + "/procuraPlaylistPadrao?idFilme=" + rs.getInt( "id" ) ) ;
filme.setIdioms( listarIdiomasFilmes( con, rs.getInt( "id" ) ) ) ;
filmes.add( filme ) ;
}
while( rs.next( ) ) ;
}
}
catch( SQLException e )
{
e.printStackTrace( );
}
catch ( UnsupportedEncodingException e )
{
e.printStackTrace();
}
finally
{
DataBaseUtil.close( con, pstmt, rs ) ;
}
return filmes;
}
public List<Filmes> buscaFilmesPaginadosPorCategoria( int categoriaId )
{
List<Filmes> filmes = null ;
Connection con = null ;
PreparedStatement pstmt = null ;
ResultSet rs = null ;
ParametrosDAO dao = new ParametrosDAO( ) ;
String urlServidor = dao.buscaValorDeParametro( ChaveParametro.MOBILE_REQUEST ) ;
String urlStreaming = dao.buscaValorDeParametro( ChaveParametro.STREAMING_PATH ) ;
StringBuffer sql = new StringBuffer();
sql.append("SELECT id, ");
sql.append(" nome, ");
sql.append(" url_imagem, ");
sql.append(" duracao, ");
sql.append(" diretores, ");
sql.append(" atores, ");
sql.append(" sinopse, ");
sql.append(" avaliacao, ");
sql.append(" ano ");
sql.append("FROM filmes ");
sql.append(" INNER JOIN categorias_filmes ");
sql.append(" ON categorias_filmes.id_filmes = filmes.id ");
sql.append("WHERE categorias_filmes.id_categorias = ? ");
try
{
con = DataBaseUtil.getConnection( );
pstmt = con.prepareStatement( sql.toString( ) ) ;
{
pstmt.setInt( 1, categoriaId ) ;
}
rs = pstmt.executeQuery( ) ;
if( rs.next( ) )
{
filmes = new LinkedList<Filmes>( ) ;
do
{
Filmes filme = new Filmes( ) ;
filme.setId( rs.getInt( "id" ) ) ;
filme.setNome( rs.getString( "nome" ) ) ;
String urlFilme = urlStreaming + URLEncoder.encode( rs.getString( "url_imagem" ), "UTF-8" ) ;
filme.setUrlImagem( urlFilme ) ;
filme.setDuracao( rs.getString( "duracao" ) ) ;
filme.setDiretores( rs.getString( "diretores" ) ) ;
filme.setAtores( rs.getString( "atores" ) );
filme.setSinopse( rs.getString( "sinopse" ) ) ;
filme.setAvaliacao( rs.getInt( "avaliacao" ) ) ;
filme.setAno( rs.getInt( "ano" ) ) ;
filme.setUrlFilme( urlServidor + "/procuraPlaylistPadrao?idFilme=" + rs.getInt( "id" ) ) ;
filme.setIdioms( listarIdiomasFilmes( con, rs.getInt( "id" ) ) ) ;
filmes.add( filme ) ;
}
while( rs.next( ) ) ;
}
}
catch( SQLException e )
{
e.printStackTrace( );
}
catch ( UnsupportedEncodingException e )
{
e.printStackTrace();
}
finally
{
DataBaseUtil.close( con, pstmt, rs ) ;
}
return filmes ;
}
}