Package org.jtalks.jcommune.web.validation.validators

Source Code of org.jtalks.jcommune.web.validation.validators.ChangedEmailValidator

/**
* Copyright (C) 2011  JTalks.org Team
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/
package org.jtalks.jcommune.web.validation.validators;

import org.apache.commons.lang.ObjectUtils;
import org.jtalks.jcommune.model.dao.UserDao;
import org.jtalks.jcommune.model.entity.JCUser;
import org.jtalks.jcommune.service.UserService;
import org.jtalks.jcommune.plugin.api.exceptions.NotFoundException;
import org.jtalks.jcommune.web.dto.UserProfileDto;
import org.jtalks.jcommune.web.validation.annotations.ChangedEmail;
import org.springframework.beans.factory.annotation.Autowired;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

/**
* Validates if email change is valid. For detailed validation
* description please refer to {@link ChangedEmail} documentation.
*
* @author Evgeniy Naumneko
*/
public class ChangedEmailValidator implements ConstraintValidator<ChangedEmail, UserProfileDto> {

    private UserService userService;
    private UserDao userDao;
    private String message;

    /**
     * @param userService to obtain current user logged in
     * @param userDao to check if desired email is already registered
     */
    @Autowired
    public ChangedEmailValidator(UserService userService, UserDao userDao) {
        this.userService = userService;
        this.userDao = userDao;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void initialize(ChangedEmail constraintAnnotation) {
        this.message = constraintAnnotation.message();
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public boolean isValid(UserProfileDto userProfile, ConstraintValidatorContext context) {
        String changedEmail = userProfile.getEmail();
        if (changedEmail == null) {
            // null emails checks are out of scope, pls use separate annotation for that
            return true;
        }
        String currentUserEmail = getEmailOfUser(userProfile.getUserId());
        if (ObjectUtils.equals(changedEmail, currentUserEmail)) {
            return true; // no changes in an email, that's ok
        } else {
            boolean userWithTheSameChangedEmailExists = userDao.getByEmail(changedEmail) != null;
            if(userWithTheSameChangedEmailExists){
                context.disableDefaultConstraintViolation();
                context.buildConstraintViolationWithTemplate(message)
                        .addNode("email")
                        .addConstraintViolation();
            }
            return !userWithTheSameChangedEmailExists;
        }
    }
   
    /**
     * Get email of user by user's id.
     *
     * @param userId user's id
     * @return an email of user by user's id
     */
    private String getEmailOfUser(long userId) {
        try {
            JCUser user = userService.get(userId);
            return user.getEmail();
        } catch (NotFoundException e) {
            return null;
       
    }
}
TOP

Related Classes of org.jtalks.jcommune.web.validation.validators.ChangedEmailValidator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.