Java tutorial
/* * 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); } }