All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.josecarlosbran.JBSqlUtils.DataBase.Conexion Maven / Gradle / Ivy

Go to download

JBSqlUtils es un ORM desarrollado en java por José Carlos Alfredo Bran Aguirre, que permite gestionar BD's SQLite, MySQL, MariaDB, PostgreSQL y SQLServer, de una manera fácil y rápida sin interrumpir la ejecución del hilo principal del programa, lo cual la hace un potente ORM, por medio del cual tendrá acceso a un CRUD, configurando únicamente la conexión del modelo, los atributos que posee la tabla en BD's cómo variables que pertenecerán al modelo en su aplicación. JBSqlUtils también proporciona un potente generador de instrucciones SQL que le permitirá crear o eliminar una tabla, insertar, seleccionar, actualizar o eliminar registros de una tabla en su BD's sin necesidad de instanciar un modelo cómo tal, únicamente tendrá que configurar previamente la conexión a su BD's. Lo cual la hace un potente ORM para aplicaciones android y sistemas empresariales que tengan la necesidad de poder conectarse a alguna de estas 4 tipos de BD's, cabe mencionar que para ello utiliza el SQLite JDBC de org.xerial, org.postgresql, mysql y com.microsoft.sqlserver. Para mayor información, consultar el enlace del proyecto

The newest version!
/***
 * Copyright (C) 2022 El proyecto de código abierto JBSqlUtils de José Bran
 *
 * Con licencia de Apache License, Versión 2.0 (la "Licencia");
 * no puede usar este archivo excepto de conformidad con la Licencia.
 * Puede obtener una copia de la Licencia en
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * A menos que lo exija la ley aplicable o se acuerde por escrito, el software
 * distribuido bajo la Licencia se distribuye "TAL CUAL",
 * SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sean expresas o implícitas.
 * Consulte la Licencia para conocer el idioma específico que rige los permisos y
 * limitaciones bajo la Licencia.
 */
package io.github.josecarlosbran.JBSqlUtils.DataBase;

import io.github.josecarlosbran.JBSqlUtils.Enumerations.ConeccionProperties;
import io.github.josecarlosbran.JBSqlUtils.Enumerations.DataBase;
import io.github.josecarlosbran.JBSqlUtils.Exceptions.DataBaseUndefind;
import io.github.josecarlosbran.JBSqlUtils.Exceptions.PropertiesDBUndefined;
import io.github.josecarlosbran.JBSqlUtils.Utilities.TablesSQL;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import static io.github.josecarlosbran.JBSqlUtils.Utilities.UtilitiesJB.stringIsNullOrEmpty;

/**
 * @author Jose Bran
 * Clase que tiene todas las variables y procedimientos necesarios para que un modelo se conecte a la BD's
 * especificada.
 */
