Package no.ugland.utransprod.dao.hibernate

Source Code of no.ugland.utransprod.dao.hibernate.BaseDAOHibernate

package no.ugland.utransprod.dao.hibernate;

import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.List;

import no.ugland.utransprod.dao.DAO;
import no.ugland.utransprod.service.enums.LazyLoadEnum;
import no.ugland.utransprod.util.Util;

import org.apache.commons.lang.StringUtils;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

/**
* This class serves as the Base class for all other DAOs - namely to hold
* common methods that they might all use. Can be used for standard CRUD
* operations.
* </p>
* <p>
* <a href="BaseDAOHibernate.java.html"><i>View Source</i></a>
* </p>
* @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a>
* @param <E>
*/
public class BaseDAOHibernate<E> extends HibernateDaoSupport implements DAO<E> {
    Class<?> clazz;
    private static final String UNKNOWN="UNKNOWN";

    /**
     * @param aClass
     */
    public BaseDAOHibernate(final Class<?> aClass) {
        clazz = aClass;
    }

    /**
     * @param object
     * @see no.ugland.utransprod.dao.DAO#saveObject(java.lang.Object)
     */
    public final void saveObject(final E object) {
        getHibernateTemplate().saveOrUpdate(object);
        getHibernateTemplate().flush();
    }

    /**
     * @see no.ugland.utransprod.dao.DAO#getObject(java.io.Serializable)
     */
    @SuppressWarnings("unchecked")
    public final E getObject(final Serializable classId) {

        return (E) getHibernateTemplate().get(clazz, classId);

    }

    /**
     * @see no.ugland.utransprod.dao.DAO#getObjects()
     */
    @SuppressWarnings("unchecked")
    public final List<E> getObjects() {
        return getHibernateTemplate().loadAll(clazz);
    }

    /**
     * @see no.ugland.utransprod.dao.DAO#removeObject(java.io.Serializable)
     */
    public final void removeObject(final Serializable classId) {
        getHibernateTemplate().delete(getObject(classId));
        getHibernateTemplate().flush();
    }

    /**
     * Kanselerere oppdateringer
     * @param objects
     */
    public final void cancelObjectUpdates(final List<E> objects) {
        if (objects == null) {
            return;
        }

        for (E object : objects) {
            getHibernateTemplate().evict(object);
        }
    }

    /**
     * Finner objekter basert p� eksempel
     * @param example
     * @return objekter
     */
    @SuppressWarnings("unchecked")
    public final List<E> find(E example) {
        return getHibernateTemplate().findByExample(example);
    }

    /**
     * @param example
     * @return objekter
     * @see no.ugland.utransprod.dao.DAO#findByExample(java.lang.Object)
     */
    @SuppressWarnings("unchecked")
    public final List<E> findByExample(final E example) {
        return getHibernateTemplate().findByExample(example);
    }

    /**
     * @param example
     * @return objekter
     * @see no.ugland.utransprod.dao.DAO#findByExampleLike(java.lang.Object)
     */
    @SuppressWarnings("unchecked")
    public final List<E> findByExampleLike(final E example) {
        Example exam = Example.create(example);
        exam.enableLike(MatchMode.ANYWHERE); // this is it.
        exam.ignoreCase();
        DetachedCriteria detachedCriteria = DetachedCriteria.forClass(clazz).add(exam);
       
        detachedCriteria = getCriteria(example, detachedCriteria);

        // DetachedCriteria c = DetachedCriteria.forClass(clazz).add(exam);

        return getHibernateTemplate().findByCriteria(detachedCriteria);
    }

    private DetachedCriteria getCriteria(final Object example, DetachedCriteria detachedCriteria) {
        Example exam = Example.create(example);
        exam.enableLike(MatchMode.ANYWHERE); // this is it.
        exam.ignoreCase();
       
       


        try {
            Field[] fields = example.getClass().getDeclaredFields();

            for (int i = 0; i < fields.length; i++) {
                Field field = fields[i];
                if(field.getType().getCanonicalName().indexOf(
                "java.util.Date") >= 0){
                    Method method = example.getClass().getMethod(
                            "get" + StringUtils.capitalize(field.getName()),
                            (Class[]) null);
                    if (method.invoke(example, (Object[]) null) != null) {
                        String dateSql = "convert(datetime,convert(varchar,"+Util.getDatabaseField(field.getName())+",101)) = convert(datetime,?,101)";
                        detachedCriteria.add(Restrictions.sqlRestriction(dateSql, method.invoke(example, (Object[]) null), Hibernate.DATE));
                       
                        Method setMethod = example.getClass().getMethod(
                                "set" + StringUtils.capitalize(field.getName()),
                                new Class[]{Date.class});
                        setMethod.invoke(example, new Object[]{null});
                    }
                }
                if (field.getType().getCanonicalName().indexOf(
                        "no.ugland.utransprod.model") >= 0) {
                    if(!field.getName().equalsIgnoreCase(UNKNOWN)){
                    Method method = example.getClass().getMethod(
                            "get" + StringUtils.capitalize(field.getName()),
                            (Class[]) null);
                    if (method.invoke(example, (Object[]) null) != null) {
                        Object object = method.invoke(example,
                                (Object[]) null);
                        DetachedCriteria childCriteria = detachedCriteria.createCriteria(field.getName()).add(
                                Example.create(object));
                        getCriteria(object, childCriteria);
                    }
                    }
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return detachedCriteria;
    }

   
   
  

    /**
     * @see no.ugland.utransprod.dao.DAO#getObjects(java.lang.String)
     */
    @SuppressWarnings("unchecked")
    public List<E> getObjects(final String orderBy) {
        return (List<E>) getHibernateTemplate().execute(
                new HibernateCallback() {

                    public Object doInHibernate(Session session)
                            throws HibernateException {
                        return session.createCriteria(clazz).addOrder(
                                Order.asc(orderBy)).list();
                    }

                });
    }

    public void removeAll() {
        getHibernateTemplate().bulkUpdate("delete from " + clazz.getName());
    }

    public void refreshObject(Object object, Serializable id) {
        getHibernateTemplate().load(object, id);
        getHibernateTemplate().flush();

    }
   
    public void lazyLoad(final Object object,final Serializable id,final LazyLoadEnum[][] enums){
        if (object != null && id != null) {
            getHibernateTemplate().execute(new HibernateCallback() {

                public Object doInHibernate(Session session)
                        throws HibernateException {
                    if(!session.contains(object)){
                        session.load(object, id);
                    }

                    for (LazyLoadEnum[] lazyEnum : enums) {
                        lazyEnum[0].lazyLoad(object, lazyEnum[1]);
                    }
                    return null;
                }

            });

        }

    }
   
   
}
TOP

Related Classes of no.ugland.utransprod.dao.hibernate.BaseDAOHibernate

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.