agendapoo.Control.ControlUsuario.java Source code

Java tutorial

Introduction

Here is the source code for agendapoo.Control.ControlUsuario.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package agendapoo.Control;

import agendapoo.DAO.ARQUIVO.UsuarioDAOarquivo;
import agendapoo.DAO.DAO;
import agendapoo.DAO.JDBC.UsuarioDAOjdbc;
import agendapoo.Exceptions.EmailJaCadastradoException;
import agendapoo.Exceptions.InvalidTimeRangeException;
import agendapoo.Exceptions.TimeInterferenceException;
import agendapoo.Exceptions.UsuarioNaoExistenteException;
import agendapoo.Model.Atividade;
import agendapoo.Model.TipoAtividade;
import agendapoo.Model.Usuario;
import java.io.IOException;
import java.sql.SQLException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.List;
import org.apache.commons.mail.EmailException;

/**
 * Classe responsvel por todas as funcionalidades que o usurio pode fazer.
 * usuarioDAO - Interface com os mtodos add,delete,update e list para a manipulao de usurios no banco de dados
 * ou arquivo.
 * controlAtividade - Classe com todos os mtodos para manipular atividades no banco de dados ou arquivo.
 * @author kieckegard
 */
public class ControlUsuario implements Login {
    private final DAO<Usuario> usuarioDAO;
    private final AtividadeController controlAtividade;

    public ControlUsuario() {
        controlAtividade = new ControlAtividade();
        usuarioDAO = new UsuarioDAOarquivo();
    }

    /**
     * Mtodo responsvel por verificar se o e-mail passado por parmetro ainda no existe, ou seja, se j no h 
     * algum usurio cadastrado com esse e-mail.
     * @param email - valor em String contendo o e-mail
     * @return True, caso no haja nenhum usurio cadastrado com o e-mail, False, caso exista.
     * @throws SQLException
     * @throws IOException
     * @throws ClassNotFoundException 
     */
    private boolean isEmailValid(String email) throws SQLException, IOException, ClassNotFoundException {
        for (Usuario u : usuarioDAO.list()) {
            if (u.getEmail().equals(email))
                return false;
        }
        return true;
    }

    /**
     * Mtodo responsvel por realizar o cadastro do usurio no sistema, salvando-o no Banco de dados ou arquivo.
     * @param nome - String contendo o nome do usurio
     * @param email - String contendo o email do usurio
     * @param senha - String contendo a senha do usurio
     * @param telefone - String contendo o telefone do usurio
     * @param dataNascimento - String contendo a data de nascimento do usurio (no padro brasileiro)
     * @throws SQLException
     * @throws IOException
     * @throws ClassNotFoundException
     * @throws DateTimeParseException -  lanada caso exista erro na formatao da string da data de nascimento.
     * @throws EmailJaCadastradoException -  lanada caso j exista um usurio cadastrado com o e-mail passado por parmetro.
     */
    public void cadastraUsuario(String nome, String email, String senha, String telefone, String dataNascimento)
            throws SQLException, IOException, ClassNotFoundException, DateTimeParseException,
            EmailJaCadastradoException {
        if (isEmailValid(email)) {
            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/yyyy");
            Usuario u = new Usuario(nome, email, senha, telefone, LocalDate.parse(dataNascimento, dtf));
            usuarioDAO.add(u);

        } else
            throw new EmailJaCadastradoException(
                    "J existe um usurio usando esse email.\nPor favor cadastra-se usando um e-mail diferente!");
    }

    /**
     * Mtodo responsvel por remover um usurio atravs de uma instncia de objeto do usurio.
     * A verificao  feita atravs do e-mail do usurio, utilizando-o como chave primria.
     * @param usuario - Instancia de Usurio
     * @throws SQLException 
     * @throws IOException
     * @throws ClassNotFoundException 
     */
    public void removeUsuario(Usuario usuario) throws SQLException, IOException, ClassNotFoundException {
        usuarioDAO.delete(usuario);
    }

    public void cadastraAtividade(String descricao, String local, String data, String horaInicio, String horaFim,
            List<String> convidados, TipoAtividade tipo, Usuario u) throws SQLException, IOException,
            ClassNotFoundException, InvalidTimeRangeException, TimeInterferenceException, EmailException {
        controlAtividade.cadastraAtividade(descricao, local, data, horaInicio, horaFim, convidados, tipo, u);
    }

