org.squale.welcom.outils.jdbc.WJdbc.java Source code

Java tutorial

Introduction

Here is the source code for org.squale.welcom.outils.jdbc.WJdbc.java

Source

/**
 * Copyright (C) 2008-2010, Squale Project - http://www.squale.org
 *
 * This file is part of Squale.
 *
 * Squale is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or any later version.
 *
 * Squale 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 Lesser General Public License
 * along with Squale.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.squale.welcom.outils.jdbc;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.squale.welcom.outils.jdbc.wrapper.ConnectionPool;
import org.squale.welcom.struts.bean.JCryptable;
import org.squale.welcom.struts.bean.JCryptableException;
import org.squale.welcom.struts.bean.WComboValue;
import org.squale.welcom.struts.bean.WComboValueLabel;
import org.squale.welcom.struts.bean.WCouple;

/**
 * @author M327837 Gestion de la conexion JDBC Effectue un garbageCollector SQL.
 */
public class WJdbc {
    /** logger */
    private static Log log = LogFactory.getLog(WJdbc.class);

    /** Affiche le trace */
    protected static boolean enabledTrace = true;

    /** Nom e l'utilisateur pour traver les requetes SQL */
    protected String userName = "";

    /** La connexion */
    protected Connection conn = null;

    /** Liste des statement ouvert a partir de cette connexion */
    private final Vector statements = new Vector();

    /**
     * Contructeur cach
     * 
     * @throws SQLException : Erreur SQL sur l'initisalisation
     */
    protected WJdbc() throws SQLException {
        // init(); // Initialise la connexion
    }

    /**
     * Contructeur d'une nouvelle connection
     * 
     * @param pUserName Nom de l'utilisateur
     * @throws SQLException : Erreur SQL sur l'initisalisation
     */
    public WJdbc(final String pUserName) throws SQLException {
        this.userName = pUserName;
        init(); // Initialise la connexion
    }

    /**
     * @return Vrai si la connection est ferm
     */
    public boolean isClosed() {
        return (conn == null);
    }

    /**
     * initialise la connexion
     * 
     * @throws SQLException leve une erreur SQL
     */
    protected void init() throws SQLException {
        conn = ConnectionPool.getConnection();

        if (conn != null) {
            if (conn.isClosed()) {
                log.error("2004-critical-Database--BD close/Relancer le serveur de BD");
            }

            // Enleve l'autocommit
            conn.setAutoCommit(false);
        }
    }

    /**
     * Ferme tout ce qui ouvert
     */
    public void close() {
        if (conn != null) {
            synchronized (conn) {
                // Statcke les erreurs possible
                final ActionErrors errors = new ActionErrors();

                // Fermture de tous les statements
                final Enumeration enumeration = statements.elements();

                while (enumeration.hasMoreElements()) {
                    final WStatement statement = (WStatement) enumeration.nextElement();

                    try {
                        if (!statement.isClose()) {
                            statement.close();
                        }
                    } catch (final SQLException sqle) {
                        log.error("2003-critical-Database--Erreur sur le close GDCtatement" + sqle.toString());
                        errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.database.GDCStatementClose"));

                        // servlet.log("SQLError", sqle);
                    }
                }

                try {
                    // Fermeture de la connection
                    if ((conn != null) && !conn.isClosed()) {
                        conn.rollback();
                        conn.close();

                        // conn = null;
                    }
                } catch (final SQLException sqle) {
                    log.error("2004-critical-Database--Erreur sur le close Connection" + sqle.toString());
                    errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.database.connectionClose"));

                    // servlet.log("SQLError", sqle);
                }
            }
        }
    }

    /**
     * Fournis un WStatement pour la suite des oprations
     * 
     * @return Retourne un Statement
     * @throws SQLException probleme sql
     */
    public WStatement getWStatement() throws SQLException {
        if (conn == null) {
            log.error("2004-critical-Database--BD close/Relancer le serveur de BD");
            throw new SQLException("Connection nulle, ne peut creer un WStatement");
        }

        synchronized (conn) {
            if (!conn.isClosed()) {
                WStatement statement = null;

                statement = new WStatement(conn, userName);

                statements.add(statement);

                return statement;
            } else {
                log.error("2004-critical-Database--BD close/Relancer le serveur de BD");
                throw new SQLException("Connection fermer, ne peut creer un WStatement");
            }
        }
    }

    /**
     * Retourne la connection active
     * 
     * @return Connexion Active
     */
    public Connection getConnection() {
        return conn;
    }

    /**
     * Effectue un commit de modifcation dur la BD
     * 
     * @throws SQLException probleme sql
     */
    public void commit() throws SQLException {
        conn.commit();
    }

