commit inicial

This commit is contained in:
Isidoro Nevares Martín 2025-11-26 11:10:43 +01:00
commit d12b970af3
32 changed files with 1216 additions and 0 deletions

23
.classpath Normal file
View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry including="**/*.java" kind="src" output="target/classes" path="src">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path="config"/>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="C:/Users/ineva/INM/tmp/mapamundi.jar"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
/bin/
*.class
/target/

23
.project Normal file
View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>aadd_act2_9</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8

View File

@ -0,0 +1,13 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=24
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=24
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
org.eclipse.jdt.core.compiler.release=enabled
org.eclipse.jdt.core.compiler.source=24

View File

@ -0,0 +1,4 @@
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1

5
config/config.properties Normal file
View File

@ -0,0 +1,5 @@
# Parámetros de conexión a la base de datos 'Cine' en SGDB MySQL
jdbc.driver = com.mysql.cj.jdbc.Driver
jdbc.url = jdbc:mysql://192.168.1.36:3306/Cine
jdbc.usuario = root
jdbc.password = mysql_123

32
pom.xml Normal file
View File

@ -0,0 +1,32 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>aadd_act2_7</groupId>
<artifactId>aadd_act2_7</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>9.5.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.8</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<release>24</release>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,45 @@
DELIMITER //
CREATE PROCEDURE obtenerRepartoPeliculasPorActor(IN p_patron_nombre_actor VARCHAR(100))
BEGIN
SELECT
a.nombre AS nombre_actor,
a.id_pais AS id_pais_actor,
p.titulo AS titulo_pelicula,
p.id_pais AS id_pais_pelicula,
d.nombre AS nombre_director,
d.id_pais AS id_pais_director,
d.fecha_nacimiento AS fecha_nacimiento_director
FROM reparto r
JOIN actor a ON r.id_actor = a.identificador
JOIN pelicula p ON p.identificador = r.id_pelicula
JOIN director d ON p.id_director = d.identificador
WHERE p.identificador IN (
SELECT re.id_pelicula
FROM reparto re
JOIN actor ac ON re.id_actor = ac.identificador
JOIN pelicula pe ON re.id_pelicula = pe.identificador
WHERE ac.nombre LIKE p_patron_nombre_actor
);
END;
//
CREATE FUNCTION obtenerNumeroActoresPelicula(p_id_pelicula INT)
RETURNS INT
DETERMINISTIC
READS SQL DATA
BEGIN
DECLARE total_actores_pelicula INT;
SELECT COUNT(*) INTO total_actores_pelicula
FROM reparto
WHERE id_pelicula = p_id_pelicula;
RETURN total_actores_pelicula;
END;
//
DELIMITER ;

View File

