package br.com.ftt.bettaserver.business;
import java.io.File;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.apache.commons.io.FileUtils;
import br.com.ftt.bettaserver.dao.FilmesDAO;
import br.com.ftt.bettaserver.dao.ParametrosDAO;
import br.com.ftt.bettaserver.form.ChaveParametro;
import br.com.ftt.bettaserver.form.Filme;
import br.com.ftt.bettaserver.form.Playlist;
import br.com.ftt.videosplitter.VideoCoder;
import br.com.ftt.videosplitter.util.StringConstants;
public class FilmeBusiness
{
private static FilmeBusiness business;
private FilmeBusiness( )
{
}
public List<Filme> pesquisaFilmes( String nome )
{
FilmesDAO filmesDAO = new FilmesDAO( ) ;
return filmesDAO.pesquisaFilmes( nome ) ;
}
public boolean excluirFilme( Filme filme )
{
ParametrosDAO paramDao = new ParametrosDAO( );
FilmesDAO filmesDAO = new FilmesDAO( ) ;
String pathVideos = paramDao.buscaValorDeParametro( ChaveParametro.MEDIA_ADDESS );
String pathFilme = pathVideos + StringConstants.pathSeparator + filme.getNome( ) ;
File arquivoFilme = new File( pathFilme ) ;
try
{
deleteDirectory( arquivoFilme ) ;
}
catch( Exception e )
{
e.printStackTrace( ) ;
}
return filmesDAO.excluirFilme( filme.getId( ) ) ;
}
private boolean deleteDirectory( File path )
{
if ( path.exists( ) )
{
File[ ] files = path.listFiles( );
for ( int i = 0 ; i < files.length ; i++ )
{
if ( files[ i ].isDirectory( ) )
{
deleteDirectory( files[ i ] );
}
else
{
files[ i ].delete( );
}
}
}
return ( path.delete( ) );
}
public List<Filme> carregaTodosFilmes( )
{
FilmesDAO dao = new FilmesDAO( );
return dao.carregaTodosFilmes( );
}
public boolean inserirNovoFilme( Filme filme )
{
boolean retorno = true;
ParametrosDAO paramDao = new ParametrosDAO( );
FilmesDAO filmesDao = new FilmesDAO( );
String pathVideos = paramDao.buscaValorDeParametro( ChaveParametro.MEDIA_ADDESS );
try
{
filme.setUrlImagemFileName( copyImageFile( filme.getFileImagem( ),
filme.getNome( ), pathVideos ) );
int filmeId = filmesDao.incuirFilme( filme );
long duracao = 0;
String url = filme.getFileFilme( ).getAbsolutePath( ) ;
VideoCoder videoCoder = new VideoCoder( url,
filme.getQualidades( ), pathVideos,
filme.getNome( ) );
Map<Integer, String> mapPlaylists = videoCoder.encodeVideos( );
List<Playlist> playlists = new LinkedList<Playlist>( );
duracao = videoCoder.getDuracao( ) ;
if ( filmeId != 0 )
{
if ( mapPlaylists != null && !mapPlaylists.isEmpty( ) )
{
for ( Map.Entry<Integer, String> entry : mapPlaylists
.entrySet( ) )
{
int bitrate = entry.getKey( );
String playlist = entry.getValue( );
Playlist pList = new Playlist( );
pList.setIdFilme( filmeId );
pList.setBitrate( bitrate );
pList.setIdIdiomaFilme( 1 );
pList.setPlaylistName( playlist );
playlists.add( pList );
}
retorno = retorno
& filmesDao
.cadastrarPlaylistsDeFilmes( playlists );
}
}
else
{
retorno = false;
}
filmesDao.atualizarDuracao( filmeId, duracao ) ;
}
catch ( Throwable e )
{
e.printStackTrace( );
retorno = false;
}
return retorno;
}
private String copyImageFile( File imagemFile, String pathMovie,
String pathMidia ) throws IOException
{
String newImagePath = "";
newImagePath = pathMidia + StringConstants.pathSeparator + pathMovie.replaceAll( " ", "_" ) + StringConstants.pathSeparator
+ imagemFile.getName( ).replaceAll( " ", "_" );
String imagename = StringConstants.pathSeparator + pathMovie + StringConstants.pathSeparator + imagemFile.getName( );
imagename.replaceAll( " ", "_" ) ;
File newImage = new File( newImagePath );
if ( !newImage.exists( ) )
{
File paths = newImage.getParentFile( );
if(paths.mkdirs( ))
{
newImage.createNewFile( );
}
}
FileUtils.copyFile( imagemFile, newImage );
return imagename.replace( '\\', '/' );
}
public static FilmeBusiness getInstance( )
{
if ( business == null )
{
business = new FilmeBusiness( );
}
return business;
}
}