diff --git a/UyTube_aplicacion/src/JPAControllerClasses/BusquedaEnBDD.java b/UyTube_aplicacion/src/JPAControllerClasses/BusquedaEnBDD.java index aac884e47d83e965f45ca81862978f392f302106..c2e112c6fab59e9988bef100ac701780aff2a7af 100644 --- a/UyTube_aplicacion/src/JPAControllerClasses/BusquedaEnBDD.java +++ b/UyTube_aplicacion/src/JPAControllerClasses/BusquedaEnBDD.java @@ -88,6 +88,7 @@ public class BusquedaEnBDD implements Serializable { // En este punto ret contiene todos los contenidos que contienen la busqueda en su nombre o descripcion ArrayList<ParDeObjetos> pares = null; ArrayList<ParDeObjetos> paresOrdenados; + // Asocia los elementos a su nombre o su fecha (segun como se desee ordenar) switch (orden){ case ALFABETICA_ASCENDENTE: pares = nombrarElementos((ArrayList<Object>) ret); @@ -96,8 +97,16 @@ public class BusquedaEnBDD implements Serializable { pares = fecharElementos((ArrayList<Object>) ret); break; } - return ParDeObjetos.extraerElementos( - ordenar(pares) + + // Leido de adentro hacia afuera: + // se ordena por fecha + // Se desarma el par de objetos + // se convierte cada objeto a su DataType + // retorna el resultado + return convertirClaseADatatype( + ParDeObjetos.extraerElementos( + ordenar(pares) + ) ); } finally { em.close(); @@ -124,10 +133,18 @@ public class BusquedaEnBDD implements Serializable { q.setParameter(1, cat); ret.addAll(q.getResultList()); - return ParDeObjetos.extraerElementos( - ordenar( - fecharElementos( - (ArrayList<Object>) ret + // Leido de adentro hacia afuera: + // Asocia los elementos a una fecha + // se ordena por fecha + // Se desarma el par de objetos + // se convierte cada objeto a su DataType + // retorna el resultado + return convertirClaseADatatype( + ParDeObjetos.extraerElementos( + ordenar( + fecharElementos( + (ArrayList<Object>) ret + ) ) ) ); @@ -146,6 +163,7 @@ public class BusquedaEnBDD implements Serializable { */ public ArrayList<ParDeObjetos> fecharElementos(ArrayList<Object> lista){ ArrayList<ParDeObjetos> ret = new ArrayList(); + // Asocia cada elemento del array recibido con su fecha for (Object o : lista){ ret.add(new ParDeObjetos(o, ultimaActividad(o))); } @@ -162,6 +180,7 @@ public class BusquedaEnBDD implements Serializable { */ public ArrayList<ParDeObjetos> nombrarElementos(ArrayList<Object> lista){ ArrayList<ParDeObjetos> ret = new ArrayList(); + // Asocia cada elemento del array recibido con su nombre for (Object o : lista){ ret.add(new ParDeObjetos(o, nombreParaOrdenar(o))); } @@ -178,15 +197,13 @@ public class BusquedaEnBDD implements Serializable { */ private String nombreParaOrdenar(Object o){ java.sql.Date ret = null; + // Devuelve el nombre del objeto if (o.getClass() == Canal.class){ - Canal c = (Canal) o; - return c.getNombre(); + return ((Canal) o).getNombre(); }else if (o.getClass() == ListaDeReproduccion.class){ - ListaDeReproduccion l = (ListaDeReproduccion) o; - return l.getNombre(); + return ((ListaDeReproduccion) o).getNombre(); }else if (o.getClass() == Video.class){ - Video v = (Video) o; - return v.getNombre(); + return ((Video) o).getNombre(); } return ""; } @@ -202,24 +219,27 @@ public class BusquedaEnBDD implements Serializable { private java.sql.Date ultimaActividad(Object o){ java.sql.Date ret = null; if (o.getClass() == Canal.class){ - Canal c = (Canal) o; - ArrayList<DtVideo> videos = c.listarVideos(); + // si el objeto es un Canal + // busca la fecha de publicacion mas reciente entre los videos del canal + ArrayList<DtVideo> videos = ((Canal) o).listarVideos(); for (DtVideo dtv : videos){ if (ret == null || dtv.getFechaPublicacion().compareTo(ret) > 0){ ret = dtv.getFechaPublicacion(); } } }else if (o.getClass() == ListaDeReproduccion.class){ - ListaDeReproduccion l = (ListaDeReproduccion) o; - ArrayList<DtVideo> videos = l.listarVideos(); + // si el objeto es una ListaDeReproduccion + // busca la fecha de publicacion mas reciente entre los videos de la lista + ArrayList<DtVideo> videos = ((ListaDeReproduccion) o).listarVideos(); for (DtVideo dtv : videos){ if (ret == null || dtv.getFechaPublicacion().compareTo(ret) > 0){ ret = dtv.getFechaPublicacion(); } } }else if (o.getClass() == Video.class){ - Video v = (Video) o; - ret = v.getFechaPublicacion(); + // si el objeto es un Video + // Devuelve su fecha + ret = ((Video) o).getFechaPublicacion(); } return ret; } @@ -230,13 +250,18 @@ public class BusquedaEnBDD implements Serializable { * @return Lista ordenada */ public ArrayList<ParDeObjetos> ordenar(ArrayList<ParDeObjetos> lista){ + // Caso base, no hay lista o es vacia if (lista == null || lista.isEmpty()){ return new ArrayList(); } + // Extrae el primer elemento de la lista ParDeObjetos par = lista.remove(0); + // llama a la recursividad ArrayList<ParDeObjetos> listaOrdenada = ordenar(lista); + // Recore la lista ya ordenada por la llamada recursiva + // compara cada elemento y para cuando encuentra su lugar int i = 0; for (; i < listaOrdenada.size(); i++){ ParDeObjetos p = listaOrdenada.get(i); @@ -244,17 +269,20 @@ public class BusquedaEnBDD implements Serializable { break; } } + // Agrega el elemento al resultado listaOrdenada.add(i, par); return listaOrdenada; } /** * Compara dos pares de objetos + * Se soportan String o java.sql.Date * @param a Primer par a comparar * @param b Segundo par a comparar * @return 0 si (a == b), -1 si (a < b), 1 si (a > b) */ private int comparar(ParDeObjetos a, ParDeObjetos b){ + // Realiza la comparacion dependiendo del tipo de objeto para comparar if (a.getOrderField().getClass() == String.class){ String str1 = (String) a.getOrderField(); String str2 = (String) b.getOrderField(); @@ -267,4 +295,25 @@ public class BusquedaEnBDD implements Serializable { return 0; } + /** + * Reemplaza los objetos de la lista por sus DataType + * @param lst Lista con clases Canal, ListaDeReproduccion o Video + * @return Lista de DtCanal, DtListaDeReproduccion o DtVideo + */ + private ArrayList<Object> convertirClaseADatatype(ArrayList<Object> lst){ + Object o; + // Recorre todo el array + for (int i = 0; i < lst.size(); i++) { + o = lst.get(i); + // Castea el objeto para llamar a la funcion .getDT() + if (o.getClass() == Canal.class) { + lst.set(i, ((Canal)o).getDT()); + } else if (o.getClass() == ListaDeReproduccion.class) { + lst.set(i, ((ListaDeReproduccion)o).getDt()); + } else if (o.getClass() == Video.class) { + lst.set(i, ((Video)o).getDt()); + } + } + return lst; + } } diff --git a/UyTube_aplicacion/src/Logica/DatosDePrueba.java b/UyTube_aplicacion/src/Logica/DatosDePrueba.java index 4a286e6c585388541c111d53f723e6f04fb8641f..40a2db0e92ebef0de89fe4ad778594db4ad643a2 100644 --- a/UyTube_aplicacion/src/Logica/DatosDePrueba.java +++ b/UyTube_aplicacion/src/Logica/DatosDePrueba.java @@ -4,6 +4,9 @@ import JPAControllerClasses.BusquedaEnBDD; import Logica.Clases.Canal; import Logica.Clases.ListaDeReproduccion; import Logica.Clases.Video; +import Logica.DataType.DtCanal; +import Logica.DataType.DtListaDeReproduccion; +import Logica.DataType.DtVideo; import Logica.Enumerados.Filtrado; import Logica.Enumerados.Ordenacion; import Logica.Interfaces.IAdmin; @@ -12,10 +15,7 @@ import java.util.ArrayList; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; -/** - * Esta clase fue hecha para cargar datos de prueba en el sistema - * @author Juan - */ + public class DatosDePrueba { private static IAdmin adminSys = null; private static IUsuario usuSys = null; @@ -33,34 +33,30 @@ public class DatosDePrueba { EntityManagerFactory factory = Persistence.createEntityManagerFactory("UyTubePU"); EntityManager manager = factory.createEntityManager(); /* - for (Object o : new BusquedaEnBDD().buscarPorCategoria("MUSICA")){ - if (o.getClass() == Video.class){ - Video i = (Video) o; - System.out.println(i.getNombre()); - }else if (o.getClass() == ListaDeReproduccion.class){ - ListaDeReproduccion i = (ListaDeReproduccion) o; - System.out.println(i.getNombre()); + // Prueba de búsqueda por categorÃa + for (Object o : new BusquedaEnBDD().buscarPorCategoria("GAMING")){ + if (o.getClass() == DtVideo.class){ + System.out.println(((DtVideo) o).toString()); + }else if (o.getClass() == DtListaDeReproduccion.class){ + System.out.println(((DtListaDeReproduccion) o).toString()); + }else if (o.getClass() == DtCanal.class){ + System.out.println(((DtCanal) o).toString()); } - - - } */ - - for (Object o : new BusquedaEnBDD().buscar("no", Filtrado.TODO, Ordenacion.ALFABETICA_ASCENDENTE)){ - if (o.getClass() == Video.class){ - Video i = (Video) o; - System.out.println(i.getNombre()); - }else if (o.getClass() == ListaDeReproduccion.class){ - ListaDeReproduccion i = (ListaDeReproduccion) o; - System.out.println(i.getNombre()); - }else if (o.getClass() == Canal.class){ - Canal i = (Canal) o; - System.out.println(i.getNombre()); + /* + // Prueba de búsqueda general + for (Object o : new BusquedaEnBDD().buscar("", Filtrado.CANALES, Ordenacion.ALFABETICA_ASCENDENTE)){ + if (o.getClass() == DtVideo.class){ + System.out.println(((DtVideo) o).toString()); + }else if (o.getClass() == DtListaDeReproduccion.class){ + System.out.println(((DtListaDeReproduccion) o).toString()); + }else if (o.getClass() == DtCanal.class){ + System.out.println(((DtCanal) o).toString()); } } - + */ } catch (Exception e) { @@ -70,21 +66,4 @@ public class DatosDePrueba { } } - - - /** - * Busca contenido por coincidencia de texto en nombre o descripcion de los - * contenidos del sistema que pertenezcan a la categoria indicada - * - * @param categoria Nombre de la categoria a buscar - * @return Resultado de la busqueda. Puede contener DtVideo y - * DtListaDeReproduccion. (para usar los elementos devueltos hay que - * castearlos) - */ - public static ArrayList<Object> buscar(String categoria){ - return null; - } - - - } \ No newline at end of file