View Javadoc

1   /***
2    * License Agreement.
3    * 
4    * JSPA (POJO-SP)
5    * 
6    * Copyright (C) 2009 HRX Pty Ltd
7    * 
8    * This file is part of JSPA.
9    * 
10   * JSPA is free software: you can redistribute it and/or modify it under the
11   * terms of the GNU Lesser General Public License version 3 as published by the
12   * Free Software Foundation.
13   * 
14   * JSPA is distributed in the hope that it will be useful, but WITHOUT ANY
15   * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
16   * A PARTICULAR PURPOSE. See the Lesser General Public License for more details.
17   * 
18   * You should have received a copy of the GNU Lesser General Public License
19   * along with JSPA. If not, see <http://www.gnu.org/licenses/>.
20   */
21  package com.hrx.rasp.util.dao;
22  
23  import java.sql.SQLException;
24  import java.util.List;
25  
26  import com.hrx.rasp.util.dao.exception.InvalidStoredProcedureException;
27  import com.hrx.rasp.util.dao.exception.OperationNotSupportedException;
28  import com.hrx.rasp.util.dao.exception.RecordNotFoundException;
29  import com.hrx.rasp.util.dao.exception.StoredProcedureException;
30  import com.hrx.rasp.util.dao.exception.StoredProcedurePrepareException;
31  import com.hrx.rasp.util.dao.exception.StoredProcedureProccessResultException;
32  
33  /***
34   * 
35   * The DAOManager is used to create, remove and update persistent DAO instances.
36   * Also it can be used to find entities by their primary key, and to query over
37   * the records stored in the database. It is responsible to manage the DAO life
38   * cycle calling the SQL operations for their instances. The DAO manager defines
39   * and implements the methods that are used to interact with the stored DAO.
40   * Removed and find operations require the primary key of the DAO to be set. Any
41   * other properties except the primary key will be ignored and they should not
42   * be used by Remove or find Stored Procedures.
43   * 
44   * The DAO is expected to have public setters and getters for all OUT or INOUT
45   * parameters and public getters for all methods IN parameters.
46   * 
47   * The OUT and INOUT parameters can not be final.
48   * 
49   * The first two parameters of the database Stored Procedures executing the DAO
50   * operations (CREATE, DELETE, UPDATE, FIND, SELECT) are reserved for the
51   * application error code and the error message. These parameters should not be
52   * defined by your DAO. If the DAO overwrites any of these two parameters, the
53   * DAOManager will throw an StoredProcedureReservedIndexException. The only
54   * exception is the SELECT operations that is using a database functions that
55   * returns a ResultSet. For this function the reserved parameters are 1, 2 and
56   * 3.
57   * 
58   * Return code 0 (ZERO) = successful
59   * 
60   * Any error code (<>0) returned by stored procedures will automatic be
61   * converted by DAOManager to a Java StoredProcedureException.
62   * 
63   * 
64   * @author dan.stoica <dan.stoica@acslink.net.au>
65   * 
66   */
67  public interface DAOManager
68  {
69  
70  	/***
71  	 * The DAOManager create(Object daoBean) API is used to insert a new
72  	 * instance into the Database. It must only be called on new Entities.
73  	 * 
74  	 * It Creates a database record given the stored procedure name and the
75  	 * fields to be inserted for the record in the database.
76  	 * 
77  	 * @param storedProcBean
78  	 * @throws StoredProcedureException
79  	 * @throws SQLException
80  	 * @throws StoredProcedurePrepareException
81  	 * @throws InvalidStoredProcedureException
82  	 * @throws StoredProcedureProccessResultException
83  	 */
84  	public abstract <T> T create(final T daoBean) throws StoredProcedureException, SQLException, StoredProcedurePrepareException,
85  					InvalidStoredProcedureException, StoredProcedureProccessResultException;
86  
87  	/***
88  	 * Remove a record from the database. To delete a bean from the database use
89  	 * the remove(Object entityBean) API.
90  	 * 
91  	 * 
92  	 * @param daoBean -
93  	 *            the bean object describing the record we remove from the
94  	 *            database. The primary key of this object will be used for
95  	 *            remove operation. Other properties will just be ignored.
96  	 * 
97  	 * @throws SQLException
98  	 * @throws StoredProcedureException
99  	 * @throws StoredProcedurePrepareException
100 	 * @throws StoredProcedureProccessResultException
101 	 * @throws InvalidStoredProcedureException
102 	 * 
103 	 */
104 	public abstract void delete(final Object daoBean) throws SQLException, StoredProcedureException, StoredProcedurePrepareException,
105 					StoredProcedureProccessResultException, InvalidStoredProcedureException;
106 
107 	/***
108 	 * The DAOManager update(Object daoBean) API is used to update a database
109 	 * record given the procedure and the fields to be updated.
110 	 * 
111 	 * The updated objects state overrides the persistent DAO state in the
112 	 * database, if one is already present without consideration of the current
113 	 * state of the database record.
114 	 * 
115 	 * @param <T>
116 	 * @param daoBean -
117 	 *            the object containing the details for the record we store in
118 	 *            the database
119 	 * @throws StoredProcedurePrepareException
120 	 * @throws SQLException
121 	 * @throws StoredProcedureException
122 	 * @throws InvalidStoredProcedureException
123 	 * @throws StoredProcedureProccessResultException
124 	 */
125 	public abstract <T> void update(final T daoBean) throws StoredProcedurePrepareException, SQLException, StoredProcedureException,
126 					InvalidStoredProcedureException, StoredProcedureProccessResultException;
127 
128 	/***
129 	 * Load a record from the database given the lookup fields and a mapping of
130 	 * the result set items to the fields (in order to populate the DAO)
131 	 * 
132 	 * The DAO '@ID' annotated properties will be used as IN parameters. The OUT
133 	 * properties. Any other properties including INOUT are ignored.
134 	 * 
135 	 * Stored Procedure signature - PROCEDURE_NAME(ReturnCode OUT NUMBER,
136 	 * ReturnText OUT VARCHAR2, arg1 IN TYPE, arg2 IN TYPE, arg3 OUT TYPE, ...);
137 	 * 
138 	 * @param daoPk
139 	 *            The DAO bean that stores the primary key used by the finder
140 	 *            stored procedure and the return values. The same bean will be
141 	 *            updated and returned.
142 	 * 
143 	 * @return A list of DAOs containing the results of the find request
144 	 * @throws StoredProcedurePrepareException
145 	 * @throws SQLException
146 	 * @throws StoredProcedureException
147 	 * @throws StoredProcedureProccessResultException
148 	 * @throws InvalidStoredProcedureException
149 	 */
150 	public abstract <T> T find(final T daoWithPk) throws SQLException, StoredProcedureException, StoredProcedurePrepareException,
151 					StoredProcedureProccessResultException, InvalidStoredProcedureException;
152 
153 	/***
154 	 * Find a collection of records using the given search criteria and a
155 	 * database FUNCTION. The IN parameters of the POJO are used as a query
156 	 * Criteria. 'Id' annotations will be ignored. All IN parameters of this DAO
157 	 * are set as IN parameters to the Oracle FUNCTION that executes the
158 	 * operation. Any OUT, INOUT or Primary Key parameters will be ignored.
159 	 * 
160 	 * The operation does not supports database STORED PROCEDURES.
161 	 * 
162 	 * 
163 	 * @return A list of DAOs containing the results of the select request
164 	 * @param daoBean
165 	 * @throws SQLException
166 	 * @throws StoredProcedureException
167 	 * @throws RecordNotFoundException
168 	 * @throws StoredProcedurePrepareException
169 	 * @throws StoredProcedureProccessResultException
170 	 * @throws InvalidStoredProcedureException
171 	 */
172 	public abstract <T> List<T> select(final T daoBean) throws SQLException, StoredProcedureException, RecordNotFoundException,
173 					StoredProcedurePrepareException, StoredProcedureProccessResultException, InvalidStoredProcedureException;
174 
175 	/***
176 	 * The same as select(final T daoBean) but is restricting the number of the
177 	 * returned results.
178 	 * 
179 	 * @param <T>
180 	 * @param daoBean
181 	 * @param startPosition
182 	 *            The start position of the first result, numbered from 0. e. A
183 	 *            positive number indicates the row number counting from the
184 	 *            beginning of the result set; a negative number indicates the
185 	 *            row number counting from the end of the result set
186 	 * @param maxResult
187 	 *            The maximum number of results to retrieve.
188 	 * @return A Java Collection containing the data.
189 	 * @throws SQLException
190 	 * @throws StoredProcedureException
191 	 * @throws RecordNotFoundException
192 	 * @throws StoredProcedurePrepareException
193 	 * @throws StoredProcedureProccessResultException
194 	 * @throws InvalidStoredProcedureException
195 	 */
196 	public abstract <T> List<T> select(final T daoBean, int startPosition, int maxResult) throws SQLException, StoredProcedureException,
197 					RecordNotFoundException, StoredProcedurePrepareException, StoredProcedureProccessResultException, InvalidStoredProcedureException;
198 
199 	/***
200 	 * 
201 	 * Find a collection of records using the given search criteria and an
202 	 * database FUNCTION. The Search criteria is specified using a queryBean DAO
203 	 * object. The IN parameters of this object are set as IN parameters to the
204 	 * Oracle Function that executes the operation. Any OUT, INOUT or Primary
205 	 * Key parameters will be ignored.
206 	 * 
207 	 * The operation does not supports database stored procedures.
208 	 * 
209 	 * @param queryBean
210 	 *            is a DAO that contains the IN parameters for the query.
211 	 * @param returnType
212 	 *            The type of the POJO objects returned in the result List
213 	 * @return A list of POJO Object containing the results of the select
214 	 *         request
215 	 * @throws SQLException
216 	 * @throws StoredProcedureException
217 	 * @throws RecordNotFoundException
218 	 * @throws StoredProcedurePrepareException
219 	 * @throws StoredProcedureProccessResultException
220 	 * @throws InvalidStoredProcedureException
221 	 */
222 	public <T> List<T> select(final Object queryBean, Class<T> returnType) throws SQLException, StoredProcedureException, RecordNotFoundException,
223 					StoredProcedurePrepareException, StoredProcedureProccessResultException, InvalidStoredProcedureException;
224 
225 	public <T> List<T> select(final Object queryBean, Class<T> returnType, int startPosition, int maxResult) throws SQLException,
226 					StoredProcedureException, RecordNotFoundException, StoredProcedurePrepareException, StoredProcedureProccessResultException,
227 					InvalidStoredProcedureException;
228 
229 	/***
230 	 * Execute the database Stored Procedure associated with the Stored
231 	 * Procedure Java Bean
232 	 * 
233 	 * @param daoBean -
234 	 *            generic Java Bean associated with a database Stored Procedure
235 	 * @return
236 	 * @throws StoredProcedureException
237 	 * @throws SQLException
238 	 * @throws StoredProcedurePrepareException
239 	 * @throws OperationNotSupportedException
240 	 * @throws InvalidStoredProcedureException
241 	 * @throws StoredProcedureProccessResultException
242 	 * 
243 	 */
244 	public abstract <T> T execute(final T daoBean) throws StoredProcedureException, SQLException, StoredProcedurePrepareException,
245 					OperationNotSupportedException, InvalidStoredProcedureException, StoredProcedureProccessResultException;
246 
247 	/***
248 	 * Execute the database Stored Procedure associated with the Stored
249 	 * Procedure Java Bean restricting the number of the results return by
250 	 * ResultSet OUT parameters.
251 	 * 
252 	 * @param <T>
253 	 * @param daoBean
254 	 * @param startPosition
255 	 *            The start position of the first result, numbered from 0. e. A
256 	 *            positive number indicates the row number counting from the
257 	 *            beginning of the result set; a negative number indicates the
258 	 *            row number counting from the end of the result set
259 	 * @param maxResult
260 	 *            The maximum number of results to retrieve.
261 	 * @return
262 	 * @throws StoredProcedureException
263 	 * @throws SQLException
264 	 * @throws StoredProcedurePrepareException
265 	 * @throws OperationNotSupportedException
266 	 * @throws InvalidStoredProcedureException
267 	 * @throws StoredProcedureProccessResultException
268 	 */
269 	public abstract <T> T execute(final T daoBean, int startPosition, int maxResult) throws StoredProcedureException, SQLException,
270 					StoredProcedurePrepareException, OperationNotSupportedException, InvalidStoredProcedureException,
271 					StoredProcedureProccessResultException;
272 
273 }