@ -0,0 +1,141 @@
package es.palomafp.aadd.inm;
import java.util.List;
import es.palomafp.aadd.inm.dao.IActorDAO;
import es.palomafp.aadd.inm.dao.IContinenteDAO;
import es.palomafp.aadd.inm.dao.IPaisDAO;
import es.palomafp.aadd.inm.dao.IRepartoDAO;
import es.palomafp.aadd.inm.dao.impl.ActorDaoJDBC;
import es.palomafp.aadd.inm.dao.impl.ContinenteDaoJAR;
import es.palomafp.aadd.inm.dao.impl.PaisDaoJAR;
import es.palomafp.aadd.inm.dao.impl.RepartoDaoJDBC;
import es.palomafp.aadd.inm.excepcion.CineException;
import es.palomafp.aadd.inm.util.ConversorTiposDatosYFormatos;
import es.palomafp.aadd.inm.vo.Continente;
import es.palomafp.aadd.inm.vo.Pais;
import es.palomafp.aadd.inm.vo.Reparto;
/**
*
* GestorCine: Clase que se encarga de gestionar (Continente, Pais, Actor,
* Director, Pelicula, Reparto)
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 2 oct 2025
*/
public class GestorCine {
public static void main(String[] args) {
GestorCine gc = new GestorCine();
try {
gc.imprimirRepartoPeliculasActorTerminaEnT();
gc.imprimirNumeroActoresPelicula();
gc.realizarTratamientoContinente();
gc.realizarTratamientoPais();
} catch (CineException e) {
String mensajeError = "Error en la clase %s al realizar una operación de %s";
String operacion = "Operación desconocida";
int codigoError = e.getCodigoError();
switch (codigoError) {
case CineException.ERROR_GESTION_CONEXION:
operacion = "Gestión de Conexión";
break;
case CineException.ERROR_CONSULTA:
operacion = "Consulta";
break;
case CineException.ERROR_INSERCION:
operacion = "Inserción";
break;
case CineException.ERROR_BORRADO:
operacion = "Borrado";
break;
case CineException.ERROR_ACTUALIZACION:
operacion = "Actualización";
break;
}
mensajeError = String.format(mensajeError, e.getClaseOrigen().getName(), operacion);
System.out.println(mensajeError);
e.printStackTrace();
}
}
private void imprimirNumeroActoresPelicula() throws CineException {
IActorDAO iActorDAO = new ActorDaoJDBC();
int idPelicula = 1; // Ejemplo: película con id 1
System.out.println("Imprimir el número de actores en la película con id " + idPelicula);
int numeroActores = iActorDAO.obtenerNumeroActoresPelicula(idPelicula);
System.out.println("Número de actores en la película con id " + idPelicula + ": " + numeroActores);
}
private void imprimirRepartoPeliculasActorTerminaEnT() throws CineException {
IRepartoDAO iRepartoDAO = new RepartoDaoJDBC();
System.out.println("----- FIJO -----");
List<Reparto> listaReparto = iRepartoDAO.obtenerListaRepartoPeliculasNombreActorTerminaT();
imprimirReparto(listaReparto);
System.out.println("----- Con patrón -----");
List<Reparto> listaRepartoConPatron = iRepartoDAO.obtenerListaRepartoPeliculasNombreActorConPatron("%t");
imprimirReparto(listaRepartoConPatron);
}
private void imprimirReparto(List<Reparto> listaReparto) throws CineException {
for (Reparto reparto : listaReparto) {
// System.out.println(reparto);
String textoImprimir = """
%s, que nació en %s (%s), participó en la película
'%s', rodada en %s (%s) y dirigida por
%s que nació en %s (%s) el %s.
""";
String fechaNacimientoFormateada = null;
if (reparto.getPelicula().getDirector().getFechaNacimiento() != null) {
fechaNacimientoFormateada = ConversorTiposDatosYFormatos
.convertirDateAString(reparto.getPelicula().getDirector().getFechaNacimiento(), "dd/MM/yyyy");
}
textoImprimir = String.format(textoImprimir, reparto.getActor().getNombre(),
reparto.getActor().getPaisNacimiento().getNombre(),
reparto.getActor().getPaisNacimiento().getContinente().getNombre(),
reparto.getPelicula().getTitulo(), reparto.getPelicula().getPaisLocalizacion().getNombre(),
reparto.getPelicula().getPaisLocalizacion().getContinente().getNombre(),
reparto.getPelicula().getDirector().getNombre(),
reparto.getPelicula().getDirector().getPaisNacimiento().getNombre(),
reparto.getPelicula().getDirector().getPaisNacimiento().getContinente().getNombre(),
fechaNacimientoFormateada);
System.out.println(textoImprimir);
}
}
private void realizarTratamientoContinente() throws CineException {
IContinenteDAO iContinenteDAO = new ContinenteDaoJAR();
// Crear continente
String codigoContinente = "06";
Continente continente = new Continente();
continente.setCodigo(codigoContinente);
continente.setNombre("Antártida");
iContinenteDAO.crearContinente(continente);
System.out.println("Se ha creado el continente: " + continente);
// Borrar continente
iContinenteDAO.borrarContinente(codigoContinente);
System.out.println("Se ha eliminado el continente con codigo: " + codigoContinente);
}
private void realizarTratamientoPais() throws CineException {
IPaisDAO iPaisDAO = new PaisDaoJAR();
// Consutar países americanos que empiezan por "Sa"
List<Pais> listaPaises = iPaisDAO.obtenerListaPaisesAmericanosEmpiezanSa();
System.out.println(listaPaises);
// Actualizar país
Pais pais = iPaisDAO.obtenerPaisPorId(52); // Ejemplo: país con id 52
System.out.println("Pais con id 52: " + pais);
pais.setCapital("Capital City II");
iPaisDAO.actualizarPais(pais);
}
}

View File

