diff --git a/UyTube_aplicacion/src/Logica/Clases/Canal.java b/UyTube_aplicacion/src/Logica/Clases/Canal.java index 3d5b20757cd7f414df2104c95a209899b410b443..73843e22d4cd3775bdbaf417c24d8339f4f27970 100644 --- a/UyTube_aplicacion/src/Logica/Clases/Canal.java +++ b/UyTube_aplicacion/src/Logica/Clases/Canal.java @@ -137,6 +137,11 @@ public class Canal implements Serializable { public void agregarComentarioAVideo(int id, DtComentario comentario, Usuario usuario) { if (this.misVideos.containsKey(id)) { this.misVideos.get(id).agregarComentario(comentario, usuario); + try { + new VideoJpaController().edit(this.misVideos.get(id)); + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } } else { throw new RuntimeException("El video no pertenece al canal"); } @@ -251,6 +256,11 @@ public class Canal implements Serializable { public void agregarVideoALista(int id, Video video) { if (this.misListas.containsKey(id)) { this.misListas.get(id).agregarVideoA(video); + try { + new ListaDeReproduccionJpaController().edit(this.misListas.get(id)); + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } } else { throw new RuntimeException("La lista no pertenece al canal"); } diff --git a/UyTube_aplicacion/src/Logica/Clases/Comentario.java b/UyTube_aplicacion/src/Logica/Clases/Comentario.java index e20f3ff89af8b60507a6defa831318958356728b..d4f13cf95611d82749cd57ab836145d8d189789c 100644 --- a/UyTube_aplicacion/src/Logica/Clases/Comentario.java +++ b/UyTube_aplicacion/src/Logica/Clases/Comentario.java @@ -1,5 +1,6 @@ package Logica.Clases; +import JPAControllerClasses.ComentarioJpaController; import Logica.DataType.DtComentario; import java.io.Serializable; import java.sql.Date; @@ -13,6 +14,7 @@ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.Table; @@ -36,7 +38,7 @@ public class Comentario implements Serializable { @Column(name = "nivel") private int nivelSubComentario; - @OneToOne(cascade = CascadeType.REFRESH) + @ManyToOne() @JoinColumn(name = "nick_usuario") private Usuario usr; @@ -82,6 +84,10 @@ public class Comentario implements Serializable { return usr; } + public void setUsr(Usuario usr) { + this.usr = usr; + } + @Override public String toString() { return "Comentario{" + "id=" + id + ", fecha=" + fecha + ", texto=" + texto + ", nivelSubComentario=" + nivelSubComentario + '}'; @@ -100,6 +106,9 @@ public class Comentario implements Serializable { dtC.getTexto(), this.nivelSubComentario + 1, usr); + // crea la tupla en la base de datos + // asi se genera el ID y se puede agregar al Map + new ComentarioJpaController().create(com); this.misComentario.add(com); return true; } else { diff --git a/UyTube_aplicacion/src/Logica/Clases/Persona.java b/UyTube_aplicacion/src/Logica/Clases/Persona.java index f3dd8d412dab7a00d9c73f23bb770514c2d5dc50..599c6d0099d0efaa1df00940d5df94beb28aad43 100644 --- a/UyTube_aplicacion/src/Logica/Clases/Persona.java +++ b/UyTube_aplicacion/src/Logica/Clases/Persona.java @@ -11,7 +11,7 @@ import javax.persistence.InheritanceType; @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) public abstract class Persona implements Serializable { @Id - private Integer id; + private int id; @Column(name = "nombre") private String nombre; diff --git a/UyTube_aplicacion/src/Logica/Clases/Usuario.java b/UyTube_aplicacion/src/Logica/Clases/Usuario.java index 1ace7f42757e95eb8dfcb8451b69978862722143..72343784afc969e4ab8aa738dc412f77cc749c5c 100644 --- a/UyTube_aplicacion/src/Logica/Clases/Usuario.java +++ b/UyTube_aplicacion/src/Logica/Clases/Usuario.java @@ -158,8 +158,12 @@ public class Usuario extends Persona{ if(DtValoracion == null){ throw new RuntimeException("La valoracion no puede ser null"); } - this.MiCanal.agregarListaParticular(DtValoracion); + try { + new CanalJpaController().edit(this.MiCanal); + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } } public void agregarModificarValoracionDeVideo(int idVideo, DtValoracion DtValoracion, Usuario Usu){ @@ -209,8 +213,12 @@ public class Usuario extends Persona{ if(DtVideo == null){ throw new RuntimeException("El video no puede ser null"); } - this.MiCanal.agregarVideo(DtVideo); + try { + new CanalJpaController().edit(this.MiCanal); + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } } public void agregarVideoALista(int idLista , int idVideo, Usuario Usu){ @@ -223,7 +231,6 @@ public class Usuario extends Persona{ } catch (Exception e) { throw new RuntimeException("El video no pertenece al usuario: " + Usu.getNickname()); } - this.MiCanal.agregarVideoALista(idLista, v); } diff --git a/UyTube_aplicacion/src/Logica/Clases/Video.java b/UyTube_aplicacion/src/Logica/Clases/Video.java index 9f42f1f83ee16c9e801994319716b5206a4ba856..ace0464e062977dc2fee58bf7c5d725be0ed7733 100644 --- a/UyTube_aplicacion/src/Logica/Clases/Video.java +++ b/UyTube_aplicacion/src/Logica/Clases/Video.java @@ -127,6 +127,12 @@ public class Video implements Serializable { // crea la tupla en la base de datos // asi se genera el ID y se puede agregar al Map new ComentarioJpaController().create(nuevoComentario); + /*nuevoComentario.setUsr(usuario); + try { + new ComentarioJpaController().edit(nuevoComentario); + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + }*/ comentarios.put(nuevoComentario.getId(), nuevoComentario); } @@ -140,7 +146,14 @@ public class Video implements Serializable { } for (Map.Entry<Integer, Comentario> coment : comentarios.entrySet()) { - if(coment.getValue().agregarSubComentario(idCom, dtComentario, usuario)){ + if (coment.getValue().agregarSubComentario(idCom, dtComentario, usuario)) { + + try { + new ComentarioJpaController().edit(coment.getValue()); + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } + break; } } diff --git a/UyTube_aplicacion/src/Logica/Controladores/CAdmin.java b/UyTube_aplicacion/src/Logica/Controladores/CAdmin.java index f5099e0ee1327048166e633b8b8d6923f915a6e2..a82bc90ab1e6b1bd124bea1b2c8e94d82c32395a 100644 --- a/UyTube_aplicacion/src/Logica/Controladores/CAdmin.java +++ b/UyTube_aplicacion/src/Logica/Controladores/CAdmin.java @@ -1,6 +1,7 @@ package Logica.Controladores; // Interfaz que se realizara +import JPAControllerClasses.AdministradorJpaController; import JPAControllerClasses.CategoriaJpaController; import JPAControllerClasses.ListaPorDefectoJpaController; import JPAControllerClasses.UsuarioJpaController; @@ -16,6 +17,7 @@ import Logica.Clases.ListaPorDefecto; import java.util.Map; import java.util.TreeMap; import java.util.ArrayList; +import java.util.List; public class CAdmin implements IAdmin{ @@ -40,12 +42,27 @@ public class CAdmin implements IAdmin{ this.idListaSeleccionada = 0; this.idVideoSeleccionado = 0; - this.altaCategoria("UNDEFINED"); + // si la categoria no esta en la BDD, la crea + if ( ! existeCategoria("UNDEFINED")){ + this.altaCategoria("UNDEFINED"); + } + + sincronizarAdministradoresConBDD(); + sincronizarCategoriasConBDD(); + sincronizarListasPorDefectoConBDD(); + sincronizarUsuariosConBDD(); - // Administrador por defecto (temporal) - int id = 0; - Administrador root = new Administrador(id, "admin", "administrador", "root"); - this.administradores.put(id, root); + // si en la BDD no hay administrador, lo crea + if (this.administradores.isEmpty()) { + // Administrador por defecto (temporal) + Administrador root = new Administrador(0, "admin", "administrador", "root"); + try { + new AdministradorJpaController().create(root); + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } + this.administradores.put(root.getId(), root); + } } public static CAdmin getInstancia(){ @@ -55,6 +72,67 @@ public class CAdmin implements IAdmin{ return instancia; } + private void sincronizarUsuariosConBDD(){ + this.usuarios = new TreeMap(String.CASE_INSENSITIVE_ORDER); + try { + List<Usuario> usuariosEnBDD = new UsuarioJpaController().findUsuarioEntities(); + for (Usuario u : usuariosEnBDD){ + // si en BDD hay algo que no este en memoria + if ( ! this.usuarios.containsKey(u.getNickname())){ + this.usuarios.put(u.getNickname(), u); + } + } + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } + } + + private void sincronizarAdministradoresConBDD(){ + this.administradores = new TreeMap(); + try { + List<Administrador> administradoresEnBDD = new AdministradorJpaController().findAdministradorEntities(); + for (Administrador a : administradoresEnBDD){ + // si en BDD hay algo que no este en memoria + if ( ! this.administradores.containsKey(a.getId())){ + this.administradores.put(a.getId(), a); + } + } + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } + } + + private void sincronizarCategoriasConBDD(){ + this.categorias = new TreeMap(); + try { + List<Categoria> categoriasEnBDD = new CategoriaJpaController().findCategoriaEntities(); + for (Categoria c : categoriasEnBDD){ + // si en BDD hay algo que no este en memoria + if ( ! this.categorias.containsKey(c.getNombre())){ + this.categorias.put(c.getNombre(), c); + } + } + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } + } + + private void sincronizarListasPorDefectoConBDD(){ + this.listasPorDefecto = new TreeMap(); + try { + List<ListaPorDefecto> listasPorDefectoEnBDD = new ListaPorDefectoJpaController().findListaPorDefectoEntities(); + for (ListaPorDefecto l : listasPorDefectoEnBDD){ + // si en BDD hay algo que no este en memoria + if ( ! this.listasPorDefecto.containsKey(l.getNombre())){ + this.listasPorDefecto.put(l.getNombre(), l); + } + } + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } + } + + // //////////////////////////////////////////////////////////////////////////////////////// public void agregarVideoAListaDeReproduccion(int idLista){ /** * Agrega el video idVideoSeleccionado a la lista idListaSeleccionada @@ -72,11 +150,6 @@ public class CAdmin implements IAdmin{ throw new RuntimeException("El ID de la lista de reproduccion no es valido"); } usuarioActual.agregarVideoALista(idLista, idVideoSeleccionado, usuarioSeleccionado); - try { - new UsuarioJpaController().edit(usuarioActual); - } catch (Exception e) { - throw new RuntimeException(e.getMessage()); - } } public void altaCategoria(String categoria){ @@ -115,11 +188,6 @@ public class CAdmin implements IAdmin{ throw new RuntimeException("El sistema no tiene un video seleccionado"); } usuarioSeleccionado.agregarComentarioAVideo(idVideoSeleccionado, dtCom, usuarioActual); - try { - new UsuarioJpaController().edit(usuarioSeleccionado); - } catch (Exception e) { - throw new RuntimeException(e.getMessage()); - } } public void altaComentario(DtComentario dtCom, int idComPadre){ @@ -139,11 +207,6 @@ public class CAdmin implements IAdmin{ throw new RuntimeException("El sistema no tiene un video seleccionado"); } usuarioSeleccionado.agregarComentarioAVideo(idVideoSeleccionado, idComPadre, dtCom, usuarioActual); - try { - new UsuarioJpaController().edit(usuarioSeleccionado); - } catch (Exception e) { - throw new RuntimeException(e.getMessage()); - } } public void altaListaDeReproduccionParticular(DtListaDeReproduccion lista) { @@ -160,11 +223,6 @@ public class CAdmin implements IAdmin{ throw new RuntimeException("La categoria no existe"); } usuarioSeleccionado.agregarListaParticular(lista); - try { - new UsuarioJpaController().edit(usuarioSeleccionado); - } catch (Exception e) { - throw new RuntimeException(e.getMessage()); - } } public void altaListaDeReproduccionPorDefecto(DtListaDeReproduccion lista){ @@ -192,11 +250,6 @@ public class CAdmin implements IAdmin{ nuevaLista.add(lista.getNombre()); for (Map.Entry<String, Usuario> u : usuarios.entrySet()){ u.getValue().actualizarListasPorDefecto(nuevaLista); - try { - new UsuarioJpaController().edit(u.getValue()); - } catch (Exception e) { - throw new RuntimeException(e.getMessage()); - } } } @@ -280,17 +333,13 @@ public class CAdmin implements IAdmin{ throw new RuntimeException("La categoria no existe"); } usuarioSeleccionado.agregarVideoACanal(video); - try { - new UsuarioJpaController().edit(usuarioSeleccionado); - } catch (Exception e) { - throw new RuntimeException(e.getMessage()); - } } public boolean existeCategoria(String cat){ /** * Verifica si existe una categoria con el nombre recibido */ + sincronizarCategoriasConBDD(); return categorias.containsKey(cat); } @@ -298,6 +347,7 @@ public class CAdmin implements IAdmin{ /** * Verifica si existe un usuario con el mail recibido */ + sincronizarUsuariosConBDD(); for (Map.Entry<String, Usuario> u : usuarios.entrySet()){ if (u.getValue().getCorreo().equals(email)){ return true; @@ -310,10 +360,12 @@ public class CAdmin implements IAdmin{ /** * Verifica si existe un usuario con el nickname recibido */ + sincronizarUsuariosConBDD(); return usuarios.containsKey(nickname); } public boolean iniciarSesionAdministrador(int id, String pass){ + sincronizarAdministradoresConBDD(); Administrador a = administradores.get(id); if (a == null){ return false; @@ -322,6 +374,7 @@ public class CAdmin implements IAdmin{ } public boolean iniciarSesionUsuario(String nickname, String pass){ + sincronizarUsuariosConBDD(); Usuario u = usuarios.get(nickname); if (u == null){ return false; @@ -353,6 +406,7 @@ public class CAdmin implements IAdmin{ /** * Devuelve todas las categorias existentes en el sistema */ + sincronizarCategoriasConBDD(); ArrayList<String> ret = new ArrayList(); for (Map.Entry<String, Categoria> c : categorias.entrySet()){ ret.add(c.getValue().getNombre()); @@ -377,10 +431,11 @@ public class CAdmin implements IAdmin{ /** * Devuelve todos las listas de reproduccion del sistema que pertenezcan a la categoria indicada */ - if (cat.equals("")){ throw new RuntimeException("La categoria no puede ser vacia"); } + sincronizarUsuariosConBDD(); + sincronizarCategoriasConBDD(); ArrayList<DtListaDeReproduccion> ret = new ArrayList(); for (Map.Entry<String, Usuario> u : usuarios.entrySet()){ ret.addAll(u.getValue().obtenerListasEnCategoria(cat)); @@ -478,6 +533,7 @@ public class CAdmin implements IAdmin{ /** * Devuelve todos los datos de todos los usuarios */ + sincronizarUsuariosConBDD(); ArrayList<DtUsuario> ret = new ArrayList<>(); for (Map.Entry<String, Usuario> usuario : usuarios.entrySet()) { ret.add(usuario.getValue().getDT()); @@ -492,6 +548,8 @@ public class CAdmin implements IAdmin{ if (cat.equals("")){ throw new RuntimeException("La categoria no puede ser vacia"); } + sincronizarUsuariosConBDD(); + sincronizarCategoriasConBDD(); ArrayList<DtVideo> ret = new ArrayList(); for (Map.Entry<String, Usuario> u : usuarios.entrySet()){ ret.addAll(u.getValue().obtenerVideosEnCategoria(cat)); @@ -613,6 +671,7 @@ public class CAdmin implements IAdmin{ } public DtUsuario obtenerPropietarioDeVideo(int idVideo){ + sincronizarUsuariosConBDD(); // Esto es un parche, pero de los que nunca se despegan... // A tiempos desesperados, medidas desesperadas for (Map.Entry<String, Usuario> u : usuarios.entrySet()){ @@ -693,6 +752,7 @@ public class CAdmin implements IAdmin{ * El sistema recuerda un link al usuario como usuarioSeleccionado * Devuelve los datos de usuarioSeleccionado */ + sincronizarUsuariosConBDD(); usuarioSeleccionado = usuarios.get(nickname); if (usuarioSeleccionado == null){ throw new RuntimeException("No se encontro ningun usuario con ese nickname"); @@ -705,6 +765,7 @@ public class CAdmin implements IAdmin{ El sistema recuerda un link al usuario como usuarioActual Devuelve los datos de usuarioActual * */ + sincronizarUsuariosConBDD(); usuarioActual = usuarios.get(nickname); if (usuarioActual == null){ throw new RuntimeException("No se encontro ningun usuario con ese nickname"); @@ -765,6 +826,7 @@ public class CAdmin implements IAdmin{ if (this.usuarioSeleccionado == null){ throw new RuntimeException("El sistema no tiene un usuario seleccionado"); } + sincronizarListasPorDefectoConBDD(); if (listasPorDefecto.containsKey(nombre)) { return false; } @@ -776,7 +838,8 @@ public class CAdmin implements IAdmin{ * Devuelve false si existe algun usuario en el sistema que posea una * lista de reproduccion con ese nombre */ - + sincronizarListasPorDefectoConBDD(); + sincronizarUsuariosConBDD(); if (listasPorDefecto.containsKey(nombre)) { return false; } diff --git a/UyTube_aplicacion/src/Presentacion/DatosDePrueba.java b/UyTube_aplicacion/src/Presentacion/DatosDePrueba.java index 957263b80fade6a11c439a378f9561d61a6894e2..c6c66a63f2d565c8eba9c4a39e5cf2faccd9560e 100644 --- a/UyTube_aplicacion/src/Presentacion/DatosDePrueba.java +++ b/UyTube_aplicacion/src/Presentacion/DatosDePrueba.java @@ -43,9 +43,24 @@ public class DatosDePrueba { System.out.println(e.getMessage()); System.out.println("//////////////////////////"); } + /* + for (DtUsuario u : sys.listarUsuarios()) { + System.out.println(u.toString()); + } + + for (String c : sys.listarCategorias()) { + System.out.println(c); + } + */ cargarCategorias(); - sys.altaListaDeReproduccionPorDefecto(new DtListaDeReproduccion(0, "Ver mas tarde", Privacidad.PRIVADO, TipoListaDeReproduccion.POR_DEFECTO, "UNDEFINED")); + try { + sys.altaListaDeReproduccionPorDefecto(new DtListaDeReproduccion(0, "Ver mas tarde", Privacidad.PRIVADO, TipoListaDeReproduccion.POR_DEFECTO, "UNDEFINED")); + } catch (Exception e) { + } + if (sys.listarUsuarios().size() != 0){ + return; + } cargarUsuariosYCanales(); cargarSeguidores(); cargarVideosAUsuarios(); @@ -57,13 +72,19 @@ public class DatosDePrueba { sys.liberarMemoriaVideo(); sys.liberarMemoriaUsuarioActual(); sys.liberarMemoriaUsuario(); - } private static void cargarCategorias(){ - sys.altaCategoria("MUSICA"); - sys.altaCategoria("DEPORTE"); - sys.altaCategoria("GAMING"); + ArrayList<String> cats = new ArrayList(); + cats.add("MUSICA"); + cats.add("DEPORTE"); + cats.add("GAMING"); + + for (String c : cats){ + if ( ! sys.existeCategoria(c)){ + sys.altaCategoria(c); + } + } } private static void cargarUsuariosYCanales(){ @@ -295,7 +316,7 @@ public class DatosDePrueba { private static void agregarComentarios(){ sys.seleccionarUsuario("JotaJota96"); - sys.seleccionarVideo(1); + sys.seleccionarVideo(sys.listarVideosDeUsuario().get(0).getId()); // 1 sys.seleccionarUsuarioActual("LuC31G"); @@ -357,7 +378,8 @@ public class DatosDePrueba { boolean vacio = true; for (DtComentario c : sys.listarComentariosDeVideo()){ vacio = false; - tab(tab+2); tab(c.getNivelSubComentario()); System.out.println(c.toString()); + tab(tab+2); tab(c.getNivelSubComentario()); + System.out.println(c.getId() + ". " + c.getNickname() + ": " + c.getTexto()); } if (vacio){ tab(tab+2); System.out.println("No hay comentarios"); diff --git a/UyTube_aplicacion/src/Presentacion/Pryevas.java b/UyTube_aplicacion/src/Presentacion/Pryevas.java index 333c0da091f5bf4969f2b6a7cbbcbb939c7dc310..ff3c1fac7327f9db106ac2340f8ac1bb5ea13441 100644 --- a/UyTube_aplicacion/src/Presentacion/Pryevas.java +++ b/UyTube_aplicacion/src/Presentacion/Pryevas.java @@ -1,6 +1,9 @@ package Presentacion; +import JPAControllerClasses.ComentarioJpaController; +import JPAControllerClasses.VideoJpaController; import Logica.Clases.Canal; +import Logica.Clases.Comentario; import Logica.Clases.Usuario; import Logica.Clases.Video; import Logica.DataType.DtCanal; @@ -24,11 +27,30 @@ public class Pryevas { EntityManagerFactory factory = Persistence.createEntityManagerFactory("UyTubePU"); EntityManager manager = factory.createEntityManager(); + + + /* + manager.getTransaction().begin(); + Usuario usu = manager.find(Usuario.class, "camilillo15"); + Video vid = manager.find(Video.class, 18); + manager.getTransaction().commit(); + + vid.agregarComentario( + new DtComentario(0, "", new Date(90, 5, 5), "texto", 0), + usu + ); + new VideoJpaController().edit(vid); + + */ + + + //Comentario c = new Comentario(0, new Date(90, 5, 5), "texto", 0, usu); + //new ComentarioJpaController().create(c); + } catch (Exception e) { + System.out.println("*************************************************"); System.out.println(e.getMessage()); - throw new RuntimeException( - "Ocurrió un error al conectar con la base de datos" + "\n" + - "Es posible que la información no haya sido almacenada"); + System.out.println("*************************************************"); } }