diff --git a/UyTube_web/nbproject/project.properties b/UyTube_web/nbproject/project.properties index 34b58e8bd8d4a46764d85233692cb37b3d453a41..b32e4e1758b8809da151e288fb564e29e0118b59 100644 --- a/UyTube_web/nbproject/project.properties +++ b/UyTube_web/nbproject/project.properties @@ -34,7 +34,7 @@ j2ee.compile.on.save=true j2ee.copy.static.files.on.save=true j2ee.deploy.on.save=true j2ee.platform=1.7-web -j2ee.platform.classpath=${j2ee.server.home}/lib/annotations-api.jar:${j2ee.server.home}/lib/catalina-ant.jar:${j2ee.server.home}/lib/catalina-ha.jar:${j2ee.server.home}/lib/catalina-storeconfig.jar:${j2ee.server.home}/lib/catalina-tribes.jar:${j2ee.server.home}/lib/catalina.jar:${j2ee.server.home}/lib/ecj-4.6.3.jar:${j2ee.server.home}/lib/el-api.jar:${j2ee.server.home}/lib/jasper-el.jar:${j2ee.server.home}/lib/jasper.jar:${j2ee.server.home}/lib/jaspic-api.jar:${j2ee.server.home}/lib/jsp-api.jar:${j2ee.server.home}/lib/servlet-api.jar:${j2ee.server.home}/lib/tomcat-api.jar:${j2ee.server.home}/lib/tomcat-coyote.jar:${j2ee.server.home}/lib/tomcat-dbcp.jar:${j2ee.server.home}/lib/tomcat-i18n-es.jar:${j2ee.server.home}/lib/tomcat-i18n-fr.jar:${j2ee.server.home}/lib/tomcat-i18n-ja.jar:${j2ee.server.home}/lib/tomcat-i18n-ru.jar:${j2ee.server.home}/lib/tomcat-jdbc.jar:${j2ee.server.home}/lib/tomcat-jni.jar:${j2ee.server.home}/lib/tomcat-util-scan.jar:${j2ee.server.home}/lib/tomcat-util.jar:${j2ee.server.home}/lib/tomcat-websocket.jar:${j2ee.server.home}/lib/websocket-api.jar +j2ee.platform.classpath=${j2ee.server.home}/lib/annotations-api.jar:${j2ee.server.home}/lib/catalina-ant.jar:${j2ee.server.home}/lib/catalina-ha.jar:${j2ee.server.home}/lib/catalina-storeconfig.jar:${j2ee.server.home}/lib/catalina-tribes.jar:${j2ee.server.home}/lib/catalina.jar:${j2ee.server.home}/lib/ecj-4.4.2.jar:${j2ee.server.home}/lib/el-api.jar:${j2ee.server.home}/lib/jasper-el.jar:${j2ee.server.home}/lib/jasper.jar:${j2ee.server.home}/lib/jsp-api.jar:${j2ee.server.home}/lib/servlet-api.jar:${j2ee.server.home}/lib/tomcat-api.jar:${j2ee.server.home}/lib/tomcat-coyote.jar:${j2ee.server.home}/lib/tomcat-dbcp.jar:${j2ee.server.home}/lib/tomcat-i18n-es.jar:${j2ee.server.home}/lib/tomcat-i18n-fr.jar:${j2ee.server.home}/lib/tomcat-i18n-ja.jar:${j2ee.server.home}/lib/tomcat-jdbc.jar:${j2ee.server.home}/lib/tomcat-jni.jar:${j2ee.server.home}/lib/tomcat-util-scan.jar:${j2ee.server.home}/lib/tomcat-util.jar:${j2ee.server.home}/lib/tomcat-websocket.jar:${j2ee.server.home}/lib/websocket-api.jar j2ee.server.type=Tomcat jar.compress=false javac.classpath=\ diff --git a/UyTube_web/src/java/Funciones/Funciones.java b/UyTube_web/src/java/Funciones/Funciones.java new file mode 100644 index 0000000000000000000000000000000000000000..e76803a46fe836a34e57d277f9248674ab194344 --- /dev/null +++ b/UyTube_web/src/java/Funciones/Funciones.java @@ -0,0 +1,68 @@ +package Funciones; + +/** + * + * @author Juan + */ +public class Funciones { + + /** + * Extrae el ID del video + * @param URLYoutube URL del video de Youtube + * @return ID del video + */ + public static String extraerIDYoutube(String URLYoutube) { + //https://www.youtube.com/embed/fepmsnGBwJo + String idYoutube = ""; + String urlDT = URLYoutube; + int i = 0; + for (; i < urlDT.length() && urlDT.charAt(i) != '='; i++) { + } + i++; + for (; i < urlDT.length(); i++) { + idYoutube += urlDT.charAt(i); + } + return idYoutube; + } + + /** + * Enlace para embeber video en una página + * @param idYoutube ID del video de Youtube + * @return En lace para embeber video + */ + public static String obtenerEnlaceEmbebido(String idYoutube) { + return "https://www.youtube.com/embed/" + idYoutube; + } + + /** + * Obtiene la url de la miniatura del video original en YouTube + * @param idYoutube ID del video de Youtube + * @param tamanio Tamaño de la imagen [1 a 4] + * @return URL de la miniatura del video + */ + public static String obtenerImagenDeVideo(String idYoutube, int tamanio) { + /* + http://img.youtube.com/vi/VideoID/default.jpg + http://img.youtube.com/vi/VideoID/mqdefault.jpg + http://img.youtube.com/vi/VideoID/hqdefault.jpg + http://img.youtube.com/vi/VideoID/sddefault.jpg + */ + String strTamanio = "/default.jpg"; + switch (tamanio){ + case 1: + strTamanio = "/default.jpg"; + break; + case 2: + strTamanio = "/mqdefault.jpg"; + break; + case 3: + strTamanio = "/hqdefault.jpg"; + break; + case 4: + strTamanio = "/sddefault.jpg"; + break; + } + return "https://i.ytimg.com/vi/" + idYoutube + strTamanio; + } + +} diff --git a/UyTube_web/src/java/com/uytube/ConsultaUsuario.java b/UyTube_web/src/java/com/uytube/ConsultaUsuario.java index b11388139144afeeda1fe15f7f8e0c0db6e39fad..63e44f5e12ed5637df0e242f846a3292c37625eb 100644 --- a/UyTube_web/src/java/com/uytube/ConsultaUsuario.java +++ b/UyTube_web/src/java/com/uytube/ConsultaUsuario.java @@ -5,8 +5,17 @@ */ package com.uytube; +import Logica.DataType.DtCanal; +import Logica.DataType.DtListaDeReproduccion; +import Logica.DataType.DtUsuario; +import Logica.DataType.DtVideo; +import Logica.Enumerados.Privacidad; +import Logica.Enumerados.TipoListaDeReproduccion; +import Logica.Fabrica; +import Logica.Interfaces.IUsuario; import java.io.IOException; import java.io.PrintWriter; +import java.util.ArrayList; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; @@ -19,33 +28,6 @@ import javax.servlet.http.HttpServletResponse; */ public class ConsultaUsuario extends HttpServlet { - /** - * Processes requests for both HTTP <code>GET</code> and <code>POST</code> - * methods. - * - * @param request servlet request - * @param response servlet response - * @throws ServletException if a servlet-specific error occurs - * @throws IOException if an I/O error occurs - */ - protected void processRequest(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - response.setContentType("text/html;charset=UTF-8"); - try (PrintWriter out = response.getWriter()) { - /* TODO output your page here. You may use following sample code. */ - out.println("<!DOCTYPE html>"); - out.println("<html>"); - out.println("<head>"); - out.println("<title>Servlet ConsultaUsuario</title>"); - out.println("</head>"); - out.println("<body>"); - out.println("<h1>Servlet ConsultaUsuario at " + request.getContextPath() + "</h1>"); - out.println("</body>"); - out.println("</html>"); - } - } - - // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> /** * Handles the HTTP <code>GET</code> method. * @@ -57,23 +39,46 @@ public class ConsultaUsuario extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - RequestDispatcher rd; //objeto para despachar - rd = request.getRequestDispatcher("/ConsultaUsuario.jsp"); - rd.forward(request, response); - } + try { + IUsuario sys = Fabrica.getInstancia().getIUsuario(); + String nick = request.getParameter("id"); + + DtUsuario usuario = sys.seleccionarUsuario(nick); + DtCanal canal = sys.obtenerCanalDeUsuario(); + ArrayList<DtUsuario> seguidos = sys.listarUsuarioSeguidos(); + ArrayList<DtUsuario> seguidores = sys.listarUsuarioSeguidores(); + ArrayList<DtVideo> videos = sys.listarVideosDeUsuario(); + ArrayList<DtListaDeReproduccion> listasRep = sys.listarListasDeReproduccionDeUsuario(false); + boolean sesionIniciada = sys.sesionIniciada(); + + // <parche> aqui viene el parche... + boolean usuarioPropietario = false; + ArrayList<DtListaDeReproduccion> lst = sys.listarListasDeReproduccionDeUsuario(true); + for (DtListaDeReproduccion l : lst){ + if (l.getTipo() == TipoListaDeReproduccion.POR_DEFECTO || l.getPrivacidad() == Privacidad.PRIVADO){ + usuarioPropietario = true; + } + } + // fin del parche </parche> + + request.setAttribute("usuario", usuario); + request.setAttribute("canal", canal); + request.setAttribute("seguidos", seguidos); + request.setAttribute("seguidores", seguidores); + request.setAttribute("videos", videos); + request.setAttribute("listasRep", listasRep); + request.setAttribute("propietario", usuarioPropietario); + request.setAttribute("sesionIniciada", sesionIniciada); - /** - * Handles the HTTP <code>POST</code> method. - * - * @param request servlet request - * @param response servlet response - * @throws ServletException if a servlet-specific error occurs - * @throws IOException if an I/O error occurs - */ - @Override - protected void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - + RequestDispatcher rd; //objeto para despachar + rd = request.getRequestDispatcher("/ConsultaUsuario.jsp"); + rd.forward(request, response); + + } catch (Exception e) { + RequestDispatcher rd; //objeto para despachar + rd = request.getRequestDispatcher("/"); + rd.forward(request, response); + } } /** diff --git a/UyTube_web/web/ConsultaUsuario.jsp b/UyTube_web/web/ConsultaUsuario.jsp index 4ff599d43e1c75e579f3e46ffd59cefc089a5596..4427188f2f9118ac1a49f5c62c722bed635d04c1 100644 --- a/UyTube_web/web/ConsultaUsuario.jsp +++ b/UyTube_web/web/ConsultaUsuario.jsp @@ -4,9 +4,24 @@ Author : administrador --%> +<%@page import="Logica.DataType.DtListaDeReproduccion"%> +<%@page import="Logica.DataType.DtVideo"%> +<%@page import="Logica.DataType.DtCanal"%> +<%@page import="java.util.ArrayList"%> +<%@page import="Logica.DataType.DtUsuario"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html lang="es"> + <% + boolean propietario = (boolean) request.getAttribute("propietario"); + boolean sesionIniciada = (boolean) request.getAttribute("sesionIniciada"); + DtUsuario usuario = (DtUsuario) request.getAttribute("usuario"); + DtCanal canal = (DtCanal) request.getAttribute("canal"); + ArrayList<DtUsuario> seguidos = (ArrayList) request.getAttribute("seguidos"); + ArrayList<DtUsuario> seguidores = (ArrayList) request.getAttribute("seguidores"); + ArrayList<DtVideo> videos = (ArrayList) request.getAttribute("videos"); + ArrayList<DtListaDeReproduccion> listasRep = (ArrayList) request.getAttribute("listasRep"); + %> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> @@ -20,14 +35,25 @@ <link rel="stylesheet" type="text/css" href="css/contenido-consulta-usuario.css"> <link rel="stylesheet" type="text/css" href="iconos/style.css"> <link rel="icon" type="image/png" href="imagenes/icono.png" /> - <title>UyTube</title> + <title>UyTube - <%= usuario.getNickname()%></title> </head> <body> <div class="container-fluid"> <div class="row"> <div class="col-12"> + <!-- Inclusion de la barra superior --> + <% + if (sesionIniciada){ + %> <%@ include file='include/header-usuario.html' %> + <% + }else{ + %> + <%@ include file='include/header-visitante.html' %> + <% + } + %> </div> </div> </div> @@ -41,42 +67,83 @@ <div class="container-fluid"> <div class="row"> <div class="col-12"> - <section class="principal"> + <section class="principal"> + <!-- Inclusion del menu lateral --> + <% + if (sesionIniciada) { + %> <%@ include file='include/menu-usuario.html' %> - + <% + } else { + %> + <%@ include file='include/menu-visitante.html' %> + <% + } + %> <div class="contenido"> <section class="contenido-flexible"> <div class="container"> - - <div class="d-flex bd-highlight "> <div class="p-4 flex-fill bd-highlight"> <div class="d-flex justify-content-center"> - <img src="imagenes/mestruli.jpg" class="rounded-circle" alt="Cinque Terre" width="180" height="180"> + <% + String rutaImagenPerfil; + String textoAlternativo; + if (usuario.getImagen() == null || usuario.getImagen().equals("")) { + rutaImagenPerfil = "imagenes/ukp.png"; + textoAlternativo = "Imagen de perfil por defecto"; + } else { + rutaImagenPerfil = usuario.getImagen(); + textoAlternativo = "Imagen de perfil de " + usuario.getNickname(); + //char contrabarra = 92; + //char barra = 47; + //rutaImagenPerfil = rutaImagenPerfil = rutaImagenPerfil.replace(contrabarra, barra); + } + %> + <img src="<%=rutaImagenPerfil%>" class="rounded-circle" alt="<%=textoAlternativo%>" width="180" height="180"> </div> </div> <div class="p-1 flex-fill bd-highlight "> <div class="p-2 bd-highlight "> - <br><h3>Maestruli Garrido</h3> + <br><h3><%= usuario.getNombre() + " " + usuario.getApellido()%></h3> <hr class="mb-1"> </div> <div class="p-1 bd-highlight "> <div class="d-flex bd-highlight "> <div class="p-1 flex-fill bd-highlight "> - <p class="text-info">El_Canal_ReLoco ✔</p> + <p class="text-info"><%= canal.getNombre()%> ✔</p> </div> <div class="p-1 flex-fill bd-highlight "> - <p>69,420,420.5 seguidores</p> + <p><%= usuario.getCantSeguidores()%> seguidores</p> </div> </div> </div> <div class="p-1 bd-highlight "> <div class="d-flex bd-highlight "> <div class="p-1 flex-fill bd-highlight "> - <p>PRIVACIDAD: PUBLICO</p> + <p>PRIVACIDAD: <%= canal.getPrivacidad()%></p> </div> <div class="p-1 flex-fill bd-highlight "> - <p>CATEGORIA: HUMOR</p> + <% + if (sesionIniciada && propietario) { + %> + <a href="/usuario-modificar?id=<%= usuario.getNickname()%>"> + <button class="btn btn-primary" id="btnBuscar" type="submit"> + Modificar + </button> + </a> + <% + } + %> + <% + if (sesionIniciada && !propietario) { + %> + <button class="btn btn-primary" id="btnBuscar" type="submit"> + Seguir (IMPLENENTAR...) + </button> + <% + } + %> </div> </div> </div> @@ -95,133 +162,124 @@ </div> <div class="tab-content" id="nav-tabContent"> + <!-- Pestaña de videos --> <div class="tab-pane fade show active" id="videos" role="tabpanel" aria-labelledby="nav-VIDEO-tab"> - - <br><div class="d-flex bd-highlight "> - <div class="p-1 flex-shrink-1 bd-highlight "> - <div class="p-1 bd-highlight "> - <iframe class="embed-responsive-item" src="https://www.youtube.com/embed/fepmsnGBwJo" allowfullscreen></iframe> - </div> - </div> - <div class="p-1 flex-shrink-1 bd-highlight "> - <div class="overflow-auto p-1 mb-3 mb-md-0 mr-md-3 bg-light" style="max-width: 530px; max-height: 170px;"> - <h5 class="mt-0">NTVG A las nueve Letra</h5> - <p>DashGo/Audiobee, The Orchard Music (en nombre de Elefante Blanco); EMI Music Publishing, Warner Chappell, UNIAO BRASILEIRA DE EDITORAS DE MUSICA - UBEM, LatinAutor, ASCAP, LatinAutor - SonyATV y 4 sociedades de derechos musicales</p> - </div> - </div> - </div><br> - + <br> + <% + for (DtVideo v : videos) { + String urlEmbebida = Funciones.Funciones.obtenerEnlaceEmbebido( + Funciones.Funciones.extraerIDYoutube(v.getUrlVideoOriginal()) + ); + %> + <!-- Video individual en la lista --> <div class="d-flex bd-highlight "> <div class="p-1 flex-shrink-1 bd-highlight "> <div class="p-1 bd-highlight "> - <iframe class="embed-responsive-item" src="https://www.youtube.com/embed/9Ni-Eea8n48" allowfullscreen></iframe> + <iframe class="embed-responsive-item" src="<%= urlEmbebida%>" allowfullscreen></iframe> </div> </div> <div class="p-1 flex-shrink-1 bd-highlight "> <div class="overflow-auto p-1 mb-3 mb-md-0 mr-md-3 bg-light" style="max-width: 530px; max-height: 170px;"> - <h5 class="mt-0">El maestruli 10 horas</h5> - <p>DashGo/Audiobee, The Orchard Music (en nombre de Elefante Blanco); EMI Music Publishing, Warner Chappell, UNIAO BRASILEIRA DE EDITORAS DE MUSICA - UBEM, LatinAutor, ASCAP, LatinAutor - SonyATV y 4 sociedades de derechos musicales</p> + <a href="/video-consultar?id=<%= v.getId()%>"> + <h5 class="mt-0"><%= v.getNombre()%></h5> + </a> + <p><%= v.getDescripcion()%></p> </div> </div> - </div><br> - - <div class="d-flex bd-highlight "> - <div class="p-1 flex-shrink-1 bd-highlight "> - <div class="p-1 bd-highlight "> - <iframe class="embed-responsive-item" src="https://www.youtube.com/embed/v0YIROg_DSY" allowfullscreen></iframe> - </div> - </div> - <div class="p-1 flex-shrink-1 bd-highlight "> - <div class="overflow-auto p-1 mb-3 mb-md-0 mr-md-3 bg-light" style="max-width: 530px; max-height: 170px;"> - <h5 class="mt-0">lamento boliviano-enanitos verdes (letra)</h5> - <p>DashGo/Audiobee, The Orchard Music (en nombre de Elefante Blanco); EMI Music Publishing, Warner Chappell, UNIAO BRASILEIRA DE EDITORAS DE MUSICA - UBEM, LatinAutor, ASCAP, LatinAutor - SonyATV y 4 sociedades de derechos musicales</p> - </div> - </div> - </div><br> - - - - - + </div> + <% + } + %><% + if (videos.isEmpty()) { + %> + <li class="list-group-item d-flex justify-content-between align-items-center"> + El usuario no tiene videos + </li> + <% + } + %> + <br> </div> + <!-- Pestaña de listas de reproduccion --> <div class="tab-pane fade show" id="listas" role="tabpanel" aria-labelledby="nav-LISTAS-tab"> <br><ul class="list-group"> + <% + for (DtListaDeReproduccion l : listasRep) { + %> <li class="list-group-item d-flex justify-content-between align-items-center"> - Ver mas tarde - <span class="badge badge-primary badge-pill">14 videos</span> + <a href="/lista-consultar?id=<%= l.getId()%>"> + <%= l.getNombre()%> + </a> </li> + <% + } + %><% + if (listasRep.isEmpty()) { + %> <li class="list-group-item d-flex justify-content-between align-items-center"> - Faboritos - <span class="badge badge-primary badge-pill">2 videos</span> - </li><br> - <li class="list-group-item d-flex justify-content-between align-items-center"> - Maruja - <span class="badge badge-primary badge-pill">5 videos</span> - </li> - <li class="list-group-item d-flex justify-content-between align-items-center"> - Maruja 2 - <span class="badge badge-primary badge-pill">2 videos</span> - </li> - <li class="list-group-item d-flex justify-content-between align-items-center"> - Maruja 3 - <span class="badge badge-primary badge-pill">36 videos</span> + El usuario no tiene listas de reproducción </li> + <% + } + %> </ul> </div> + <!-- Pestaña de usuarios seguidores --> <div class="tab-pane fade show " id="seguidores" role="tabpanel" aria-labelledby="nav-SEGUIDORES-tab"> <br><ul class="list-group"> + <% + for (DtUsuario u : seguidores) { + %> <li class="list-group-item d-flex justify-content-between align-items-center"> - El_mafuba@242 - </li> - <li class="list-group-item d-flex justify-content-between align-items-center"> - Elsa_lame_23 + <a href="usuario-consultar?id=<%= u.getNickname()%>"> + <%= u.getNickname()%> + </a> </li> + <% + } + %><% + if (seguidores.isEmpty()) { + %> <li class="list-group-item d-flex justify-content-between align-items-center"> - Maruja_mela - </li> - <li class="list-group-item d-flex justify-content-between align-items-center"> - profe_pol_vaso - </li> - <li class="list-group-item d-flex justify-content-between align-items-center"> - Maruja420 + El usuario no tiene seguidores </li> + <% + } + %> </ul> </div> + <!-- Pestaña de usuarios seguidos --> <div class="tab-pane fade show " id="seguidos" role="tabpanel" aria-labelledby="nav-SEGUIDOS-tab"> - - <br><ul class="list-group"> + <% + for (DtUsuario u : seguidos) { + %> <li class="list-group-item d-flex justify-content-between align-items-center"> - TOTAL DE USUARIOS SEGUIDOS: - <span class="badge badge-primary badge-pill">5</span> - </li><br> - <li class="list-group-item d-flex justify-content-between align-items-center"> - El_mafuba@242 - </li> - <li class="list-group-item d-flex justify-content-between align-items-center"> - Elsa_lame_23 + <a href="usuario-consultar?id=<%= u.getNickname()%>"> + <%= u.getNickname()%> + </a> </li> + <% + } + %><% + if (seguidos.isEmpty()) { + %> <li class="list-group-item d-flex justify-content-between align-items-center"> - Maruja_mela - </li> - <li class="list-group-item d-flex justify-content-between align-items-center"> - profe_pol_vaso - </li> - <li class="list-group-item d-flex justify-content-between align-items-center"> - Maruja420 + El usuario no sigue a nadie </li> + <% + } + %> </ul> </div> </div> </div> </section> </div> - - </section> </div> </div>