package net.slipp.user.web;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Set;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import net.slipp.user.User;
import net.slipp.user.UserDAO;
import org.apache.commons.beanutils.BeanUtilsBean;
import core.MyValidatorFactory;
import core.SessionUtils;
@WebServlet("/users/update")
public class UpdateUserServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
String sessionUserId = SessionUtils.getStringValue(session, LoginServlet.SESSION_USER_ID);
if (sessionUserId == null) {
response.sendRedirect("/");
return;
}
User user = new User();
try {
BeanUtilsBean.getInstance().populate(user, request.getParameterMap());
} catch (IllegalAccessException | InvocationTargetException e1) {
throw new ServletException(e1);
}
if (!user.isSameUser(sessionUserId)) {
response.sendRedirect("/");
return;
}
Validator validator = MyValidatorFactory.createValidator();
Set<ConstraintViolation<User>> constraintViolations = validator.validate(user);
if (constraintViolations.size() > 0) {
request.setAttribute("isUpdate", true);
request.setAttribute("user", user);
String errorMessage = constraintViolations.iterator().next().getMessage();
forwardJSP(request, response, errorMessage);
return;
}
UserDAO userDAO = new UserDAO();
userDAO.updateUser(user);
response.sendRedirect("/");
}
private void forwardJSP(HttpServletRequest request,
HttpServletResponse response, String errorMessage) throws ServletException, IOException {
request.setAttribute("errorMessage", errorMessage);
RequestDispatcher rd = request.getRequestDispatcher("/form.jsp");
rd.forward(request, response);
}
}