From 9141106d41025a6fb5d03778a6d1c6656974bc72 Mon Sep 17 00:00:00 2001 From: JotaJota96 <jjap96@gmail.com> Date: Thu, 3 Oct 2019 02:34:22 -0300 Subject: [PATCH] Varias funciones de CUsuario implementadas, maniana sigo... --- .../src/Logica/Controladores/CUsuario.java | 300 ++++++++++++++++-- .../src/Logica/DatosDePrueba.java | 10 +- .../src/Logica/Interfaces/IUsuario.java | 17 + 3 files changed, 305 insertions(+), 22 deletions(-) diff --git a/UyTube_aplicacion/src/Logica/Controladores/CUsuario.java b/UyTube_aplicacion/src/Logica/Controladores/CUsuario.java index 528560d..82b4340 100644 --- a/UyTube_aplicacion/src/Logica/Controladores/CUsuario.java +++ b/UyTube_aplicacion/src/Logica/Controladores/CUsuario.java @@ -1,5 +1,8 @@ package Logica.Controladores; +import JPAControllerClasses.CategoriaJpaController; +import JPAControllerClasses.ListaPorDefectoJpaController; +import JPAControllerClasses.UsuarioJpaController; import Logica.Clases.Categoria; import Logica.Clases.ListaPorDefecto; import Logica.Clases.Usuario; @@ -11,8 +14,11 @@ import Logica.DataType.DtValoracion; import Logica.DataType.DtVideo; import Logica.Enumerados.Filtrado; import Logica.Enumerados.Ordenacion; +import Logica.Fabrica; +import Logica.Interfaces.IAdmin; import Logica.Interfaces.IUsuario; import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.TreeMap; @@ -39,43 +45,164 @@ public class CUsuario implements IUsuario { //***************** Traer datos de la base de datos ******************* + /** + * Lista los usuarios no eliminados desde la base de datos + * @return Mapa de usuarios indexados por nickname + */ private Map<String, Usuario> obtenerUsuarios(){ Map<String, Usuario> usuarios = new TreeMap(); + try { + List<Usuario> usuariosEnBDD = new UsuarioJpaController().findUsuarioEntities(); + for (Usuario u : usuariosEnBDD){ + usuarios.put(u.getNickname(), u); + } + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } return usuarios; } + + /** + * Lista las categorias desde la base de datos + * @return Mapa de categorias indexados por nombre + */ private Map<String, Categoria> obtenerCategorias(){ Map<String, Categoria> categorias = new TreeMap(); + try { + List<Categoria> categoriasEnBDD = new CategoriaJpaController().findCategoriaEntities(); + for (Categoria c : categoriasEnBDD){ + categorias.put(c.getNombre(), c); + } + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } return categorias; } + + /** + * Lista los nombres de las listas por defecto desde la base de datos + * @return Mapa de listas por defecto indexados por nombre + */ private Map<String, ListaPorDefecto> obtenerListasPorDefecto(){ Map<String, ListaPorDefecto> ListasPorDefecto = new TreeMap(); + try { + List<ListaPorDefecto> listasPorDefectoEnBDD = new ListaPorDefectoJpaController().findListaPorDefectoEntities(); + for (ListaPorDefecto l : listasPorDefectoEnBDD){ + ListasPorDefecto.put(l.getNombre(), l); + } + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } return ListasPorDefecto; } //******************** Funciones de la interfaz ************************ @Override public void agregarVideoAListaDeReproduccion(int idLista) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + if (usuarioActual == null){ + throw new RuntimeException("No se ha iniciado sesión"); + } + if (usuarioSeleccionado == null){ + throw new RuntimeException("El sistema no tiene un usuario seleccionado"); + } + if (idVideoSeleccionado == 0){ + throw new RuntimeException("El sistema no tiene un video seleccionado"); + } + if (idLista == 0){ + throw new RuntimeException("El ID de la lista de reproduccion no es valido"); + } + usuarioActual.agregarVideoALista(idLista, idVideoSeleccionado, usuarioSeleccionado); } @Override public void altaComentario(DtComentario dtCom) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + if (usuarioActual == null){ + throw new RuntimeException("No se ha iniciado sesión"); + } + if (usuarioSeleccionado == null){ + throw new RuntimeException("El sistema no tiene un usuario seleccionado"); + } + if (dtCom == null){ + throw new RuntimeException("El DataType comentario no puede ser null"); + } + if (idVideoSeleccionado == 0){ + throw new RuntimeException("El sistema no tiene un video seleccionado"); + } + usuarioSeleccionado.agregarComentarioAVideo(idVideoSeleccionado, dtCom, usuarioActual); } @Override public void altaComentario(DtComentario dtCom, int idComPadre) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + if (usuarioActual == null){ + throw new RuntimeException("No se ha iniciado sesión"); + } + if (usuarioSeleccionado == null){ + throw new RuntimeException("El sistema no tiene un usuario seleccionado"); + } + if (dtCom == null){ + throw new RuntimeException("El DataType comentario no puede ser null"); + } + if (idVideoSeleccionado == 0){ + throw new RuntimeException("El sistema no tiene un video seleccionado"); + } + usuarioSeleccionado.agregarComentarioAVideo(idVideoSeleccionado, idComPadre, dtCom, usuarioActual); } @Override public void altaListaDeReproduccionParticular(DtListaDeReproduccion lista) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + if (usuarioActual == null) { + throw new RuntimeException("No se ha iniciado sesión"); + } + if (lista == null) { + throw new RuntimeException("El DataType recibido es null"); + } + if ( ! this.obtenerCategorias().containsKey(lista.getCategoria())) { + throw new RuntimeException("La categoria no existe"); + } + usuarioActual.agregarListaParticular(lista); } @Override public void altaUsuarioCanal(DtUsuario usr, DtCanal canal) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + // valida datos recibidos + if (usr == null){ + throw new RuntimeException("El DataType usuario no puede ser null"); + } + if (canal == null){ + throw new RuntimeException("El DataType canal no puede ser null"); + } + if (existeNickname(usr.getNickname())){ + throw new RuntimeException("El sistema ya tiene un usuario con ese nickname"); + } + if (existeEmail(usr.getCorreo())){ + throw new RuntimeException("El sistema ya tiene un usuario con ese correo"); + } + // obtiene las listas por defecto que el usuario debera crear + ArrayList<String> listasDefault = new ArrayList(); + for (Map.Entry<String, ListaPorDefecto> lpd : this.obtenerListasPorDefecto().entrySet()) { + listasDefault.add(lpd.getKey()); + } + // Crea al usuario + Usuario nuevoUsuario = new Usuario( + usr.getNickname(), + usr.getCorreo(), + usr.getFechaNacimiento(), + usr.getImagen(), + usr.getContrasenia(), + usr.getNombre(), + usr.getApellido(), + canal + ); + // persiste el usuario + try { + new UsuarioJpaController().create(nuevoUsuario); + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } + // Actualiza sus listas por defecto + nuevoUsuario.actualizarListasPorDefecto(listasDefault); + // Le inicia la sesion + this.iniciarSesionUsuario(usr.getNickname(), usr.getContrasenia()); } @Override @@ -85,7 +212,12 @@ public class CUsuario implements IUsuario { @Override public void bajaUsuario() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + // Bienvenido al parche + // La verdad no sabia bien como implementar esta funcion, asi que mejor no reinventar la rueda, uso la que ya existe aunque implique llamar al otro controlador... + IAdmin ca = Fabrica.getInstancia().getIAdmin(); + ca.seleccionarUsuarioActual(usuarioActual.getNickname()); + cerrarSesion(); + ca.bajaUsuario(); } @Override @@ -115,9 +247,49 @@ public class CUsuario implements IUsuario { @Override public boolean iniciarSesionUsuario(String nickOEmail, String contrasenia) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + if (usuarioActual != null){ + throw new RuntimeException("Ya hay un usuario con la sesión iniciada"); + } + Map<String, Usuario> usuarios = obtenerUsuarios(); + boolean usuarioEncontrado = false; + usuarioActual = usuarios.get(nickOEmail); + if (usuarioActual == null){ + for (Map.Entry<String, Usuario> u : usuarios.entrySet()) { + if (u.getValue().getCorreo().equals(nickOEmail)){ + usuarioActual = u.getValue(); + usuarioEncontrado = true; + break; + } + } + }else{ + usuarioEncontrado = true; + } + + if (usuarioEncontrado){ + if (usuarioActual.validarContrasenia(contrasenia)){ + return true; + }else{ + usuarioActual = null; + } + } + return false; } + @Override + public void liberarMemoriaListaDeReproduccion(){ + idListaSeleccionada = 0; + } + + @Override + public void liberarMemoriaUsuario(){ + usuarioSeleccionado = null; + } + + @Override + public void liberarMemoriaVideo(){ + idVideoSeleccionado = 0; + } + @Override public ArrayList<String> listarCategorias() { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. @@ -135,17 +307,27 @@ public class CUsuario implements IUsuario { @Override public ArrayList<DtUsuario> listarUsuarioSeguidores() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + if (this.usuarioSeleccionado == null){ + throw new RuntimeException("El sistema no tiene un usuario seleccionado"); + } + return usuarioSeleccionado.listarUsuariosSeguidores(); } @Override public ArrayList<DtUsuario> listarUsuarioSeguidos() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + if (this.usuarioSeleccionado == null){ + throw new RuntimeException("El sistema no tiene un usuario seleccionado"); + } + return usuarioSeleccionado.listarUsuariosSeguidos(); } @Override public ArrayList<DtUsuario> listarUsuarios() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + ArrayList<DtUsuario> ret = new ArrayList<>(); + for (Map.Entry<String, Usuario> usuario : obtenerUsuarios().entrySet()) { + ret.add(usuario.getValue().getDT()); + } + return ret; } @Override @@ -180,12 +362,32 @@ public class CUsuario implements IUsuario { @Override public DtUsuario obtenerPropietarioDeVideo(int idVideo) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + // Esto es un parche, pero de los que nunca se despegan... + // A tiempos desesperados, medidas desesperadas + for (Map.Entry<String, Usuario> u : this.obtenerUsuarios().entrySet()){ + try { + u.getValue().obtenerVideo(idVideo); + return u.getValue().getDT(); + } catch (Exception e) { + // a seguir buscando + } + } + throw new RuntimeException("El iID de video no crresponde a ningun usuario"); } @Override public DtUsuario obtenerPropietarioDeListaDeReproduccion(int idLista) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + // Esto es un parche, pero de los que nunca se despegan... + // A tiempos desesperados, medidas desesperadas + for (Map.Entry<String, Usuario> u : this.obtenerUsuarios().entrySet()){ + try { + u.getValue().obtenerListaDeReproduccion(idLista); + return u.getValue().getDT(); + } catch (Exception e) { + // a seguir buscando + } + } + throw new RuntimeException("El iID de video no crresponde a ningun usuario"); } @Override @@ -205,37 +407,97 @@ public class CUsuario implements IUsuario { @Override public void seguirUsuario() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + if (this.usuarioActual == null){ + throw new RuntimeException("No se ha iniciado sesión"); + } + if (this.usuarioSeleccionado == null){ + throw new RuntimeException("El sistema no tiene un usuario seleccionado"); + } + usuarioActual.agregarOQuitarSeguido(usuarioSeleccionado); + try { + new UsuarioJpaController().edit(usuarioSeleccionado); + new UsuarioJpaController().edit(usuarioActual); + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } } @Override public DtUsuario seleccionarUsuario(String nickname) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + usuarioSeleccionado = obtenerUsuarios().get(nickname); + if (usuarioSeleccionado == null){ + throw new RuntimeException("No se encontro ningun usuario con ese nickname"); + } + return usuarioSeleccionado.getDT(); } @Override public DtListaDeReproduccion seleccionarListaDeReproduccion(int idLista) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + if (this.usuarioSeleccionado == null){ + String nick = this.obtenerPropietarioDeListaDeReproduccion(idLista).getNickname(); + this.seleccionarUsuario(nick); + } + DtListaDeReproduccion ret = usuarioSeleccionado.obtenerListaDeReproduccion(idLista); + idListaSeleccionada = idLista; + return ret; } @Override public DtVideo seleccionarVideo(int idVideo) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + if (this.usuarioSeleccionado == null){ + String nick = this.obtenerPropietarioDeVideo(idVideo).getNickname(); + this.seleccionarUsuario(nick); + } + DtVideo ret = usuarioSeleccionado.obtenerVideoDeCanal(idVideo); + idVideoSeleccionado = idVideo; + return ret; } @Override public boolean validarNuevaListaParticular(String nombre) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + if (this.usuarioActual == null){ + throw new RuntimeException("No se ha iniciado sesión"); + } + if (obtenerListasPorDefecto().containsKey(nombre)) { + return false; + } + if (idListaSeleccionada != 0){ + if (usuarioActual.obtenerListaDeReproduccion(idListaSeleccionada).getNombre().equals(nombre)){ + return true; + } + } + return usuarioActual.validarListaParticular(nombre); } @Override public boolean validarNuevoVideo(String nombre) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + if (this.usuarioActual == null){ + throw new RuntimeException("No se ha iniciado sesión"); + } + if (idVideoSeleccionado != 0){ + if (usuarioActual.obtenerVideo(idVideoSeleccionado).getNombre().equals(nombre)){ + return true; + } + } + return usuarioActual.validarListaParticular(nombre); } @Override public void valorarVideo(DtValoracion val) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + if (this.usuarioActual == null){ + throw new RuntimeException("No se ha iniciado sesión"); + } + if (usuarioSeleccionado == null){ + throw new RuntimeException("El sistema no tiene un usuario seleccionado"); + } + if (idVideoSeleccionado == 0){ + throw new RuntimeException("El sistema no tiene un video seleccionado"); + } + if (val == null){ + usuarioSeleccionado.quitarValoracion(idVideoSeleccionado, usuarioActual.getNickname()); + }else{ + usuarioSeleccionado.agregarModificarValoracionDeVideo(idVideoSeleccionado, val, usuarioActual); + } } } diff --git a/UyTube_aplicacion/src/Logica/DatosDePrueba.java b/UyTube_aplicacion/src/Logica/DatosDePrueba.java index abb9de0..3180acb 100644 --- a/UyTube_aplicacion/src/Logica/DatosDePrueba.java +++ b/UyTube_aplicacion/src/Logica/DatosDePrueba.java @@ -1,12 +1,16 @@ package Logica; +import Logica.Clases.Usuario; import Logica.Controladores.CAdmin; +import Logica.Controladores.CUsuario; import Logica.Interfaces.IAdmin; import Logica.DataType.*; import Logica.Enumerados.*; +import Logica.Interfaces.IUsuario; import java.sql.Date; import java.sql.Time; import java.util.ArrayList; +import java.util.Map; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; @@ -16,6 +20,7 @@ import javax.persistence.Persistence; */ public class DatosDePrueba { private static IAdmin sys = null; + private static IUsuario sis = null; public static void main(String[] args) { probar(); @@ -24,14 +29,13 @@ public class DatosDePrueba { private static void probar(){ Fabrica f = Fabrica.getInstancia(); - sys = f.getIAdmin(); + sis = f.getIUsuario(); + CUsuario su = CUsuario.getInstancia(); try { - EntityManagerFactory factory = Persistence.createEntityManagerFactory("UyTubePU"); EntityManager manager = factory.createEntityManager(); - //CAdmin ca = CAdmin.getInstancia(); /** diff --git a/UyTube_aplicacion/src/Logica/Interfaces/IUsuario.java b/UyTube_aplicacion/src/Logica/Interfaces/IUsuario.java index be8acd9..1e10aff 100644 --- a/UyTube_aplicacion/src/Logica/Interfaces/IUsuario.java +++ b/UyTube_aplicacion/src/Logica/Interfaces/IUsuario.java @@ -41,6 +41,7 @@ public interface IUsuario { /** * Da de alta un usuario y su canal a partir de los datos recibidos + * Luego de darlo de alta, el usuario queda con la sesión iniciada * * @param usr Datos del usuario a dar de alta * @param canal Datos del canal del usuario @@ -56,6 +57,7 @@ public interface IUsuario { /** * Da de baja al usuarioActual + * En el proceso se cierra la sesion */ public void bajaUsuario(); @@ -116,6 +118,21 @@ public interface IUsuario { */ public boolean iniciarSesionUsuario(String nickOEmail, String contrasenia); + /** + * Libera memoria de la lista de reproduccion seleccionada + */ + public void liberarMemoriaListaDeReproduccion(); + + /** + * Libera memoria del usuario seleccionado + */ + public void liberarMemoriaUsuario(); + + /** + * Libera memoria del video seleccionado + */ + public void liberarMemoriaVideo(); + /** * Devuelve todas las categorias existentes en el sistema * -- GitLab