1 /** 2 * Copyright 2005-2013 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.service; 17 18 import org.kuali.rice.krad.bo.BusinessObject; 19 import org.kuali.rice.krad.bo.PersistableBusinessObject; 20 import org.kuali.rice.krad.util.LegacyDataFramework; 21 22 import java.util.Collection; 23 import java.util.List; 24 import java.util.Map; 25 26 /** 27 * Defines methods that a BusinessObjectService must provide 28 * 29 * @author Kuali Rice Team (rice.collab@kuali.org) 30 * @deprecated use new KRAD Data framework {@link org.kuali.rice.krad.data.DataObjectService} 31 */ 32 @Deprecated 33 @LegacyDataFramework 34 public interface BusinessObjectService { 35 36 /** 37 * Saves the passed in object via the persistence layer. 38 * 39 * This will throw an IllegalArgumentException (runtime exception) if the object passed in is not a descendent of 40 * BusinessObject. 41 * 42 * @param bo A BusinessObject instance or descendent that you wish to be stored. 43 */ 44 public <T extends PersistableBusinessObject> T save(T bo); 45 46 /** 47 * Saves the businessObjects on the list via the persistence layer. 48 * 49 * This will throw an IllegalArgumentException (runtime exception) if any of the objects passed in is not a descendent of 50 * BusinessObject. 51 * 52 * @param businessObjects A List<PersistableBusinessObject> of objects to persist. 53 */ 54 public List<? extends PersistableBusinessObject> save(List<? extends PersistableBusinessObject> businessObjects); 55 56 /** 57 * Links up any contained objects, and then Saves the passed in object via the persistence layer. 58 * 59 * This will throw an IllegalArgumentException (runtime exception) if the object passed in is not a descendent of 60 * BusinessObject. 61 * 62 * @param bo A BusinessObject instance or descendent that you wish to be stored. 63 */ 64 public PersistableBusinessObject linkAndSave(PersistableBusinessObject bo); 65 66 /** 67 * Links up any contained objects, and Saves the businessObjects on the list via the persistence layer. 68 * 69 * This will throw an IllegalArgumentException (runtime exception) if any of the objects passed in is not a descendent of 70 * BusinessObject. 71 * 72 * @param businessObjects A List<BusinessObject> of objects to persist. 73 * 74 */ 75 public List<? extends PersistableBusinessObject> linkAndSave(List<? extends PersistableBusinessObject> businessObjects); 76 77 /** 78 * Retrieves an object instance identified by its primary key. For composite keys, use {@link #findByPrimaryKey(Class, Map)} 79 * 80 * @param clazz 81 * @param primaryKey 82 * @return 83 */ 84 public <T extends BusinessObject> T findBySinglePrimaryKey(Class<T> clazz, Object primaryKey); 85 86 /** 87 * Retrieves an object instance identified by its primary keys and values. This can be done by constructing a map where the key 88 * to the map entry is the primary key attribute and the value of the entry being the primary key value. For composite keys, 89 * pass in each primaryKey attribute and its value as a map entry. 90 * 91 * @param clazz 92 * @param primaryKeys 93 * @return 94 */ 95 public <T extends BusinessObject> T findByPrimaryKey(Class<T> clazz, Map<String, ?> primaryKeys); 96 97 /** 98 * Retrieves an object instance identified by the class of the given object and the object's primary key values. 99 * 100 * @param object 101 * @return 102 */ 103 public PersistableBusinessObject retrieve(PersistableBusinessObject object); 104 105 /** 106 * Retrieves a collection of business objects populated with data, such that each record in the database populates a new object 107 * instance. This will only retrieve business objects by class type. 108 * 109 * @param clazz 110 * @return 111 */ 112 public <T extends BusinessObject> Collection<T> findAll(Class<T> clazz); 113 114 /** 115 * Retrieves a collection of business objects populated with data, such that each record in the database populates a new object 116 * instance. This will only retrieve business objects by class type. 117 * 118 * @param clazz 119 * @return 120 */ 121 public <T extends BusinessObject> Collection<T> findAllOrderBy( 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 and its 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 count of the business objects populated with data which match the criteria in the given Map. 145 * 146 * @param clazz 147 * @param fieldValues 148 * @return number of businessObjects of the given class whose fields match the values in the given expected-value Map 149 */ 150 public int countMatching(Class clazz, Map<String, ?> fieldValues); 151 152 /** 153 * This method retrieves a count of the business objects populated with data which match both the positive criteria 154 * and the negative criteria in the given Map. 155 * 156 * @param clazz 157 * @param positiveFieldValues 158 * @param negativeFieldValues 159 * @return number of businessObjects of the given class whose fields match the values in the given expected-value Maps 160 */ 161 public int countMatching(Class clazz, Map<String, ?> positiveFieldValues, Map<String, ?> negativeFieldValues); 162 163 /** 164 * This method retrieves a collection of business objects populated with data, such that each record in the database populates a 165 * new object instance. This will retrieve business objects by class type and also by criteria passed in as key-value pairs, 166 * specifically attribute name and its expected value. Performs an order by on sort field. 167 * 168 * @param clazz 169 * @param fieldValues 170 * @return 171 */ 172 public <T extends BusinessObject> Collection<T> findMatchingOrderBy(Class<T> clazz, Map<String, ?> fieldValues, String sortField, boolean sortAscending); 173 174 /** 175 * Deletes a business object from the database. 176 * 177 * @param bo 178 */ 179 public void delete(PersistableBusinessObject bo); 180 181 /** 182 * Deletes each business object in the given List. 183 * 184 * @param boList 185 */ 186 public void delete(List<? extends PersistableBusinessObject> boList); 187 188 /** 189 * Deletes the object(s) matching the given field values 190 * 191 * @param clazz 192 * @param fieldValues 193 */ 194 public void deleteMatching(Class clazz, Map<String, ?> fieldValues); 195 196 /** 197 * 198 * This method attempts to retrieve the reference from a BO if it exists. 199 * 200 * @param bo - populated BusinessObject instance that includes the referenceName property 201 * @param referenceName - name of the member/property to load 202 * @return A populated object from the DB, if it exists 203 * 204 */ 205 public BusinessObject getReferenceIfExists(BusinessObject bo, String referenceName); 206 207 /** 208 * 209 * Updates all KualiUser or Person objects contained within this BO, based on the UserID as the authoritative key. The 210 * appropriate foreign-key field in the BO itself is also updated. 211 * 212 * This allows UserIDs to be entered on forms, and the back-end will link up correctly based on this non-key field. 213 * 214 * @param bo The populated BO (or descendent) instance to be linked & updated 215 * 216 */ 217 public void linkUserFields(PersistableBusinessObject bo); 218 219 /** 220 * 221 * Updates all KualiUser or Person objects contained within this BO, based on the UserID as the authoritative key. The 222 * appropriate foreign-key field in the BO itself is also updated. 223 * 224 * This allows UserIDs to be entered on forms, and the back-end will link up correctly based on this non-key field. 225 * 226 * @param bos A List of populated BusinessObject (or descendent) instances to be linked & updated. 227 */ 228 public void linkUserFields(List<PersistableBusinessObject> bos); 229 230 /** 231 * Merges the given business object, but tells the ORM that the object is to be treated as Read Only, 232 * and even if it has changes, it will not be persisted to the database 233 * 234 * @param bo the business object to managed 235 * @return the managed copied of the business object 236 */ 237 public PersistableBusinessObject manageReadOnly(PersistableBusinessObject bo); 238 239 } 240