@ -0,0 +1,15 @@
package es.palomafp.aadd.inm.dao;
import es.palomafp.aadd.inm.excepcion.CineException;
/**
*
* IActrorDAO: Interfaz que representa las operaciones a realizar sobre Actor
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 2 oct 2025
*/
public interface IActorDAO {
int obtenerNumeroActoresPelicula(int idPelicula) throws CineException;
}

View File

@ -0,0 +1,20 @@
package es.palomafp.aadd.inm.dao;
import es.palomafp.aadd.inm.excepcion.CineException;
import es.palomafp.aadd.inm.vo.Continente;
/**
*
* IContinenteDAO: Interfaz que representa las operaciones a realizar sobre
* Continente
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 2 oct 2025
*/
public interface IContinenteDAO {
public void crearContinente(Continente continente) throws CineException;
public void borrarContinente(String codigoContinente) throws CineException;
}

View File

@ -0,0 +1,13 @@
package es.palomafp.aadd.inm.dao;
/**
*
* IDirectorDAO: Interfaz que representa las operaciones a realizar sobre Director
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 2 oct 2025
*/
public interface IDirectorDAO {
}

View File

@ -0,0 +1,19 @@
package es.palomafp.aadd.inm.dao;
import java.util.List;
import es.palomafp.aadd.inm.excepcion.CineException;
import es.palomafp.aadd.inm.vo.Pais;
/**
*
* IPaisDAO: Interfaz que representa las operaciones a realizar sobre Pais
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 2 oct 2025
*/
public interface IPaisDAO {
Pais obtenerPaisPorId(int identificadorPais) throws CineException;
void actualizarPais(Pais pais) throws CineException;
List<Pais> obtenerListaPaisesAmericanosEmpiezanSa()throws CineException;
}

View File

@ -0,0 +1,13 @@
package es.palomafp.aadd.inm.dao;
/**
*
* IDirectorDAO: Interfaz que representa las operaciones a realizar sobre Director
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 2 oct 2025
*/
public interface IPeliculaDAO {
}

View File

@ -0,0 +1,19 @@
package es.palomafp.aadd.inm.dao;
import java.util.List;
import es.palomafp.aadd.inm.excepcion.CineException;
import es.palomafp.aadd.inm.vo.Reparto;
/**
*
* IRepartoDAO: Interfaz que representa las operaciones a realizar sobre Reparto
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 2 oct 2025
*/
public interface IRepartoDAO {
List<Reparto> obtenerListaRepartoPeliculasNombreActorTerminaT() throws CineException;
List<Reparto> obtenerListaRepartoPeliculasNombreActorConPatron(String patron) throws CineException;
}

View File

@ -0,0 +1,42 @@
package es.palomafp.aadd.inm.dao.impl;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Types;
import es.palomafp.aadd.inm.dao.IActorDAO;
import es.palomafp.aadd.inm.excepcion.CineException;
import es.palomafp.aadd.inm.gestor.GestorConexionJDBC;
/**
*
* ActorDaoGeneral: Clase que representa la implementación de un Actor
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 2 oct 2025
*/
public class ActorDaoJDBC implements IActorDAO {
@Override
public int obtenerNumeroActoresPelicula(int idPelicula) throws CineException{
int numeroActores = 0;
// try con recursos "cerrables": Connection, Statement, ResultSet
try (Connection conexion = GestorConexionJDBC.obtenerConexionJDBC();
CallableStatement cstmt = conexion.prepareCall("{? = call obtenerNumeroActoresPelicula(?)}");) {
// El parámetro de salida y el de entrada
cstmt.registerOutParameter(1, Types.INTEGER);
cstmt.setInt(2, idPelicula);
cstmt.execute();
// Obtener el valor del parámetro de salida
numeroActores= cstmt.getInt(1);
} catch (Exception e) {
throw new CineException(e, getClass(), CineException.ERROR_CONSULTA);
}
return numeroActores;
}
}

View File

