/**
   * TODO: Hay que mirar una forma de rellenar los beans mas eficiente, ya que a veces no vendra el
   * usuario completo, si no solo una parte.
   *
   * @param user
   * @return
   */
  @Override
  public UserDTO updateAndFlush(UserDTO user, boolean updatePassword, boolean updateRole) {
    User u = userRepository.findOne(user.getUserId());
    u = user.updateEntity(u);
    if (updatePassword) {
      if (user.getPassword() != null)
        if (!passwordEncoder.matches(user.getPassword(), u.getPassword())) {
          u.setPassword(passwordEncoder.encode(user.getPassword()));
        }
    }

    if (updateRole) {
      Role rol = roleRepository.findOne(user.getRole().getRoleId());
      if (!rol.equals(u.getRole())) {
        u.setRole(rol);
      }
    }

    u = userRepository.saveAndFlush(u);
    user.toDTO(u);
    return user;
  }