    /**
     * Effectue un roolback
     * 
     * @throws SQLException Probleme sql
     */
    public void rollback() throws SQLException {
        conn.rollback();
    }

    /**
     * Recupere une sequence
     * 
     * @param seq Nom de la sequence
     * @throws SQLException Probleme sur la sequence
     * @return String indice de la squence Oracle
     */
    public String getSequence(final String seq) throws SQLException {
        WStatement sta = null;
        java.sql.ResultSet rs = null;

        final String cmd = "select " + seq + ".NEXTVAL from DUAL";
        sta = getWStatement();
        sta.add(cmd);
        rs = sta.executeQuery();

        String result = "0";
        if (rs != null) {
            if (rs.next()) {
                result = rs.getString("NEXTVAL");
            }
        }
        sta.close();

        return result;
    }

    /**
     * Recupere la sequence sous un entier
     * 
     * @param seq om de la sequence
     * @return numero de la sequence
     * @throws SQLException Probleme sur la sequence
     */
    public int getIntSequence(final String seq) throws SQLException {
        return Integer.parseInt(getSequence(seq));
    }

    /**
     * Decryptage d'un bean
     * 
     * @param beanCrypt Bean crypt
     * @throws JCryptableException Probleme sur le Cryptage
     */
    public void decrypte(final JCryptable beanCrypt) throws JCryptableException {
        beanCrypt.decrypte(getConnection());
    }

    /**
     * Cryptage d'un bean
     * 
     * @param beanCrypt Bean crypt
     * @throws JCryptableException Probleme sur le Cryptage
     */
    public void crypte(final JCryptable beanCrypt) throws JCryptableException {
        beanCrypt.crypte(getConnection());
    }

    /**
     * Cryptage d'un combo Value
     * 
     * @param newCombo Combo a crypter
     * @throws SQLException Probleme sur le Cryptage
     */
    public void crypte(final WComboValue newCombo) throws SQLException {
        // Dcrypter
        final Iterator it = newCombo.getListe().iterator();
        int i = 0;

        while (it.hasNext()) {
            final String comp = (String) it.next();
            newCombo.getListe().set(i++, this.crypte(comp));
        }
    }

    /**
     * Decryptage D'un combo Value
     * 
     * @param newCombo Combo a crypter
     * @throws SQLException Probleme sur le Cryptage
     */
    public void decrypte(final WComboValue newCombo) throws SQLException {
        // Dcrypter
        final Iterator it = newCombo.getListe().iterator();
        int i = 0;

        while (it.hasNext()) {
            final String comp = (String) it.next();
            newCombo.getListe().set(i++, this.decrypte(comp));
        }
    }

    /**
     * Decryptage D'un combo Value Label
     * 
     * @param newCombo Combo a crypter
     * @throws SQLException Probleme sur le Cryptage
     */
    public void decrypte(final WComboValueLabel newCombo) throws SQLException {
        // Dcrypter
        final Iterator it = newCombo.getListe().iterator();
        int i = 0;

        while (it.hasNext()) {
            final WCouple comp = (WCouple) it.next();
            newCombo.getListe().set(i++,
                    new WCouple(this.decrypte(comp.getValue()), this.decrypte(comp.getLabel())));
        }
    }

    /**
     * DeCrype la chaine via l'appel  la Focntion decrypte_FCT
     * 
     * @param text Texte a dcript
     * @return Chaine dcrypt
     * @throws SQLException Erreur SQL
     */
    public String decrypte(final String text) throws SQLException {
        CallableStatement cs = null;

        try {
            cs = conn.prepareCall("{? = call decrypte_FCT(?)}");
            cs.registerOutParameter(1, java.sql.Types.VARCHAR);
            cs.setString(2, text);
            cs.executeUpdate();

            return cs.getString(1);
        } finally {
            if (cs != null) {
                cs.close();
            }
        }
    }

    /**
     * Crype la chaine via l'appel  la Focntion decrypte_FCT
     * 
     * @param text Texte a dcript
     * @return Chaine dcrypt
     * @throws SQLException Erreur SQL
     */
    public String crypte(final String text) throws SQLException {
        CallableStatement cs = null;

        try {
            cs = conn.prepareCall("{? = call crypte_FCT(?)}");
            cs.registerOutParameter(1, java.sql.Types.VARCHAR);
            cs.setString(2, text);
            cs.executeUpdate();

            return cs.getString(1);
        } finally {
            if (cs != null) {
                cs.close();
            }
        }
    }

    /**
     * @return trace active ?
     */
    public static boolean isEnabledTrace() {
        return enabledTrace;
    }

    /**
     * @param b active la trace
     */
    public static void setEnabledTrace(final boolean b) {
        enabledTrace = b;
    }

}