sd_conexion_bd.Servicios.java Source code

Java tutorial

Introduction

Here is the source code for sd_conexion_bd.Servicios.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 sd_conexion_bd;

/**
 *
 * @author joyce-adri
 */

import java.awt.Image;
import java.awt.Rectangle;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.sql.Blob;
import java.sql.CallableStatement;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.imageio.ImageIO;
import javax.swing.DefaultListCellRenderer.UIResource;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import org.apache.commons.codec.digest.DigestUtils;
import sd_mensajeria.usuario;

public class Servicios extends SQLQuery {
    //CONSULTAS A LA BASE

    public boolean validar_userName(String userName, String password, usuario u) throws IOException {
        try {
            this.conectar("localhost:3306", "mensajeria", "mensajeria", "1234");
            ////this.conectar("192.168.43.21:3306", "mensajeria","mensajeria","1234");
            //System.out.println("\n" + userName+ " " + password + "\n");
            this.consulta = this.conexion
                    .prepareStatement("call buscar_por_user(\"" + userName + "\",\"" + password + "\");");
            this.datos = this.consulta.executeQuery();
            while (this.datos.next()) {
                u.setID(datos.getInt("id"));
                u.setNombre(datos.getString("nombre"));
                u.setApellido(datos.getString("apellido"));
                u.setUser(userName);
                Blob imagen = datos.getBlob("foto");
                Image im = javax.imageio.ImageIO.read(imagen.getBinaryStream());
                if (im != null) {

                    ImageIcon i = new ImageIcon(im.getScaledInstance(100, 120, 0));
                    u.setFoto(i);

                }
                this.desconectar();
                return true;
            }
            this.desconectar();
            return false;
        } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(Servicios.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "--No se pudo conectar correctamente a la base de datos");
            System.exit(0);
        }
        return false;
    }

    /**
      * Cargar la lista de los contactos del usuario de la base de datos y mostararla como lista en el tab contactos
      * lista es la lista donde se va a presentar los contactos del usuario
    */
    public void cargar_contactos(JList lista, String userName, int u_id) {
        try {
            this.conectar("localhost:3306", "mensajeria", "mensajeria", "1234");
            ////this.conectar("192.168.43.21:3306", "mensajeria","mensajeria","1234");
            this.consulta = this.conexion
                    .prepareStatement("call consultar_contactos(\"" + userName + "\",\"" + u_id + "\");");
            this.datos = this.consulta.executeQuery();
            DefaultListModel modelo = new DefaultListModel();
            while (this.datos.next()) {
                modelo.addElement(datos.getString("nombre") + " " + datos.getString("apellido"));
            }
            lista.setModel(modelo);
        } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(Servicios.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "No se pudo conectar correctamente a la base de datos");
        }
    }

    /**
      * Cargar la lista de los contactos del usuario de la base de datos y mostararla como lista en el tab contactos
      * lista es la lista donde se va a presentar los contactos del usuario
    */
    public void cargar_nuevoscontactos(JList nuevosContactos, String userName, int u_id) {
        try {
            //System.out.println(userName +u_id);
            this.conectar("localhost:3306", "mensajeria", "mensajeria", "1234");
            ////this.conectar("192.168.43.21:3306", "mensajeria","mensajeria","1234");
            this.consulta = this.conexion
                    .prepareStatement("call buscar_nuevos_contactos(\"" + userName + "\",\"" + u_id + "\");");
            this.datos = this.consulta.executeQuery();
            DefaultListModel modelo = new DefaultListModel();
            while (this.datos.next()) {
                //System.out.println(datos.getString("nombre")+"\n");
                modelo.addElement(datos.getString("nombre") + " " + datos.getString("apellido"));
            }
            //System.out.println(modelo);
            nuevosContactos.setModel(modelo);
            //System.out.println(nuevosContactos);
        } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(Servicios.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "No se pudo conectar correctamente a la base de datos");
        }
    }

    public void agregar_contacto(int u_creador, String nuevoUsuario) throws ClassNotFoundException, SQLException {

        this.conectar("localhost:3306", "mensajeria", "mensajeria", "1234");
        //this.conectar("192.168.43.21:3306", "mensajeria","mensajeria","1234");
        //System.out.println(u_creador + nuevoUsuario);
        String sql = "{call agregar_contacto_user(?, ?)}";
        CallableStatement cstmt = conexion.prepareCall(sql);
        cstmt.setInt(1, u_creador);
        cstmt.setString(2, nuevoUsuario);

        cstmt.execute();
    }

    public void registrar_usuario(String nombre, String apellido, String ciudad, String user, String pass,
            String foto) throws ClassNotFoundException, SQLException, FileNotFoundException {

        //System.out.println(nombre + apellido + ciudad + user + pass + foto);
        this.conectar("localhost:3306", "mensajeria", "mensajeria", "1234");
        //this.conectar("192.168.43.21:3306", "mensajeria","mensajeria","1234");
        String sql = "{call registrar_usuario(?, ?, ?, ?, ?, ?)}";
        CallableStatement cstmt = conexion.prepareCall(sql);
        cstmt.setString(1, nombre);
        cstmt.setString(2, apellido);
        cstmt.setString(3, ciudad);
        cstmt.setString(4, user);
        cstmt.setString(5, pass);
        File file = new File(foto);
        FileInputStream inputStream = new FileInputStream(file);

        cstmt.setBinaryStream(6, inputStream, (int) file.length());
        //cstmt.setBlob(6, inputStream);
        cstmt.execute();

    }

    //------------
    /**
      * funcion para obtener los datos del contacto del usuario del chat
    */
    public boolean dato_contacto(String nombre, String apellido, usuario u) throws IOException {
        try {
            this.conectar("localhost:3306", "mensajeria", "mensajeria", "1234");
            //this.conectar("192.168.43.21:3306", "mensajeria","mensajeria","1234");
            this.consulta = this.conexion
                    .prepareStatement("call obtener_info_contacto(\"" + nombre + "\",\"" + apellido + "\");");
            this.datos = this.consulta.executeQuery();
            while (this.datos.next()) {
                u.setID(datos.getInt("id"));
                u.setNombre(nombre);
                u.setApellido(apellido);
                u.setUser(datos.getString("user"));
                u.setEst_conexion(datos.getString("estado_conexion").charAt(0));
                u.setFecha_ult_conexion(datos.getTimestamp("fecha_ult_conexion"));
                Blob imagen = datos.getBlob("foto");
                if (imagen != null) {
                    Image im = javax.imageio.ImageIO.read(imagen.getBinaryStream());
                    ImageIcon i = new ImageIcon(im.getScaledInstance(100, 120, 0));
                    u.setFoto(i);
                }
                return true;
            }
            return false;
        } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(Servicios.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "No se pudo conectar correctamente a la base de datos");
            System.exit(0);
        }
        return false;
    }

    /**
     * procedimiento que agrega a una lista el historial de mensajes del chat entre dos personas     
     */
    public void obtener_historial_msj(JList lista, int user_id, int contacto_id, String nombre) {
        String str;
        //UIResource posicion = new UIResource();
        try {
            this.conectar("localhost:3306", "mensajeria", "mensajeria", "1234");
            //this.conectar("192.168.43.21:3306", "mensajeria","mensajeria","1234");
            this.consulta = this.conexion
                    .prepareStatement("call obtener_historial_msj(\"" + user_id + "\",\"" + contacto_id + "\");");
            this.datos = this.consulta.executeQuery();
            DefaultListModel modelo = new DefaultListModel();
            while (this.datos.next()) {
                if (datos.getInt("emisor_id") == user_id) {
                    str = "Tu: " + datos.getString("texto");
                    modelo.addElement(str);
                } else {
                    //posicion.setHorizontalAlignment(SwingConstants.CENTER);
                    str = nombre + ": " + datos.getString("texto");
                    modelo.addElement(str);
                }
            }
            lista.setModel(modelo);
            //lista.setCellRenderer(posicion);
        } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(Servicios.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "No se pudo conectar correctamente a la base de datos");
        }
    }

    /**
    * procedimiento que permite al usuario crear un nuevo grupo   
    */
    public boolean registrar_grupo(String nombre, String descripcion, JList integrantes_lista, int creadorID)
            throws ClassNotFoundException {
        //registrar grupo
        int id_grupo = 0;
        String nomb_apellido;
        try {
            this.conectar("localhost:3306", "mensajeria", "mensajeria", "1234");
            //this.conectar("192.168.43.21:3306", "mensajeria","mensajeria","1234");
            String sql = "{call registrar_grupo(?, ?, ?, ?)}";
            CallableStatement cstmt = conexion.prepareCall(sql);
            cstmt.setString(1, nombre);
            cstmt.setString(2, descripcion);
            cstmt.setInt(3, creadorID);
            // Because parameter is OUT so register it
            cstmt.registerOutParameter(4, java.sql.Types.INTEGER);
            cstmt.execute();//retorna el id del grupo por el parametro tipo out del procedure
            id_grupo = cstmt.getInt(4);
            if (id_grupo != 0) {
                //agregar uno a uno los integrantes con el id respectivo (while)
                for (int i = 0; i < integrantes_lista.getModel().getSize(); i++) {
                    nomb_apellido = (String) integrantes_lista.getModel().getElementAt(i);
                    this.consulta = this.conexion.prepareStatement("call registrar_integrante(\"" + nomb_apellido
                            + "\",\"" + creadorID + "\",\"" + id_grupo + "\");");
                    this.consulta.executeUpdate();//ingresa uno a uno los integrantes
                }
            } else {
                JOptionPane.showMessageDialog(null, "No se pudo registrar el grupo");
            } //no se ingreso el grupo
            this.conexion.close();
            return true;
        } catch (SQLException ex) {
            Logger.getLogger(Servicios.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "No se pudo conectar correctamente a la base de datos");
        }
        return false;
    }

    //------------
    /**
      * funcion para obtener usuarios mas frecuentes del chat
    */
    public void usuarios_frecuentes(int user_id, JList topFiveList) {
        int id_temp = 0;
        String msj;
        ArrayList<Integer> id_user_conv = new ArrayList<>();
        ArrayList<String> user_data = new ArrayList<>();
        try {
            this.conectar("localhost:3306", "mensajeria", "mensajeria", "1234");
            //this.conectar("192.168.43.21:3306", "mensajeria","mensajeria","1234");
            this.consulta = this.conexion.prepareStatement("call obtener_users_frecs(\"" + user_id + "\");");
            this.datos = this.consulta.executeQuery();
            while (this.datos.next()) {
                id_temp = datos.getInt("destinatario_id");
                id_user_conv.add(id_temp);
                //System.out.println(id_temp + "  contador: " +id_temp_count);

            }

            DefaultListModel modelo = new DefaultListModel();

            for (int a = 0; a < id_user_conv.size(); a++) {
                int id_userFav = id_user_conv.get(a);
                this.consulta = this.conexion
                        .prepareStatement("call obtener_usuario_porID(\"" + id_userFav + "\");");
                this.datos = this.consulta.executeQuery();
                while (this.datos.next()) {
                    String nombre = datos.getString("nombre");
                    String apellido = datos.getString("apellido");
                    String usuario = datos.getString("user");
                    user_data.add(nombre + " " + apellido + " @" + usuario);
                }
            }
            for (int b = 0; b < user_data.size(); b++) {
                modelo.addElement(user_data.get(b));
            }
            topFiveList.setModel(modelo);
        } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(Servicios.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "No se pudo conectar correctamente a la base de datos");
        }
    }

    public void buscarPorUser(int user_id, String texto, DefaultListModel model) {
        try {
            this.conectar("localhost:3306", "mensajeria", "mensajeria", "1234");
            //this.conectar("192.168.43.21:3306", "mensajeria","mensajeria","1234");
            this.consulta = this.conexion
                    .prepareStatement("call buscar_contacto_porUser(\"" + user_id + "\",\"" + texto + "\");");
            this.datos = this.consulta.executeQuery();
            while (this.datos.next()) {
                model.addElement(
                        datos.getString("nombreCompleto") + "    >>> " + " User: " + datos.getString("user"));
            }
        } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(Servicios.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "No se pudo conectar correctamente a la base de datos");
        }
    }

    public void buscarPorCiudad(int user_id, String texto, DefaultListModel model) {
        try {
            this.conectar("localhost:3306", "mensajeria", "mensajeria", "1234");
            //this.conectar("192.168.43.21:3306", "mensajeria","mensajeria","1234");
            this.consulta = this.conexion
                    .prepareStatement("call buscar_contacto_porCiudad(\"" + user_id + "\",\"" + texto + "\");");
            this.datos = this.consulta.executeQuery();
            while (this.datos.next()) {
                model.addElement(
                        datos.getString("nombreCompleto") + "    >>> " + " Ciudad: " + datos.getString("ciudad"));
            }
        } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(Servicios.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "No se pudo conectar correctamente a la base de datos");
        }
    }

    public void cargar_chats_grupo(JList chat_lista, int user_id) {
        try {
            this.conectar("localhost:3306", "mensajeria", "mensajeria", "1234");
            //this.conectar("192.168.43.21:3306", "mensajeria","mensajeria","1234");
            this.consulta = this.conexion.prepareStatement("call consultar_chatsEnGrupo(\"" + user_id + "\");");
            this.datos = this.consulta.executeQuery();
            DefaultListModel modelo = new DefaultListModel();
            while (this.datos.next()) {
                modelo.addElement(datos.getString("nombre"));
            }
            chat_lista.setModel(modelo);
        } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(Servicios.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "No se pudo conectar correctamente a la base de datos");
        }
    }

    public void cargar_chats_personales(JList lista, int user_id) {
        try {
            this.conectar("localhost:3306", "mensajeria", "mensajeria", "1234");
            //this.conectar("192.168.43.21:3306", "mensajeria","mensajeria","1234");
            this.consulta = this.conexion.prepareStatement("call consultar_chatsPersonales(\"" + user_id + "\");");
            this.datos = this.consulta.executeQuery();
            DefaultListModel modelo = new DefaultListModel();
            while (this.datos.next()) {
                modelo.addElement(datos.getString("nombreCompleto"));
            }
            lista.setModel(modelo);
        } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(Servicios.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "No se pudo conectar correctamente a la base de datos");
        }
    }

    public void obtener_historial_ChatsGrupo(JList lista, int user_id, String nombre_grupo) {
        String str;
        try {
            this.conectar("localhost:3306", "mensajeria", "mensajeria", "1234");
            ////this.conectar("192.168.43.21:3306", "mensajeria","mensajeria","1234");
            this.consulta = this.conexion
                    .prepareStatement("call historial_chatsEnGrupo(\"" + user_id + "\",\"" + nombre_grupo + "\");");
            this.datos = this.consulta.executeQuery();
            DefaultListModel modelo = new DefaultListModel();
            while (this.datos.next()) {
                if (datos.getInt("emisor_id") == user_id) {
                    str = "Tu: " + datos.getString("texto");
                    modelo.addElement(str);
                } else {
                    //posicion.setHorizontalAlignment(SwingConstants.CENTER);
                    str = datos.getString("nombreCompleto") + ": " + datos.getString("texto");
                    modelo.addElement(str);
                }
            }
            lista.setModel(modelo);
        } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(Servicios.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "No se pudo conectar correctamente a la base de datos");
        }
    }

    /**
      * funcion para obtener ultimos chats del usuario
    */
    public void ultimos_msjs(int user_id, JList msjList) {
        int id_dest = 0;
        String msj;
        ArrayList<Integer> id_user_lastconv = new ArrayList<>();
        ArrayList<String> msjs = new ArrayList<>();
        ArrayList<String> msjUser = new ArrayList<>();
        try {
            this.conectar("localhost:3306", "mensajeria", "mensajeria", "1234");
            this.consulta = this.conexion.prepareStatement("call obtener_ultimosMsjs(\"" + user_id + "\");");
            this.datos = this.consulta.executeQuery();
            while (this.datos.next()) {
                id_dest = datos.getInt("destinatario_id");
                msj = datos.getString("texto");
                id_user_lastconv.add(id_dest);
                msjs.add(msj);
                //System.out.println(id_dest);
                //System.out.println(msj);
            }

            DefaultListModel modelo = new DefaultListModel();

            for (int a = 0; a < id_user_lastconv.size(); a++) {
                int id_user = id_user_lastconv.get(a);
                this.consulta = this.conexion.prepareStatement("call obtener_usuario_porID(\"" + id_user + "\");");
                this.datos = this.consulta.executeQuery();
                while (this.datos.next()) {
                    //String nombre = datos.getString("nombre");
                    //String apellido = datos.getString("apellido");
                    String usuario = datos.getString("user");
                    msjUser.add(a + 1 + ")  " + msjs.get(a) + "   - @" + usuario);
                }
            }
            for (int b = 0; b < msjUser.size(); b++) {
                modelo.addElement(msjUser.get(b));
            }
            msjList.setModel(modelo);
        } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(Servicios.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "No se pudo conectar correctamente a la base de datos");
        }
    }

    /**
      * funcion para obtener que grupos administra el usuario
    */
    public void grupos_admin(int user_id, JList msjList) {
        String nombre;
        String descripcion;
        ArrayList<String> grupos = new ArrayList<>();
        try {
            this.conectar("localhost:3306", "mensajeria", "mensajeria", "1234");
            this.consulta = this.conexion.prepareStatement("call obtener_gruposAdmin(\"" + user_id + "\");");
            this.datos = this.consulta.executeQuery();
            while (this.datos.next()) {
                nombre = datos.getString("nombre");
                descripcion = datos.getString("descripcion");
                grupos.add(nombre + " - " + descripcion);
                //System.out.println(id_dest);
            }

            DefaultListModel modelo = new DefaultListModel();

            for (int b = 0; b < grupos.size(); b++) {
                modelo.addElement(grupos.get(b));
            }
            msjList.setModel(modelo);
        } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(Servicios.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "No se pudo conectar correctamente a la base de datos");
        }
    }

    public boolean ingresarNuevoMensaje(int emiID, int destID, char tipoGrupo, Date fechaMensaje, String mensaje,
            int gID) {
        try {
            //this.conectar("localhost:3306", "mensajeria","mensajeria","");
            this.conectar("localhost:3306", "mensajeria", "mensajeria", "1234");
            this.consulta = this.conexion.prepareStatement("call ingresarMensaje(\"" + emiID + "\",\"" + destID
                    + "\",\"" + tipoGrupo + "\",\"" + fechaMensaje + "\",\"" + mensaje + "\",\"" + gID + "\");");
            this.datos = this.consulta.executeQuery();
            return true;
        } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(Servicios.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "No se pudo conectar correctamente a la base de datos");
        }
        return false;
    }

}