diff --git a/UyTube_aplicacion/src/JPAControllerClasses/BusquedaEnBDD.java b/UyTube_aplicacion/src/JPAControllerClasses/BusquedaEnBDD.java index fe0735cb39cd047c661b8e7e32570660d1aab38c..466861a748cf7e3bb4dfe508d39c248a74bd42a0 100644 --- a/UyTube_aplicacion/src/JPAControllerClasses/BusquedaEnBDD.java +++ b/UyTube_aplicacion/src/JPAControllerClasses/BusquedaEnBDD.java @@ -23,11 +23,16 @@ public class BusquedaEnBDD implements Serializable { public BusquedaEnBDD(EntityManagerFactory emf) { this.emf = emf; } - public EntityManager getEntityManager() { return emf.createEntityManager(); } - + + /** + * Devuelve un listado de Video y ListaDeReproduccion que pertenezcan ala + * categoria indicada, ordenado por fecha de actividasd reciente + * @param cat Categoria a buscar + * @return Lista ordenada Video y ListaDeReproduccion + */ public List<Object> buscarPorCategoria(String cat) { EntityManager em = getEntityManager(); List<Object> ret = new ArrayList(); @@ -42,7 +47,13 @@ public class BusquedaEnBDD implements Serializable { q.setParameter(1, cat); ret.addAll(q.getResultList()); - return ret; + return ParDeObjetos.extraerElementos( + ordenar( + fecharElementos( + (ArrayList<Object>) ret + ) + ) + ); } finally { em.close(); } @@ -97,4 +108,47 @@ public class BusquedaEnBDD implements Serializable { return ret; } + /** + * Ordena la lista de pares recibida + * @param lista Lista a ordenar + * @return Lista ordenada + */ + public ArrayList<ParDeObjetos> ordenar(ArrayList<ParDeObjetos> lista){ + if (lista == null || lista.isEmpty()){ + return new ArrayList(); + } + + ParDeObjetos par = lista.remove(0); + ArrayList<ParDeObjetos> listaOrdenada = ordenar(lista); + + int i = 0; + for (; i < listaOrdenada.size(); i++){ + ParDeObjetos p = listaOrdenada.get(i); + if (comparar(p, par) < 0){ + break; + } + } + listaOrdenada.add(i, par); + return listaOrdenada; + } + + /** + * Compara dos pares de objetos + * @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){ + if (a.getOrderField().getClass() == String.class){ + String str1 = (String) a.getOrderField(); + String str2 = (String) b.getOrderField(); + return str1.compareToIgnoreCase(str2); + }else if (a.getOrderField().getClass() == java.sql.Date.class){ + java.sql.Date date1 = (java.sql.Date) a.getOrderField(); + java.sql.Date date2 = (java.sql.Date) b.getOrderField(); + return date1.compareTo(date2); + } + return 0; + } + } diff --git a/UyTube_aplicacion/src/JPAControllerClasses/ParDeObjetos.java b/UyTube_aplicacion/src/JPAControllerClasses/ParDeObjetos.java index 96a840c726c698a038e5d34aad9cafb1ed22ff1e..8c38f83397175f66b759940cfe327f8138c1ebbf 100644 --- a/UyTube_aplicacion/src/JPAControllerClasses/ParDeObjetos.java +++ b/UyTube_aplicacion/src/JPAControllerClasses/ParDeObjetos.java @@ -1,5 +1,7 @@ package JPAControllerClasses; +import java.util.ArrayList; + public class ParDeObjetos { private Object element; private Object orderField; @@ -26,5 +28,13 @@ public class ParDeObjetos { } + public static ArrayList<Object> extraerElementos(ArrayList<ParDeObjetos> lista){ + ArrayList<Object> ret = new ArrayList(); + for (ParDeObjetos par : lista){ + ret.add(par.getElement()); + } + return ret; + } + } diff --git a/UyTube_aplicacion/src/Logica/DatosDePrueba.java b/UyTube_aplicacion/src/Logica/DatosDePrueba.java index a6133075c025b96873cbcd94b3c2103f162a708f..5dc3fa3d46876faa1d7094b69ee9921528ee0bf9 100644 --- a/UyTube_aplicacion/src/Logica/DatosDePrueba.java +++ b/UyTube_aplicacion/src/Logica/DatosDePrueba.java @@ -1,14 +1,11 @@ package Logica; import JPAControllerClasses.BusquedaEnBDD; -import JPAControllerClasses.ParDeObjetos; -import Logica.Clases.Categoria; import Logica.Clases.ListaDeReproduccion; import Logica.Clases.Video; import Logica.Interfaces.IAdmin; import Logica.Interfaces.IUsuario; import java.util.ArrayList; -import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; @@ -47,14 +44,13 @@ public class DatosDePrueba { } */ - for (ParDeObjetos pdo : new BusquedaEnBDD().fecharElementos((ArrayList<Object>) new BusquedaEnBDD().buscarPorCategoria("MUSICA"))){ - System.out.print(pdo.getOrderField()); - System.out.print(" >> "); - Object o = pdo.getElement(); + + + + + for (Object o : new BusquedaEnBDD().buscarPorCategoria("MUSICA")){ if (o.getClass() == Video.class){ Video i = (Video) o; - System.out.print(i.getFechaPublicacion()); - System.out.print(" >> "); System.out.println(i.getNombre()); }else if (o.getClass() == ListaDeReproduccion.class){ ListaDeReproduccion i = (ListaDeReproduccion) o; @@ -62,6 +58,8 @@ public class DatosDePrueba { } } + + } catch (Exception e) { System.out.println("//////////////////////////"); System.out.println(e.getMessage());