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

org.efaps.db.GeneralInstance Maven / Gradle / Ivy

/*
 * Copyright 2003 - 2012 The eFaps Team
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Revision:        $Rev: 7483 $
 * Last Changed:    $Date: 2012-05-11 11:57:38 -0500 (Fri, 11 May 2012) $
 * Last Changed By: $Author: [email protected] $
 */

package org.efaps.db;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.efaps.db.databases.AbstractDatabase;
import org.efaps.db.store.AbstractStoreResource;
import org.efaps.db.store.JCRStoreResource;
import org.efaps.db.store.JDBCStoreResource;
import org.efaps.db.transaction.ConnectionResource;
import org.efaps.db.wrapper.SQLInsert;
import org.efaps.db.wrapper.SQLPart;
import org.efaps.util.EFapsException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * TODO comment!
 *
 * @author The eFaps Team
 * @version $Id: GeneralInstance.java 7483 2012-05-11 16:57:38Z [email protected] $
 */
public final class GeneralInstance
{
    /**
     * Name of the Table.
     */
    public static final String TABLENAME = "T_CMGENINST";

    /**
     * Name of the ID Column.
     */
    public static final String IDCOLUMN = "ID";

    /**
     * Name of the Instance Type ID Column.
     */
    public static final String ISTYPECOLUMN = "INSTTYPEID";

    /**
     * Name of the Instance ID Column.
     */
    public static final String ISIDCOLUMN = "INSTID";

    /**
     * Name of the Exchange ID Column.
     */
    public static final String EXIDCOLUMN = "EXID";

    /**
     * Name of the Exchange System ID Column.
     */
    public static final String EXSYSIDCOLUMN = "EXSYSID";

    /**
     * Logging instance used in this class.
     */
    private static final Logger LOG = LoggerFactory.getLogger(GeneralInstance.class);

    /**
     * To make a Singleton.
     */
    private GeneralInstance()
    {
    }

    /**
     * @param _instance Instance the GeneralInstance will be created for.
     * @param _con      Connection the insert will be executed in
     * @return id of the new instance
     * @throws EFapsException on  error
     */
    protected static long insert(final Instance _instance,
                                 final Connection _con)
        throws EFapsException
    {
        long ret = 0;
        if (_instance.isValid() && _instance.getType().isGeneralInstance()) {
            try {
                final SQLInsert insert = Context.getDbType().newInsert(GeneralInstance.TABLENAME,
                                GeneralInstance.IDCOLUMN,
                                true);
                insert.column(GeneralInstance.ISTYPECOLUMN, _instance.getType().getId());
                insert.column(GeneralInstance.ISIDCOLUMN, _instance.getId());
                insert.column(GeneralInstance.EXIDCOLUMN, _instance.getExchangeId(false));
                insert.column(GeneralInstance.EXSYSIDCOLUMN, _instance.getExchangeSystemId(false));
                ret = insert.execute(_con);
            } catch (final SQLException e) {
                GeneralInstance.LOG.error("executeOneStatement", e);
                throw new EFapsException(GeneralInstance.class, "create", e);
            }
        }
        return ret;
    }

    /**
     * @param _instance Instance the GeneralInstance will be deleted for.
     * @param _con      Connection the insert will be executed in
     * @throws EFapsException on  error
     */
    protected static void delete(final Instance _instance,
                                 final Connection _con)
        throws EFapsException
    {
        if (_instance.isValid() && _instance.getType().isGeneralInstance()) {
            final long id = _instance.getGeneralId();
            if (id > 0) {
                if (_instance.getType().getStoreId() > 0) {
                    GeneralInstance.del4Table(id, _con, JDBCStoreResource.TABLENAME_STORE);
                    GeneralInstance.del4Table(id, _con, JCRStoreResource.TABLENAME_STORE);
                    GeneralInstance.del4Table(id, _con, AbstractStoreResource.TABLENAME_STORE);
                }
                GeneralInstance.del4Table(id, _con, GeneralInstance.TABLENAME);
            }
        }
    }

