View Javadoc

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