001: /*
002: * ============================================================================
003: * GNU Lesser General Public License
004: * ============================================================================
005: *
006: * JasperReports - Free Java report-generating library.
007: * Copyright (C) 2001-2006 JasperSoft Corporation http://www.jaspersoft.com
008: *
009: * This library is free software; you can redistribute it and/or
010: * modify it under the terms of the GNU Lesser General Public
011: * License as published by the Free Software Foundation; either
012: * version 2.1 of the License, or (at your option) any later version.
013: *
014: * This library is distributed in the hope that it will be useful,
015: * but WITHOUT ANY WARRANTY; without even the implied warranty of
016: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
017: * Lesser General Public License for more details.
018: *
019: * You should have received a copy of the GNU Lesser General Public
020: * License along with this library; if not, write to the Free Software
021: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
022: *
023: * JasperSoft Corporation
024: * 303 Second Street, Suite 450 North
025: * San Francisco, CA 94107
026: * http://www.jaspersoft.com
027: */
028: package net.sf.jasperreports.engine.query;
029:
030: import java.util.Map;
031:
032: import net.sf.jasperreports.engine.JRDataset;
033: import net.sf.jasperreports.engine.JRException;
034: import net.sf.jasperreports.engine.util.JRProperties;
035:
036: import org.hibernate.Session;
037:
038: /**
039: * Query executer factory for HQL queries that uses Hibernate 3.
040: * <p/>
041: * The factory creates {@link net.sf.jasperreports.engine.query.JRHibernateQueryExecuter JRHibernateQueryExecuter}
042: * query executers.
043: *
044: * @author Lucian Chirita (lucianc@users.sourceforge.net)
045: * @version $Id: JRHibernateQueryExecuterFactory.java 1589 2007-02-20 14:28:21Z shertage $
046: */
047: public class JRHibernateQueryExecuterFactory implements
048: JRQueryExecuterFactory {
049:
050: /**
051: * HQL query language.
052: */
053: public static final String QUERY_LANGUAGE_HQL = "hql";
054:
055: /**
056: * Built-in parameter holding the value of the Hibernate session to be used for creating the query.
057: */
058: public final static String PARAMETER_HIBERNATE_SESSION = "HIBERNATE_SESSION";
059:
060: /**
061: * Built-in parameter used for collection filter queries.
062: * <p/>
063: * The value of this paramter will be used as the collection to filter using the query.
064: */
065: public final static String PARAMETER_HIBERNATE_FILTER_COLLECTION = "HIBERNATE_FILTER_COLLECTION";
066:
067: private final static Object[] HIBERNATE_BUILTIN_PARAMETERS = {
068: PARAMETER_HIBERNATE_SESSION, Session.class,
069: PARAMETER_HIBERNATE_FILTER_COLLECTION, Object.class, };
070:
071: /**
072: * Property specifying the query execution type.
073: * <p/>
074: * Possible values are:
075: * <ul>
076: * <li><em>list</em> (default) - the query will be run by calling <code>org.hibernate.Query.list()</code></li>
077: * <li><em>iterate</em> - the query will be run by calling <code>org.hibernate.Query.iterate()</code></li>
078: * <li><em>scroll</em> - the query will be run by calling <code>org.hibernate.Query.scroll()</code></li>
079: * </ul>
080: */
081: public static final String PROPERTY_HIBERNATE_QUERY_RUN_TYPE = JRProperties.PROPERTY_PREFIX
082: + "hql.query.run.type";
083:
084: /**
085: * Property specifying the number of result rows to be retrieved at once when the execution type is <em>list</em>.
086: * <p/>
087: * Result pagination is implemented by <code>org.hibernate.Query.setFirstResult()</code> and <code>org.hibernate.Query.setMaxResults()</code>.
088: * <p/>
089: * By default, all the rows are retrieved (no result pagination is performed).
090: */
091: public static final String PROPERTY_HIBERNATE_QUERY_LIST_PAGE_SIZE = JRProperties.PROPERTY_PREFIX
092: + "hql.query.list.page.size";
093:
094: /**
095: * Property specifying whether hibernate session cache should be cleared between two consecutive fetches when using pagination.
096: * <p/>
097: * By default, the cache cleanup is not performed.
098: * <p/>
099: * @see net.sf.jasperreports.engine.query.JRHibernateQueryExecuterFactory#PROPERTY_HIBERNATE_QUERY_LIST_PAGE_SIZE
100: */
101: public static final String PROPERTY_HIBERNATE_CLEAR_CACHE = JRProperties.PROPERTY_PREFIX
102: + "hql.clear.cache";
103:
104: /**
105: * Property specifying whether field descriptions should be used to determine the mapping between the fields
106: * and the query return values.
107: */
108: public static final String PROPERTY_HIBERNATE_FIELD_MAPPING_DESCRIPTIONS = JRProperties.PROPERTY_PREFIX
109: + "hql.field.mapping.descriptions";
110:
111: /**
112: * Value of the {@link #PROPERTY_HIBERNATE_QUERY_RUN_TYPE PROPERTY_HIBERNATE_QUERY_RUN_TYPE} property
113: * corresponding to <em>list</em> execution type.
114: */
115: public static final String VALUE_HIBERNATE_QUERY_RUN_TYPE_LIST = "list";
116:
117: /**
118: * Value of the {@link #PROPERTY_HIBERNATE_QUERY_RUN_TYPE PROPERTY_HIBERNATE_QUERY_RUN_TYPE} property
119: * corresponding to <em>iterate</em> execution type.
120: */
121: public static final String VALUE_HIBERNATE_QUERY_RUN_TYPE_ITERATE = "iterate";
122:
123: /**
124: * Value of the {@link #PROPERTY_HIBERNATE_QUERY_RUN_TYPE PROPERTY_HIBERNATE_QUERY_RUN_TYPE} property
125: * corresponding to <em>scroll</em> execution type.
126: */
127: public static final String VALUE_HIBERNATE_QUERY_RUN_TYPE_SCROLL = "scroll";
128:
129: /**
130: * Returns an array containing the {@link #PARAMETER_HIBERNATE_SESSION PARAMETER_HIBERNATE_SESSION} and
131: * {@link #PARAMETER_HIBERNATE_FILTER_COLLECTION PARAMETER_HIBERNATE_FILTER_COLLECTION} paramters.
132: */
133: public Object[] getBuiltinParameters() {
134: return HIBERNATE_BUILTIN_PARAMETERS;
135: }
136:
137: public JRQueryExecuter createQueryExecuter(JRDataset dataset,
138: Map parameters) throws JRException {
139: return new JRHibernateQueryExecuter(dataset, parameters);
140: }
141:
142: /**
143: * Returns <code>true</code> for all parameter types.
144: */
145: public boolean supportsQueryParameterType(String className) {
146: return true;
147: }
148: }
|