org.mifos.framework.persistence.LegacyGenericDao.java Source code

Java tutorial

Introduction

Here is the source code for org.mifos.framework.persistence.LegacyGenericDao.java

Source

/*
 * Copyright (c) 2005-2011 Grameen Foundation USA
 * All rights reserved.
 *
 * 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.
 *
 * See also http://www.apache.org/licenses/LICENSE-2.0.html for an
 * explanation of the license and how it is applied.
 */

package org.mifos.framework.persistence;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import org.hibernate.FlushMode;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.exception.GenericJDBCException;
import org.hibernate.transform.Transformers;
import org.mifos.core.MifosRuntimeException;
import org.mifos.customers.util.helpers.Param;
import org.mifos.framework.components.audit.util.helpers.AuditInterceptor;
import org.mifos.framework.exceptions.ConnectionNotFoundException;
import org.mifos.framework.exceptions.PersistenceException;
import org.mifos.framework.hibernate.helper.StaticHibernateUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * This class is intended to be replaced by <b>SessionPersistence</b> which
 * intentionally has a very similar set of methods (many subclasses can be moved
 * over just by changing what they inherit from, with no further changes).
 */
public abstract class LegacyGenericDao {

    private static final Logger logger = LoggerFactory.getLogger(LegacyGenericDao.class);

    /**
     * @deprecated - move away from using this as starts transaction but doesn't not commit..
     */
    @Deprecated
    public Object createOrUpdate(final Object object) throws PersistenceException {
        try {
            StaticHibernateUtil.startTransaction();
            getSession().saveOrUpdate(object);
            AuditInterceptor interceptor = (AuditInterceptor) StaticHibernateUtil.getInterceptor();
            if (interceptor.isAuditLogRequired()) {
                interceptor.createChangeValueMap(object);
            }
        } catch (HibernateException e) {
            throw new PersistenceException(e);
        }
        return object;
    }

    public Object save(final Object object) throws PersistenceException {
        try {
            getSession().saveOrUpdate(object);
            AuditInterceptor interceptor = (AuditInterceptor) StaticHibernateUtil.getInterceptor();
            if (interceptor.isAuditLogRequired()) {
                interceptor.createChangeValueMap(object);
            }
        } catch (HibernateException e) {
            throw new PersistenceException(e);
        }

        return object;
    }

    public Session getSession() {
        return StaticHibernateUtil.getSessionTL();
    }

    public void delete(final Object object) throws PersistenceException {
        try {
            StaticHibernateUtil.startTransaction();
            getSession().delete(object);
        } catch (Exception he) {
            throw new PersistenceException(he);
        }
    }

    /**
     * This method takes the name of a named query to be executed as well as a
     * list of parameters that the query uses. It assumes the session is open.
     */
    @SuppressWarnings("unchecked")
    public List executeNamedQuery(final String queryName, final Map<String, ?> queryParameters)
            throws PersistenceException {
        try {
            Query query = createdNamedQuery(queryName);
            query.setProperties(queryParameters);
            return query.list();
        } catch (Exception e) {
            throw new PersistenceException(e);
        }
    }

    public Query createdNamedQuery(final String queryName) {
        Query query = getSession().getNamedQuery(queryName);
        logger.debug("The query object for the query with the name  " + queryName + " has been obtained");
        return query;
    }

    public Object execUniqueResultNamedQuery(final String queryName, final Map<String, ?> queryParameters)
            throws PersistenceException {
        try {
            Query query = getSession().getNamedQuery(queryName);
            logger.debug("The query object for the query with the name  " + queryName + " has been obtained");
            query.setProperties(queryParameters);
            return query.uniqueResult();
        } catch (GenericJDBCException gje) {
            throw new ConnectionNotFoundException(gje);
        } catch (Exception e) {
            throw new PersistenceException(e);
        }
    }

    public Object execUniqueResultNamedQueryWithoutFlush(final String queryName,
            final Map<String, ?> queryParameters) throws PersistenceException {
        try {
            Session sess = getSession();
            sess.setFlushMode(FlushMode.MANUAL);
            Query query = getSession().getNamedQuery(queryName);
            logger.debug("The query object for the query with the name  " + queryName + " has been obtained");
            query.setProperties(queryParameters);
            Object returnObject = query.uniqueResult();
            sess.setFlushMode(FlushMode.AUTO);
            return returnObject;
        } catch (GenericJDBCException gje) {
            throw new ConnectionNotFoundException(gje);
        } catch (Exception e) {
            throw new PersistenceException(e);
        }
    }