class Conexion {
    /**
     * Ejecutor de tareas asincronas
     */
    protected ExecutorService ejecutor = Executors.newVirtualThreadPerTaskExecutor();
    /**
     * Tipo de BD's a la cual se conectara.
     */
    private DataBase dataBaseType = null;
    /**
     * Host en el cual se encuentra la BD's a la cual se conectara.
     */
    private String host = null;
    /**
     * Puerto en el cual esta escuchando la BD's a la cual nos vamos a conectar.
     */
    private String port = null;
    /**
     * Nombre de la BD's a la cual nos conectaremos.
     */
    private String BD = null;
    /**
     * Usuario de la BD's
     */
    private String user = null;
    /**
     * Contraseña del Usuario de la BD's
     */
    private String password = null;
    /**
     * Indica si para este modelo se utilizará la BD's establecida en las propiedades del sistema
     * al estar en TRUE, cuando esta en FALSE, eso indica que para este modelo se tendra
     * una configuración personalizada.
     */
    private Boolean getPropertySystem = true;
    /**
     * Bandera que sirve para identificar si la tabla correspondiente al modelo Existe
     */
    private Boolean tableExist = false;
    /**
     * Nombre de la tabla correspondiente al modelo.
     */
    private String tableName = null;
    /**
     * Bandera que sirve para identificar si la tarea que estaba realizando el modelo a sido terminada
     */
    private Boolean taskIsReady = true;
    /**
     * Define cual será la clave primaria del modelo
     */
    private String primaryKey = null;
    /**
     * Define si la clave primaria es autoincrementable, el valor por default es true
     */
    private Boolean primaryKeyIsIncremental = true;
    /**
     * Define si el modelo desea que JBSqlUtils maneje las timestamps Created_at, Update_at.
     */
    private Boolean timestamps = true;
    /**
     * Define el nombre de la columna correspondiente a la TimeStamp CreateAT
     */
    private String createdAt = "created_at";
    /**
     * Define el nombre de la columna correspondiente a la TimeStamp UpdateAT
     */
    private String updateAT = "updated_at";
    /**
     * Bandera que sirve para identificar si el modelo existe en BD's, de existir cuando se llame al método save se procedera a actualizar el modelo
     */
    private Boolean modelExist = false;
    /**
     * Representa la metadata de la tabla correspondiente al modelo en BD's
     */
    private TablesSQL tabla = new TablesSQL();
    /**
     * Propiedades extra para la url de conexión a BD's por ejemplo
     * ?autoReconnect=true&useSSL=false
     */
    private String propertisURL = null;
    /**
     * Lista de metodos get que posee el modelo
     */
    private List MethodsGetOfModel = null;
    /**
     * Lista de metodos set que posee el modelo
     */
    private List MethodsSetOfModel = null;
    private List fieldsOfModel = null;
    /**
     * Cantidad de conexiones que ha realizado el modelo a BD's
     */
    private Integer contadorConexiones = 0;

    /**
     * Constructor de la clase Conexión que se encarga de inicializar las propiedades de conexión del modelo,
     * las cuales las obtiene de las propiedades del sistema Java.
     *
     * @throws DataBaseUndefind      Lanza esta excepción si el tipo de BD's a la cual se conectara el modelo no ha sido definida entre
     *                               las propiedades del sistema Java.
     * @throws PropertiesDBUndefined Lanza esta excepción si las propiedades de conexión no han sido definidas.
     */
    protected Conexion() {
        this.setTableName();
        this.inicializador(true);
    }

    /**
     * Constructor de la clase Conexión que se encarga de inicializar las propiedades de conexión del modelo,
     * las cuales las obtiene de las propiedades del sistema Java.
     *
     * @param getPropertySystem Indica si el modelo obtendra las propiedades de conexión de las propiedades del sistema
     */
    protected Conexion(Boolean getPropertySystem) {
        this.setTableName();
        this.inicializador(getPropertySystem);
    }

    /**
     * Inicializa los atributos de la clase Conexion
     *
     * @param getPropertySystem Indica si el modelo obtendra las propiedades de conexión de las propiedades del sistema
     */
    protected void inicializador(Boolean getPropertySystem) {
        if (getPropertySystem) {
            this.getSystemProperties();
        }
        this.setGetPropertySystem(getPropertySystem);
    }

    /**
     * Si el nombre de la tabla no esta definido, setea el nombre del modelo, como nombre de la tabla
     */
    private void setTableName() {
        if (stringIsNullOrEmpty(this.getTableName())) {
            this.setTableName(this.getClass().getSimpleName());
        }
    }

    /**
     * método que se encarga de inicializar las propiedades de conexión del modelo,
     * las cuales las obtiene de las propiedades del sistema Java.
     */
    public void getSystemProperties() {
        this.setGetPropertySystem(true);
        this.setDataBaseType(setearDBType());
        this.setBD(setearBD());
        this.setHost(setearHost());
        this.setPort(setearPort());
        this.setUser(setearUser());
        this.setPassword(setearPassword());
        this.setPropertisURL(setearPropertisUrl());
    }