    /**
     * @param _id           id to be deleted
     * @param _con          connection used for the execute
     * @param _tableName    nem of the table the value must be deleted from
     * @throws EFapsException on error
     */
    private static void del4Table(final long _id,
                                  final Connection _con,
                                  final String _tableName)
        throws EFapsException
    {
        try {
            final AbstractDatabase db = Context.getDbType();
            final StringBuilder cmd = new StringBuilder();
            cmd.append(db.getSQLPart(SQLPart.DELETE)).append(" ")
                .append(db.getSQLPart(SQLPart.FROM)).append(" ")
                .append(db.getTableQuote())
                .append(_tableName)
                .append(db.getTableQuote()).append(" ")
                .append(db.getSQLPart(SQLPart.WHERE)).append(" ")
                .append(db.getColumnQuote())
                .append("ID")
                .append(db.getColumnQuote())
                .append(db.getSQLPart(SQLPart.EQUAL))
                .append(_id).append(" ");

            final Statement stmt = _con.createStatement();
            stmt.executeUpdate(cmd.toString());
            stmt.close();

            if (GeneralInstance.LOG.isDebugEnabled()) {
                GeneralInstance.LOG.debug(cmd.toString());
            }
        } catch (final SQLException e) {
            GeneralInstance.LOG.error("executeOneStatement", e);
            throw new EFapsException(GeneralInstance.class, "create", e);
        }
    }

    /**
     * @param _instance Instance the id of the GeneralInstance will be retrieved for.
     * @param _con      Connection the query will be executed in
     * @throws EFapsException on  error
     * @return id of the current General Instance
     */
    protected static void generaliseInstance(final Instance _instance,
                                             final Connection _con)
        throws EFapsException
    {
        if (_instance.isValid() && _instance.getType().isGeneralInstance()) {
            try {
                final Statement queryStmt = _con.createStatement();
                final AbstractDatabase db = Context.getDbType();

                final StringBuilder cmd = new StringBuilder();
                cmd.append(db.getSQLPart(SQLPart.SELECT)).append(" ")
                    .append(db.getColumnQuote())
                    .append(GeneralInstance.IDCOLUMN)
                    .append(db.getColumnQuote()).append(", ")
                    .append(db.getColumnQuote())
                    .append(GeneralInstance.EXSYSIDCOLUMN)
                    .append(db.getColumnQuote()).append(", ")
                    .append(db.getColumnQuote())
                    .append(GeneralInstance.EXIDCOLUMN)
                    .append(db.getColumnQuote()).append(" ")
                    .append(db.getSQLPart(SQLPart.FROM)).append(" ")
                    .append(db.getTableQuote())
                    .append(GeneralInstance.TABLENAME)
                    .append(db.getTableQuote()).append(" ")
                    .append(db.getSQLPart(SQLPart.WHERE)).append(" ")
                    .append(db.getColumnQuote())
                    .append(GeneralInstance.ISIDCOLUMN)
                    .append(db.getColumnQuote())
                    .append(db.getSQLPart(SQLPart.EQUAL))
                    .append(_instance.getId()).append(" ")
                    .append(db.getSQLPart(SQLPart.AND)).append(" ")
                    .append(db.getColumnQuote())
                    .append(GeneralInstance.ISTYPECOLUMN)
                    .append(db.getColumnQuote())
                    .append(db.getSQLPart(SQLPart.EQUAL))
                    .append(_instance.getType().getId()).append(" ");

                final ResultSet rs = queryStmt.executeQuery(cmd.toString());
                while (rs.next()) {
                    _instance.setGeneralId(rs.getLong(1));
                    _instance.setExchangeSystemId(rs.getLong(2));
                    _instance.setExchangeId(rs.getLong(3));
                }
                queryStmt.close();
                if (GeneralInstance.LOG.isDebugEnabled()) {
                    GeneralInstance.LOG.debug(cmd.toString());
                }
            } catch (final SQLException e) {
                GeneralInstance.LOG.error("executeOneStatement", e);
                throw new EFapsException(GeneralInstance.class, "create", e);
            }
        }
    }

    /**
     * @param _instance Instance the id of the GeneralInstance will be retrieved for.
     * @throws EFapsException on  error
     * @return id of the current General Instance
     */
    protected static void generaliseInstance(final Instance _instance)
        throws EFapsException
    {
        final Context context = Context.getThreadContext();
        ConnectionResource con = null;
        try {
            con = context.getConnectionResource();
            GeneralInstance.generaliseInstance(_instance, con.getConnection());
            con.commit();
        } finally {
            if (con != null && con.isOpened()) {
                con.abort();
            }
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy