ligaazteca-admin
Como se había acordado se va realizar un modlulo para adminsitrar la liga.Ahora vamos con la parte de la vista nos vamos al modulo ligaazteca-admin y el archivo pom.xml nos queda de la siguiente manera:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.tutosoftware.ligaazteca</groupId>
<artifactId>ligaazteca</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>ligaazteca-admin</artifactId>
<packaging>war</packaging>
<name>ligaaztecaadmin</name>
<build>
<finalName>ligaaztecaadmin</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<webXml>src/main/webapp/WEB-INF/web.xml</webXml>
<webResources>
<resource>
<!-- this is relative to the pom.xml directory -->
<directory>src/main/webapp/WEB-INF</directory>
<targetPath>WEB-INF</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>com.sun.el</groupId>
<artifactId>el-ri</artifactId>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
</dependency>
</dependencies>
</project>
En src/main/webapp/WEB-INF modificamos el archivo faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
version="2.2">
<navigation-rule>
<from-view-id>
/login.xhtml
</from-view-id>
<navigation-case>
<from-outcome>
admin
</from-outcome>
<to-view-id>
/admin.xhtml
</to-view-id>
</navigation-case>
</navigation-rule>
Modelo
El modelo se realiza para consumir los objetos del api rest que realizamos en springboot.Creamos el paquete com.tutosoftware.ligaazteca.model en el creamos la clase Torneo
package com.tutosoftware.ligaazteca.model;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter @Setter @NoArgsConstructor @AllArgsConstructor
public class Torneo {
private String idTorneo;
private String nombreTorneo;
private int cantidadEquipos;
private int activarTorneo;
private double costoInscripcion;
private int numJugPorEquipo;
private int numVueltas;
private int refuerzos;
}
Creamos la clase UsuarioAdmin
package com.tutosoftware.ligaazteca.model;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter @Setter @NoArgsConstructor @AllArgsConstructor
public class UsuarioAdmin {
private String nombre;
private String apellidoPaterno;
private String apellidoMaterno;
private String email;
private String password;
}
Sesión
Vamos a crear la sesión para cuando nos logueamos. Creamos el paquete com.tutosoftware.ligaazteca.util creamos la clase SessionUtils
package com.tutosoftware.ligaazteca.util;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
public class SessionUtils {
public static HttpSession getSession() {
return (HttpSession) FacesContext.getCurrentInstance()
.getExternalContext().getSession(false);
}
public static HttpServletRequest getRequest() {
return (HttpServletRequest) FacesContext.getCurrentInstance()
.getExternalContext().getRequest();
}
public static String getUserName() {
HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
.getExternalContext().getSession(false);
return session.getAttribute("username").toString();
}
public static String getUserId() {
HttpSession session = getSession();
if (session != null)
return (String) session.getAttribute("userid");
else
return null;
}
}
Filtro
Creamos el paquete com.tutosoftware.ligaazteca.filtery en el la clase AuthorizationFilter
package com.tutosoftware.ligaazteca.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebFilter(filterName = "AuthFilter", urlPatterns = { "*.xhtml" })
public class AuthorizationFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
try {
HttpServletRequest reqt = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
HttpSession ses = reqt.getSession(false);
String reqURI = reqt.getRequestURI();
if (reqURI.indexOf("/login.xhtml") >= 0
|| (ses != null && ses.getAttribute("username") != null)
|| reqURI.indexOf("/public/") >= 0
|| reqURI.contains("javax.faces.resource"))
chain.doFilter(request, response);
else
resp.sendRedirect(reqt.getContextPath() + "/faces/login.xhtml");
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public void destroy() {
// TODO Auto-generated method stub
}
}
ManagedBean
Creamos los Beans para las vistas.Creamos el paquete com.tutosoftware.ligaazteca.view y Creamos la clase LoginView
package com.tutosoftware.ligaazteca.view;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.MediaType;
import org.primefaces.model.menu.DefaultMenuItem;
import org.primefaces.model.menu.DefaultMenuModel;
import org.primefaces.model.menu.DefaultSubMenu;
import org.primefaces.model.menu.MenuModel;
import com.tutosoftware.ligaazteca.model.UsuarioAdmin;
import com.tutosoftware.ligaazteca.util.SessionUtils;
@ManagedBean
@SessionScoped
public class LoginView {
private String email;
private String password;
private UsuarioAdmin usuario;
private String nombreUsuario;
private MenuModel model;
@PostConstruct
public void init() {
model = new DefaultMenuModel();
//First submenu
DefaultSubMenu firstSubmenu = DefaultSubMenu.builder()
.label("Dynamic Submenu")
.build();
DefaultMenuItem item = DefaultMenuItem.builder()
.value("External")
.url("http://www.primefaces.org")
.icon("pi pi-home")
.build();
firstSubmenu.getElements().add(item);
model.getElements().add(firstSubmenu);
//Second submenu
DefaultSubMenu secondSubmenu = DefaultSubMenu.builder()
.label("Dynamic Actions")
.build();
item = DefaultMenuItem.builder()
.value("Save")
.icon("pi pi-save")
.command("#{encuestaView.save}")
.update("messages")
.build();
secondSubmenu.getElements().add(item);
item = DefaultMenuItem.builder()
.value("Delete")
.icon("pi pi-times")
.command("#{encuestaView.delete}")
.ajax(false)
.build();
secondSubmenu.getElements().add(item);
item = DefaultMenuItem.builder()
.value("Redirect")
.icon("pi pi-search")
.command("#{encuestaView.redirect}")
.build();
secondSubmenu.getElements().add(item);
model.getElements().add(secondSubmenu);
}
public MenuModel getModel() {
return model;
}
public void save() {
addMessage("Success", "Data saved");
}
public void update() {
addMessage("Success", "Data updated");
}
public void delete() {
addMessage("Success", "Data deleted");
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public UsuarioAdmin getUsuario() {
return usuario;
}
public void setUsuario(UsuarioAdmin usuario) {
this.usuario = usuario;
}
public String getNombreUsuario() {
return nombreUsuario;
}
public void setNombreUsuario(String nombreUsuario) {
this.nombreUsuario = nombreUsuario;
}
public String loginLiga() {
String URL ="http://localhost:8888/api/usuarioadmin/";
Client client = ClientBuilder.newClient();
usuario=client.target(URL+email).request(MediaType.APPLICATION_JSON_TYPE).get(UsuarioAdmin.class);
if(usuario == null) {
addMessage("Success", "Usuario o password incorrectos");
return "login";
}
if(usuario.getPassword().equals(password)) {
HttpSession session = SessionUtils.getSession();
nombreUsuario=usuario.getNombre()+" "+usuario.getApellidoPaterno()+" "+usuario.getApellidoMaterno();
session.setAttribute("username",nombreUsuario);
return "admin";
}else {
addMessage("Success", "Usuario o password incorrectos");
return "login";
}
}
public void addMessage(String summary, String detail) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, summary, detail);
FacesContext.getCurrentInstance().addMessage(null, message);
}
public String logout() {
HttpSession session = SessionUtils.getSession();
session.invalidate();
return "login";
}
}
Ahora creamos la clase TorneoView
package com.tutosoftware.ligaazteca.view;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import com.tutosoftware.ligaazteca.model.Torneo;
@ManagedBean
@SessionScoped
public class TorneoView {
private String idTorneo;
private String nombreTorneo;
private int cantidadEquipos;
private int activarTorneo;
private double costoInscripcion;
private int numJugPorEquipo;
private int numVueltas;
private int refuerzos;
public void setIdTorneo(String idTorneo) {
this.idTorneo = idTorneo;
}
public String getNombreTorneo() {
return nombreTorneo;
}
public void setNombreTorneo(String nombreTorneo) {
this.nombreTorneo = nombreTorneo;
}
public int getCantidadEquipos() {
return cantidadEquipos;
}
public void setCantidadEquipos(int cantidadEquipos) {
this.cantidadEquipos = cantidadEquipos;
}
public int getActivarTorneo() {
return activarTorneo;
}
public void setActivarTorneo(int activarTorneo) {
this.activarTorneo = activarTorneo;
}
public double getCostoInscripcion() {
return costoInscripcion;
}
public void setCostoInscripcion(double costoInscripcion) {
this.costoInscripcion = costoInscripcion;
}
public int getNumJugPorEquipo() {
return numJugPorEquipo;
}
public void setNumJugPorEquipo(int numJugPorEquipo) {
this.numJugPorEquipo = numJugPorEquipo;
}
public int getNumVueltas() {
return numVueltas;
}
public void setNumVueltas(int numVueltas) {
this.numVueltas = numVueltas;
}
public int getRefuerzos() {
return refuerzos;
}
public void setRefuerzos(int refuerzos) {
this.refuerzos = refuerzos;
}
public void crearTorneo() {
Torneo torneo= new Torneo();
idTorneo= uuid();
torneo.setIdTorneo(idTorneo);
torneo.setNombreTorneo(nombreTorneo);
torneo.setCantidadEquipos(cantidadEquipos);
torneo.setActivarTorneo(0);//Incripciones abiertas
torneo.setCostoInscripcion(costoInscripcion);
torneo.setNumJugPorEquipo(numJugPorEquipo);
torneo.setNumVueltas(numVueltas);
torneo.setRefuerzos(refuerzos);
String URL ="http://localhost:8888/api/torneos";
Client client = ClientBuilder.newClient();
Response response =
client.target(URL)
.request(MediaType.APPLICATION_JSON_TYPE)
.post(Entity.entity(torneo,MediaType.APPLICATION_JSON_TYPE),Response.class);
if (response.getStatus() == Status.CREATED.getStatusCode()) {
addMessage("Confirmado","Torneo aceptado");
} else {
addMessage("Fallo","Torneo no registrado");
}
limpiarTorneo();
}
public String uuid() {
Long numero = System.currentTimeMillis();
String cadena=numero.toString();
return cadena;
}
public void addMessage(String summary, String detail) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, summary, detail);
FacesContext.getCurrentInstance().addMessage(null, message);
}
public void limpiarTorneo() {
nombreTorneo="";
cantidadEquipos=0;
costoInscripcion=0.00;
numJugPorEquipo=0;
numVueltas=0;
refuerzos=0;
}
}