    /**
     * Setea el tipo de BD's al cual se estara conectando este modelo.
     *
     * @return Retorna el tipo de BD's al cual se estara conectando la BD's si esta definida
     * de lo contrario retorna NULL.
     */
    private DataBase setearDBType() {
        String dataBase = System.getProperty(ConeccionProperties.DBTYPE.getPropiertie());
        Map dataBaseMap = Map.of(
                DataBase.MySQL.name(), DataBase.MySQL,
                DataBase.MariaDB.name(), DataBase.MariaDB,
                DataBase.SQLite.name(), DataBase.SQLite,
                DataBase.SQLServer.name(), DataBase.SQLServer,
                DataBase.PostgreSQL.name(), DataBase.PostgreSQL
        );
        DataBase dbType = dataBaseMap.get(dataBase);
        if (dbType != null) {
            setDataBaseType(dbType);
        }
        return dbType;
    }

    /**
     * Setea el Host en el cual se encuentra la BD's a la cual se conectara.
     *
     * @return Retorna el Host en el cual se encuentra la BD's, de no estar definido, retorna NULL
     */
    private String setearHost() {
        String host;
        host = System.getProperty(ConeccionProperties.DBHOST.getPropiertie());
        return host;
    }

    /**
     * Setea el Puerto en el cual esta escuchando la BD's a la cual nos vamos a conectar.
     *
     * @return Retorna el Puerto en el cual se encuentra la BD's, de no estar definido, retorna NULL
     */
    private String setearPort() {
        String port;
        port = System.getProperty(ConeccionProperties.DBPORT.getPropiertie());
        return port;
    }

    /**
     * Setea el Usuario de la BD's a la cual nos conectaremos
     *
     * @return Retorna el Usuario con el cual se conectara la BD's, de no estar definido, retorna NULL
     */
    private String setearUser() {
        String user;
        user = System.getProperty(ConeccionProperties.DBUSER.getPropiertie());
        return user;
    }

    /**
     * Setea el Nombre de la BD's a la cual nos conectaremos.
     *
     * @return Retorna el nombre de la BD's a la cual nos conectaremos, de no estar definido, retorna NULL
     * @throws PropertiesDBUndefined Lanza esta excepción si no se a seteado el Nombre de la BD's a la cual nos conectaremos.
     */
    private String setearBD() {
        String DB;
        DB = System.getProperty(ConeccionProperties.DBNAME.getPropiertie());
        return DB;
    }

    /**
     * Setea la contraseña del usuario de la BD's a la cual nos conectaremos.
     *
     * @return Retorna la contraseña del usuario con el cual se conectara la BD's, de no estar definida, retorna NULL
     */
    private String setearPassword() {
        String password;
        password = System.getProperty(ConeccionProperties.DBPASSWORD.getPropiertie());
        return password;
    }

    /**
     * Obtiene las propiedades de la url de conexión a la BD's
     *
     * @return Las propiedades de la url para la conexión a la BD's obtenida de las variables del sistema
     */
    private String setearPropertisUrl() {
        String property;
        property = System.getProperty(ConeccionProperties.DBPROPERTIESURL.getPropiertie());
        return property;
    }

    /**
     * Obtiene el tipo de base de datos al cual se conectara el modelo
     *
     * @return Retorna el Tipo de Base de Datos a la cual se conectara el modelo, de no estar definida, lanzara una excepción
     * @throws DataBaseUndefind Lanza esta excepción cuando no se a configurado la BD's a la cual se conectara el modelo
     *                          el usuario de la librería es el encargado de setear el tipo de BD's a la cual se conectara el modelo, asi mismo de ser lanzada
     *                          esta excepción, poder manejarla.
     */
    public DataBase getDataBaseType() throws DataBaseUndefind {
        if (Objects.isNull(this.dataBaseType)) {
            //Si la propiedad del sistema no esta definida, Lanza una Exepción
            throw new DataBaseUndefind("No se a seteado la DataBase que índica a que BD's deseamos se pegue JBSqlUtils");
        }
        return this.dataBaseType;
    }

    /**
     * Setea el tipo de BD's a la cual se estara conectando el Modelo
     *
     * @param dataBase Tipo de BD's a la cual se estara conectando el Modelo, los tipos disponibles son
     *                 MySQL,
     *                 SQLServer,
     *                 PostgreSQL,
     *                 SQLite.
     */
    public void setDataBaseType(DataBase dataBase) {
        if (!Objects.isNull(dataBase))
            this.dataBaseType = dataBase;
    }

    /**
     * Obtiene la propiedades extra de la url de conexión a la BD's
     *
     * @return Propiedades extra de la url de conexión a la BD's
     */
    public String getPropertisURL() {
        return this.propertisURL;
    }

    /**
     * Setea las propiedades extra para la url de conexión a BD's
     *
     * @param propertisURL Propiedades extra para la url de conexión a BD's por ejemplo
     *                     {@literal ?autoReconnect=true&useSSL=false}
     */
    public void setPropertisURL(String propertisURL) {
        if (!stringIsNullOrEmpty(propertisURL))
            this.propertisURL = propertisURL;
    }

    /**
     * Obtiene el host en el cual se encuentra la BD's a la cual se desea conectar el modelo.
     *
     * @return Retorna el host en el cual se encuentra la BD's.
     * @throws DataBaseUndefind      Lanza esta excepción cuando no se a configurado la BD's a la cual se conectara el modelo
     *                               el usuario de la librería es el encargado de setear el tipo de BD's a la cual se conectara el modelo, asi mismo de ser lanzada
     *                               esta excepción, poder manejarla.
     * @throws PropertiesDBUndefined Lanza esta excepción si no se a definido el Host en el cual se encuentra la BD's, si el tipo
     *                               de BD's al cual se desea conectar es diferente a una BD's SQLite
     */
    public String getHost() throws DataBaseUndefind, PropertiesDBUndefined {
        if ((this.getDataBaseType() != DataBase.SQLite) && stringIsNullOrEmpty(this.host)) {
            //Si la propiedad del sistema no esta definida, Lanza una Exepción
            throw new PropertiesDBUndefined("No se a seteado el host en el que se encuentra la BD's a la cual deseamos se pegue JBSqlUtils");
        }
        return this.host;
    }

    /**
     * Setea el host en el cual se encuentra la BD's a la cual se conectara el modelo.
     *
     * @param host Host en el cual se encuentra la BD's a la que nos queremos conectar.
     */
    public void setHost(String host) {
        if (!stringIsNullOrEmpty(host))
            this.host = host;
    }

    /**
     * Obtiene el puerto en el cual se encuentra escuchando la BD's a la cual se pega el modelo.
     *
     * @return Retorna el puerto en el cual se encuentra escuchando la BD's a la cual se pega el modelo.
     * @throws DataBaseUndefind      Lanza esta excepción cuando no se a configurado la BD's a la cual se conectara el modelo
     *                               el usuario de la librería es el encargado de setear el tipo de BD's a la cual se conectara el modelo, asi mismo de ser lanzada
     *                               esta excepción, poder manejarla.
     * @throws PropertiesDBUndefined Lanza esta excepción si no se a definido el Puerto en el cual se encuentra escuchando la BD's, si el tipo
     *                               de BD's al cual se desea conectar es diferente a una BD's SQLite
     */
    public String getPort() throws DataBaseUndefind, PropertiesDBUndefined {
        if (stringIsNullOrEmpty(this.port) && (this.getDataBaseType() != DataBase.SQLite)
                && (this.getDataBaseType() != DataBase.PostgreSQL) && (this.getDataBaseType() != DataBase.SQLServer)) {
            //Si la propiedad del sistema no esta definida, Lanza una Exepción
            throw new PropertiesDBUndefined("No se a seteado el puerto en el que se encuentra escuchando la BD's a la cual deseamos se pegue JBSqlUtils");
        }
        return this.port;
    }

    /**
     * Setea el puerto en el cual se encuentra escuchando la BD's a la cual se pegara el modelo.
     *
     * @param port Puerto en el cual se encuentra escuchando la BD's a la cual se pegara el modelo.
     */
    public void setPort(String port) {
        if (!stringIsNullOrEmpty(port))
            this.port = port;
    }

    /**
     * Obtiene el usuario con el cual el modelo se conectara a la BD's.
     *
     * @return Retorna el usuario con el cual el modelo se conectara a la BD's.
     * @throws DataBaseUndefind      Lanza esta excepción cuando no se a configurado la BD's a la cual se conectara el modelo
     *                               el usuario de la librería es el encargado de setear el tipo de BD's a la cual se conectara el modelo, asi mismo de ser lanzada
     *                               esta excepción, poder manejarla.
     * @throws PropertiesDBUndefined Lanza esta excepción si no se a definido el usuario con el cual se conectara a la BD's, si el tipo
     *                               de BD's al cual se desea conectar es diferente a una BD's SQLite
     */
    public String getUser() throws DataBaseUndefind, PropertiesDBUndefined {
        if (stringIsNullOrEmpty(this.user) && (this.getDataBaseType() != DataBase.SQLite)) {
            //Si la propiedad del sistema no esta definida, Lanza una Exepción
            throw new PropertiesDBUndefined("No se a seteado el usuario de la BD's a la cual deseamos se pegue JBSqlUtils");
        }
        try {
            // Cache the package hash code of the Conexion class
            int conexionPackageHashCode = Conexion.class.getPackage().hashCode();
            //Permitira obtener la pila de procesos asociados a la ejecuciòn actual
            StackTraceElement[] elements = Thread.currentThread().getStackTrace();
            String clase;
            int posicion = 0;
            for (int i = 3; i <= 7; i += 2) {
                clase = elements[i].getClassName();
                Class tempClass = Class.forName(clase);
                if (tempClass.getPackage().hashCode() == conexionPackageHashCode) {
                    posicion = i;
                    break;
                }
            }
            clase = elements[posicion].getClassName();
            Class tempClass = Class.forName(clase);
            if (tempClass.getPackage().hashCode() != conexionPackageHashCode) {
                return null;
            }
        } catch (ClassNotFoundException e) {
        }
        return this.user;
    }

    /**
     * Setea el Usuario con el cual el modelo se conectara a la BD's.
     *
     * @param user Usuario con el cual el modelo se conectara a la BD's.
     */
    public void setUser(String user) {
        if (!stringIsNullOrEmpty(user))
            this.user = user;
    }

    /**
     * Obtiene la contraseña del usuario con el cual el modelo se conectara a la BD's.
     *
     * @return Retorna la contraseña del usuario con el cual el modelo se conectara a la BD's.
     * @throws DataBaseUndefind      Lanza esta excepción cuando no se a configurado la BD's a la cual se conectara el modelo
     *                               el usuario de la librería es el encargado de setear el tipo de BD's a la cual se conectara el modelo, asi mismo de ser lanzada
     *                               esta excepción, poder manejarla.
     * @throws PropertiesDBUndefined Lanza esta excepción si no se a definido la contraseña del usuario con el cual se conectara a la BD's, si el tipo
     *                               de BD's al cual se desea conectar es diferente a una BD's SQLite
     */
    public String getPassword() throws DataBaseUndefind, PropertiesDBUndefined {
        if (stringIsNullOrEmpty(this.password) && (this.getDataBaseType() != DataBase.SQLite)) {
            //Si la propiedad del sistema no esta definida, Lanza una Exepción
            throw new PropertiesDBUndefined("No se a seteado la contraseña del usuario de la BD's a la cual deseamos se pegue JBSqlUtils");
        }
        try {
            // Cache the package hash code of the Conexion class
            int conexionPackageHashCode = Conexion.class.getPackage().hashCode();
            //Permitira obtener la pila de procesos asociados a la ejecuciòn actual
            StackTraceElement[] elements = Thread.currentThread().getStackTrace();
            String clase;
            int posicion = 0;
            for (int i = 3; i <= 7; i += 2) {
                clase = elements[i].getClassName();
                Class tempClass = Class.forName(clase);
                if (tempClass.getPackage().hashCode() == conexionPackageHashCode) {
                    posicion = i;
                    break;
                }
            }
            clase = elements[posicion].getClassName();
            Class tempClass = Class.forName(clase);
            if (tempClass.getPackage().hashCode() != conexionPackageHashCode) {
                return null;
            }
        } catch (ClassNotFoundException e) {
        }
        return this.password;
    }