@ -0,0 +1,43 @@
package es.palomafp.aadd.inm.dao.impl;
import es.palomafp.aadd.inm.dao.IContinenteDAO;
import es.palomafp.aadd.inm.excepcion.CineException;
import es.palomafp.aadd.inm.vo.Continente;
import inm.mapamundi.inm.dao.IContinenteINMDAO;
/**
*
* ContinenteDaoGeneral: Clase que representa la implementación de un Continente
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 2 oct 2025
*/
public class ContinenteDaoJAR implements IContinenteDAO {
@Override
public void crearContinente(Continente continente) throws CineException {
IContinenteINMDAO continenteINMDAO = new inm.mapamundi.dao.impl.ContinenteINMDaoJDBC();
try {
// Información del Continente
inm.mapamundi.vo.Continente continenteINM = new inm.mapamundi.vo.Continente();
continenteINM.setCodigo(continente.getCodigo());
continenteINM.setNombre(continente.getNombre());
continenteINMDAO.anyadirContinente(continenteINM);
} catch (Exception e) {
throw new CineException(e, getClass(), CineException.ERROR_INSERCION);
}
}
@Override
public void borrarContinente(String codigoContinente) throws CineException {
IContinenteINMDAO continenteINMDAO = new inm.mapamundi.dao.impl.ContinenteINMDaoJDBC();
try {
continenteINMDAO.eliminarContinentePorCodigo(codigoContinente);
} catch (Exception e) {
throw new CineException(e, getClass(), CineException.ERROR_BORRADO);
}
}
}

View File

@ -0,0 +1,15 @@
package es.palomafp.aadd.inm.dao.impl;
import es.palomafp.aadd.inm.dao.IDirectorDAO;
/**
*
* DirectorDaoGeneral: Clase que representa la implementación de un Director
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 2 oct 2025
*/
public class DirectorDaoGeneral implements IDirectorDAO {
}

View File

@ -0,0 +1,100 @@
package es.palomafp.aadd.inm.dao.impl;
import java.util.List;
import es.palomafp.aadd.inm.dao.IPaisDAO;
import es.palomafp.aadd.inm.excepcion.CineException;
import es.palomafp.aadd.inm.vo.Continente;
import es.palomafp.aadd.inm.vo.Pais;
import inm.mapamundi.dao.impl.PaisINMDaoJDBC;
import inm.mapamundi.inm.dao.IPaisINMDAO;
/**
*
* PaisDaoGeneral: Clase que representa la implementación de un Pais
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 2 oct 2025
*/
public class PaisDaoJAR implements IPaisDAO {
@Override
public Pais obtenerPaisPorId(int identificadorPais) throws CineException {
Pais pais = null;
IPaisINMDAO paisINMDAO = new PaisINMDaoJDBC();
try {
inm.mapamundi.vo.Pais paisINM = paisINMDAO.obtenerPaisPorID(identificadorPais);
if (paisINM != null) {
// Información del Continente
Continente continente = new Continente();
continente.setCodigo(paisINM.getContinente().getCodigo());
continente.setNombre(paisINM.getContinente().getNombre());
// Información del País
pais = new Pais();
pais.setIdentificador(identificadorPais);
pais.setNombre(paisINM.getNombre());
pais.setCapital(paisINM.getCapital());
pais.setContinente(continente);
}
} catch (Exception e) {
throw new CineException(e, getClass(), CineException.ERROR_CONSULTA);
}
return pais;
}
@Override
public void actualizarPais(Pais pais) throws CineException {
IPaisINMDAO paisINMDAO = new PaisINMDaoJDBC();
try {
// Información del País
inm.mapamundi.vo.Pais paisINM = new inm.mapamundi.vo.Pais();
paisINM.setIdentificador(pais.getIdentificador());
paisINM.setNombre(pais.getNombre());
paisINM.setCapital(pais.getCapital());
// Información del Continente
inm.mapamundi.vo.Continente continenteINM = new inm.mapamundi.vo.Continente();
continenteINM.setCodigo(pais.getContinente().getCodigo());
continenteINM.setNombre(pais.getContinente().getNombre());
paisINM.setContinente(continenteINM);
paisINMDAO.actualizarPais(paisINM);
} catch (Exception e) {
throw new CineException(e, getClass(), CineException.ERROR_ACTUALIZACION);
}
}
@Override
public List<Pais> obtenerListaPaisesAmericanosEmpiezanSa() throws CineException {
List<Pais> listaPaises = null;
IPaisINMDAO paisINMDAO = new PaisINMDaoJDBC();
try {
List<inm.mapamundi.vo.Pais> listaPaisesINM = paisINMDAO.obtenerListaPaisesAmericanosEmpiezanSa();
if (listaPaisesINM != null) {
listaPaises = new java.util.ArrayList<Pais>();
for (inm.mapamundi.vo.Pais paisINM : listaPaisesINM) {
// Información del Continente
Continente continente = new Continente();
continente.setCodigo(paisINM.getContinente().getCodigo());
continente.setNombre(paisINM.getContinente().getNombre());
// Información del País
Pais pais = new Pais();
pais.setIdentificador(paisINM.getIdentificador());
pais.setNombre(paisINM.getNombre());
pais.setCapital(paisINM.getCapital());
pais.setContinente(continente);
listaPaises.add(pais);
}
}
} catch (Exception e) {
throw new CineException(e, getClass(), CineException.ERROR_CONSULTA);
}
return listaPaises;
}
}