    @SuppressWarnings("unchecked")
    public <T extends Object> T execUniqueResultNamedQueryWithResultTransformer(final String queryName,
            final Map<String, ?> queryParameters, final Class<T> clazz) {
        try {
            Query query = getSession().getNamedQuery(queryName)
                    .setResultTransformer(Transformers.aliasToBean(clazz));
            query.setProperties(queryParameters);
            query.setResultTransformer(Transformers.aliasToBean(clazz));
            return (T) query.uniqueResult();
        } catch (GenericJDBCException gje) {
            throw new ConnectionNotFoundException(gje);
        } catch (Exception e) {
            throw new MifosRuntimeException(e);

        }
    }

    @SuppressWarnings("unchecked")
    public <T extends Object> List<T> executeNamedQueryWithResultTransformer(final String queryName,
            final Map<String, ?> queryParameters, final Class<T> clazz) {
        try {
            Query query = getSession().getNamedQuery(queryName);
            query.setResultTransformer(Transformers.aliasToBean(clazz));
            query.setProperties(queryParameters);
            return query.list();
        } catch (Exception e) {
            throw new MifosRuntimeException(e);
        }
    }

    public Object executeUniqueHqlQuery(final String hqlQuery) {
        return getSession().createQuery(hqlQuery).uniqueResult();
    }

    public List<?> executeNonUniqueHqlQuery(final String hqlQuery) {
        return getSession().createQuery(hqlQuery).list();
    }

    @SuppressWarnings("unchecked")
    public <T extends Object> T getPersistentObject(final Class<T> clazz, final Serializable persistentObjectId)
            throws PersistenceException {
        if (null == persistentObjectId) {
            throw new PersistenceException("persistentObjectId is required for fetch");
        }
        try {
            return (T) getSession().get(clazz, persistentObjectId);
        } catch (HibernateException e) {
            throw new PersistenceException(e);
        }
    }

    @SuppressWarnings("unchecked")
    public <T extends Object> T loadPersistentObject(final Class<T> clazz, final Serializable persistentObjectId) {
        return (T) getSession().load(clazz, persistentObjectId);
    }

    protected Param typeNameValue(final String type, final String name, final Object value) {
        return new Param(type, name, value);
    }

    protected Integer getCountFromQueryResult(final List<?> queryResult) {
        int count = 0;
        if (queryResult.size() > 0 && queryResult.get(0) != null) {
            count = ((Number) queryResult.get(0)).intValue();
        }
        return count;
    }

    protected BigDecimal getCalculateValueFromQueryResult(final List<?> queryResult) {
        return queryResult.size() > 0 && queryResult.get(0) != null
                ? BigDecimal.valueOf(((Number) queryResult.get(0)).doubleValue())
                : null;
    }

    // Hugo Technologies
    public int executeNamedQueryForUpdate(final String queryName, final Map<String, ?> queryParameters)
            throws PersistenceException {
        try {
            StaticHibernateUtil.startTransaction();
            Query query = createdNamedQuery(queryName);
            System.out.println(query.getQueryString());
            query.setProperties(queryParameters);
            int result = query.executeUpdate();
            StaticHibernateUtil.commitTransaction();
            return result;

        } catch (Exception e) {
            throw new PersistenceException(e);
        }
    }

    @SuppressWarnings("unchecked")
    public int deleteNamedQueryWithResultTransformer(String globalnum) {
        try {
            //Query query = getSession().getNamedQuery(queryName);
            System.out.println("hello");
            Query query1 = getSession()
                    .createQuery("delete  from CoaBranchBO  where globalofficenum =:GLOBAL_OFFICE_NUM_DELETE ");
            query1.setParameter("GLOBAL_OFFICE_NUM_DELETE", globalnum);

            int result = query1.executeUpdate();
            return result;
        } catch (Exception e) {
            throw new MifosRuntimeException(e);
        }
    }
}