    /**
     * Setea la contraseña del usuario con el cual el modelo se conectara a la BD's.
     *
     * @param password Contraseña del usuario con el cual el modelo se conectara a la BD's.
     */
    public void setPassword(String password) {
        if (!stringIsNullOrEmpty(password))
            this.password = password;
    }

    /**
     * Obtiene el nombre de la Base de Datos a la que se conectara el modelo.
     *
     * @return Retorna el nombre de la Base de Datos a la que se conectara el modelo.
     * @throws PropertiesDBUndefined Lanza esta excepción si no se a configurado la Base de Datos a la que se conectara el modelo.
     */
    public String getBD() throws PropertiesDBUndefined, DataBaseUndefind {
        if (stringIsNullOrEmpty(this.BD) && (this.getDataBaseType() != DataBase.PostgreSQL) && (this.getDataBaseType() != DataBase.SQLServer)) {
            //Si la propiedad del sistema no esta definida, Lanza una Exepción
            throw new PropertiesDBUndefined("No se a seteado la BD's a la cual deseamos se pegue JBSqlUtils");
        }
        return this.BD;
    }

    /**
     * Setea el nombre de la Base de Datos a la que se conectara el modelo.
     *
     * @param BD Nombre de la Base de Datos a la que se conectara el modelo.
     */
    public void setBD(String BD) {
        if (!stringIsNullOrEmpty(BD))
            this.BD = BD;
    }

    /**
     * Obtiene la bandera que indica si el modelo utilizara la configuración general o una configuración personalidada, sobre la
     * conexión a la BD's del Modelo.
     *
     * @return Retorna TRUE si el modelo obtendra la configuración general del sistema, retorna FALSE si el modelo tendra una configuración
     * personalizada, el valor por default es TRUE.
     */
    public Boolean getGetPropertySystem() {
        return this.getPropertySystem;
    }

    /**
     * Setea la bandera que indica si el modelo utilizara la configuración general o una configuración personalidada, sobre la
     * conexión a la BD's del Modelo.
     *
     * @param getPropertySystem TRUE si el modelo obtendra la configuración general del sistema, retorna FALSE si el modelo tendra una configuración
     *                          personalizada, el valor por default es TRUE.
     */
    public void setGetPropertySystem(Boolean getPropertySystem) {
        this.getPropertySystem = getPropertySystem;
    }

    /**
     * Obtiene la bandera que indica si la tabla correspondiente al modelo en BD's
     *
     * @return True si la tabla correspondiente al modelo existe en BD's, de lo contrario retorna
     * False.
     */
    public Boolean getTableExist() {
        return this.tableExist;
    }

    /**
     * Setea la bandera que indica si la tabla correspondiente al modelo existe en BD's
     *
     * @param tableExist True si la tabla correspondiente al modelo existe en BD's, de lo contrario False.
     */
    protected synchronized void setTableExist(Boolean tableExist) {
        this.tableExist = tableExist;
    }