View File

@ -0,0 +1,15 @@
package es.palomafp.aadd.inm.dao.impl;
import es.palomafp.aadd.inm.dao.IPeliculaDAO;
/**
*
* PeliculaDaoGeneral: Clase que representa la implementación de un Pelicula
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 2 oct 2025
*/
public class PeliculaDaoGeneral implements IPeliculaDAO{
}

View File

@ -0,0 +1,155 @@
package es.palomafp.aadd.inm.dao.impl;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import es.palomafp.aadd.inm.dao.IPaisDAO;
import es.palomafp.aadd.inm.dao.IRepartoDAO;
import es.palomafp.aadd.inm.excepcion.CineException;
import es.palomafp.aadd.inm.gestor.GestorConexionJDBC;
import es.palomafp.aadd.inm.vo.Actor;
import es.palomafp.aadd.inm.vo.Director;
import es.palomafp.aadd.inm.vo.Pais;
import es.palomafp.aadd.inm.vo.Pelicula;
import es.palomafp.aadd.inm.vo.Reparto;
/**
*
* RepartoDaoGeneral: Clase que representa la implementación de un Reparto con
* JDBC
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 2 oct 2025
*/
public class RepartoDaoJDBC implements IRepartoDAO {
@Override
public List<Reparto> obtenerListaRepartoPeliculasNombreActorTerminaT() throws CineException {
List<Reparto> listaReparto = null;
String sentenciaSQL = """
select a.nombre as nombre_actor, a.id_pais as id_pais_actor,
p.titulo as titulo_pelicula, p.id_pais as id_pais_pelicula,
d.nombre as nombre_director, d.id_pais as id_pais_director, d.fecha_nacimiento as fecha_nacimiento_director
from reparto r join actor a
on r.id_actor =a.identificador
join pelicula p
on p.identificador =r.id_pelicula
join director d
on p.id_director = d.identificador
where p.identificador IN (SELECT re.id_pelicula
from reparto re join actor ac
on re.id_actor = ac.identificador
join pelicula pe
on re.id_pelicula = pe.identificador
where ac.nombre like '%t');
""";
// try con recursos "cerrables": Connection, Statement, ResultSet
try (Connection conexion = GestorConexionJDBC.obtenerConexionJDBC();
PreparedStatement pstm = conexion.prepareStatement(sentenciaSQL);
ResultSet resultado = pstm.executeQuery();) {
listaReparto = new ArrayList<Reparto>();
while (resultado.next()) {
IPaisDAO paisDAO = new PaisDaoJAR();
// Información del Actor
String nombreActor = resultado.getString("nombre_actor");
int idPaisNacimientoActor = resultado.getInt("id_pais_actor");
Pais paisNacimientoActor = paisDAO.obtenerPaisPorId(idPaisNacimientoActor);
Actor actor = new Actor();
actor.setNombre(nombreActor);
actor.setPaisNacimiento(paisNacimientoActor);
// Información del Director
String nombreDirector = resultado.getString("nombre_director");
int idPaisNacimientoDirector = resultado.getInt("id_pais_director");
Pais paisNacimientoDirector = paisDAO.obtenerPaisPorId(idPaisNacimientoDirector);
Date fechaNacimientoDirector = resultado.getDate("fecha_nacimiento_director");
Director director = new Director();
director.setNombre(nombreDirector);
director.setPaisNacimiento(paisNacimientoDirector);
director.setFechaNacimiento(fechaNacimientoDirector);
// Información de la Película
String tituloPelicula = resultado.getString("titulo_pelicula");
int idPaisLocalizacionPelicula = resultado.getInt("id_pais_pelicula");
Pais paisLocalizacionPelicula = paisDAO.obtenerPaisPorId(idPaisLocalizacionPelicula);
Pelicula pelicula = new Pelicula();
pelicula.setTitulo(tituloPelicula);
pelicula.setPaisLocalizacion(paisLocalizacionPelicula);
pelicula.setDirector(director);
// Completar los atributos de Reparto
Reparto reparto = new Reparto();
reparto.setActor(actor);
reparto.setPelicula(pelicula);
listaReparto.add(reparto);
}
} catch (SQLException e) {
throw new CineException(e, getClass(), CineException.ERROR_CONSULTA);
}
return listaReparto;
}
@Override
public List<Reparto> obtenerListaRepartoPeliculasNombreActorConPatron(String patron) throws CineException{
List<Reparto> listaReparto = null;
// try con recursos "cerrables": Connection, Statement, ResultSet
try (Connection conexion = GestorConexionJDBC.obtenerConexionJDBC();
CallableStatement cstmt = conexion.prepareCall("{call obtenerRepartoPeliculasPorActor(?)}");) {
// El parámetro es el patrón por el que se va a buscar
cstmt.setString(1, patron);
ResultSet resultado = cstmt.executeQuery();
listaReparto = new ArrayList<Reparto>();
while (resultado.next()) {
IPaisDAO paisDAO = new PaisDaoJAR();
// Información del Actor
String nombreActor = resultado.getString("nombre_actor");
int idPaisNacimientoActor = resultado.getInt("id_pais_actor");
Pais paisNacimientoActor = paisDAO.obtenerPaisPorId(idPaisNacimientoActor);
Actor actor = new Actor();
actor.setNombre(nombreActor);
actor.setPaisNacimiento(paisNacimientoActor);
// Información del Director
String nombreDirector = resultado.getString("nombre_director");
int idPaisNacimientoDirector = resultado.getInt("id_pais_director");
Pais paisNacimientoDirector = paisDAO.obtenerPaisPorId(idPaisNacimientoDirector);
Date fechaNacimientoDirector = resultado.getDate("fecha_nacimiento_director");
Director director = new Director();
director.setNombre(nombreDirector);
director.setPaisNacimiento(paisNacimientoDirector);
director.setFechaNacimiento(fechaNacimientoDirector);
// Información de la Película
String tituloPelicula = resultado.getString("titulo_pelicula");
int idPaisLocalizacionPelicula = resultado.getInt("id_pais_pelicula");
Pais paisLocalizacionPelicula = paisDAO.obtenerPaisPorId(idPaisLocalizacionPelicula);
Pelicula pelicula = new Pelicula();
pelicula.setTitulo(tituloPelicula);
pelicula.setPaisLocalizacion(paisLocalizacionPelicula);
pelicula.setDirector(director);
// Completar los atributos de Reparto
Reparto reparto = new Reparto();
reparto.setActor(actor);
reparto.setPelicula(pelicula);
listaReparto.add(reparto);
}
} catch (SQLException e) {
throw new CineException(e, getClass(), CineException.ERROR_CONSULTA);
}
return listaReparto;
}
}