    /**
     * Remove atividade do sistema atravs de uma instancia de atividade passada por parmetro.
     * @param atividade - instancia de atividade
     * @throws SQLException
     * @throws IOException
     * @throws ClassNotFoundException
     * @throws EmailException -  lanado caso haja problemas ao enviar um e-mail a lista de convidados.
     */
    public void removeAtividade(Atividade atividade)
            throws SQLException, IOException, ClassNotFoundException, EmailException {
        controlAtividade.deletaAtividade(atividade);
    }

    /**
     * Atualiza as informaes de atividade, as novas informaes de atividade devem estar contidas numa instncia 
     * de atividade.
     * @param atividade - instancia de atividade j alterada com as novas informaes
     * @throws SQLException
     * @throws IOException
     * @throws ClassNotFoundException
     * @throws EmailException -  lanada caso haja problema na hora de enviar emails para a lista de convidados
     * @throws TimeInterferenceException -  lanada caso a novo horrio seja invlido, ou seja, haja uma interferncia
     * de horrios com outras atividades cadastradas.
     * @throws InvalidTimeRangeException -  lanada caso o horrio inicial seja maior que o horrio final.
     */
    public void atualizaAtividade(Atividade atividade) throws SQLException, IOException, ClassNotFoundException,
            EmailException, TimeInterferenceException, InvalidTimeRangeException {
        controlAtividade.atualizaAtividade(atividade);
    }

    /**
     * Mtodo responsvel por retornar todas as atividades cadastradas por o usurio passado por parmetro.
     * @param usuario - instancia de usuario
     * @return - List contendo todas as atividades cadastradas pelo usuario
     * @throws SQLException
     * @throws IOException
     * @throws ClassNotFoundException 
     */
    public List<Atividade> getAtividadesPorUsuario(Usuario usuario)
            throws SQLException, IOException, ClassNotFoundException {
        return controlAtividade.getAtividadesByUser(usuario);
    }

    /**
     * Mtodo responsvel pela credencial do usurio, verifica se existe um usurio com o e-mail passado por parmetro e logo em seguida, 
     * caso realmente exista um usurio cadastrado com o e-mail, verifica se se a senha desse e-mail bate com a senha passada por parmetro.
     * Caso o usurio no exista, o mtodo lanar a exceo UsuarioNaoExistenteException, caso o usurio exista, porm a senha no bate com 
     * a senha passada por parmetro, o mtodo retornar um valor NULL.
     * @param email - valor em String do email do usurio
     * @param senha - valor em String da senha do usurio
     * @return - instancia de usuario caso haja usuario e login tenha sido realizado com sucesso, 
     * null caso haja uma instancia de usurio, porm a senha esteja errada.
     * @throws SQLException
     * @throws IOException
     * @throws ClassNotFoundException
     * @throws UsuarioNaoExistenteException -  lanada caso no haja nenhum usurio cadastrado com o e-mail passado
     * por parmetro.
     */
    @Override
    public Usuario autentica(String email, String senha)
            throws SQLException, IOException, ClassNotFoundException, UsuarioNaoExistenteException {
        List<Usuario> usuarios = usuarioDAO.list();
        boolean existeUsuario = false;
        for (Usuario u : usuarios) {
            if (u.getEmail().equals(email)) {
                existeUsuario = true;
                if (u.autentica(senha))
                    return u;
            }
        }
        if (!existeUsuario)
            throw new UsuarioNaoExistenteException("No existe um usrio com o email " + email + "...");
        return null;
    }

    /**
     * Atualiza informaes do usurio no banco de dados ou arquivo, os novos dados de usurios j devem
     * estar dentro da instncia de usurio.
     * @param usuario - instancia de usurio j com as informaes atualizadas.
     * @throws SQLException
     * @throws IOException
     * @throws ClassNotFoundException 
     */
    public void atualizaUsuario(Usuario usuario) throws SQLException, IOException, ClassNotFoundException {
        usuarioDAO.update(usuario);
    }
}