/* * Copyright (C) 2015 Allsoft * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package br.com.allsoft.avros.dao; import br.com.allsoft.avros.exceptions.AuditoriaException; import br.com.allsoft.avros.factory.ConexaoMySQL; import br.com.allsoft.avros.interfaces.FrmLogin; import br.com.allsoft.avros.modelo.ClsBD; import br.com.allsoft.avros.modelo.Usuario; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; /** * Classe DAO para o usuário do sistema * * @author Luana */ public class UsuarioDAO { //Variáveis public static Connection con = null; static String nomeTabela; //Métodos /** * Abre uma conexão e fecha a antiga * * @throws SQLException */ private static void abreCon() throws SQLException { if ((con == null) || (con.isClosed())) { con = ConexaoMySQL.getConexaoMySQL(); } } /** * Procura o usuário no BD pelo Nickname * * @param nick nickname do usuário * @return UsuarioDAO encontrado */ public static br.com.allsoft.avros.modelo.Usuario cusuarioNick(String nick) throws SQLException { br.com.allsoft.avros.modelo.Usuario usuario = new br.com.allsoft.avros.modelo.Usuario(); nick = nick.trim(); abreCon(); nomeTabela = ClsBD.getTblLogin(); PreparedStatement stmt = con.prepareStatement("select * from " + nomeTabela + " where " + ClsBD.getUsuarionick() + " = ?"); stmt.setString(1, nick); ResultSet rs = stmt.executeQuery(); int q = 0; while (rs.next()) { usuario.setNome(rs.getString(ClsBD.getUsuarionome())); usuario.setNick(rs.getString(ClsBD.getUsuarionick())); usuario.setAdmin(rs.getBoolean(ClsBD.getUsuarioAdmin())); usuario.setSenha(rs.getString(ClsBD.getUsuarioSenha()).toCharArray()); usuario.setId(rs.getInt(ClsBD.getUsuarioId())); usuario.setCpf(rs.getString(ClsBD.getUsuarioCpf())); usuario.setAdmin(rs.getBoolean(ClsBD.getUsuarioAdmin())); usuario.setAtivo(rs.getBoolean(ClsBD.getUsuarioAtivo())); } return usuario; } /** * Procura o representante no BD pelo CPF * * @param id do usuario * @return UsuarioDAO encontrado */ public static br.com.allsoft.avros.modelo.Usuario cusuarioId(int id) throws SQLException { br.com.allsoft.avros.modelo.Usuario usuario = new br.com.allsoft.avros.modelo.Usuario(); abreCon(); nomeTabela = ClsBD.getTblLogin(); PreparedStatement stmt = con.prepareStatement("select * from " + nomeTabela + " where " + ClsBD.getUsuarioId() + " = '" + id + "'"); ResultSet rs = stmt.executeQuery(); if (rs.next()) { usuario.setNome(rs.getString(ClsBD.getUsuarionome())); usuario.setNick(rs.getString(ClsBD.getUsuarionick())); usuario.setAdmin(rs.getBoolean(ClsBD.getUsuarioAdmin())); usuario.setSenha(rs.getString(ClsBD.getUsuarioSenha()).toCharArray()); usuario.setId(rs.getInt(ClsBD.getUsuarioId())); usuario.setCpf(rs.getString(ClsBD.getUsuarioCpf())); usuario.setAdmin(rs.getBoolean(ClsBD.getUsuarioAdmin())); usuario.setAtivo(rs.getBoolean(ClsBD.getUsuarioAtivo())); } return usuario; } /** * Método para fazer login * * @param login nickname do usuário * @param senha senha do usuário * @return objeto UsuarioDAO com todas as informações do usuário que logou * no sistema */ public static br.com.allsoft.avros.modelo.Usuario login(String login, char[] senha) throws SQLException { br.com.allsoft.avros.modelo.Usuario usuario = new br.com.allsoft.avros.modelo.Usuario(); abreCon(); nomeTabela = ClsBD.getTblLogin(); String sql = "select * from " + nomeTabela + " where " + ClsBD.getUsuarionick() + " = '" + login + "' and " + ClsBD.getUsuarioSenha() + " = '" + String.valueOf(senha) + "' and ativo = true"; PreparedStatement stmt = con.prepareStatement(sql); ResultSet rs = stmt.executeQuery(); while (rs.next()) { usuario.setNome(rs.getString(ClsBD.getUsuarionome())); usuario.setNick(rs.getString(ClsBD.getUsuarionick())); usuario.setAdmin(rs.getBoolean(ClsBD.getUsuarioAdmin())); usuario.setSenha(rs.getString(ClsBD.getUsuarioSenha()).toCharArray()); usuario.setId(rs.getInt(ClsBD.getUsuarioId())); usuario.setCpf(rs.getString(ClsBD.getUsuarioCpf())); usuario.setAtivo(true); try { AuditoriaLogin.login(usuario, sql); } catch (AuditoriaException ex) { Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex); } } return usuario; } /** * Procura o usuário no BD pelo CPF * * @param cpf CPF do usuário * @return UsuarioDAO encontrado */ public static br.com.allsoft.avros.modelo.Usuario cusuarioCpf(String cpf) throws SQLException { br.com.allsoft.avros.modelo.Usuario usuario = new br.com.allsoft.avros.modelo.Usuario(); abreCon(); nomeTabela = ClsBD.getTblLogin(); PreparedStatement stmt = con.prepareStatement("select * from " + nomeTabela + " where " + ClsBD.getUsuarioCpf() + " = '" + cpf + "'"); ResultSet rs = stmt.executeQuery(); if (rs.next()) { usuario.setNome(rs.getString(ClsBD.getUsuarionome())); usuario.setNick(rs.getString(ClsBD.getUsuarionick())); usuario.setAdmin(rs.getBoolean(ClsBD.getUsuarioAdmin())); usuario.setSenha(rs.getString(ClsBD.getUsuarioSenha()).toCharArray()); usuario.setId(rs.getInt(ClsBD.getUsuarioId())); usuario.setCpf(rs.getString(ClsBD.getUsuarioCpf())); usuario.setAdmin(rs.getBoolean(ClsBD.getUsuarioAdmin())); usuario.setAtivo(rs.getBoolean(ClsBD.getUsuarioAtivo())); } return usuario; } /** * Procura um usuários com o nome parametrizado no BD * * @param nome nome do cusuarioCpf * @return UsuarioDAO encontrado */ public static List cusuarioNome(String nome) throws SQLException { List<br.com.allsoft.avros.modelo.Usuario> usuarios = new ArrayList<>(); abreCon(); nomeTabela = ClsBD.getTblLogin(); PreparedStatement stmt = con.prepareStatement("select * from " + nomeTabela + " where " + ClsBD.getUsuarionome() + " like '" + nome + "%'" + " OR " + ClsBD.getUsuarionome() + " like '%" + nome + "'" + " OR " + ClsBD.getUsuarionome() + " like '%" + nome + "%'"); ResultSet rs = stmt.executeQuery(); while (rs.next()) { br.com.allsoft.avros.modelo.Usuario usuario = new br.com.allsoft.avros.modelo.Usuario(); usuario.setNome(rs.getString(ClsBD.getUsuarionome())); usuario.setNick(rs.getString(ClsBD.getUsuarionick())); usuario.setAdmin(rs.getBoolean(ClsBD.getUsuarioAdmin())); usuario.setSenha(rs.getString(ClsBD.getUsuarioSenha()).toCharArray()); usuario.setId(rs.getInt(ClsBD.getUsuarioId())); usuario.setCpf(rs.getString(ClsBD.getUsuarioCpf())); usuario.setAdmin(rs.getBoolean(ClsBD.getUsuarioAdmin())); usuario.setAtivo(rs.getBoolean(ClsBD.getUsuarioAtivo())); usuarios.add(usuario); } return usuarios; } /** * Retorna todos os usuários cadastrados * * @return List de UsuarioDAO */ public static List cusuarioTodos() throws SQLException { List<br.com.allsoft.avros.modelo.Usuario> usuarios = new ArrayList<>(); abreCon(); nomeTabela = ClsBD.getTblLogin(); PreparedStatement stmt = con.prepareStatement("select * from " + nomeTabela + " order by " + ClsBD.getUsuarionome()); ResultSet rs = stmt.executeQuery(); while (rs.next()) { br.com.allsoft.avros.modelo.Usuario usuario = new br.com.allsoft.avros.modelo.Usuario(); usuario.setNome(rs.getString(ClsBD.getUsuarionome())); usuario.setNick(rs.getString(ClsBD.getUsuarionick())); usuario.setAdmin(rs.getBoolean(ClsBD.getUsuarioAdmin())); usuario.setSenha(rs.getString(ClsBD.getUsuarioSenha()).toCharArray()); usuario.setId(rs.getInt(ClsBD.getUsuarioId())); usuario.setCpf(rs.getString(ClsBD.getUsuarioCpf())); usuario.setAdmin(rs.getBoolean(ClsBD.getUsuarioAdmin())); usuario.setAtivo(rs.getBoolean(ClsBD.getUsuarioAtivo())); usuarios.add(usuario); } return usuarios; } /** * Método que insere um novo usuário * * @param usuario objeto do tipo Usuario com as informações a serem * adicionadas * @throws java.io.IOException * @throws java.sql.SQLException */ public static void inserirUsuario(Usuario usuario) throws IOException, SQLException { nomeTabela = ClsBD.getTblLogin(); con = ConexaoMySQL.getConexaoMySQL(); con.setAutoCommit(false); usuario.setNome(usuario.getNome().trim()); usuario.setCpf(usuario.getCpf().trim()); usuario.setNick(usuario.getNick().trim()); String sql = "insert into " + nomeTabela + "(" + ClsBD.getUsuarionome() + ", " + ClsBD.getUsuarionick() + ", " + ClsBD.getUsuarioSenha() + ", " + ClsBD.getUsuarioAdmin() + ", " + ClsBD.getUsuarioCpf() + ") " + "values (?,?,?,?,?)"; PreparedStatement stmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); stmt.setString(1, usuario.getNome()); stmt.setString(2, usuario.getNick()); stmt.setString(3, String.valueOf(usuario.getSenha())); stmt.setBoolean(4, usuario.isAdmin()); stmt.setString(5, usuario.getCpf()); sql = stmt.toString(); stmt.execute(); ResultSet rs = stmt.getGeneratedKeys(); if (rs != null && rs.next()) { usuario.setId(rs.getInt(1)); } stmt.close(); con.commit(); con.close(); try { AuditoriaInsere.inserirUsuario(FrmLogin.usuario, usuario, sql); } catch (AuditoriaException ex) { JOptionPane.showMessageDialog(null, "Erro de auditoria.", "Erro", JOptionPane.ERROR_MESSAGE); Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex); } } /** * Método que transforma um usuário em admin ou conta comum. * * @param admin se o usuário será admin ou não * @param id id do usuário que será modificado * @throws SQLException */ public static void uusuarioAdmin(boolean admin, int id) throws SQLException { nomeTabela = ClsBD.getTblLogin(); Usuario usuario = UsuarioDAO.cusuarioId(id); con = ConexaoMySQL.getConexaoMySQL(); String sql = "UPDATE " + nomeTabela + " set " + ClsBD.getUsuarioAdmin() + " = ? " + "where " + ClsBD.getUsuarioId() + " = ?"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setBoolean(1, admin); stmt.setInt(2, id); sql = stmt.toString(); stmt.execute(); stmt.close(); con.close(); try { AuditoriaUpdate.modificaUsuarioAdmin(FrmLogin.usuario, usuario, admin, sql); } catch (AuditoriaException ex) { JOptionPane.showMessageDialog(null, "Erro de auditoria.", "Erro", JOptionPane.ERROR_MESSAGE); Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex); } } /** * Método que atualiza o nome do usuário. * * @param nome novo nome do usuário * @param id id do usuário que será modificado * @throws SQLException */ public static void uusuarioNome(String nome, int id) throws SQLException { nomeTabela = ClsBD.getTblLogin(); Usuario usuario = UsuarioDAO.cusuarioId(id); con = ConexaoMySQL.getConexaoMySQL(); String sql = "UPDATE " + nomeTabela + " set " + ClsBD.getUsuarionome() + " = ? " + "where " + ClsBD.getUsuarioId() + " = ?"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setString(1, nome); stmt.setInt(2, id); sql = stmt.toString(); stmt.execute(); stmt.close(); con.close(); try { AuditoriaUpdate.modificaNomeUsuario(FrmLogin.usuario, usuario, nome, sql); } catch (AuditoriaException ex) { JOptionPane.showMessageDialog(null, "Erro de auditoria.", "Erro", JOptionPane.ERROR_MESSAGE); Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex); } } /** * Método que cria uma nova senha para o usuário * * @param senha nova senha * @param id código do usuário * @throws SQLException */ public static void uusuarioSenha(char[] senha, int id) throws SQLException { nomeTabela = ClsBD.getTblLogin(); Usuario usuario = UsuarioDAO.cusuarioId(id); con = ConexaoMySQL.getConexaoMySQL(); String sql = "UPDATE " + nomeTabela + " set " + ClsBD.getUsuarioSenha() + "= ? " + "where " + ClsBD.getUsuarioId() + " = ?"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setString(1, String.valueOf(senha)); stmt.setInt(2, id); sql = stmt.toString(); stmt.execute(); stmt.close(); con.close(); try { AuditoriaUpdate.modificaSenha(FrmLogin.usuario, usuario, senha, sql); } catch (AuditoriaException ex) { JOptionPane.showMessageDialog(null, "Erro de auditoria.", "Erro", JOptionPane.ERROR_MESSAGE); Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex); } FrmLogin.usuario.setSenha(senha); } /** * Método que atualiza o nick do usuário. * * @param nick novo nick do usuário * @param id id do usuário que será modificado * @throws SQLException */ public static void uusuarioNick(String nick, int id) throws SQLException { nomeTabela = ClsBD.getTblLogin(); Usuario usuario = UsuarioDAO.cusuarioNick(nick); con = ConexaoMySQL.getConexaoMySQL(); String sql = "UPDATE " + nomeTabela + " set " + ClsBD.getUsuarionick() + " = ? " + "where " + ClsBD.getUsuarioId() + " = ?"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setString(1, nick); stmt.setInt(2, id); sql = stmt.toString(); stmt.execute(); stmt.close(); con.close(); try { AuditoriaUpdate.modificaNick(FrmLogin.usuario, usuario, nick, sql); } catch (AuditoriaException ex) { JOptionPane.showMessageDialog(null, "Erro de auditoria.", "Erro", JOptionPane.ERROR_MESSAGE); Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex); } } /** * Modifica o status do usuario * * @param ativo se esta ativo ou nao * @param login do usuario * @throws SQLException */ public static void uusuarioAtivo(boolean ativo, String login) throws SQLException { nomeTabela = ClsBD.getTblLogin(); Usuario usuario = UsuarioDAO.cusuarioNick(login); con = ConexaoMySQL.getConexaoMySQL(); String sql = "UPDATE " + nomeTabela + " set " + ClsBD.getUsuarioAtivo() + "= ? " + "where " + ClsBD.getUsuarioId() + " = ?"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setBoolean(1, ativo); stmt.setInt(2, usuario.getId()); sql = stmt.toString(); stmt.execute(); stmt.close(); con.close(); try { AuditoriaUpdate.modificaUsuarioAtivo(FrmLogin.usuario, usuario, ativo, sql); } catch (AuditoriaException ex) { JOptionPane.showMessageDialog(null, "Erro de auditoria.", "Erro", JOptionPane.ERROR_MESSAGE); Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex); } } /** * Modifica o status do usuario * * @param ativo se esta ativo ou nao * @param id do usuario * @throws SQLException */ public static void uusuarioAtivo(boolean ativo, int id) throws SQLException { nomeTabela = ClsBD.getTblLogin(); Usuario usuario = UsuarioDAO.cusuarioId(id); con = ConexaoMySQL.getConexaoMySQL(); String sql = "UPDATE " + nomeTabela + " set " + ClsBD.getUsuarioAtivo() + " = ? " + "where " + ClsBD.getUsuarioId() + " = ?"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setBoolean(1, ativo); stmt.setInt(2, id); sql = stmt.toString(); stmt.execute(); stmt.close(); con.close(); try { AuditoriaUpdate.modificaUsuarioAtivo(FrmLogin.usuario, usuario, ativo, sql); } catch (AuditoriaException ex) { JOptionPane.showMessageDialog(null, "Erro de auditoria.", "Erro", JOptionPane.ERROR_MESSAGE); Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex); } } }