View File

@ -0,0 +1,57 @@
package es.palomafp.aadd.inm.excepcion;
/**
*
* CineException: Clase que representa una excepción genérica del proyeto Cine
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 26 nov 2025
*
*
*/
public class CineException extends Exception {
/**
*
*/
private static final long serialVersionUID = -7090518753638026268L;
private int codigoError;
private Class<?> claseOrigen;
public static final int ERROR_GENERAL=0;
public static final int ERROR_GESTION_CONEXION=1;
public static final int ERROR_CONSULTA=2;
public static final int ERROR_INSERCION=3;
public static final int ERROR_ACTUALIZACION=4;
public static final int ERROR_BORRADO=5;
/**
*
*/
public CineException() {
super();
}
/**
*
*/
public CineException(Exception e, Class<?> clase, int codError) {
super(e);
claseOrigen=clase;
codigoError=codError;
}
public Class<?> getClaseOrigen() {
return claseOrigen;
}
public void setClaseOrigen(Class<?> claseOrigen) {
this.claseOrigen = claseOrigen;
}
public int getCodigoError() {
return codigoError;
}
public void setCodigoError(int codigoError) {
this.codigoError = codigoError;
}
}

View File

@ -0,0 +1,41 @@
package es.palomafp.aadd.inm.gestor;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import es.palomafp.aadd.inm.excepcion.CineException;
/**
*
* GestorConexionJDBC: Clase que realiza ....
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 6 nov 2025
*
*
*/
public class GestorConexionJDBC {
// Constructor privado para evitar instanciación
private GestorConexionJDBC() {
}
public static Connection obtenerConexionJDBC() throws CineException {
Connection conexion = null;
String driverJDBC= GestorFicheroConfiguracion.getValorDeConfiguracion("jdbc.driver");
try {
Class.forName(driverJDBC);
String urlJDBC= GestorFicheroConfiguracion.getValorDeConfiguracion("jdbc.url");
String usuario= GestorFicheroConfiguracion.getValorDeConfiguracion("jdbc.usuario");
String password= GestorFicheroConfiguracion.getValorDeConfiguracion("jdbc.password");
conexion=DriverManager.getConnection(urlJDBC, usuario, password);
} catch (ClassNotFoundException | SQLException e) {
throw new CineException(e, GestorConexionJDBC.class, CineException.ERROR_GESTION_CONEXION);
}
return conexion;
}
}

