Skip to content
Snippets Groups Projects
Commit 92fd919d authored by JotaJota96's avatar JotaJota96
Browse files

Algoritmos terminados, no incorporan IgnoreCast

parent 79d2850a
No related branches found
No related tags found
No related merge requests found
...@@ -6,6 +6,9 @@ import Logica.Clases.ListaDeReproduccion_; ...@@ -6,6 +6,9 @@ import Logica.Clases.ListaDeReproduccion_;
import Logica.Clases.Usuario; import Logica.Clases.Usuario;
import Logica.Clases.Video; import Logica.Clases.Video;
import Logica.DataType.DtVideo; import Logica.DataType.DtVideo;
import Logica.Enumerados.Filtrado;
import Logica.Enumerados.Ordenacion;
import Logica.Enumerados.TipoListaDeReproduccion;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -27,6 +30,80 @@ public class BusquedaEnBDD implements Serializable { ...@@ -27,6 +30,80 @@ public class BusquedaEnBDD implements Serializable {
return emf.createEntityManager(); return emf.createEntityManager();
} }
/**
* Busca contenido por coincidencia de texto en nombre o descripcion de los
* contenidos del sistema En el resultado se incluirán (si corresponde segun
* el filtrado) los videos privados del usuarioActual
*
* @param busqueda Texto a buscar (si es vacío incluye todo el contenido)
* @param filtro Tipo de contenido en el cual se realizará la búsqueda
* @param orden Manera de ordenar el resultado de la búsqueda
* @return Resultado de la busqueda. Puede contener DtVideo,
* DtListaDeReproduccion y/o DtCanal. (para usar los elementos devueltos hay
* que castearlos)
*/
public ArrayList<Object> buscar(String busqueda, Filtrado filtro, Ordenacion orden){
EntityManager em = getEntityManager();
List<Object> ret = new ArrayList();
if (busqueda == null || busqueda.equals("")) {
}else{
busqueda = "%" + busqueda + "%";
}
try {
Query q;
// Segun la opcion de filtrado, se obtienen los contenidos que contengan el texto a buscar
// Busca los Canales
if (filtro == Filtrado.TODO || filtro == Filtrado.CANALES){
if (busqueda == null || busqueda.equals("")){
q = em.createQuery("SELECT e FROM Canal e");
}else{
q = em.createQuery("SELECT e FROM Canal e WHERE e.nombre LIKE ?1 OR e.descripcion LIKE ?1");
q.setParameter(1, busqueda);
}
ret.addAll(q.getResultList());
}
// Busca los Listas de reproduccion
if (filtro == Filtrado.TODO || filtro == Filtrado.LISTAS_DE_REPRODUCCION){
if (busqueda == null || busqueda.equals("")){
q = em.createQuery("SELECT e FROM ListaDeReproduccion e WHERE e.tipo = ?1");
q.setParameter(1, TipoListaDeReproduccion.PARTICULAR);
}else{
q = em.createQuery("SELECT e FROM ListaDeReproduccion e WHERE e.tipo = ?1 AND e.nombre LIKE ?2");
q.setParameter(1, TipoListaDeReproduccion.PARTICULAR);
q.setParameter(2, busqueda);
}
ret.addAll(q.getResultList());
}
// Busca los Videos
if (filtro == Filtrado.TODO || filtro == Filtrado.VIDEOS){
if (busqueda == null || busqueda.equals("")){
q = em.createQuery("SELECT e FROM Video e");
}else{
q = em.createQuery("SELECT e FROM Video e WHERE e.nombre LIKE ?1 OR e.descripcion LIKE ?1");
q.setParameter(1, busqueda);
}
ret.addAll(q.getResultList());
}
// En este punto ret contiene todos los contenidos que contienen la busqueda en su nombre o descripcion
ArrayList<ParDeObjetos> pares = null;
ArrayList<ParDeObjetos> paresOrdenados;
switch (orden){
case ALFABETICA_ASCENDENTE:
pares = nombrarElementos((ArrayList<Object>) ret);
break;
case FECHA_DESCENDENTE:
pares = fecharElementos((ArrayList<Object>) ret);
break;
}
return ParDeObjetos.extraerElementos(
ordenar(pares)
);
} finally {
em.close();
}
}
/** /**
* Devuelve un listado de Video y ListaDeReproduccion que pertenezcan ala * Devuelve un listado de Video y ListaDeReproduccion que pertenezcan ala
* categoria indicada, ordenado por fecha de actividasd reciente * categoria indicada, ordenado por fecha de actividasd reciente
...@@ -75,6 +152,45 @@ public class BusquedaEnBDD implements Serializable { ...@@ -75,6 +152,45 @@ public class BusquedaEnBDD implements Serializable {
return ret; return ret;
} }
/**
* Asocia los objetos recibidos a una fecha
* Canal se asocia a la fecha del video mas reciente
* Video a su propia fecha
* ListaDeReproduccion fecha del video con fecha mas reciente
* @param lista Lista de objetos a ordenar (Canal, Video o ListaDeReproduccion)
* @return Lista de los objetos recibidos pero asociados a una fecha
*/
public ArrayList<ParDeObjetos> nombrarElementos(ArrayList<Object> lista){
ArrayList<ParDeObjetos> ret = new ArrayList();
for (Object o : lista){
ret.add(new ParDeObjetos(o, nombreParaOrdenar(o)));
}
return ret;
}
/**
* Devuelve el nombre del objeto
* Canal su nombre
* Video su nombre
* ListaDeReproduccion su nombre
* @param o Objeto a dar nombre
* @return Nombre del objeto
*/
private String nombreParaOrdenar(Object o){
java.sql.Date ret = null;
if (o.getClass() == Canal.class){
Canal c = (Canal) o;
return c.getNombre();
}else if (o.getClass() == ListaDeReproduccion.class){
ListaDeReproduccion l = (ListaDeReproduccion) o;
return l.getNombre();
}else if (o.getClass() == Video.class){
Video v = (Video) o;
return v.getNombre();
}
return "";
}
/** /**
* Devuelve la fecha de la ultima actividad del objeto * Devuelve la fecha de la ultima actividad del objeto
* Canal es la fecha del video mas reciente * Canal es la fecha del video mas reciente
...@@ -142,7 +258,7 @@ public class BusquedaEnBDD implements Serializable { ...@@ -142,7 +258,7 @@ public class BusquedaEnBDD implements Serializable {
if (a.getOrderField().getClass() == String.class){ if (a.getOrderField().getClass() == String.class){
String str1 = (String) a.getOrderField(); String str1 = (String) a.getOrderField();
String str2 = (String) b.getOrderField(); String str2 = (String) b.getOrderField();
return str1.compareToIgnoreCase(str2); return (str1.compareToIgnoreCase(str2)) * -1;
}else if (a.getOrderField().getClass() == java.sql.Date.class){ }else if (a.getOrderField().getClass() == java.sql.Date.class){
java.sql.Date date1 = (java.sql.Date) a.getOrderField(); java.sql.Date date1 = (java.sql.Date) a.getOrderField();
java.sql.Date date2 = (java.sql.Date) b.getOrderField(); java.sql.Date date2 = (java.sql.Date) b.getOrderField();
......
package Logica; package Logica;
import JPAControllerClasses.BusquedaEnBDD; import JPAControllerClasses.BusquedaEnBDD;
import Logica.Clases.Canal;
import Logica.Clases.ListaDeReproduccion; import Logica.Clases.ListaDeReproduccion;
import Logica.Clases.Video; import Logica.Clases.Video;
import Logica.Enumerados.Filtrado;
import Logica.Enumerados.Ordenacion;
import Logica.Interfaces.IAdmin; import Logica.Interfaces.IAdmin;
import Logica.Interfaces.IUsuario; import Logica.Interfaces.IUsuario;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -45,16 +48,16 @@ public class DatosDePrueba { ...@@ -45,16 +48,16 @@ public class DatosDePrueba {
*/ */
for (Object o : new BusquedaEnBDD().buscar("", Filtrado.TODO, Ordenacion.ALFABETICA_ASCENDENTE)){
for (Object o : new BusquedaEnBDD().buscarPorCategoria("MUSICA")){
if (o.getClass() == Video.class){ if (o.getClass() == Video.class){
Video i = (Video) o; Video i = (Video) o;
System.out.println(i.getNombre()); System.out.println(i.getNombre());
}else if (o.getClass() == ListaDeReproduccion.class){ }else if (o.getClass() == ListaDeReproduccion.class){
ListaDeReproduccion i = (ListaDeReproduccion) o; ListaDeReproduccion i = (ListaDeReproduccion) o;
System.out.println(i.getNombre()); System.out.println(i.getNombre());
}else if (o.getClass() == Canal.class){
Canal i = (Canal) o;
System.out.println(i.getNombre());
} }
} }
......
...@@ -76,8 +76,9 @@ public interface IUsuario { ...@@ -76,8 +76,9 @@ public interface IUsuario {
public ArrayList<Object> buscar(String busqueda, Filtrado filtro, Ordenacion orden); public ArrayList<Object> buscar(String busqueda, Filtrado filtro, Ordenacion orden);
/** /**
* Busca contenido por coincidencia de texto en nombre o descripcion de los * Busca contenido que pertenezcan a la categoria indicada El Resultado
* contenidos del sistema que pertenezcan a la categoria indicada * contendrá todos los contenidos publicos, y los contenidos privados del
* usuarioActual
* *
* @param categoria Nombre de la categoria a buscar * @param categoria Nombre de la categoria a buscar
* @return Resultado de la busqueda. Puede contener DtVideo y * @return Resultado de la busqueda. Puede contener DtVideo y
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment