diff --git a/UyTube_aplicacion/src/Logica/Clases/Canal.java b/UyTube_aplicacion/src/Logica/Clases/Canal.java index 57eb71643b62afd0cb79f3d5360f6421b5d63818..526a666c674bc3052e06e48cb7c6dacc4b03fbce 100644 --- a/UyTube_aplicacion/src/Logica/Clases/Canal.java +++ b/UyTube_aplicacion/src/Logica/Clases/Canal.java @@ -132,6 +132,13 @@ public class Canal { throw new RuntimeException("La categoria no puede ser vacia"); } + // un canal no puede tener dos videos con el mismo nomre + for (Map.Entry<Integer, ListaDeReproduccion> v : misListas.entrySet()){ + if (v.getValue().getNombre().equals(listaReproduccion.getNombre())){ + throw new RuntimeException("El canal ya posee una lista de reproduccion con ese nombre"); + } + } + ListaDeReproduccion ldr = new ListaDeReproduccion( idLdr, listaReproduccion.getNombre(), @@ -283,6 +290,9 @@ public class Canal { for (Map.Entry<Integer, Video> m : misVideos.entrySet()) { m.getValue().setPrivacidad(Privacidad.PRIVADO); } + for (Map.Entry<Integer, ListaDeReproduccion> m : misListas.entrySet()) { + m.getValue().setPrivacidad(Privacidad.PRIVADO); + } } this.nombre = canal.getNombre(); @@ -291,6 +301,9 @@ public class Canal { } public void modificarListaDeReproduccion(DtListaDeReproduccion ldr) { + if (ldr == null) { + throw new RuntimeException("El Datatype de la lista de reprodccion es null"); + } if (this.misListas.containsKey(ldr.getId())) { if (this.privacidad == Privacidad.PRIVADO && ldr.getPrivacidad() == Privacidad.PUBLICO){ @@ -304,6 +317,10 @@ public class Canal { } public void modificarVideo(DtVideo video) { + if(video== null){ + throw new RuntimeException("El Datatype del video es null"); + } + if (this.misVideos.containsKey(video.getId())) { if (this.privacidad == Privacidad.PRIVADO && video.getPrivacidad() == Privacidad.PUBLICO){ diff --git a/UyTube_aplicacion/src/Logica/Clases/ListaDeReproduccion.java b/UyTube_aplicacion/src/Logica/Clases/ListaDeReproduccion.java index b87adb7324208e2609060ad5ceeaee94f331bee8..003fbc6ffd9cf27ea0c022d8173d661970266549 100644 --- a/UyTube_aplicacion/src/Logica/Clases/ListaDeReproduccion.java +++ b/UyTube_aplicacion/src/Logica/Clases/ListaDeReproduccion.java @@ -65,6 +65,10 @@ public class ListaDeReproduccion { return privacidad; } + public void setPrivacidad(Privacidad privacidad) { + this.privacidad = privacidad; + } + public TipoListaDeReproduccion getTipo() { return tipo; } diff --git a/UyTube_aplicacion/src/Logica/Clases/Persona.java b/UyTube_aplicacion/src/Logica/Clases/Persona.java index da1e0fb7b691b8a472451d715cff787fa0822e12..f6d4a02f9d0d6b4619de7d05a129fc7fea7ae2c1 100644 --- a/UyTube_aplicacion/src/Logica/Clases/Persona.java +++ b/UyTube_aplicacion/src/Logica/Clases/Persona.java @@ -1,20 +1,17 @@ package Logica.Clases; public class Persona { - String nombre; - String apellido; - String contrnia; - - public Persona(){ - this.nombre = ""; - this.apellido = ""; - this.contrnia = ""; - } - - public Persona(String nombre, String apellido, String contrnia) { + private String nombre; + private String apellido; + private String contrasenia; + + public Persona(String nombre, String apellido, String contrasenia) { + if(contrasenia == ""){ + throw new RuntimeException("La contraseña no puede ser Vacio"); + } this.nombre = nombre; this.apellido = apellido; - this.contrnia = contrnia; + this.contrasenia = contrasenia; } public String getNombre() { @@ -33,13 +30,16 @@ public class Persona { this.apellido = apellido; } - public String getContraseña() { - return contrnia; + public String getContrasena() { + return contrasenia; } - public void setContraseña(String contraseña) { - this.contrnia = contraseña; + public void setContrasenia(String contrasenia) { + this.contrasenia = contrasenia; } + public boolean validarContrasenia(String pass){ + return this.contrasenia.equals(pass); + } } diff --git a/UyTube_aplicacion/src/Logica/Clases/Usuario.java b/UyTube_aplicacion/src/Logica/Clases/Usuario.java index 7f4cf84439f86c5d19bd202dbbf119caa9a253af..2d7ce3aa7e2bab9b504901740d3be3acfba81ce1 100644 --- a/UyTube_aplicacion/src/Logica/Clases/Usuario.java +++ b/UyTube_aplicacion/src/Logica/Clases/Usuario.java @@ -17,8 +17,6 @@ public class Usuario extends Persona{ private Map<String, Usuario> seguidos; - public Usuario() {} - public Usuario(String nickname, String correo, Date fechaNacimiento, String imagen, String contrasenia, String nombre, String apellido ,DtCanal DTC) { super(nombre,apellido,contrasenia); @@ -36,11 +34,6 @@ public class Usuario extends Persona{ throw new RuntimeException("El correo no puede ser Vacio"); } - if(contrasenia == ""){ - throw new RuntimeException("La contraseña no puede ser Vacio"); - } - - this.nickname = nickname; this.correo = correo; this.fechaNacimiento = fechaNacimiento; @@ -72,7 +65,7 @@ public class Usuario extends Persona{ } public DtUsuario getDT(){ - return new DtUsuario(this.nickname, this.contrnia, this.nombre, this.apellido, this.correo, this.fechaNacimiento, this.imagen, this.seguidores);//Es el otro constructor + return new DtUsuario(this.nickname, super.getContrasena(), super.getNombre(), super.getApellido(), this.correo, this.fechaNacimiento, this.imagen, this.seguidores); } public void actualizarListasPorDefecto(){ @@ -124,6 +117,9 @@ public class Usuario extends Persona{ if(Usu == null){ throw new RuntimeException("El usuario no puede ser null"); } + if(Usu == this){ + throw new RuntimeException("Un usuario no se puede seguir a si mismo"); + } if (this.seguidos.containsKey(Usu.getNickname())){ this.seguidos.remove(Usu.getNickname()); @@ -134,7 +130,8 @@ public class Usuario extends Persona{ Usu.agregarOQuitarSeguidor(this); } - public void agregarOQuitarSeguidor(Usuario Usu){ + // si, esta si es private, no es un error + private void agregarOQuitarSeguidor(Usuario Usu){ if(Usu == null){ throw new RuntimeException("El usuario no puede ser null"); } @@ -161,7 +158,11 @@ public class Usuario extends Persona{ throw new RuntimeException("El usuario no puede ser null"); } - this.agregarVideoALista(idLista, idVideo, Usu); + Video v = Usu.obtenerVideo(idVideo); + if (v == null){ + throw new RuntimeException("El video no pertenece al usuario: " + Usu.getNickname()); + } + this.MiCanal.agregarVideoALista(idLista, v); } public ArrayList<DtComentario> listarComentariosDeVideo(int idVideo){ @@ -210,13 +211,16 @@ public class Usuario extends Persona{ if(DtUsu == null){ throw new RuntimeException("El usuario no puede ser null"); } + if(DtUsu.getFechaNacimiento() == null){ + throw new RuntimeException("La fecha no puede ser null"); + } if(DtCanal == null){ throw new RuntimeException("El canal no puede ser null"); } - this.nombre = DtUsu.getNombre(); - this.apellido = DtUsu.getApellido(); - this.contrnia = DtUsu.getContrasenia(); + super.setNombre(DtUsu.getNombre()); + super.setApellido(DtUsu.getApellido()); + super.setContrasenia(DtUsu.getContrasenia()); this.fechaNacimiento = DtUsu.getFechaNacimiento(); this.imagen = DtUsu.getImagen(); @@ -227,7 +231,7 @@ public class Usuario extends Persona{ if(DtListaDeReproduccion == null){ throw new RuntimeException("La lista de reproduccion no puede ser null"); } - + this.MiCanal.modificarListaDeReproduccion(DtListaDeReproduccion); } @@ -255,8 +259,7 @@ public class Usuario extends Persona{ throw new RuntimeException("El nickname no puede ser vacio"); } - //return this.MiCanal.obtenerValoracion(id, nickname); - return null;//Esto se saca + return this.MiCanal.obtenerValoracion(id, nickname); } public Video obtenerVideo(int id){ @@ -293,6 +296,5 @@ public class Usuario extends Persona{ } return this.MiCanal.validarListaParticular(nombre); } - } diff --git a/UyTube_aplicacion/src/Logica/Clases/Video.java b/UyTube_aplicacion/src/Logica/Clases/Video.java index 72403f277033a418cb59a010742c98f6b407c399..edc924e5997d1d201e2872887937ba37bce4c6e6 100644 --- a/UyTube_aplicacion/src/Logica/Clases/Video.java +++ b/UyTube_aplicacion/src/Logica/Clases/Video.java @@ -5,12 +5,12 @@ import Logica.DataType.DtVideo; import java.sql.Time; import java.sql.Date; import Logica.Enumerados.Privacidad; +import Logica.Enumerados.TipoValoracion; import java.util.ArrayList; import java.util.Map; import java.util.TreeMap; -public class Video { - +public class Video { private int id; private String nombre; private String descripcion; @@ -30,6 +30,12 @@ public class Video { } /********************** Constructor *********************/ public Video(int _id, String _nombre, String _descripcion,Time _duracion, Date _fechaPublicacion,String _urlVideoOriginal,String _categoria ){ + if( _id < 0){ throw new RuntimeException("Error, el id del video es un negativo o cero."); } + if( _nombre == ""){ throw new RuntimeException("Error, el nombre del video está vacÃo");} + if( _duracion == null){ throw new RuntimeException("Error, la duración del video es null.");} + if( _fechaPublicacion == null){ throw new RuntimeException("Error, la fecha de publicación del video es null.");} + if( _urlVideoOriginal == ""){ throw new RuntimeException("Error, la url del video está vacÃa.");} + if( _categoria == "" ){ throw new RuntimeException("Error, la descripción del video está vacÃa.");} this.id = _id; this.nombre = _nombre; this.descripcion = _descripcion; @@ -43,6 +49,13 @@ public class Video { /** Agregar un nuevo comentario **/ public void agregarComentario(DtComentario dtComentario, Usuario usuario){ + if (dtComentario == null){ + throw new RuntimeException("El DataType es null"); + } + if (usuario == null){ + throw new RuntimeException("El usuario es null"); + } + int nuevoId = Comentario.getNuevoID(); Comentario nuevoComentario = new Comentario(nuevoId, dtComentario.getFecha(), dtComentario.getTexto(), 0, usuario); comentarios.put(nuevoId, nuevoComentario); @@ -50,6 +63,13 @@ public class Video { /* Agregar un subcomentario a un comentario existente */ public void agregarComentario(int idCom, DtComentario dtComentario, Usuario usuario){ + if (dtComentario == null){ + throw new RuntimeException("El DataType es null"); + } + if (usuario == null){ + throw new RuntimeException("El usuario es null"); + } + for (Map.Entry<Integer, Comentario> coment : comentarios.entrySet()) { if(coment.getValue().agregarSubComentario(idCom, dtComentario, usuario)){ break; @@ -58,24 +78,58 @@ public class Video { } /* Agrega o midifica una valoración */ - public void agregarModificarValoracion(DtValoracion dtValoracion, Usuario usuario){ + public void agregarModificarValoracion(DtValoracion dtValoracion, Usuario usuario) { + if (dtValoracion == null) { + throw new RuntimeException("El DataType es null"); + } + if (usuario == null){ + throw new RuntimeException("El usuario es null"); + } + String nickname = usuario.getNickname(); - for(Valoracion val: valoraciones){ - if(val.modificar(dtValoracion, nickname)){ - break; + // por las dudas, para que los contadores de likes no queden inconsistentes: + // obtengo la valoracion que le habia dado antes el usuario (si es que lo habia alorado) + DtValoracion dtv = this.obtenerValoracion(nickname); + // si el usuario ya lo valoro + if (dtv != null) { + // segun cual fuera la valoracion anterior, resta 1 al contador + if (dtv.getVal() == TipoValoracion.LIKE) { + cantLikes--; + } else { + cantDisLikes--; + } + + for (Valoracion val : valoraciones) { + if (val.modificar(dtValoracion, nickname)) { + break; + } } + } else { + Valoracion nuevaValoracion = new Valoracion(dtValoracion.getVal(), usuario); + valoraciones.add(nuevaValoracion); } + + // segun cual sea la nueva valoracion, suma 1 al contador + if (dtValoracion.getVal() == TipoValoracion.LIKE) { + cantLikes++; + } else { + cantDisLikes++; + } + } - + public DtVideo getDt(){ return new DtVideo(this.id, this.nombre, this.descripcion, this.duracion, this.fechaPublicacion, this.urlVideoOriginal, this.privacidad, this.categoria, this.cantLikes, this.cantDisLikes); } public ArrayList<DtComentario> listarComentarios(){ - ArrayList<DtComentario> listaComent = new ArrayList<DtComentario>(); - for (Map.Entry<Integer, Comentario> coment : comentarios.entrySet()) { - DtComentario dtComent = new DtComentario(coment.getValue().getId(), coment.getValue().getUsr().getNickname(), coment.getValue().getFecha(), coment.getValue().getTexto(), coment.getValue().getNivelSubComentario()); - listaComent.add(dtComent); + ArrayList<DtComentario> listaComent = new ArrayList<DtComentario>(); + // recorro los comentarios sobre el video + for (Map.Entry<Integer, Comentario> coment : comentarios.entrySet()) { + // le obtengo el DT y lo agrego a la lista resultado + listaComent.add(coment.getValue().getDT()); + // agrego a la lista resultado, la lista de sub comentarios + listaComent.addAll(coment.getValue().listarSubComentarios()); } return listaComent; } @@ -100,8 +154,8 @@ public class Video { throw new RuntimeException("El nombre no puede ser vacÃo"); } - if (dtVideo.getDescripcion() == "") { - throw new RuntimeException("La descripcion no puede ser vacÃa"); + if (dtVideo.getDuracion()== null) { + throw new RuntimeException("La duracion no puede ser vacÃa"); } if (dtVideo.getFechaPublicacion() == null) { @@ -122,13 +176,16 @@ public class Video { } /* Obtiene la valoracion que hizo un usuario */ - public DtValoracion obtenerValoracion(String nickname){ + public DtValoracion obtenerValoracion(String nickname) { + if (nickname.equals("")) { + throw new RuntimeException("El nickname no puede ser vacio"); + } for(int i = 0; i < this.valoraciones.size(); i++){ if( valoraciones.get(i).getNicknameDeUsuario() == nickname){ return valoraciones.get(i).getDT(); } } - return new DtValoracion(); + return null; } public void quitarValoracion(String nickname){ @@ -137,6 +194,21 @@ public class Video { } // Recorrer todas las valoraciones hasta encontrar la valoracion cuyo usuario sea el que tiene ese nickname // cuando la encuentre, la saca de la coleccion + for(int i = 0; i < this.valoraciones.size(); i++){ + if(valoraciones.get(i).getNicknameDeUsuario().equals(nickname) ){ + + // segun cual fuera la valoracion anterior, resta 1 al contador + if (valoraciones.get(i).getVal() == TipoValoracion.LIKE) { + cantLikes--; + } else { + cantDisLikes--; + } + + // remueve de la coleccion + valoraciones.remove(i); + break; + } + } }