1 /*
2 * Copyright 2007-2008 The Kuali Foundation
3 *
4 * Licensed under the Educational Community License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.opensource.org/licenses/ecl2.php
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package org.kuali.rice.core.dao;
17
18 import java.util.Collection;
19 import java.util.List;
20 import java.util.Map;
21
22 import org.apache.ojb.broker.query.Criteria;
23
24 /**
25 * This is the generic data access interface for business objects.
26 * This class was adapted from the Kuali Nervous System
27 * (org.kuali.rice.kns.dao.BusinessObjectDao).
28 * It's not as generic as it could be as it relies on the OJB criteria object...
29 *
30 * @author Kuali Rice Team (rice.collab@kuali.org)
31 */
32 public interface GenericDao {
33 /**
34 * Saves any object
35 *
36 * @param bo
37 */
38 public void save(Object bo);
39
40 /**
41 * Saves a List of objects
42 *
43 * @param businessObjects
44 */
45 public void save(List businessObjects);
46
47 /**
48 * Retrieves an object instance identified bys it primary key.
49 *
50 * @param clazz the class
51 * @param id the primary key value
52 * @return Object
53 */
54 public Object findById(Class clazz, Object keyValue);
55
56 /**
57 * Retrieves an object instance identified by its primary keys and
58 * values. This can be done by constructing a map where the key to the
59 * map entry is the primary key attribute and the value of the entry
60 * being the primary key value. For composite keys, pass in each
61 * primaryKey attribute and its value as a map entry.
62 *
63 * @param clazz
64 * @param primaryKeys
65 * @return Object
66 */
67 public Object findByPrimaryKey(Class clazz, Map primaryKeys);
68
69 /**
70 * This method should be used to try and locate an object instance by passing
71 * in unique keys and values. This can be done by constructing a map where the key to the
72 * map entry is the unique key attribute and the value of the entry
73 * being the unique key value. For composite keys, pass in each
74 * unique key attribute and its value as a map entry.
75 *
76 * @param clazz
77 * @param uniqueKeys
78 * @return Object
79 */
80 public Object findByUniqueKey(Class clazz, Map uniqueKeys);
81
82 /**
83 * Retrieves an object instance identified by the class of the given
84 * object and the object's primary key values.
85 *
86 * @param object
87 * @return Object
88 */
89 public Object retrieve(Object object);
90
91 /**
92 * This method allows you to pass in an object that has some fields filled in,
93 * and will query underneath by automatically constructing a select statement
94 * whose where clause is built automatically by looking at the non-null
95 * attributes and using their values as part of the query. This is basically
96 * a query by "template" method.
97 * @param object
98 * @return Collection
99 */
100 public Collection findMatchingByExample(Object object);
101
102 /**
103 * Retrieves a collection of business objects populated with data, such
104 * that each record in the database populates a new object instance.
105 * This will only retrieve business objects by class type.
106 *
107 * @param clazz
108 * @return Collection
109 */
110 public Collection findAll(Class clazz);
111
112 /**
113 * Retrieves a collection of business objects populated with data, such
114 * that each record in the database populates a new object instance.
115 * This will only retrieve business objects by class type. Orders the
116 * results by the given field.
117 *
118 * @param clazz
119 * @return Collection
120 */
121 public Collection findAllOrderBy(Class clazz, String sortField,
122 boolean sortAscending);
123
124 /**
125 * This method retrieves a collection of business objects populated with
126 * data, such that each record in the database populates a new object
127 * instance. This will retrieve business objects by class type and also
128 * by criteria passed in as key-value pairs, specifically attribute
129 * name-expected value.
130 *
131 * @param clazz
132 * @param fieldValues
133 * @return Collection
134 */
135 public Collection findMatching(Class clazz, Map fieldValues);
136
137 /**
138 * This method allows for a more flexible search by allowing the programmer to
139 * construct the criteria however they need to and then pass that in for execution.
140 * @param clazz
141 * @param criteria
142 * @return Collection
143 */
144 public Collection findMatching(Class clazz, Criteria criteria);
145
146 /**
147 * This method allows for a more flexible search by allowing the programmer to
148 * construct the criteria however they need to and then pass that in for execution.
149 * @param clazz
150 * @param criteria
151 * @param selectForUpdate whether to perform a select for update query
152 * @param wait millis to wait for select for update
153 * @return Collection
154 */
155 public Collection findMatching(Class clazz, Criteria criteria, boolean selectForUpdate, long wait);
156
157 /**
158 * @param clazz
159 * @param fieldValues
160 * @return count of BusinessObjects of the given class whose fields
161 * match the values in the given Map.
162 */
163 public int countMatching(Class clazz, Map fieldValues);
164
165 /**
166 *
167 * This method returns the number of matching result given the positive
168 * criterias and negative criterias. The negative criterias are the ones
169 * that will be set to "notEqualTo" or "notIn"
170 *
171 * @param clazz
172 * @param positiveFieldValues
173 * Map of fields and values for positive criteria
174 * @param negativeFieldValues
175 * Map of fields and values for negative criteria
176 * @return int
177 */
178 public int countMatching(Class clazz, Map positiveFieldValues,
179 Map negativeFieldValues);
180
181 /**
182 * This method retrieves a collection of business objects populated with
183 * data, such that each record in the database populates a new object
184 * instance. This will retrieve business objects by class type and also
185 * by criteria passed in as key-value pairs, specifically attribute
186 * name-expected value. Orders the results by the given field.
187 *
188 * @param clazz
189 * @param fieldValues
190 * @return Collection
191 */
192 public Collection findMatchingOrderBy(Class clazz, Map fieldValues,
193 String sortField, boolean sortAscending);
194
195 /**
196 * Deletes a business object from the database.
197 *
198 * @param bo
199 */
200 public void delete(Object bo);
201
202 /**
203 * Deletes each business object in the given List from the database.
204 *
205 * @param boList
206 */
207 public void delete(List<Object> boList);
208
209 /**
210 * Deletes the business objects matching the given fieldValues
211 *
212 * @param clazz
213 * @param fieldValues
214 */
215 public void deleteMatching(Class clazz, Map fieldValues);
216 }