    /**
     * Obtiene el nombre de la tabla en BD's correspondiente al modelo.
     *
     * @return Retorna el nombre de la tabla en BD's correspondiente al modelo.
     */
    public synchronized String getTableName() {
        return tableName;
    }

    /**
     * Setea el nombre de la tabla en BD's correspondiente al modelo.
     *
     * @param tableName Nombre de la tabla en BD's correspondiente al modelo.
     */
    protected void setTableName(String tableName) {
        this.tableName = tableName;
    }

    /**
     * Obtiene la bandera que indica si la tarea que estaba realizando el modelo ha sido terminada
     *
     * @return True si el modelo actualmente no esta realizando una tarea. False si el modelo esta realizando una tarea
     * actualmente.
     */
    public synchronized Boolean getTaskIsReady() {
        return taskIsReady;
    }

    /**
     * Setea el valor de la bandera que indica si el modelo actual esta realizando una tarea
     *
     * @param taskIsReady True si el modelo actualmente no esta realizando una tarea. False si el modelo esta realizando una tarea
     *                    actualmente.
     */
    protected synchronized void setTaskIsReady(Boolean taskIsReady) {
        this.taskIsReady = taskIsReady;
    }

    /**
     * Si queremos utilizar el mismo modelo para realizar otra operación en BD's
     * es necesario que esperemos a que el modelo no este realizando ninguna tarea, relacionada con lectura o
     * escritura.
     * 

* Debido a que estas tareas JBSqlUtils las realiza en segundo plano, para no interrumpir * el hilo de ejecución principal y entregar un mejor rendimiento, por si necesitamos realizar alguna otra * instrucción mientras el modelo esta trabajando en segundo plano. para poder saber si el modelo actualmente esta * ocupado, podemos hacerlo a través del método getTaskIsReady(), el cual obtiene la bandera que indica si * la tarea que estaba realizando el modelo ha sido terminada * De utilizar otro modelo, no es necesario esperar a que el primer modelo este libre. */ public void waitOperationComplete() { /** * Si queremos utilizar el mismo modelo para insertar otro registro con valores diferentes, * es necesario que esperemos a que el modelo no este realizando ninguna tarea, relacionada con lectura o * escritura en la BD's, debido a que estas tareas JBSqlUtils las realiza en segundo plano, para no interrumpir * el hilo de ejecución principal y entregar un mejor rendimiento, por si necesitamos realizar alguna otra * instrucción mientras el modelo esta trabajando en segundo plano. para poder saber si el modelo actualmente esta * ocupado, podemos hacerlo a través del método getTaskIsReady(), el cual obtiene la bandera que indica si * la tarea que estaba realizando el modelo ha sido terminada */ while (!this.getTaskIsReady()) { } } /** * Obtiene la clave primaria del modelo. * * @return Nombre de la clave primaria del modelo */ public String getPrimaryKey() { return primaryKey; } /** * Setea la clave primaria del modelo * * @param primaryKey Nombre de la columna que sirve como clave primaria del modelo */ public void setPrimaryKey(String primaryKey) { this.primaryKey = primaryKey; } /** * Obtiene la bandera que indica si la clave primaria del modelo es autoincrementable. * * @return Retorna True si la clave primaria es autoincrementable. */ public Boolean getPrimaryKeyIsIncremental() { return primaryKeyIsIncremental; } /** * Setea la información sobre si la clave primaria es autoincrementable. * * @param primaryKeyIsIncremental True si la clave primaria es autoincrementable, False si no lo es. */ public void setPrimaryKeyIsIncremental(Boolean primaryKeyIsIncremental) { this.primaryKeyIsIncremental = primaryKeyIsIncremental; } /** * Obtiene la bandera que define si el modelo desea que JBSqlUtils maneje las timestamps Created_at, Update_at. * * @return True si JBSqlUtils manejara de forma predeterminada las timestamps del modelo, False si no se * desea que JBSqlUtils registre esta información */ protected Boolean getTimestamps() { return timestamps; } /** * Setea la bandera que define si el modelo desea que JBSqlUtils maneje las timestamps Created_at, Update_at. * * @param timestamps True si las timestamps serán manejadas por JBSqlUtils, False, si el modelo no tiene estas * columnas. */ public void setTimestamps(Boolean timestamps) { this.timestamps = timestamps; } /** * Obtiene el nombre de la columna correspondiente a la TimeStamp CreateAT * * @return Nombre de la columna correspondiente a la TimeStamp CreateAT */ public String getCreatedAt() { return createdAt; } /** * Setea el nombre de la columna correspondiente a la TimeStamp CreateAT * * @param createdAt Nombre de la columna correspondiente a la TimeStamp CreateAT */ public void setCreatedAt(String createdAt) { this.createdAt = createdAt; } /** * Obtiene el nombre de la columna correspondiente a la TimeStamp UpdateAT * * @return Nombre de la columna correspondiente a la TimeStamp UpdateAT */ public String getUpdateAT() { return updateAT; } /** * Setea el nombre de la columna correspondiente a la TimeStamp UpdateAT * * @param updateAT Nombre de la columna correspondiente a la TimeStamp UpdateAT */ public void setUpdateAT(String updateAT) { this.updateAT = updateAT; } /** * Obtiene la Bandera que sirve para identificar si el modelo existe en BD's, de existir cuando se * llame al metodo save se procedera a actualizar el modelo * * @return TRUE indica que el modelo fue obtenido de BD's, * False indica que el modelo no existe en BD's */ public Boolean getModelExist() { return modelExist; } /** * Setea la Bandera que sirve para identificar si el modelo existe en BD's, de existir cuando se llame * al metodo save se procedera a actualizar el modelo * * @param modelExist Bandera que sirve para identificar si el modelo existe en BD's, TRUE indica que el modelo fue obtenido de BD's * False indica que el modelo no existe en BD's */ public void setModelExist(Boolean modelExist) { this.modelExist = modelExist; } /** * Representa la metadata de la tabla correspondiente al modelo en BD's * Retorna la TablaSQL correspondiente al modelo */ protected synchronized TablesSQL getTabla() { return tabla; } /** * Setea la tabla que representa al modelo en BD's * * @param tabla Objeto TableSQL que contiene parte de la meta data de la tabla correspondiente al modelo */ protected void setTabla(TablesSQL tabla) { this.tabla = tabla; } /** * Obtiene la lista de los métodos get del modelo que lo invoca. * * @return Lista de los métodos get del modelo que lo invoca. */ protected synchronized List getMethodsGetOfModel() { if (Objects.isNull(MethodsGetOfModel)) { MethodsGetOfModel = new ArrayList(); } return MethodsGetOfModel; } /** * Obtiene la lista de los métodos set del modelo que lo invoca. * * @return Lista de los métodos set del modelo que lo invoca. */ protected synchronized List getMethodsSetOfModel() { if (Objects.isNull(MethodsSetOfModel)) { MethodsSetOfModel = new ArrayList(); } return MethodsSetOfModel; } /** * Cantidad de conexiones que ha realizado el modelo a BD's * * @return Cantidad de conexiones que ha realizado el modelo a BD's */ public synchronized Integer getContadorConexiones() { return contadorConexiones; } /** * Setea la cantidad de conexiones que a realizado el modelo * * @param contadorConexiones Cantidad de conexiones que a realizado el modelo */ protected synchronized void setContadorConexiones(Integer contadorConexiones) { this.contadorConexiones = contadorConexiones; } /** * Lista de Field's que posee el modelo mapeados con la tabla correspondiente en BD's * * @return */ public List getFieldsOfModel() { if (Objects.isNull(fieldsOfModel)) { fieldsOfModel = new ArrayList(); } return fieldsOfModel; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy