1 /**
2 * Copyright 2005-2015 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.krad.dao;
17
18 import java.util.Collection;
19 import java.util.List;
20 import java.util.Map;
21
22 import org.kuali.rice.krad.bo.BusinessObject;
23 import org.kuali.rice.krad.bo.PersistableBusinessObject;
24 import org.kuali.rice.krad.util.LegacyDataFramework;
25
26 /**
27 * This is the generic data access interface for business objects. This should be used for unit testing purposes only.
28 * @deprecated use new KRAD Data framework {@link org.kuali.rice.krad.data.DataObjectService}
29 */
30 @Deprecated
31 @LegacyDataFramework
32 public interface BusinessObjectDao {
33 /**
34 * Saves any object that implements the BusinessObject interface.
35 *
36 * @param bo
37 */
38 public PersistableBusinessObject save(PersistableBusinessObject bo);
39
40 /**
41 * Saves a List of BusinessObjects.
42 *
43 * @param businessObjects
44 */
45 public List<? extends PersistableBusinessObject> save(List businessObjects);
46
47 /**
48 * Retrieves an object instance identified by its primary key. For composite keys, use {@link #findByPrimaryKey(Class, Map)}
49 *
50 * @param clazz
51 * @param primaryKey
52 * @return
53 */
54 public <T extends BusinessObject> T findBySinglePrimaryKey(Class<T> clazz, Object primaryKey);
55
56 /**
57 * Retrieves an object instance identified bys it primary keys and values. This can be done by constructing a map where the key
58 * to the map entry is the primary key attribute and the value of the entry being the primary key value. For composite keys,
59 * pass in each primaryKey attribute and its value as a map entry.
60 *
61 * @param clazz
62 * @param primaryKeys
63 * @return
64 */
65 public <T extends BusinessObject> T findByPrimaryKey(Class<T> clazz, Map<String, ?> primaryKeys);
66
67 /**
68 * Retrieves an object, based on its PK object
69 *
70 * @param clazz the class of the object to retrieve
71 * @param pkObject the value of the primary key
72 * @return the retrieved PersistableBusinessObject
73 */
74 public abstract <T extends BusinessObject> T findByPrimaryKeyUsingKeyObject(Class<T> clazz, Object pkObject);
75
76 /**
77 * Retrieves an object instance identified by the class of the given object and the object's primary key values.
78 *
79 * @param object
80 * @return
81 */
82 public Object retrieve(Object object);
83
84 /**
85 * Retrieves a collection of business objects populated with data, such that each record in the database populates a new object
86 * instance. This will only retrieve business objects by class type.
87 *
88 * @param clazz
89 * @return
90 */
91 public <T extends BusinessObject> Collection<T> findAll(Class<T> clazz);
92
93 /**
94 * Retrieves a collection of business objects populated with data, such that each record in the database populates a new object
95 * instance. This will only retrieve business objects by class type.
96 *
97 * Adds criteria on active column to return only active records. Assumes there exist a mapping for PropertyConstants.Active
98 *
99 * @param clazz
100 * @return
101 */
102 public <T extends BusinessObject> Collection<T> findAllActive(Class<T> clazz);
103
104 public <T extends BusinessObject> Collection<T> findAllInactive(Class<T> clazz);
105
106 /**
107 * Retrieves a collection of business objects populated with data, such that each record in the database populates a new object
108 * instance. This will only retrieve business objects by class type. Orders the results by the given field.
109 *
110 * @param clazz
111 * @return
112 */
113 public <T extends BusinessObject> Collection<T> findAllOrderBy(Class<T> clazz, String sortField, boolean sortAscending);
114
115 /**
116 * Retrieves a collection of business objects populated with data, such that each record in the database populates a new object
117 * instance. This will only retrieve business objects by class type. Orders the results by the given field.
118 *
119 * Adds criteria on active column to return only active records. Assumes there exist a mapping for PropertyConstants.Active
120 * @param clazz
121 * @return
122 */
123 public <T extends BusinessObject> Collection<T> findAllActiveOrderBy(Class<T> clazz, String sortField, boolean sortAscending);
124
125 /**
126 * This method retrieves a collection of business objects populated with data, such that each record in the database populates a
127 * new object instance. This will retrieve business objects by class type and also by criteria passed in as key-value pairs,
128 * specifically attribute name-expected value.
129 *
130 * @param clazz
131 * @param fieldValues
132 * @return
133 */
134 public <T extends BusinessObject> Collection<T> findMatching(Class<T> clazz, Map<String, ?> fieldValues);
135
136 /**
137 * Finds all entities matching the passed in Rice JPA criteria
138 *
139 * @param <T> the type of the entity that will be returned
140 * @param criteria the criteria to form the query with
141 * @return a Collection (most likely a List) of all matching entities
142 */
143 //public abstract <T extends BusinessObject> Collection<T> findMatching(Criteria criteria);
144
145 /**
146 * This method retrieves a collection of business objects populated with data, such that each record in the database populates a
147 * new object instance. This will retrieve business objects by class type and also by criteria passed in as key-value pairs,
148 * specifically attribute name-expected value.
149 *
150 * Adds criteria on active column to return only active records. Assumes there exist a mapping for PropertyConstants.Active
151 *
152 * @param clazz
153 * @param fieldValues
154 * @return
155 */
156 public <T extends BusinessObject> Collection<T> findMatchingActive(Class<T> clazz, Map<String, ?> fieldValues);
157
158 /**
159 * @param clazz
160 * @param fieldValues
161 * @return count of BusinessObjects of the given class whose fields match the values in the given Map.
162 */
163 public int countMatching(Class clazz, Map<String, ?> fieldValues);
164
165
166 /**
167 *
168 * This method returns the number of matching result given the positive criterias and
169 * negative criterias. The negative criterias are the ones that will be set to
170 * "notEqualTo" or "notIn"
171 *
172 * @param clazz
173 * @param positiveFieldValues Map of fields and values for positive criteria
174 * @param negativeFieldValues Map of fields and values for negative criteria
175 * @return
176 */
177 public int countMatching(Class clazz, Map<String, ?> positiveFieldValues, Map<String, ?> negativeFieldValues);
178
179 /**
180 * This method retrieves a collection of business objects populated with data, such that each record in the database populates a
181 * new object instance. This will retrieve business objects by class type and also by criteria passed in as key-value pairs,
182 * specifically attribute name-expected value. Orders the results by the given field.
183 *
184 * @param clazz
185 * @param fieldValues
186 * @return
187 */
188 public <T extends BusinessObject> Collection<T> findMatchingOrderBy(Class<T> clazz, Map<String, ?> fieldValues, String sortField, boolean sortAscending);
189
190 /**
191 * Deletes a business object from the database.
192 *
193 * @param bo
194 */
195 public void delete(Object bo);
196
197 /**
198 * Deletes each business object in the given List from the database.
199 *
200 * @param boList
201 */
202 public void delete(List<? extends PersistableBusinessObject> boList);
203
204 /**
205 * Deletes the business objects matching the given fieldValues
206 *
207 * @param clazz
208 * @param fieldValues
209 */
210 public void deleteMatching(Class clazz, Map<String, ?> fieldValues);
211
212 /**
213 * Merges the given business object, but tells the ORM that the object is to be treated as Read Only,
214 * and even if it has changes, it will not be persisted to the database
215 *
216 * @param bo the business object to managed
217 * @return the managed copied of the business object
218 */
219 public PersistableBusinessObject manageReadOnly(PersistableBusinessObject bo);
220 }