001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package org.jboss.ejb.plugins.cmp.jdbc.metadata;
023:
024: import java.lang.reflect.Method;
025:
026: import org.jboss.metadata.QueryMetaData;
027:
028: /**
029: * Immutable class which contains information about an EJB QL query.
030: *
031: * @author <a href="mailto:dain@daingroup.com">Dain Sundstrom</a>
032: * @version $Revision: 57209 $
033: */
034: public final class JDBCQlQueryMetaData implements JDBCQueryMetaData {
035: /**
036: * The method to which this query is bound.
037: */
038: private final Method method;
039:
040: /**
041: * The ejb-ql fro the query.
042: */
043: private final String ejbQl;
044:
045: /**
046: * Should the query return Local or Remote beans.
047: */
048: private final boolean resultTypeMappingLocal;
049:
050: /**
051: * Read ahead meta data.
052: */
053: private final JDBCReadAheadMetaData readAhead;
054:
055: private final Class compiler;
056:
057: private final boolean lazyResultSetLoading;
058:
059: /**
060: * Constructs a JDBCQlQueryMetaData which is defined by the queryMetaData
061: * and is invoked by the specified method.
062: *
063: * @param queryMetaData the metadata about this query which was loaded
064: * from the ejb-jar.xml file
065: * @param method the method which invokes this query
066: */
067: public JDBCQlQueryMetaData(QueryMetaData queryMetaData,
068: Method method, Class qlCompiler,
069: boolean lazyResultSetLoading) {
070: this .method = method;
071: this .readAhead = JDBCReadAheadMetaData.DEFAULT;
072: ejbQl = queryMetaData.getEjbQl();
073: resultTypeMappingLocal = (queryMetaData.getResultTypeMapping() == QueryMetaData.LOCAL);
074:
075: compiler = qlCompiler;
076: this .lazyResultSetLoading = lazyResultSetLoading;
077: }
078:
079: /**
080: * Constructs a JDBCQlQueryMetaData with data from the jdbcQueryMetaData
081: * and additional data from the xml element
082: */
083: public JDBCQlQueryMetaData(JDBCQlQueryMetaData defaults,
084: JDBCReadAheadMetaData readAhead, Class compiler,
085: boolean lazyResultSetLoading) {
086: this .method = defaults.getMethod();
087: this .readAhead = readAhead;
088: this .ejbQl = defaults.getEjbQl();
089: this .resultTypeMappingLocal = defaults.resultTypeMappingLocal;
090: this .compiler = compiler;
091: this .lazyResultSetLoading = lazyResultSetLoading;
092: }
093:
094: /**
095: * Constructs a JDBCQlQueryMetaData with data from the jdbcQueryMetaData
096: * and additional data from the xml element
097: */
098: public JDBCQlQueryMetaData(JDBCQlQueryMetaData jdbcQueryMetaData,
099: Method method, JDBCReadAheadMetaData readAhead) {
100: this .method = method;
101: this .readAhead = readAhead;
102: ejbQl = jdbcQueryMetaData.getEjbQl();
103: resultTypeMappingLocal = jdbcQueryMetaData.resultTypeMappingLocal;
104: compiler = jdbcQueryMetaData.compiler;
105: lazyResultSetLoading = jdbcQueryMetaData.lazyResultSetLoading;
106: }
107:
108: // javadoc in parent class
109: public Method getMethod() {
110: return method;
111: }
112:
113: public Class getQLCompilerClass() {
114: return compiler;
115: }
116:
117: /**
118: * Gets the EJB QL query which will be invoked.
119: *
120: * @return the ejb ql String for this query
121: */
122: public String getEjbQl() {
123: return ejbQl;
124: }
125:
126: // javadoc in parent class
127: public boolean isResultTypeMappingLocal() {
128: return resultTypeMappingLocal;
129: }
130:
131: /**
132: * Gets the read ahead metadata for the query.
133: *
134: * @return the read ahead metadata for the query.
135: */
136: public JDBCReadAheadMetaData getReadAhead() {
137: return readAhead;
138: }
139:
140: public boolean isLazyResultSetLoading() {
141: return lazyResultSetLoading;
142: }
143:
144: /**
145: * Compares this JDBCQlQueryMetaData against the specified object. Returns
146: * true if the objects are the same. Two JDBCQlQueryMetaData are the same
147: * if they are both invoked by the same method.
148: *
149: * @param o the reference object with which to compare
150: * @return true if this object is the same as the object argument;
151: * false otherwise
152: */
153: public boolean equals(Object o) {
154: if (o instanceof JDBCQlQueryMetaData) {
155: return ((JDBCQlQueryMetaData) o).method.equals(method);
156: }
157: return false;
158: }
159:
160: /**
161: * Returns a hashcode for this JDBCQlQueryMetaData. The hashcode is computed
162: * by the method which invokes this query.
163: *
164: * @return a hash code value for this object
165: */
166: public int hashCode() {
167: return method.hashCode();
168: }
169:
170: /**
171: * Returns a string describing this JDBCQlQueryMetaData. The exact details
172: * of the representation are unspecified and subject to change, but the
173: * following may be regarded as typical:
174: * <p/>
175: * "[JDBCQlQueryMetaData: method=public org.foo.User
176: * findByName(java.lang.String)]"
177: *
178: * @return a string representation of the object
179: */
180: public String toString() {
181: return "[JDBCQlQueryMetaData : method=" + method + "]";
182: }
183: }
|