View File

@ -0,0 +1,38 @@
package es.palomafp.aadd.inm.gestor;
import java.io.FileInputStream;
import java.util.Properties;
/**
*
* GestorFicheroConfiguracion: Clase que se encarga de gestionar el fichero de configuración.
*
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 31 oct 2025
*/
public class GestorFicheroConfiguracion {
private static final String RUTA_FICHERO_CONFIGURACION = "config/config.properties";
private static Properties propiedades;
private GestorFicheroConfiguracion() {
// Constructor privado para evitar instanciación
}
static {
propiedades= new Properties();
try {
// Fichero que está en el classpath
//propiedades.load(GestorFicheroConfiguracion.class.getClassLoader().getResourceAsStream(RUTA_FICHERO_CONFIGURACION));
// Fichero con ruta relativa al proyecto
propiedades.load(new FileInputStream(RUTA_FICHERO_CONFIGURACION));
} catch (Exception e) {
e.printStackTrace();
}
}
public static String getValorDeConfiguracion(String clave) {
String valor = null;
valor = propiedades.getProperty(clave);
return valor;
}
}

View File

@ -0,0 +1,25 @@
package es.palomafp.aadd.inm.util;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Date;
/**
*
* ConversorTiposDatos: Clase que realiza conversiones entre tipos de datos y formatos.
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 14 nov 2025
*
*
*/
public class ConversorTiposDatosYFormatos {
public static String convertirDateAString(Date fecha, String formato) {
String fechaFormateada = null;
fechaFormateada= LocalDate.parse(fecha.toString())
.format(DateTimeFormatter.ofPattern(formato));
return fechaFormateada;
}
}

View File

