|
From: <fg...@us...> - 2008-01-27 10:55:10
|
Revision: 555
http://openutils.svn.sourceforge.net/openutils/?rev=555&view=rev
Author: fgiust
Date: 2008-01-27 02:55:14 -0800 (Sun, 27 Jan 2008)
Log Message:
-----------
[maven-release-plugin] copy for tag openutils-bshd5-2.0
Added Paths:
-----------
tags/openutils-bshd5-2.0/
tags/openutils-bshd5-2.0/pom.xml
tags/openutils-bshd5-2.0/src/main/java/it/openutils/dao/hibernate/HibernateDAOImpl.java
tags/openutils-bshd5-2.0/src/main/java/it/openutils/hibernate/example/EnhancedExample.java
tags/openutils-bshd5-2.0/src/main/java/it/openutils/hibernate/example/FilterMetadata.java
tags/openutils-bshd5-2.0/src/site/apt/
tags/openutils-bshd5-2.0/src/site/apt/configuration.apt
tags/openutils-bshd5-2.0/src/site/apt/index.apt
tags/openutils-bshd5-2.0/src/site/site.xml
Removed Paths:
-------------
tags/openutils-bshd5-2.0/pom.xml
tags/openutils-bshd5-2.0/src/main/java/it/openutils/dao/hibernate/HibernateDAOImpl.java
tags/openutils-bshd5-2.0/src/main/java/it/openutils/dao/hibernate/MutableDateRange.java
tags/openutils-bshd5-2.0/src/main/java/it/openutils/hibernate/example/EnhancedExample.java
tags/openutils-bshd5-2.0/src/main/java/it/openutils/hibernate/example/FilterMetadata.java
tags/openutils-bshd5-2.0/src/site/site.xml
Copied: tags/openutils-bshd5-2.0 (from rev 536, trunk/openutils-bshd5)
Deleted: tags/openutils-bshd5-2.0/pom.xml
===================================================================
--- trunk/openutils-bshd5/pom.xml 2008-01-20 17:02:17 UTC (rev 536)
+++ tags/openutils-bshd5-2.0/pom.xml 2008-01-27 10:55:14 UTC (rev 555)
@@ -1,115 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>net.sourceforge.openutils</groupId>
- <artifactId>openutils</artifactId>
- <version>6</version>
- <relativePath>..</relativePath>
- </parent>
- <artifactId>openutils-bshd5</artifactId>
- <name>openutils base Spring-Hibernate DAO for java 5.0</name>
- <version>2.0-SNAPSHOT</version>
- <description>openutils base Spring-Hibernate DAO for java 5.0</description>
- <dependencies>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.4.3</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl104-over-slf4j</artifactId>
- <version>1.4.3</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-jdbc</artifactId>
- <version>${spring.version}</version>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-beans</artifactId>
- <version>${spring.version}</version>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-orm</artifactId>
- <version>${spring.version}</version>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-aop</artifactId>
- <version>${spring.version}</version>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate</artifactId>
- <version>3.2.1.ga</version>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- <exclusion>
- <groupId>cglib</groupId>
- <artifactId>cglib</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>cglib</groupId>
- <artifactId>cglib-nodep</artifactId>
- <version>2.1_3</version>
- </dependency>
- <dependency>
- <groupId>commons-beanutils</groupId>
- <artifactId>commons-beanutils</artifactId>
- <version>1.7.0</version>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- <version>2.3</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <optional>true</optional>
- </dependency>
- </dependencies>
- <properties>
- <spring.version>2.5.1</spring.version>
- </properties>
-</project>
\ No newline at end of file
Copied: tags/openutils-bshd5-2.0/pom.xml (from rev 554, trunk/openutils-bshd5/pom.xml)
===================================================================
--- tags/openutils-bshd5-2.0/pom.xml (rev 0)
+++ tags/openutils-bshd5-2.0/pom.xml 2008-01-27 10:55:14 UTC (rev 555)
@@ -0,0 +1,114 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>net.sourceforge.openutils</groupId>
+ <artifactId>openutils</artifactId>
+ <version>7</version>
+ <relativePath>..</relativePath>
+ </parent>
+ <artifactId>openutils-bshd5</artifactId>
+ <name>openutils base Spring-Hibernate DAO for java 5.0</name>
+ <version>2.0</version>
+ <description>openutils base Spring-Hibernate DAO for java 5.0</description>
+ <dependencies>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>1.4.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl104-over-slf4j</artifactId>
+ <version>1.4.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-jdbc</artifactId>
+ <version>${spring.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-beans</artifactId>
+ <version>${spring.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-orm</artifactId>
+ <version>${spring.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-aop</artifactId>
+ <version>${spring.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate</artifactId>
+ <version>3.2.1.ga</version>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>cglib</groupId>
+ <artifactId>cglib</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>cglib</groupId>
+ <artifactId>cglib-nodep</artifactId>
+ <version>2.1_3</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-beanutils</groupId>
+ <artifactId>commons-beanutils</artifactId>
+ <version>1.7.0</version>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.3</version>
+ </dependency>
+ </dependencies>
+ <properties>
+ <spring.version>2.5.1</spring.version>
+ </properties>
+
+ <scm>
+ <connection>scm:svn:https://openutils.svn.sourceforge.net/svnroot/openutils/tags/openutils-bshd5-2.0</connection>
+ <developerConnection>scm:svn:https://openutils.svn.sourceforge.net/svnroot/openutils/tags/openutils-bshd5-2.0</developerConnection>
+ <url>http://openutils.svn.sourceforge.net/viewcvs.cgi/openutils/tags/openutils-bshd5-2.0</url>
+ </scm>
+</project>
\ No newline at end of file
Deleted: tags/openutils-bshd5-2.0/src/main/java/it/openutils/dao/hibernate/HibernateDAOImpl.java
===================================================================
--- trunk/openutils-bshd5/src/main/java/it/openutils/dao/hibernate/HibernateDAOImpl.java 2008-01-20 17:02:17 UTC (rev 536)
+++ tags/openutils-bshd5-2.0/src/main/java/it/openutils/dao/hibernate/HibernateDAOImpl.java 2008-01-27 10:55:14 UTC (rev 555)
@@ -1,607 +0,0 @@
-package it.openutils.dao.hibernate;
-
-import it.openutils.hibernate.example.EnhancedExample;
-import it.openutils.hibernate.example.FilterMetadata;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.aopalliance.aop.AspectException;
-import org.hibernate.Criteria;
-import org.hibernate.Hibernate;
-import org.hibernate.HibernateException;
-import org.hibernate.ObjectNotFoundException;
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.criterion.CriteriaSpecification;
-import org.hibernate.criterion.Criterion;
-import org.hibernate.criterion.Order;
-import org.hibernate.type.Type;
-import org.springframework.aop.framework.AopContext;
-import org.springframework.orm.hibernate3.HibernateCallback;
-import org.springframework.orm.hibernate3.HibernateObjectRetrievalFailureException;
-import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
-
-
-/**
- * Base Hibernate DAO.
- * @author Fabrizio Giustina
- * @version $Id$
- * @param <T> Persistence class
- * @param <K> Object Key
- */
-public abstract class HibernateDAOImpl<T extends Object, K extends Serializable> extends HibernateDaoSupport
- implements
- HibernateDAO<T, K>
-{
-
- private Class<T> referenceClass;
-
- private boolean aopenabled;
-
- public HibernateDAOImpl()
- {
- super();
- }
-
- /**
- * @param referenceClass
- */
- @SuppressWarnings({"unchecked" })
- public HibernateDAOImpl(Class referenceClass)
- {
- super();
- this.referenceClass = referenceClass;
- }
-
- /**
- * {@inheritDoc}
- */
- @SuppressWarnings("unchecked")
- public List<T> find(String query)
- {
- return getHibernateTemplate().find(query);
- }
-
- /**
- * {@inheritDoc}
- */
- public List<T> findAll()
- {
- return findAll(getDefaultOrder());
- }
-
- /**
- * {@inheritDoc}
- */
- @SuppressWarnings("unchecked")
- public List<T> findAll(final Order[] orderProperties)
- {
- return getThis().findAll(orderProperties, new ArrayList<Criterion>());
- }
-
- /**
- * {@inheritDoc}
- */
- @SuppressWarnings("unchecked")
- public List<T> findAll(final Order[] orderProperties, final List<Criterion> criteria)
- {
- return (List<T>) getHibernateTemplate().execute(new HibernateCallback()
- {
-
- public Object doInHibernate(Session ses) throws HibernateException
- {
- Criteria crit = ses.createCriteria(getReferenceClass());
- if (null != orderProperties)
- {
- for (int j = 0; j < orderProperties.length; j++)
- {
- crit.addOrder(orderProperties[j]);
- }
-
- }
- if (criteria != null)
- {
- for (Criterion criterion : criteria)
- {
- crit.add(criterion);
- }
- }
- return crit.list();
- }
- });
- }
-
- /**
- * {@inheritDoc}
- */
- public List<T> find(String query, Object obj, Type type)
- {
- return find(query, new Object[]{obj }, new Type[]{type });
- }
-
- /**
- * {@inheritDoc}
- */
- @SuppressWarnings("unchecked")
- public List<T> find(final String query, final Object[] obj, final Type[] type)
- {
- return (List<T>) getHibernateTemplate().execute(new HibernateCallback()
- {
-
- public Object doInHibernate(Session ses) throws HibernateException
- {
- // hibernate 3
- return ses.createQuery(query).setParameters(obj, type).list();
- }
- });
- }
-
- /**
- * {@inheritDoc}
- */
- @SuppressWarnings("unchecked")
- public T load(K key)
- {
- T result = (T) getHibernateTemplate().load(getReferenceClass(), key);
- Hibernate.initialize(result);
- return result;
- }
-
- /**
- * {@inheritDoc}
- */
- @SuppressWarnings("unchecked")
- public T loadIfAvailable(K key)
- {
- T result;
- try
- {
- result = (T) getHibernateTemplate().load(getReferenceClass(), key);
- Hibernate.initialize(result);
- }
- catch (ObjectNotFoundException e)
- {
- // during lazy initialization
- return null;
- }
- catch (HibernateObjectRetrievalFailureException e)
- {
- // during load
- if (e.getCause() instanceof ObjectNotFoundException)
- {
- return null;
- }
- throw e;
- }
- return result;
- }
-
- /**
- * {@inheritDoc}
- */
- public void saveOrUpdate(final T obj)
- {
- getHibernateTemplate().saveOrUpdate(obj);
- }
-
- /**
- * {@inheritDoc}
- */
- public void update(T obj)
- {
- getHibernateTemplate().update(obj);
- }
-
- /**
- * {@inheritDoc}
- */
- public boolean delete(final K key)
- {
-
- return (Boolean) getHibernateTemplate().execute(new HibernateCallback()
- {
-
- public Object doInHibernate(Session ses) throws HibernateException
- {
- ses.delete(ses.load(getReferenceClass(), key));
- return true;
- }
- });
-
- }
-
- /**
- * {@inheritDoc}
- */
- public void refresh(T obj)
- {
- getHibernateTemplate().refresh(obj);
- }
-
- /**
- * {@inheritDoc}
- */
- public void evict(T obj)
- {
- getHibernateTemplate().evict(obj);
- }
-
- /**
- * {@inheritDoc}
- */
- @SuppressWarnings("unchecked")
- public T merge(final T obj)
- {
- return (T) getHibernateTemplate().execute(new HibernateCallback()
- {
-
- public Object doInHibernate(Session ses) throws HibernateException
- {
- return ses.merge(obj);
- }
- });
-
- }
-
- /**
- * {@inheritDoc}
- */
- @SuppressWarnings("unchecked")
- public K save(T obj)
- {
- return (K) getHibernateTemplate().save(obj);
- }
-
- /**
- * {@inheritDoc}
- */
- public T findFilteredFirst(final T filter)
- {
- return getFirstInCollection(findFiltered(filter, 1, 0));
- }
-
- /**
- * {@inheritDoc}
- */
- public T findFilteredFirst(final T filter, List<Criterion> criteria)
- {
- return getFirstInCollection(findFiltered(filter, null, getDefaultFilterMetadata(), 1, 0, criteria));
- }
-
- /**
- * {@inheritDoc}
- */
- public List<T> findFiltered(final T filter)
- {
- return findFiltered(filter, getDefaultFilterMetadata());
- }
-
- /**
- * {@inheritDoc}
- */
- public List<T> findFiltered(T filter, Order[] orderProperties)
- {
- return findFiltered(filter, orderProperties, getDefaultFilterMetadata(), Integer.MAX_VALUE, 0);
- }
-
- /**
- * {@inheritDoc}
- */
- public List<T> findFiltered(final T filter, final Map<String, FilterMetadata> metadata)
- {
- return findFiltered(filter, metadata, Integer.MAX_VALUE, 0);
- }
-
- /**
- * {@inheritDoc}
- */
- public List<T> findFiltered(final T filter, final int maxResults, final int page)
- {
- return findFiltered(filter, getDefaultFilterMetadata(), maxResults, page);
- }
-
- /**
- * {@inheritDoc}
- */
- public List<T> findFiltered(final T filter, final Map<String, FilterMetadata> metadata, final int maxResults,
- final int page)
- {
- return findFiltered(filter, null, metadata, maxResults, page);
- }
-
- /**
- * {@inheritDoc}
- */
- @SuppressWarnings("unchecked")
- public List<T> findFiltered(final T filter, final Order[] customOrder, final Map<String, FilterMetadata> metadata,
- final int maxResults, final int page)
- {
- return getThis().findFiltered(filter, customOrder, metadata, maxResults, page, new ArrayList<Criterion>());
- }
-
- /**
- * {@inheritDoc}
- */
- @SuppressWarnings("unchecked")
- public List<T> findFiltered(T filter, Order[] customOrder, Map<String, FilterMetadata> metadata, int maxResults,
- int page, List<Criterion> additionalCriteria)
- {
- final Order[] orderProperties = customOrder != null && customOrder.length > 0 ? customOrder : this
- .getDefaultOrder();
-
- return (List<T>) getHibernateTemplate().execute(
- new HibernateCallbackForExecution(filter, page, maxResults, metadata, orderProperties, additionalCriteria));
- }
-
- /**
- * Return the specific Object class that will be used for class-specific implementation of this DAO.
- * @return the reference Class
- */
- protected Class<T> getReferenceClass()
- {
- return referenceClass;
- }
-
- public void setReferenceClass(Class<T> referenceClass)
- {
- this.referenceClass = referenceClass;
- }
-
- /**
- * Return a list of <code>Order</code> object to be used for the default ordering of the collection.
- * @return the property name
- */
- protected Order[] getDefaultOrder()
- {
- return new Order[0];
- }
-
- /**
- * Obtain an instance of Query for a named query string defined in the mapping file.
- * @param name the name of a query defined externally
- * @param maxResults max number of results
- * @return Query
- */
- protected List< ? > getNamedQuery(final String name, final int maxResults)
- {
- return (List< ? >) getHibernateTemplate().execute(new HibernateCallback()
- {
-
- public Object doInHibernate(Session ses) throws HibernateException
- {
- Query q = ses.getNamedQuery(name);
- q.setMaxResults(maxResults);
- return q.list();
- }
- });
- }
-
- /**
- * Obtain an instance of Query for a named query string defined in the mapping file. Use the parameters given.
- * @param name the name of a query defined externally
- * @param params the parameter array
- * @param maxResults max number of results
- * @return Query
- */
- protected List< ? > getNamedQuery(final String name, final Serializable[] params, final int maxResults)
- {
-
- return (List< ? >) getHibernateTemplate().execute(new HibernateCallback()
- {
-
- public Object doInHibernate(Session ses) throws HibernateException
- {
- Query q = ses.getNamedQuery(name);
- q.setMaxResults(maxResults);
- if (null != params)
- {
- for (int i = 0; i < params.length; i++)
- {
- q.setParameter(i, params[i]);
- }
- }
- return q.list();
- }
- });
- }
-
- /**
- * Obtain an instance of Query for a named query string defined in the mapping file. Use the parameters given.
- * @param name the name of a query defined externally
- * @param params the parameter Map
- * @param maxResults max number of results
- * @return Query
- */
- protected List< ? > getNamedQuery(final String name, final Map<String, Object> params, final int maxResults)
- {
- return (List< ? >) getHibernateTemplate().execute(new HibernateCallback()
- {
-
- public Object doInHibernate(Session ses) throws HibernateException
- {
- Query q = ses.getNamedQuery(name);
- q.setMaxResults(maxResults);
- if (params != null)
- {
- for (Map.Entry<String, Object> entry : params.entrySet())
- {
- setParameterValue(q, entry.getKey(), entry.getValue());
- }
- }
- return q.list();
- }
- });
- }
-
- /**
- * Convenience method to set paramers in the query given based on the actual object type in passed in as the value.
- * You may need to add more functionaly to this as desired (or not use this at all).
- * @param query the Query to set
- * @param key the key name
- * @param value the object to set as the parameter
- */
- protected void setParameterValue(Query query, String key, Object value)
- {
- if (null == key || null == value)
- {
- return;
- }
- query.setParameter(key, value);
- }
-
- /**
- * Returns the default set of FilterMetadata that will be applied to any query. The default implementation doesn't
- * set any default filter, subclasses may override this.
- * @return map of property name - filter metadata
- */
- protected Map<String, FilterMetadata> getDefaultFilterMetadata()
- {
- return new HashMap<String, FilterMetadata>(0);
- }
-
- /**
- * Returns the first object in the collection or null if the collection is null or empty.
- * @param list collection
- * @return first element in the list
- */
- @SuppressWarnings("unchecked")
- private T getFirstInCollection(Collection<T> list)
- {
- if (list != null && !list.isEmpty())
- {
- Object result = list.iterator().next();
- Hibernate.initialize(result);
- return (T) result;
- }
- return null;
- }
-
- /**
- * Sets the aopenabled.
- * @param aopenabled the aopenabled to set
- */
- public void setAopenabled(boolean aopenabled)
- {
- this.aopenabled = aopenabled;
- }
-
- /**
- * @return This is needed as for http://opensource.atlassian.com/projects/spring/browse/SPR-2226
- */
- @SuppressWarnings("unchecked")
- private HibernateDAO<T, K> getThis()
- {
- if (!aopenabled)
- {
- return this;
- }
-
- try
- {
- return (HibernateDAO<T, K>) AopContext.currentProxy();
- }
- catch (AspectException exc)
- {
- logger.debug("Not running inside an AOP proxy, so no proxy can be returned: " + exc.getMessage());
- return this;
- }
- catch (IllegalStateException e)
- {
- logger.warn("Cannot access proxy: " + e.getMessage());
- aopenabled = false;
- return this;
- }
- }
-
- /**
- * @author carone
- * @version $Id$
- */
- private final class HibernateCallbackForExecution implements HibernateCallback
- {
-
- /**
- *
- */
- private final T filter;
-
- /**
- *
- */
- private final int page;
-
- /**
- *
- */
- private final int maxResults;
-
- /**
- *
- */
- private final Map<String, FilterMetadata> metadata;
-
- /**
- *
- */
- private final Order[] orderProperties;
-
- private List<Criterion> additionalCriteria;
-
- /**
- * @param filter
- * @param page
- * @param maxResults
- * @param metadata
- * @param orderProperties
- */
- private HibernateCallbackForExecution(
- T filter,
- int page,
- int maxResults,
- Map<String, FilterMetadata> metadata,
- Order[] orderProperties,
- List<Criterion> additionalCriteria)
- {
- this.filter = filter;
- this.page = page;
- this.maxResults = maxResults;
- this.metadata = metadata;
- this.orderProperties = orderProperties;
- this.additionalCriteria = additionalCriteria;
- }
-
- public Object doInHibernate(Session ses) throws HibernateException
- {
- Criteria crit = ses.createCriteria(filter.getClass());
- crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
- crit.setMaxResults(maxResults);
- crit.setFirstResult(maxResults * page);
-
- if (orderProperties != null && orderProperties.length > 0)
- {
- for (Order order : orderProperties)
- {
- if (order != null)
- {
- crit.addOrder(order);
- }
- }
- }
- EnhancedExample.create(crit, filter, metadata);
- if (additionalCriteria != null && !additionalCriteria.isEmpty())
- {
- for (Criterion criterion : additionalCriteria)
- {
- crit.add(criterion);
- }
- }
- return crit.list();
- }
- }
-
-}
\ No newline at end of file
Copied: tags/openutils-bshd5-2.0/src/main/java/it/openutils/dao/hibernate/HibernateDAOImpl.java (from rev 551, trunk/openutils-bshd5/src/main/java/it/openutils/dao/hibernate/HibernateDAOImpl.java)
===================================================================
--- tags/openutils-bshd5-2.0/src/main/java/it/openutils/dao/hibernate/HibernateDAOImpl.java (rev 0)
+++ tags/openutils-bshd5-2.0/src/main/java/it/openutils/dao/hibernate/HibernateDAOImpl.java 2008-01-27 10:55:14 UTC (rev 555)
@@ -0,0 +1,611 @@
+package it.openutils.dao.hibernate;
+
+import it.openutils.hibernate.example.EnhancedExample;
+import it.openutils.hibernate.example.FilterMetadata;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.aopalliance.aop.AspectException;
+import org.hibernate.Criteria;
+import org.hibernate.Hibernate;
+import org.hibernate.HibernateException;
+import org.hibernate.ObjectNotFoundException;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.criterion.CriteriaSpecification;
+import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.Order;
+import org.hibernate.type.Type;
+import org.springframework.aop.framework.AopContext;
+import org.springframework.orm.hibernate3.HibernateCallback;
+import org.springframework.orm.hibernate3.HibernateObjectRetrievalFailureException;
+import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
+
+
+/**
+ * Base Hibernate DAO.
+ * @author Fabrizio Giustina
+ * @version $Id$
+ * @param <T> Persistence class
+ * @param <K> Object Key
+ */
+public abstract class HibernateDAOImpl<T extends Object, K extends Serializable> extends HibernateDaoSupport
+ implements
+ HibernateDAO<T, K>
+{
+
+ private Class<T> referenceClass;
+
+ private boolean aopenabled;
+
+ /**
+ * Instantiates a new DAO instance
+ */
+ public HibernateDAOImpl()
+ {
+ super();
+ }
+
+ /**
+ * Sets the class of the persistent bean managed by this DAO
+ * @param referenceClass the class for the bean managed by this DAO
+ */
+ @SuppressWarnings({"unchecked" })
+ public HibernateDAOImpl(Class referenceClass)
+ {
+ super();
+ this.referenceClass = referenceClass;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @SuppressWarnings("unchecked")
+ public List<T> find(String query)
+ {
+ return getHibernateTemplate().find(query);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public List<T> findAll()
+ {
+ return findAll(getDefaultOrder());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @SuppressWarnings("unchecked")
+ public List<T> findAll(final Order[] orderProperties)
+ {
+ return getThis().findAll(orderProperties, new ArrayList<Criterion>());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @SuppressWarnings("unchecked")
+ public List<T> findAll(final Order[] orderProperties, final List<Criterion> criteria)
+ {
+ return (List<T>) getHibernateTemplate().execute(new HibernateCallback()
+ {
+
+ public Object doInHibernate(Session ses) throws HibernateException
+ {
+ Criteria crit = ses.createCriteria(getReferenceClass());
+ if (null != orderProperties)
+ {
+ for (int j = 0; j < orderProperties.length; j++)
+ {
+ crit.addOrder(orderProperties[j]);
+ }
+
+ }
+ if (criteria != null)
+ {
+ for (Criterion criterion : criteria)
+ {
+ crit.add(criterion);
+ }
+ }
+ return crit.list();
+ }
+ });
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public List<T> find(String query, Object obj, Type type)
+ {
+ return find(query, new Object[]{obj }, new Type[]{type });
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @SuppressWarnings("unchecked")
+ public List<T> find(final String query, final Object[] obj, final Type[] type)
+ {
+ return (List<T>) getHibernateTemplate().execute(new HibernateCallback()
+ {
+
+ public Object doInHibernate(Session ses) throws HibernateException
+ {
+ // hibernate 3
+ return ses.createQuery(query).setParameters(obj, type).list();
+ }
+ });
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @SuppressWarnings("unchecked")
+ public T load(K key)
+ {
+ T result = (T) getHibernateTemplate().load(getReferenceClass(), key);
+ Hibernate.initialize(result);
+ return result;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @SuppressWarnings("unchecked")
+ public T loadIfAvailable(K key)
+ {
+ T result;
+ try
+ {
+ result = (T) getHibernateTemplate().load(getReferenceClass(), key);
+ Hibernate.initialize(result);
+ }
+ catch (ObjectNotFoundException e)
+ {
+ // during lazy initialization
+ return null;
+ }
+ catch (HibernateObjectRetrievalFailureException e)
+ {
+ // during load
+ if (e.getCause() instanceof ObjectNotFoundException)
+ {
+ return null;
+ }
+ throw e;
+ }
+ return result;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void saveOrUpdate(final T obj)
+ {
+ getHibernateTemplate().saveOrUpdate(obj);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void update(T obj)
+ {
+ getHibernateTemplate().update(obj);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean delete(final K key)
+ {
+
+ return (Boolean) getHibernateTemplate().execute(new HibernateCallback()
+ {
+
+ public Object doInHibernate(Session ses) throws HibernateException
+ {
+ ses.delete(ses.load(getReferenceClass(), key));
+ return true;
+ }
+ });
+
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void refresh(T obj)
+ {
+ getHibernateTemplate().refresh(obj);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void evict(T obj)
+ {
+ getHibernateTemplate().evict(obj);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @SuppressWarnings("unchecked")
+ public T merge(final T obj)
+ {
+ return (T) getHibernateTemplate().execute(new HibernateCallback()
+ {
+
+ public Object doInHibernate(Session ses) throws HibernateException
+ {
+ return ses.merge(obj);
+ }
+ });
+
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @SuppressWarnings("unchecked")
+ public K save(T obj)
+ {
+ return (K) getHibernateTemplate().save(obj);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public T findFilteredFirst(final T filter)
+ {
+ return getFirstInCollection(findFiltered(filter, 1, 0));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public T findFilteredFirst(final T filter, List<Criterion> criteria)
+ {
+ return getFirstInCollection(findFiltered(filter, null, getDefaultFilterMetadata(), 1, 0, criteria));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public List<T> findFiltered(final T filter)
+ {
+ return findFiltered(filter, getDefaultFilterMetadata());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public List<T> findFiltered(T filter, Order[] orderProperties)
+ {
+ return findFiltered(filter, orderProperties, getDefaultFilterMetadata(), Integer.MAX_VALUE, 0);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public List<T> findFiltered(final T filter, final Map<String, FilterMetadata> metadata)
+ {
+ return findFiltered(filter, metadata, Integer.MAX_VALUE, 0);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public List<T> findFiltered(final T filter, final int maxResults, final int page)
+ {
+ return findFiltered(filter, getDefaultFilterMetadata(), maxResults, page);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public List<T> findFiltered(final T filter, final Map<String, FilterMetadata> metadata, final int maxResults,
+ final int page)
+ {
+ return findFiltered(filter, null, metadata, maxResults, page);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @SuppressWarnings("unchecked")
+ public List<T> findFiltered(final T filter, final Order[] customOrder, final Map<String, FilterMetadata> metadata,
+ final int maxResults, final int page)
+ {
+ return getThis().findFiltered(filter, customOrder, metadata, maxResults, page, new ArrayList<Criterion>());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @SuppressWarnings("unchecked")
+ public List<T> findFiltered(T filter, Order[] customOrder, Map<String, FilterMetadata> metadata, int maxResults,
+ int page, List<Criterion> additionalCriteria)
+ {
+ final Order[] orderProperties = customOrder != null && customOrder.length > 0 ? customOrder : this
+ .getDefaultOrder();
+
+ return (List<T>) getHibernateTemplate().execute(
+ new HibernateCallbackForExecution(filter, page, maxResults, metadata, orderProperties, additionalCriteria));
+ }
+
+ /**
+ * Return the specific Object class that will be used for class-specific implementation of this DAO.
+ * @return the reference Class
+ */
+ protected Class<T> getReferenceClass()
+ {
+ return referenceClass;
+ }
+
+ public void setReferenceClass(Class<T> referenceClass)
+ {
+ this.referenceClass = referenceClass;
+ }
+
+ /**
+ * Return a list of <code>Order</code> object to be used for the default ordering of the collection.
+ * @return the property name
+ */
+ protected Order[] getDefaultOrder()
+ {
+ return new Order[0];
+ }
+
+ /**
+ * Obtain an instance of Query for a named query string defined in the mapping file.
+ * @param name the name of a query defined externally
+ * @param maxResults max number of results
+ * @return Query
+ */
+ protected List< ? > getNamedQuery(final String name, final int maxResults)
+ {
+ return (List< ? >) getHibernateTemplate().execute(new HibernateCallback()
+ {
+
+ public Object doInHibernate(Session ses) throws HibernateException
+ {
+ Query q = ses.getNamedQuery(name);
+ q.setMaxResults(maxResults);
+ return q.list();
+ }
+ });
+ }
+
+ /**
+ * Obtain an instance of Query for a named query string defined in the mapping file. Use the parameters given.
+ * @param name the name of a query defined externally
+ * @param params the parameter array
+ * @param maxResults max number of results
+ * @return Query
+ */
+ protected List< ? > getNamedQuery(final String name, final Serializable[] params, final int maxResults)
+ {
+
+ return (List< ? >) getHibernateTemplate().execute(new HibernateCallback()
+ {
+
+ public Object doInHibernate(Session ses) throws HibernateException
+ {
+ Query q = ses.getNamedQuery(name);
+ q.setMaxResults(maxResults);
+ if (null != params)
+ {
+ for (int i = 0; i < params.length; i++)
+ {
+ q.setParameter(i, params[i]);
+ }
+ }
+ return q.list();
+ }
+ });
+ }
+
+ /**
+ * Obtain an instance of Query for a named query string defined in the mapping file. Use the parameters given.
+ * @param name the name of a query defined externally
+ * @param params the parameter Map
+ * @param maxResults max number of results
+ * @return Query
+ */
+ protected List< ? > getNamedQuery(final String name, final Map<String, Object> params, final int maxResults)
+ {
+ return (List< ? >) getHibernateTemplate().execute(new HibernateCallback()
+ {
+
+ public Object doInHibernate(Session ses) throws HibernateException
+ {
+ Query q = ses.getNamedQuery(name);
+ q.setMaxResults(maxResults);
+ if (params != null)
+ {
+ for (Map.Entry<String, Object> entry : params.entrySet())
+ {
+ setParameterValue(q, entry.getKey(), entry.getValue());
+ }
+ }
+ return q.list();
+ }
+ });
+ }
+
+ /**
+ * Convenience method to set paramers in the query given based on the actual object type in passed in as the value.
+ * You may need to add more functionaly to this as desired (or not use this at all).
+ * @param query the Query to set
+ * @param key the key name
+ * @param value the object to set as the parameter
+ */
+ protected void setParameterValue(Query query, String key, Object value)
+ {
+ if (null == key || null == value)
+ {
+ return;
+ }
+ query.setParameter(key, value);
+ }
+
+ /**
+ * Returns the default set of FilterMetadata that will be applied to any query. The default implementation doesn't
+ * set any default filter, subclasses may override this.
+ * @return map of property name - filter metadata
+ */
+ protected Map<String, FilterMetadata> getDefaultFilterMetadata()
+ {
+ return new HashMap<String, FilterMetadata>(0);
+ }
+
+ /**
+ * Returns the first object in the collection or null if the collection is null or empty.
+ * @param list collection
+ * @return first element in the list
+ */
+ @SuppressWarnings("unchecked")
+ private T getFirstInCollection(Collection<T> list)
+ {
+ if (list != null && !list.isEmpty())
+ {
+ Object result = list.iterator().next();
+ Hibernate.initialize(result);
+ return (T) result;
+ }
+ return null;
+ }
+
+ /**
+ * Sets the aopenabled.
+ * @param aopenabled the aopenabled to set
+ */
+ public void setAopenabled(boolean aopenabled)
+ {
+ this.aopenabled = aopenabled;
+ }
+
+ /**
+ * @return This is needed as for http://opensource.atlassian.com/projects/spring/browse/SPR-2226
+ */
+ @SuppressWarnings("unchecked")
+ private HibernateDAO<T, K> getThis()
+ {
+ if (!aopenabled)
+ {
+ return this;
+ }
+
+ try
+ {
+ return (HibernateDAO<T, K>) AopContext.currentProxy();
+ }
+ catch (AspectException exc)
+ {
+ logger.debug("Not running inside an AOP proxy, so no proxy can be returned: " + exc.getMessage());
+ return this;
+ }
+ catch (IllegalStateException e)
+ {
+ logger.warn("Cannot access proxy: " + e.getMessage());
+ aopenabled = false;
+ return this;
+ }
+ }
+
+ /**
+ * @author carone
+ * @version $Id$
+ */
+ private final class HibernateCallbackForExecution implements HibernateCallback
+ {
+
+ /**
+ *
+ */
+ private final T filter;
+
+ /**
+ *
+ */
+ private final int page;
+
+ /**
+ *
+ */
+ private final int maxResults;
+
+ /**
+ *
+ */
+ private final Map<String, FilterMetadata> metadata;
+
+ /**
+ *
+ */
+ private final Order[] orderProperties;
+
+ private List<Criterion> additionalCriteria;
+
+ /**
+ * @param filter
+ * @param page
+ * @param maxResults
+ * @param metadata
+ * @param orderProperties
+ */
+ private HibernateCallbackForExecution(
+ T filter,
+ int page,
+ int maxResults,
+ Map<String, FilterMetadata> metadata,
+ Order[] orderProperties,
+ List<Criterion> additionalCriteria)
+ {
+ this.filter = filter;
+ this.page = page;
+ this.maxResults = maxResults;
+ this.metadata = metadata;
+ this.orderProperties = orderProperties;
+ this.additionalCriteria = additionalCriteria;
+ }
+
+ public Object doInHibernate(Session ses) throws HibernateException
+ {
+ Criteria crit = ses.createCriteria(filter.getClass());
+ crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
+ crit.setMaxResults(maxResults);
+ crit.setFirstResult(maxResults * page);
+
+ if (orderProperties != null && orderProperties.length > 0)
+ {
+ for (Order order : orderProperties)
+ {
+ if (order != null)
+ {
+ crit.addOrder(order);
+ }
+ }
+ }
+ EnhancedExample.create(crit, filter, metadata);
+ if (additionalCriteria != null && !additionalCriteria.isEmpty())
+ {
+ for (Criterion criterion : additionalCriteria)
+ {
+ crit.add(criterion);
+ }
+ }
+ return crit.list();
+ }
+ }
+
+}
\ No newline at end of file
Deleted: tags/openutils-bshd5-2.0/src/main/java/it/openutils/dao/hibernate/MutableDateRange.java
===================================================================
--- trunk/openutils-bshd5/src/main/java/it/openutils/dao/hibernate/MutableDateRange.java 2008-01-20 17:02:17 UTC (rev 536)
+++ tags/openutils-bshd5-2.0/src/main/java/it/openutils/dao/hibernate/MutableDateRange.java 2008-01-27 10:55:14 UTC (rev 555)
@@ -1,75 +0,0 @@
-package it.openutils.dao.hibernate;
-
-import java.util.Date;
-
-
-/**
- * @author Fabrizio Giustina
- * @version $Id: $
- * @deprecated use FilterMetadata
- */
-@Deprecated
-public class MutableDateRange extends Date
-{
-
- /**
- *
- */
- private static final long serialVersionUID = 1L;
-
- /**
- * range start.
- */
- private Date from;
-
- /**
- * range end.
- */
- private Date to;
-
- /**
- * Getter for <code>from</code>.
- * @return Returns the from.
- */
- public Date getFrom()
- {
- return this.from;
- }
-
- /**
- * Setter for <code>from</code>.
- * @param from The from to set.
- */
- public void setFrom(Date from)
- {
- this.from = from;
- }
-
- /**
- * Getter for <code>to</code>.
- * @return Returns the to.
- */
- public Date getTo()
- {
- return this.to;
- }
-
- /**
- * Setter for <code>to</code>.
- * @param to The to to set.
- */
- public void setTo(Date to)
- {
- this.to = to;
- }
-
- /**
- * Returns <code>true</code> if at least one date is set.
- * @return <code>true</code> if at least one date is set
- */
- public boolean isSet()
- {
- return this.to != null || this.from != null;
- }
-
-}
Deleted: tags/openutils-bshd5-2.0/src/main/java/it/openutils/hibernate/example/EnhancedExample.java
===================================================================
--- trunk/openutils-bshd5/src/main/java/it/openutils/hibernate/example/EnhancedExample.java 2008-01-20 17:02:17 UTC (rev 536)
+++ tags/openutils-bshd5-2.0/src/main/java/it/openutils/hibernate/example/EnhancedExample.java 2008-01-27 10:55:14 UTC (rev 555)
@@ -1,332 +0,0 @@
-package it.openutils.hibernate.example;
-
-import it.openutils.dao.hibernate.MutableDateRange;
-
-import java.lang.reflect.InvocationTargetException;
-import java.math.BigDecimal;
-import java.sql.Timestamp;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.commons.beanutils.PropertyUtils;
-import org.apache.commons.lang.ClassUtils;
-import org.apache.commons.lang.StringUtils;
-import org.hibernate.Criteria;
-import org.hibernate.HibernateException;
-import org.hibernate.criterion.Restrictions;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.dao.DataRetrievalFailureException;
-
-
-/**
- * @author Fabrizio Giustina
- * @version $Id: $
- */
-public class EnhancedExample
-{
-
- private Map<String, FilterMetadata> metadata;
-
- private EnhancedExample(Criteria crit, Object filter, Map<String, FilterMetadata> metadata)
- {
- this.metadata = metadata == null ? new HashMap<String, FilterMetadata>(0) : metadata;
- fillCriteria(null, crit, filter);
- }
-
- /**
- * Logger.
- */
- private static Logger log = LoggerFactory.getLogger(EnhancedExample.class);
-
- /**
- * Fills a criteria object calling addCondition() for any non-null property or for any component in collections.
- * @param crit Criteria
- * @param filter javabean which will be analyzed for non-null properties
- * @throws HibernateException exception while building the criteria
- */
- public static void create(Criteria crit, Object filter, Map<String, FilterMetadata> metadata)
- throws HibernateException
- {
- new EnhancedExample(crit, filter, metadata);
- }
-
- /**
- * Adds contitions to an existing criteria or create sub-criteria for associations.
- * @param crit Criteria
- * @param propertyName property name in parent bean
- * @param value property value
- * @throws HibernateException exception while building the criteria
- */
- private void addCondition(Criteria crit, String propertyName, Object value, Object parentObject)
- throws HibernateException
- {
-
- String simplePropertyName = StringUtils.contains(propertyName, ".") ? StringUtils.substringAfterLast(
- propertyName,
- ".") : propertyName;
-
- if (isSimpleType(value) || value.getClass().isEnum())
- {
-
- // don't filter on empty strings!
- if (value instanceof String && StringUtils.isBlank((String) value))
- {
- return;
- }
-
- FilterMetadata fmd = metadata.get(propertyName);
-
- if (fmd == null)
- {
- fmd = FilterMetadata.EQUAL;
- }
-
- fmd.createFilter(crit, simplePropertyName, value);
-
- }
- else if (value instanceof MutableDateRange) // @todo MutableDateRange should be removed, use a FilterMetadata
- // for this scope
- {
- Date from = ((MutableDateRange) value).getFrom();
- Date to = ((MutableDateRange) value).getTo();
- if (from != null && to != null)
- {
- log.debug("crit.add(Restrictions.between({},{}, {})", new Object[]{propertyName, from, to });
- crit.add(Restrictions.between(propertyName, from, to));
- }
- else if (from != null)
- {
-
- log.debug("crit.add(Restrictions.ge({}, {})", propertyName, to);
-
- crit.add(Restrictions.ge(propertyName, from));
- }
- else if (to != null)
- {
- log.debug("crit.add(Restrictions.le({}, {})", propertyName, to);
- crit.add(Restrictions.le(propertyName, to));
- }
- }
- else
- {
- if (containsSomething(value))
- {
- // @todo handle multiple associations in lists?
- // see http://opensource2.atlassian.com/projects/hibernate/browse/HHH-879
- if ((value instanceof Set || value instanceof List) && !((Collection) value).isEmpty())
- {
- // collection: the new criteria has already been created, now we only nee to analize content
-
- for (Object element : ((Collection< ? extends Object>) value))
- {
-
- log.debug("crit.createCriteria({})", simplePropertyName);
- Criteria childrenCriteria = crit.createCriteria(simplePropertyName);
- fillCriteria(propertyName, childrenCriteria, element);
- }
- }
- else if ((value instanceof Map) && !((Map) value).isEmpty())
- {
- FilterMetadata fmd = metadata.get(propertyName);
-
- if (fmd != null)
- {
- fmd.createFilter(crit, simplePropertyName, value);
- }
- else
- {
- log.warn(
- "Maps are not handled without a FilterMetadata. Property is {} and value is {}.",
- propertyName,
- value);
- }
- }
- else
- {
- log.debug("crit.createCriteria({})", simplePropertyName);
- Criteria childrenCriteria = crit.createCriteria(simplePropertyName);
- fillCriteria(propertyName, childrenCriteria, value);
- }
- }
- }
- }
-
- /**
- * Check if the bean contains at least a valid property.
- * @param bean javabean
- * @return <code>true</code> if the bean contains at least a valid property
- */
- private boolean containsSomething(Object bean)
- {
-
- if (bean == null)
- {
- return false;
- }
- if (isSimpleType(bean))
- {
- return true;
- }
- else if (bean instanceof MutableDateRange)
- {
- return ((MutableDateRange) bean).isSet();
- }
-
- if (bean instanceof Collection)
- {
-
- Collection coll = ((Collection) bean);
- if (coll.isEmpty())
- {
- return false;
- }
-
- if (containsSomething(coll.iterator().next()))
- {
- return true;
- }
- }
- else if (bean instanceof Map)
- {
- Map coll = ((Map) bean);
- if (coll.isEmpty())
- {
- return false;
- }
-
- if (containsSomething(coll.values().iterator().next()))
- {
- return true;
- }
- }
-
- Map<String, Object> properties;
- try
- {
- properties = PropertyUtils.describe(bean);
- }
- catch (Throwable e)
- {
- if (e instanceof InvocationTargetException)
- {
- e = ((InvocationTargetException) e).getTargetException();
- }
-
- log.error("Unable to build filter, PropertyUtils.describe throws an exception while analizing class "
- + ClassUtils.getShortClassName(bean, "NULL"), e);
- return false;
- }
-
- for (Map.Entry<String, Object> property : properties.entrySet())
- {
-
- if (!PropertyUtils.isWriteable(bean, property.getKey()))
- {
- // skip readonly properties
- continue;
- }
-
- Object propertyValue = property.getValue();
- if (propertyValue == null)
- {
- continue;
- }
-
- if (isSimpleType(propertyValue) || containsSomething(propertyValue))
- {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Fills a criteria object calling addCondition() for any non-null property or for any component in collections.
- * @param crit Criteria
- * @param filter javabean which will be analyzed for non-null properties
- * @throws HibernateException exception while building the criteria
- */
- private void fillCriteria(String parentPropertyName, Criteria crit, Object filter) throws HibernateException
- {
- if ((filter instanceof Set || filter instanceof List) && !((Collection) filter).isEmpty())
- {
- // collection: the new criteria has already been created, now we only need to analize content
- for (Object element : ((Collection) filter))
- {
- fillCriteria(parentPropertyName, crit, element);
- }
- }
-
- Map<String, Object> properties;
- try
- {
- properties = PropertyUtils.describe(filter);
- }
- catch (Throwable e)
- {
- if (e instanceof InvocationTargetException)
- {
- e = ((InvocationTargetException) e).getTargetException();
- }
-
- throw new DataRetrievalFailureException(
- "Unable to build filter, PropertyUtils.describe throws an exception while analizing class "
- + ClassUtils.getShortClassName(filter, "NULL")
- + ":"
- + e.getClass(),
- e);
- }
-
- Iterator<String> iterator = properties.keySet().iterator();
- while (iterator.hasNext())
- {
- String propertyName = iterator.next();
-
- Object value = properties.get(propertyName);
-
- // add only non-null values, ignore read-only properties
- if (value != null && PropertyUtils.isWriteable(filter, propertyName))
- {
- String composedPropertyName = (parentPropertyName == null) ? propertyName : parentPropertyName
- + "."
- + propertyName;
- addCondition(crit, composedPropertyName, value, filter);
- }
- }
- }
-
- /**
- * Check if the given object is a simple java type
- * @param object object to check
- * @return <code>true</code>if the given object is a simple type
- */
- private boolean isSimpleType(Object object)
- {
-
- Class< ? extends Object> objClass = object.getClass();
-
- return objClass.isPrimitive()
- || objClass.equals(Integer.class)
- || objClass.equals(Long.class)
- || objClass.equals(Short.class)
- || objClass.equals(Boolean.class)
- || objClass.equals(String.class)
- || objClass.equals(Double.class)
- || objClass.equals(Float.class)
- || objClass.equals(Date.class)
- || objClass.equals(Byte.class)
- || objClass.equals(BigDecimal.class)
- || objClass.equals(Timestamp.class)
- || objClass.equals(Character.class)
- || Calendar.class.isAssignableFrom(objClass);
- }
-
-}
Copied: tags/openutils-bshd5-2.0/src/main/java/it/openutils/hibernate/example/EnhancedExample.java (from rev 551, trunk/openutils-bshd5/src/main/java/it/openutils/hibernate/example/EnhancedExample.java)
===================================================================
--- tags/openutils-bshd5-2.0/src/main/java/it/openutils/hibernate/example/EnhancedExample.java (rev 0)
+++ tags/openutils-bshd5-2.0/src/main/java/it/openutils/hibernate/example/EnhancedExample.java 2008-01-27 10:55:14 UTC (rev 555)
@@ -0,0 +1,305 @@
+package it.openutils.hibernate.example;
+
+import java.lang.reflect.InvocationTargetException;
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.beanutils.PropertyUtils;
+import org.apache.commons.lang.ClassUtils;
+import org.apache.commons.lang.StringUtils;
+import org.hibernate.Criteria;
+import org.hibernate.HibernateException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.dao.DataRetrievalFailureException;
+
+
+/**
+ * @author Fabrizio Giustina
+ * @version $Id: $
+ */
+public final class EnhancedExample
+{
+
+ /**
+ * Logger.
+ */
+ private static Logger log = LoggerFactory.getLogger(EnhancedExample.class);
+
+ private Map<String, FilterMetadata> metadata;
+
+ private EnhancedExample(Criteria crit, Object filter, Map<String, FilterMetadata> metadata)
+ {
+ this.metadata = metadata == null ? new HashMap<String, FilterMetadata>(0) : metadata;
+ fillCriteria(null, crit, filter);
+ }
+
+ /**
+ * Fills a criteria object calling addCondition() for any non-null property or for any component in collections.
+ * @param crit Criteria
+ * @param filter javabean which will be analyzed for non-null properties
+ * @param metadata Map of property names - ...
[truncated message content] |