Funcionalidad basica completa.

master
Araozu 2018-06-14 21:06:05 -05:00
parent 3b8c0aea9f
commit f366e5d4a0
1 changed files with 82 additions and 44 deletions

View File

@ -5,6 +5,7 @@ import model.User;
import javax.jdo.JDOObjectNotFoundException;
import javax.jdo.PersistenceManager;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
@ -17,52 +18,93 @@ public class UsersControllerAdd extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Comprueba si lo que queremos hacer es iniciar sesion, o simplemente crear un usuario
boolean isLogIn;
PersistenceManager pm = controller.PMF.get().getPersistenceManager();
//El ID del usuario. Este id se obtiene de la direccion de correo -> en richard@gmail.com el ID es richard
String userID;
//Email del usuario
String userEmail = request.getParameter("userEmail");
//Solo se usa al actualizar un usuario.
String prevUserID = request.getParameter("userID");
//El ID del usuario. Este id se obtiene del email -> en richard@gmail.com el ID es richard
String userID;
try {
//El parametro logIn se añade unicamente al iniciar sesion, mas no al crear un nuevo usario.
isLogIn = request.getParameter("logIn").equals("logIn");
userID = userEmail.substring(0,userEmail.indexOf("@"));
} catch (NullPointerException e){
//Si lo que se quiere es crear un usuario, y no iniciar sesion.
isLogIn = false;
userID = prevUserID;
}
//Si se quiere iniciar sesion
if (isLogIn){
//Obtiene el ID del Usuario que va iniciar sesion.
userID = request.getParameter("userID");
//Parametros necesarios.
String userName = request.getParameter("userName");
String userImg = request.getParameter("userImg");
String userRole = request.getParameter("userRole");
//Accion a realizar
String action = request.getParameter("action");
if (action == null)
action = "";
switch (action) {
//Si se quiere iniciar sesion y/o registrar un usuario desde el inicio de sesion de Google
case "logIn":
//Busca si ya existe una sesion iniciada
HttpSession misesion= request.getSession(true);
HttpSession misesion = request.getSession(true);
//Si no existe la sesion, la crea usando el ID del usuario
if (!sesionExist(misesion)){
System.out.println("No existe sesión. Se creará.");
if (!sesionExist(misesion)) {
misesion = request.getSession(true);
misesion.setAttribute("userID",userID);
misesion.setAttribute("userID", userID);
//La sesion perdurara sin actividad durante 6 minutos
misesion.setMaxInactiveInterval(360);
}
//Si la sesion existe, continua.
else {
System.out.println("Sesion: " + misesion.getId() + "\nUserID: " + misesion.getAttribute("userID"));
crearUsuario(userID, userEmail, userName, userImg, userRole, pm);
break;
//Si lo que se quiere es redirigir al Form para crear usuario
case "redirect":
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/View/Users/Add.jsp");
dispatcher.forward(request, response);
break;
//Si lo que se quiere es Crear (proviene del formulario)
case "create":
crearUsuario(userID, userEmail, userName, userImg, userRole, pm);
break;
//Si lo que se quiere es actualizar un Usuario
case "update":
User user = pm.getObjectById(User.class, prevUserID);
user.setName(userName);
user.setEmail(userEmail);
user.setImgUrl(userImg);
user.setRole(new Role(userRole));
break;
//Intenta eliminar un usario con el paramaetro userID
case "delete":
try{
pm.deletePersistent(pm.getObjectById(User.class, userID));
} catch (JDOObjectNotFoundException e){
e.printStackTrace();
}
}
//Si lo que se quiere hacer es crear un Usuario
else {
String userEmail;
userID = "";
break;
}
crearUsuario(userID,request,pm);
pm.close();
response.sendRedirect("/users");
}
@ -72,13 +114,12 @@ public class UsersControllerAdd extends HttpServlet {
}
//Revisa si un usuario existe: id -> ID del usuario (ejm. en richard@gmail.com el ID es richard)
private boolean userExists(String id, PersistenceManager pm){
private boolean userExists(String userID, PersistenceManager pm){
try{
//Intenta buscar en el DataStore un usuario con el ID respectivo.
User usr = pm.getObjectById(User.class, id);
User usr = pm.getObjectById(User.class, userID);
//Si lo encuentra lo imprime en consola y devuelve true (el usuario si existe)
System.out.println(usr);
//Si lo encuentra devuelve true (el usuario si existe)
return true;
} catch (JDOObjectNotFoundException exc){
//Si no lo encuentra, se lanza una Excepción, se captura, y se devuelve false (el usuario no existe)
@ -92,6 +133,7 @@ public class UsersControllerAdd extends HttpServlet {
//Intenta buscar el atributo userID dentro de la sesion
boolean a = sesion.getAttribute("userID").toString().isEmpty();
//Si lo encuentra, la sesion si existe
System.out.println("Session exists");
return true;
} catch (NullPointerException e){
//Si no, la sesion no existe
@ -99,7 +141,7 @@ public class UsersControllerAdd extends HttpServlet {
}
}
private void crearUsuario(String userID, HttpServletRequest request, PersistenceManager pm){
private void crearUsuario(String userID, String userEmail, String userName, String userImg, String userRole, PersistenceManager pm){
//Revisa si el usuario con su ID ya tiene un objeto User Persistente almacenado.
if (userExists(userID, pm)){
@ -107,22 +149,18 @@ public class UsersControllerAdd extends HttpServlet {
}
//Si no existe, crea el objeto de tipo User con los datos que se obtienen del request, y lo hace Persistente.
else {
String userName = request.getParameter("userName");
String userImg = request.getParameter("userImg");
String userRole = request.getParameter("userRole");
String email = userID + "@gmail.com";
//El new Role es provisional, hasta que termine la implementacion del CRUD de Role.
User user = new User(userID, userName, userImg, email, new Role(userRole));
User user = new User(userID, userName, userImg, userEmail, new Role(userRole));
try{
pm.makePersistent(user);
System.out.println("Usuario creado con exito.");
} finally {
pm.close();
System.out.println("Usuario creado con exito.");
}
}
}
}