1 package org.kuali.rice.krad.service;
2
3 import org.kuali.rice.krad.bo.BusinessObject;
4 import org.kuali.rice.krad.bo.PersistableBusinessObject;
5 import org.kuali.rice.krad.util.LegacyDataFramework;
6
7 import java.util.Collection;
8 import java.util.List;
9 import java.util.Map;
10
11 /**
12 * Created by angelind on 11/6/14.
13 *
14 * Overridden by 'Sheik Salahudeen'
15 * Overridden for fixing the document fetching issue in KRAD Transaction document with OJB.
16 * Modified method names: findBySinglePrimaryKey,findByPrimaryKey,findAll,findAllOrderBy,findMatching,findMatchingOrderBy,BusinessObjectDaoOjb
17 * Changes description : Modified the return type of method from '<T extends BusinessObject>' to '<T>'.
18 */
19 @Deprecated
20 @LegacyDataFramework
21 public interface BusinessObjectService {
22
23 /**
24 * Saves the passed in object via the persistence layer.
25 *
26 * This will throw an IllegalArgumentException (runtime exception) if the object passed in is not a descendent of
27 * BusinessObject.
28 *
29 * @param bo A BusinessObject instance or descendent that you wish to be stored.
30 */
31 public <T extends PersistableBusinessObject> T save(T bo);
32
33 /**
34 * Saves the businessObjects on the list via the persistence layer.
35 *
36 * This will throw an IllegalArgumentException (runtime exception) if any of the objects passed in is not a descendent of
37 * BusinessObject.
38 *
39 * @param businessObjects A List<PersistableBusinessObject> of objects to persist.
40 */
41 public List<? extends PersistableBusinessObject> save(List<? extends PersistableBusinessObject> businessObjects);
42
43 /**
44 * Links up any contained objects, and then Saves the passed in object via the persistence layer.
45 *
46 * This will throw an IllegalArgumentException (runtime exception) if the object passed in is not a descendent of
47 * BusinessObject.
48 *
49 * @param bo A BusinessObject instance or descendent that you wish to be stored.
50 */
51 public PersistableBusinessObject linkAndSave(PersistableBusinessObject bo);
52
53 /**
54 * Links up any contained objects, and Saves the businessObjects on the list via the persistence layer.
55 *
56 * This will throw an IllegalArgumentException (runtime exception) if any of the objects passed in is not a descendent of
57 * BusinessObject.
58 *
59 * @param businessObjects A List<BusinessObject> of objects to persist.
60 *
61 */
62 public List<? extends PersistableBusinessObject> linkAndSave(List<? extends PersistableBusinessObject> businessObjects);
63
64 /**
65 * Retrieves an object instance identified by its primary key. For composite keys, use {@link #findByPrimaryKey(Class, java.util.Map)}
66 *
67 * @param clazz
68 * @param primaryKey
69 * @return
70 */
71 public <T> T findBySinglePrimaryKey(Class<T> clazz, Object primaryKey);
72
73 /**
74 * Retrieves an object instance identified by its primary keys and values. This can be done by constructing a map where the key
75 * to the map entry is the primary key attribute and the value of the entry being the primary key value. For composite keys,
76 * pass in each primaryKey attribute and its value as a map entry.
77 *
78 * @param clazz
79 * @param primaryKeys
80 * @return
81 */
82 public <T> T findByPrimaryKey(Class<T> clazz, Map<String, ?> primaryKeys);
83
84 /**
85 * Retrieves an object instance identified by the class of the given object and the object's primary key values.
86 *
87 * @param object
88 * @return
89 */
90 public Object retrieve(Object object);
91
92 /**
93 * Retrieves a collection of business objects populated with data, such that each record in the database populates a new object
94 * instance. This will only retrieve business objects by class type.
95 *
96 * @param clazz
97 * @return
98 */
99 public <T> Collection<T> findAll(Class<T> clazz);
100
101 /**
102 * Retrieves a collection of business objects populated with data, such that each record in the database populates a new object
103 * instance. This will only retrieve business objects by class type.
104 *
105 * @param clazz
106 * @return
107 */
108 public <T> Collection<T> findAllOrderBy( Class<T> clazz, String sortField, boolean sortAscending );
109
110 /**
111 * This method retrieves a collection of business objects populated with data, such that each record in the database populates a
112 * new object instance. This will retrieve business objects by class type and also by criteria passed in as key-value pairs,
113 * specifically attribute name and its expected value.
114 *
115 * @param clazz
116 * @param fieldValues
117 * @return
118 */
119 public <T> Collection<T> findMatching(Class<T> clazz, Map<String, ?> fieldValues);
120
121 /**
122 * Finds all entities matching the passed in Rice JPA criteria
123 *
124 * @param <T> the type of the entity that will be returned
125 * @param criteria the criteria to form the query with
126 * @return a Collection (most likely a List) of all matching entities
127 */
128 //public abstract <T> Collection<T> findMatching(Criteria criteria);
129
130 /**
131 * This method retrieves a count of the business objects populated with data which match the criteria in the given Map.
132 *
133 * @param clazz
134 * @param fieldValues
135 * @return number of businessObjects of the given class whose fields match the values in the given expected-value Map
136 */
137 public int countMatching(Class clazz, Map<String, ?> fieldValues);
138
139 /**
140 * This method retrieves a count of the business objects populated with data which match both the positive criteria
141 * and the negative criteria in the given Map.
142 *
143 * @param clazz
144 * @param positiveFieldValues
145 * @param negativeFieldValues
146 * @return number of businessObjects of the given class whose fields match the values in the given expected-value Maps
147 */
148 public int countMatching(Class clazz, Map<String, ?> positiveFieldValues, Map<String, ?> negativeFieldValues);
149
150 /**
151 * This method retrieves a collection of business objects populated with data, such that each record in the database populates a
152 * new object instance. This will retrieve business objects by class type and also by criteria passed in as key-value pairs,
153 * specifically attribute name and its expected value. Performs an order by on sort field.
154 *
155 * @param clazz
156 * @param fieldValues
157 * @return
158 */
159 public <T> Collection<T> findMatchingOrderBy(Class<T> clazz, Map<String, ?> fieldValues, String sortField, boolean sortAscending);
160
161 /**
162 * Deletes a business object from the database.
163 *
164 * @param bo
165 */
166 public void delete(Object bo);
167
168 /**
169 * Deletes each business object in the given List.
170 *
171 * @param boList
172 */
173 public void delete(List<? extends PersistableBusinessObject> boList);
174
175 /**
176 * Deletes the object(s) matching the given field values
177 *
178 * @param clazz
179 * @param fieldValues
180 */
181 public void deleteMatching(Class clazz, Map<String, ?> fieldValues);
182
183 /**
184 *
185 * This method attempts to retrieve the reference from a BO if it exists.
186 *
187 * @param bo - populated BusinessObject instance that includes the referenceName property
188 * @param referenceName - name of the member/property to load
189 * @return A populated object from the DB, if it exists
190 *
191 */
192 public BusinessObject getReferenceIfExists(BusinessObject bo, String referenceName);
193
194 /**
195 *
196 * Updates all KualiUser or Person objects contained within this BO, based on the UserID as the authoritative key. The
197 * appropriate foreign-key field in the BO itself is also updated.
198 *
199 * This allows UserIDs to be entered on forms, and the back-end will link up correctly based on this non-key field.
200 *
201 * @param bo The populated BO (or descendent) instance to be linked & updated
202 *
203 */
204 public void linkUserFields(Object bo);
205
206 /**
207 * Merges the given business object, but tells the ORM that the object is to be treated as Read Only,
208 * and even if it has changes, it will not be persisted to the database
209 *
210 * @param bo the business object to managed
211 * @return the managed copied of the business object
212 */
213 public PersistableBusinessObject manageReadOnly(PersistableBusinessObject bo);
214
215 }
216
217