package ua.sergiishapoval.carrental.command.user;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ua.sergiishapoval.carrental.command.CommandTemplate;
import ua.sergiishapoval.carrental.dao.DaoFactory;
import ua.sergiishapoval.carrental.dao.DaoUser;
import ua.sergiishapoval.carrental.model.User;
import ua.sergiishapoval.carrental.model.UserErrors;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.SQLException;
/**
* Created by Сергей on 27.12.2014.
*/
public class RegistrationCommand extends CommandTemplate {
private static final Logger logger = LoggerFactory.getLogger(RegistrationCommand.class);
@Override
public void execute(HttpServletRequest request, HttpServletResponse response) {
User user = getUserFromParameters(request);
request.getSession().removeAttribute("userError");
UserErrors userErrors = new UserErrors();
boolean isUserValid = persistUser(user, userErrors);
request.getSession().setAttribute("user", user);
if (!isUserValid) {
request.getSession().setAttribute("userError", userErrors);
dispatcherForward(request, response, request.getRequestDispatcher("/registration.tiles"));
} else {
infoRedirect(request, response, "REG_SUCCESS" );
}
}
private boolean persistUser(User user, UserErrors userErrors) {
if (isUserValid(user, userErrors)) {
try {
DaoUser daoUser = DaoFactory.getDaoUser();
daoUser.add(user);
daoUser.findByEmail(user);
return true;
} catch (SQLException e) {
userErrors.setEmail("DOUBLE_EMAIL");
logger.warn("DBError", e);
}
}
return false;
}
private boolean isUserValid(User user, UserErrors userErrors) {
boolean isUserValid = true;
if (!user.getPassword().equals(user.getPasswordCheck()) || user.getPassword().equals("")){
isUserValid = false;
userErrors.setPassword("INCORRECT_PASSWORD");
}else {
if (!user.getFirstname().matches("[A-Za-zА-Яа-я]+")){
isUserValid = false;
userErrors.setFirstname("BLANK_WRONG_SYMBOLS");
}
if (user.getFirstname().length() >= 55){
isUserValid = false;
userErrors.setFirstname("BAD_LENGTH");
}
if (!user.getLastname().matches("[A-Za-zА-Яа-я]+")){
isUserValid = false;
userErrors.setLastname("BLANK_WRONG_SYMBOLS");
}
if (user.getLastname().length() >= 55){
isUserValid = false;
userErrors.setLastname("BAD_LENGTH");
}
if (!user.getPassport().matches("[A-Za-zА-Яа-я0-9 ]+")){
isUserValid = false;
userErrors.setPassport("BLANK_WRONG_SYMBOLS");
}
if (user.getPassport().length() >= 55){
isUserValid = false;
userErrors.setPassport("BAD_LENGTH");
}
if (!user.getEmail().matches("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@" +
"(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")){
isUserValid = false;
userErrors.setEmail("WRONG_EMAIL");
}
if (user.getEmail().length() >= 55){
isUserValid = false;
userErrors.setEmail("BAD_LENGTH");
}
}
return isUserValid;
}
}