@ -0,0 +1,47 @@
package es.palomafp.aadd.inm.vo;
import java.util.Date;
/**
*
* Actor: Clase que representa el contenido de un Actor
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 2 oct 2025
*/
public class Actor {
private int identificador;
private String nombre;
private Date fechaNacimiento;
private Pais paisNacimiento;
public int getIdentificador() {
return identificador;
}
public void setIdentificador(int identificador) {
this.identificador = identificador;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public Date getFechaNacimiento() {
return fechaNacimiento;
}
public void setFechaNacimiento(Date fechaNacimiento) {
this.fechaNacimiento = fechaNacimiento;
}
public Pais getPaisNacimiento() {
return paisNacimiento;
}
public void setPaisNacimiento(Pais paisNacimiento) {
this.paisNacimiento = paisNacimiento;
}
@Override
public String toString() {
return "Actor [identificador=" + identificador + ", nombre=" + nombre + ", fechaNacimiento=" + fechaNacimiento
+ ", paisNacimiento=" + paisNacimiento + "]";
}
}

View File

@ -0,0 +1,31 @@
package es.palomafp.aadd.inm.vo;
/**
*
* Continente: Clase que representa el contenido de un Continente
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 2 oct 2025
*/
public class Continente {
private String codigo;
private String nombre;
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
@Override
public String toString() {
return "Continente [codigo=" + codigo + ", nombre=" + nombre + "]";
}
}

View File

@ -0,0 +1,47 @@
package es.palomafp.aadd.inm.vo;
import java.util.Date;
/**
*
* Director: Clase que representa el contenido de un Director
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 2 oct 2025
*/
public class Director {
private int identificador;
private String nombre;
private Date fechaNacimiento;
private Pais paisNacimiento;
public int getIdentificador() {
return identificador;
}
public void setIdentificador(int identificador) {
this.identificador = identificador;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public Date getFechaNacimiento() {
return fechaNacimiento;
}
public void setFechaNacimiento(Date fechaNacimiento) {
this.fechaNacimiento = fechaNacimiento;
}
public Pais getPaisNacimiento() {
return paisNacimiento;
}
public void setPaisNacimiento(Pais paisNacimiento) {
this.paisNacimiento = paisNacimiento;
}
@Override
public String toString() {
return "Actor [identificador=" + identificador + ", nombre=" + nombre + ", fechaNacimiento=" + fechaNacimiento
+ ", paisNacimiento=" + paisNacimiento + "]";
}
}

View File

@ -0,0 +1,44 @@
package es.palomafp.aadd.inm.vo;
/**
*
* Pais: Clase que representa el contenido de un Pais
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 2 oct 2025
*/
public class Pais {
private int identificador;
private String nombre;
private String capital;
private Continente continente;
public int getIdentificador() {
return identificador;
}
public void setIdentificador(int identificador) {
this.identificador = identificador;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getCapital() {
return capital;
}
public void setCapital(String capital) {
this.capital = capital;
}
public Continente getContinente() {
return continente;
}
public void setContinente(Continente continente) {
this.continente = continente;
}
@Override
public String toString() {
return "Pais [identificador=" + identificador + ", nombre=" + nombre + ", capital=" + capital + ", continente="
+ continente + "]\n";
}
}

View File

@ -0,0 +1,90 @@
package es.palomafp.aadd.inm.vo;
/**
*
* Pelicula: Clase que representa el contenido de un Pelicula
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 2 oct 2025
*/
public class Pelicula {
private int identificador;
private String titulo;
private int anyo;
private String idioma;
private boolean color;
private String observaciones;
private Director director;
private Pais paisLocalizacion;
public int getIdentificador() {
return identificador;
}
public void setIdentificador(int identificador) {
this.identificador = identificador;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public int getAnyo() {
return anyo;
}
public void setAnyo(int anyo) {
this.anyo = anyo;
}
public String getIdioma() {
return idioma;
}
public void setIdioma(String idioma) {
this.idioma = idioma;
}
public boolean isColor() {
return color;
}
public void setColor(boolean color) {
this.color = color;
}
public String getObservaciones() {
return observaciones;
}
public void setObservaciones(String observaciones) {
this.observaciones = observaciones;
}
public Director getDirector() {
return director;
}
public void setDirector(Director director) {
this.director = director;
}
public Pais getPaisLocalizacion() {
return paisLocalizacion;
}
public void setPaisLocalizacion(Pais paisLocalizacion) {
this.paisLocalizacion = paisLocalizacion;
}
@Override
public String toString() {
return "Pelicula [identificador=" + identificador + ", titulo=" + titulo + ", anyo=" + anyo + ", idioma="
+ idioma + ", color=" + color + ", observaciones=" + observaciones + ", director=" + director
+ ", paisLocalizacion=" + paisLocalizacion + "]";
}
}

View File

@ -0,0 +1,36 @@
package es.palomafp.aadd.inm.vo;
/**
*
* Reparto: Clase que representa el contenido de un Reparto
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 2 oct 2025
*/
public class Reparto {
private String personaje;
private Actor actor;
private Pelicula pelicula;
public String getPersonaje() {
return personaje;
}
public void setPersonaje(String personaje) {
this.personaje = personaje;
}
public Actor getActor() {
return actor;
}
public void setActor(Actor actor) {
this.actor = actor;
}
public Pelicula getPelicula() {
return pelicula;
}
public void setPelicula(Pelicula pelicula) {
this.pelicula = pelicula;
}
@Override
public String toString() {
return "Reparto [personaje=" + personaje + ", actor=" + actor + ", pelicula=" + pelicula + "]";
}
}