com.openbravo.data.loader.Session.java Source code

Java tutorial

Introduction

Here is the source code for com.openbravo.data.loader.Session.java

Source

//    Wanda POS - Africa's Gift to the World
//    Copyright (c) 2014-2015 IT-Kamer & previous Unicenta POS and Openbravo POS works
//    www.erp-university-africa.com
//
//    This file is part of Wanda POS
//
//    Wanda POS 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.
//
//   Wanda POS 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 Wanda POS.  If not, see <http://www.gnu.org/licenses/>.

package com.openbravo.data.loader;

import com.mongodb.DB;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.openbravo.data.gui.JMessageDialog;
import com.openbravo.data.gui.MessageInf;
import com.openbravo.pos.forms.AppLocal;
import java.net.UnknownHostException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Arrays;

/**
 *
 * @author adrianromero
 * Created on February 6, 2007, 4:06 PM
 *
 */
public final class Session {

    private final String m_surl;
    private final String m_sappuser;
    private final String m_spassword;
    private final String m_database;
    private final String m_host;
    private final Integer m_port;

    private Connection m_c;
    private MongoClient m_mongoClient;
    private boolean mongoDBSession;
    private boolean m_bInTransaction;

    /**
     *
     */
    public final SessionDB DB;

    /** Creates a new instance of Session
     * @param url
     * @param user
     * @param password
     * @throws java.sql.SQLException */
    public Session(String url, String user, String password) throws SQLException {
        m_surl = url;
        m_sappuser = user;
        m_spassword = password;
        m_database = "";
        m_host = "";
        m_port = -1;

        m_mongoClient = null;
        m_c = null;
        m_bInTransaction = false;

        connect(); // no lazy connection

        DB = getDiff();
    }

    /**
     * Create session for MongoDB database engine
     * 
     * @param host
     * @param port
     * @param database
     * @param user
     * @param password 
     */
    public Session(String host, Integer port, String database, String user, String password) {
        m_surl = "";
        m_c = null;
        m_bInTransaction = false;
        m_host = host;
        m_port = port;
        m_database = database;
        m_sappuser = user;
        m_spassword = password;

        connectMongoDB();
        DB = new SessionDBMongoDB();
        mongoDBSession = true;
    }

    public boolean isMongoDBSession() {
        return mongoDBSession;
    }

    public void setMongoDBSession(boolean mongoDBSession) {
        this.mongoDBSession = mongoDBSession;
    }

    public boolean isM_bInTransaction() {
        return m_bInTransaction;
    }

    public void setM_bInTransaction(boolean m_bInTransaction) {
        this.m_bInTransaction = m_bInTransaction;
    }

    public void connectMongoDB() {
        if (!m_sappuser.isEmpty() && !m_spassword.isEmpty() && !m_database.isEmpty()) {
            try {
                MongoCredential credential = MongoCredential.createMongoCRCredential(m_sappuser, m_database,
                        m_spassword.toCharArray());
                m_mongoClient = new MongoClient(new ServerAddress(m_host, m_port), Arrays.asList(credential));
            } catch (UnknownHostException ex) {
            }
        } else {
            try {
                m_mongoClient = new MongoClient(new ServerAddress(m_host, m_port));
            } catch (UnknownHostException ex) {
            }
        }
    }

    public DB getMongoDBDatabase() {
        return m_mongoClient.getDB(m_database);
    }

    /**
     *
     * @throws SQLException
     */
    public void connect() throws SQLException {

        // primero cerramos si no estabamos cerrados
        close();

        // creamos una nueva conexion.
        m_c = (m_sappuser == null && m_spassword == null) ? DriverManager.getConnection(m_surl)
                : DriverManager.getConnection(m_surl, m_sappuser, m_spassword);
        m_c.setAutoCommit(true);
        m_bInTransaction = false;
    }

    /**
     *
     */
    public void close() {

        if (m_c != null) {
            try {
                if (m_bInTransaction) {
                    m_bInTransaction = false; // lo primero salimos del estado
                    m_c.rollback();
                    m_c.setAutoCommit(true);
                }
                m_c.close();
            } catch (SQLException e) {
                // me la como
            } finally {
                m_c = null;
            }
        }
    }

    /**
     *
     * @return
     * @throws SQLException
     */
    public Connection getConnection() throws SQLException {

        if (!m_bInTransaction) {
            ensureConnection();
        }
        return m_c;
    }

    /**
     *
     * @throws SQLException
     */
    public void begin() throws SQLException {

        if (m_bInTransaction) {
            throw new SQLException("Already in transaction");
        } else {
            ensureConnection();
            m_c.setAutoCommit(false);
            m_bInTransaction = true;
        }
    }

    /**
     *
     * @throws SQLException
     */
    public void commit() throws SQLException {
        if (m_bInTransaction) {
            m_bInTransaction = false; // lo primero salimos del estado
            m_c.commit();
            m_c.setAutoCommit(true);
        } else {
            throw new SQLException("Transaction not started");
        }
    }

    /**
     *
     * @throws SQLException
     */
    public void rollback() throws SQLException {
        if (m_bInTransaction) {
            m_bInTransaction = false; // lo primero salimos del estado
            m_c.rollback();
            m_c.setAutoCommit(true);
        } else {
            throw new SQLException("Transaction not started");
        }
    }

    /**
     *
     * @return
     */
    public boolean isTransaction() {
        return m_bInTransaction;
    }

    private void ensureConnection() throws SQLException {
        // solo se invoca si isTransaction == false

        boolean bclosed;
        try {
            bclosed = m_c == null || m_c.isClosed();
        } catch (SQLException e) {
            bclosed = true;
        }

        // reconnect if closed
        if (bclosed) {
            connect();
        }
    }

    /**
     *
     * @return
     * @throws SQLException
     */
    public String getURL() throws SQLException {
        return getConnection().getMetaData().getURL();
    }

    private SessionDB getDiff() throws SQLException {

        String sdbmanager = getConnection().getMetaData().getDatabaseProductName();
        switch (sdbmanager) {
        case "HSQL Database Engine":
            return new SessionDBHSQLDB();
        case "MySQL":
            return new SessionDBMySQL();
        case "PostgreSQL":
            return new SessionDBPostgreSQL();
        case "Oracle":
            return new SessionDBOracle();
        case "Apache Derby":
            return new SessionDBDerby();
        default:
            return new SessionDBGeneric(sdbmanager);
        }
    }
}