net.softforlife.klich.service.impl.UserServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for net.softforlife.klich.service.impl.UserServiceImpl.java

Source

package net.softforlife.klich.service.impl;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import net.softforlife.klich.enumeration.ROLES;
import net.softforlife.klich.model.Trole;
import net.softforlife.klich.model.Tuser;
import net.softforlife.klich.model.TuserTrole;
import net.softforlife.klich.persistence.DAO.RoleDAO;
import net.softforlife.klich.persistence.DAO.UserDAO;
import net.softforlife.klich.service.UserService;
import net.softforlife.klich.service.encrypt.SecurityService;
import net.softforlife.klich.service.security.SecurityUser;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.orm.ObjectRetrievalFailureException;
import org.springframework.security.context.SecurityContextHolder;
import org.springframework.security.providers.encoding.Md5PasswordEncoder;
import org.springframework.security.userdetails.User;
import org.springframework.security.userdetails.UsernameNotFoundException;
import org.springframework.transaction.annotation.Transactional;

/**
 * Clase de servicio de usuarios.<br>
 * Implementa las operaciones sobre los usuarios del sistema.
 * 
 * @see es.ine.sigue.service.UserService
 * @author scarnicero
 */
public class UserServiceImpl implements UserService {

    // private final Log log = LogFactory.getLog(UserServiceImpl.class);
    /** El user dao. */
    private UserDAO userDAO;
    /** El password encoder. */
    private Md5PasswordEncoder passwordEncoder;
    /** El role dao. */
    private RoleDAO roleDAO = null;
    /** El security service. */
    private SecurityService securityService;
    /** El logger. */
    private Logger logger = Logger.getLogger(this.getClass());

    /*
      * (non-Javadoc)
      *
      * @see es.ine.sigue.service.UserService#getUser(java.lang.String)
      */
    @Transactional(readOnly = true)
    public Tuser getUser(String login) {
        Tuser user = getUserDAO().getUser(login);
        /*
         * if (user == null) { throw new
         * ObjectRetrievalFailureException(Tuser.class, login); }
         */
        /*
         * String realPassword =
         * securityService.decryptText(user.getRecovery()); if ( realPassword !=
         * null && realPassword.length() > 0){ user.setPassword(realPassword); }
         */

        return user;
    }

    /*
     * (non-Javadoc)
     *
     * @see es.ine.sigue.service.UserService#getUserById(int)
     */
    @Transactional(readOnly = true)
    public Tuser getUserById(int userId) {
        Tuser user = getUserDAO().getUserById(userId);
        if (user == null) {
            throw new ObjectRetrievalFailureException(Tuser.class, userId);
        }

        /*
         * String realPassword =
         * securityService.decryptText(user.getRecovery()); if ( realPassword !=
         * null && realPassword.length() > 0){ user.setPassword(realPassword); }
         */

        return user;
    }

    /**
     * Devuelve el valor del campo UserDAO.
     *
     * @return Devuelve UserDAO
     */
    public UserDAO getUserDAO() {
        return userDAO;
    }

    /**
     * Establece el valor del campo UserDAO.
     *
     * @param userDAO
     *            es el nuevo valor de UserDAO
     */
    public void setUserDAO(UserDAO userDAO) {
        this.userDAO = userDAO;
    }

    /**
     * Devuelve el valor del campo PasswordEncoder.
     *
     * @return Devuelve PasswordEncoder
     */
    public Md5PasswordEncoder getPasswordEncoder() {
        return passwordEncoder;
    }

    /**
     * Establece el valor del campo PasswordEncoder.
     *
     * @param passwordEncoder
     *            es el nuevo valor de PasswordEncoder
     */
    public void setPasswordEncoder(Md5PasswordEncoder passwordEncoder) {
        this.passwordEncoder = passwordEncoder;
    }

    /*
     * (non-Javadoc)
     *
     * @see
     * es.ine.sigue.service.UserService#createUserMD5(es.ine.sigue.model.Tuser,
     * es.ine.sigue.model.Trole)
     */
    public void createUserMD5(Tuser user, Trole userType) {

        //SigueDelegaciones delega = ((List<UserDelega>) user.getUserDelegaCollection()).get(0).getDelegaId();

        //user.setIdx(userDAO.nextIndex(delega.getDelegaId()));
        String userName = generateUserName(user, userType);
        user.getUserId().setLogin(userName);

        if (StringUtils.isBlank(user.getPassword())) {
            // TODO: Generar el password
            // user.setPassword(securityService.generatePassword());
            user.setPassword(userName);
        } else {
            user.setPassword(userName);
        }

        changePassword(user);

        Date now = Calendar.getInstance().getTime();
        user.setCreationDate(now);
        user.setActive(true);

        boolean created = false;
        while (!created) {
            if (getUser(userName) == null) {
                userDAO.persist(user);
                created = true;
            } else {
                user.setIdx(user.getIdx() + 1);
                userName = generateUserName(user, userType);
                user.getUserId().setLogin(userName);
            }
        }

    }

    /**
     * Mtodo que genera un userName distinto para cada usuario.
     *
     * @param user
     *            the user
     * @param delega
     *            the delega
     * @param role
     *            the role
     *
     * @return el valor actual de String
     */
    public String generateUserName(Tuser user, Trole role) {
        StringBuilder userName = new StringBuilder();

        if (role.equals(ROLES.ROLE_ENTREVISTADOR.getObject())) {
            userName.append("E");
        } else if (role.equals(ROLES.ROLE_INSPECTOR.getObject())) {
            userName.append("I");
        } else if (role.equals(ROLES.ROLE_SUPERVISOR.getObject())) {
            userName.append("T");
        }

        /* String delegaId = delega.getDelegaId();
         if (delegaId.startsWith("DLG")) {
        userName.append(delegaId.substring(3));
         } else {
        userName.append(delegaId);
         }
        */
        userName.append(user.getIdx());

        return userName.toString();
    }

    /*
     * (non-Javadoc)
     *
     * @see es.ine.sigue.service.UserService#createUser(es.ine.sigue.model.Tuser)
     */
    public void createUser(Tuser user) {
        Date now = Calendar.getInstance().getTime();
        user.setCreationDate(now);
        userDAO.persist(user);
    }

    /*
     * (non-Javadoc)
     *
     * @see es.ine.sigue.service.UserService#updateUser(es.ine.sigue.model.Tuser)
     */
    public void updateUser(Tuser user) {
        // changePassword(user);
        userDAO.update(user);
    }

    /*
     * (non-Javadoc)
     *
     * @see
     * es.ine.sigue.service.UserService#updateUserMD5(es.ine.sigue.model.Tuser)
     */
    public void updateUserMD5(Tuser user) {
        userDAO.update(user);

    }

    /*
     * (non-Javadoc)
     *
     * @see
     * es.ine.sigue.service.UserService#changePassword(es.ine.sigue.model.Tuser)
     */
    public void changePassword(Tuser user) {
        String clearPassword = user.getPassword();
        String passwordMD5 = passwordEncoder.encodePassword(clearPassword, null);
        user.setRecovery(securityService.encryptText(clearPassword));
        user.setPassword(passwordMD5);
    }

    /**
     * Devuelve el valor del campo RoleDAO.
     *
     * @return Devuelve RoleDAO
     */
    public RoleDAO getRoleDAO() {
        return roleDAO;
    }

    /**
     * Establece el valor del campo RoleDAO.
     *
     * @param roleDAO
     *            es el nuevo valor de RoleDAO
     */
    public void setRoleDAO(RoleDAO roleDAO) {
        this.roleDAO = roleDAO;
    }

    /*
     * (non-Javadoc)
     *
     * @see es.ine.sigue.service.UserService#removeUser(java.lang.String)
     */
    public void removeUser(String login) {
        userDAO.delete(getUser(login));
    }

    /*
     * (non-Javadoc)
     *
     * @see
     * es.ine.sigue.service.UserService#removeUserRol(es.ine.sigue.model.TuserTrole
     * )
     */
    public void removeUserRol(TuserTrole userRol) {
        userDAO.removeUserRol(userRol);
    }

    /*
     * (non-Javadoc)
     *
     * @see es.ine.sigue.service.UserService#getUserRol(es.ine.sigue.model.Tuser,
     * es.ine.sigue.model.Trole)
     */
    public TuserTrole getUserRol(Tuser user, Trole rol) {
        return userDAO.getUserRol(user, rol);
    }

    /*
     * (non-Javadoc)
     *
     * @see es.ine.sigue.service.UserService#getListRoles()
     */
    public List<Trole> getListRoles() {
        return roleDAO.loadAll();
    }

    /*
     * (non-Javadoc)
     *
     * @see es.ine.sigue.service.UserService#loadById(java.lang.Integer)
     */
    public Trole loadById(Integer id) {
        return roleDAO.loadById(id);
    }

    /*
     * (non-Javadoc)
     *
     * @see es.ine.sigue.service.UserService#getUserInSession()
     */
    public Tuser getUserInSession() {

        Tuser usuario = null;
        User u = getSecurityUser();
        if (u != null) {
            usuario = userDAO.getUser(u.getUsername());
        } else {
            // TODO error
        }
        return usuario;
    }

    /**
     * Devuelve el valor del campo SecurityUser, obtenido del contexto de
     * seguridad.
     *
     * @return Devuelve SecurityUser
     */
    private SecurityUser getSecurityUser() {

        SecurityUser securityUser = null;

        if ((SecurityContextHolder.getContext() == null)
                || !(SecurityContextHolder
                        .getContext() instanceof org.springframework.security.context.SecurityContext)
                || (SecurityContextHolder.getContext().getAuthentication() == null) || !(SecurityContextHolder
                        .getContext().getAuthentication().getPrincipal() instanceof SecurityUser)) {
            return securityUser;
        } else // si tenemos contexto casteamos
        {
            securityUser = (SecurityUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        }

        return securityUser;
    }

    /*
     * (non-Javadoc)
     *
     * @see es.ine.sigue.service.UserService#setSessionProperty(java.lang.String,
     * java.lang.Object)
     */
    public void setSessionProperty(String key, Object value) {

        SecurityUser securityUser = getSecurityUser();

        if (securityUser != null) {
            securityUser.addProperty(key, value);
        } else {
            // TODO ERROR}
        }

    }

    /*
     * (non-Javadoc)
     *
     * @see es.ine.sigue.service.UserService#getSessionProperty(java.lang.String)
     */
    public Object getSessionProperty(String key) {
        SecurityUser securityUser = getSecurityUser();
        if (securityUser != null) {
            return securityUser.getProperty(key);
        } else {
            // TODO ERROR
            return null;
        }
    }

    /*
     * (non-Javadoc)
     *
     * @see es.ine.sigue.service.UserService#removeAll()
     */
    public void removeAll() {
        this.userDAO.removeAll();
    }

    /*
     * (non-Javadoc)
     *
     * @see
     * es.ine.sigue.service.UserService#clearSessionProperty(java.lang.String)
     */
    public void clearSessionProperty(String key) {
        SecurityUser securityUser = getSecurityUser();
        if (securityUser != null) {
            securityUser.clearProperty(key);
        } else {
            // TODO ERROR
        }
    }

    /**
     * Devuelve el servicio de seguridad
     *
     * @return the securityService
     */
    public SecurityService getSecurityService() {
        return securityService;

    }

    /**
     * Setter del servicio de seguridad
     *
     * @param securityService
     *            the securityService to set
     */
    public void setSecurityService(SecurityService securityService) {
        this.securityService = securityService;
    }

    /*
     * (non-Javadoc)
     *
     * @see es.ine.sigue.service.UserService#getUserFromServer(java.lang.String)
     */
    public Tuser getUserFromServer(String login) throws UsernameNotFoundException {
        try {
            loadNewUserList();
        } catch (Exception e) {
            logger.warn("\n Error al descargar los usuarios desde el Webservice", e);
        }

        Tuser u = getUser(login);

        if (u == null) {
            throw new UsernameNotFoundException("User '" + login + "' could not be found ");
        }

        return u;
    }

    /**
     * Carga de la lista de usuarios.
     */
    private void loadNewUserList() {

        // TODO esto habra que sacarlo?el servicio de usuarios debera de NO
        // tener dependencias a otros servicios

        //TODO: Adaptar al nuevo sistema de servicios web

        /*Tablet tablet = tabletService.getThisTablet();
            
        if (tablet != null) {
        // Cliente de webservice
        SigueWSLocal ws = tabletService.getClientWS();
            
        ws.sendAction(tablet.getTabletName(), tablet.getLicense(), ACTION_TYPE.REFRESH_USER.getId());
        }*/
    }

    /**
     * Almacena el listado de usuarios.
     *
     * @param listaUser
     *            the lista user
     */
    @SuppressWarnings("unused")
    private void saveNewUserList(List<Tuser> listaUser) {

        @SuppressWarnings("rawtypes")
        Iterator iterator = listaUser.iterator();
        while (iterator.hasNext()) {
            Tuser user = (Tuser) iterator.next();
            createUser(depurarUsuario(user));

        }

    }

    /**
     * depurarUsuario.
     *
     * @param user
     *            the user
     *
     * @return el valor actual de Tuser
     */
    private Tuser depurarUsuario(Tuser user) {
        user.setUserId(null); // detached
        List<TuserTrole> listUserRol = new ArrayList<TuserTrole>();
        @SuppressWarnings("rawtypes")
        Iterator iterator = user.getTuserTroleCollection().iterator();
        user.setTuserTroleCollection(null);
        while (iterator.hasNext()) {
            TuserTrole userRols = (TuserTrole) iterator.next();
            userRols.setTuserTroleId(null);
            userRols.setUserId(user);
            userRols.setRoleId(loadById(userRols.getRoleId().getRoleId()));
            listUserRol.add(userRols);
        }
        user.setTuserTroleCollection(listUserRol);
        /*
                List<UserDelega> listUserDelega = new ArrayList<UserDelega>();
                Iterator iterDelega = user.getUserDelegaCollection().iterator();
                while (iterDelega.hasNext()) {
        UserDelega userDelega = (UserDelega) iterDelega.next();
        userDelega.setUserDelegaId(null);
        userDelega.setUserId(user);
        userDelega.setDelegaId(new SigueDelegaciones(userDelega.getDelegaId().getDelegaId()));
        listUserDelega.add(userDelega);
                }
                user.setUserDelegaCollection(listUserDelega);
                */
        return user;
    }

}