001/** 002 * Copyright 2005-2016 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.kuali.rice.krad.service.impl; 017 018import org.kuali.rice.core.api.uif.RemotableQuickFinder; 019import org.kuali.rice.krad.datadictionary.RelationshipDefinition; 020import org.kuali.rice.krad.document.Document; 021import org.kuali.rice.krad.service.LegacyDataAdapter; 022import org.kuali.rice.krad.util.ForeignKeyFieldsPopulationState; 023import org.kuali.rice.krad.util.LegacyUtils; 024 025import java.lang.reflect.InvocationTargetException; 026import java.util.Collection; 027import java.util.List; 028import java.util.Map; 029 030/** 031 * LegacyDataAdapter implementation. 032 * 033 * @deprecated instead of using this class, where possible go directly against new KRAD code 034 */ 035@Deprecated 036public class LegacyDataAdapterImpl implements LegacyDataAdapter { 037 038 private LegacyDataAdapter kradLegacyDataAdapter; 039 private LegacyDataAdapter knsLegacyDataAdapter; 040 041 @Override 042 public <T> T save(T dataObject) { 043 return selectAdapter(dataObject).save(dataObject); 044 } 045 046 @Override 047 public <T> T linkAndSave(T dataObject) { 048 return selectAdapter(dataObject).linkAndSave(dataObject); 049 } 050 051 @Override 052 public <T> T saveDocument(T document) { 053 return selectAdapter(document).saveDocument(document); 054 } 055 056 @Override 057 public <T> T findByPrimaryKey(Class<T> clazz, Map<String, ?> primaryKeys) { 058 return selectAdapter(clazz).findByPrimaryKey(clazz, primaryKeys); 059 } 060 061 @Override 062 public <T> T findBySinglePrimaryKey(Class<T> clazz, Object primaryKey) { 063 return selectAdapter(clazz).findBySinglePrimaryKey(clazz, primaryKey); 064 } 065 066 @Override 067 public void delete(Object dataObject) { 068 selectAdapter(dataObject).delete(dataObject); 069 } 070 071 @Override 072 public void deleteMatching(Class<?> type, Map<String, ?> fieldValues) { 073 selectAdapter(type).deleteMatching(type, fieldValues); 074 } 075 076 @Override 077 public <T> T retrieve(T dataObject) { 078 return selectAdapter(dataObject).retrieve(dataObject); 079 } 080 081 @Override 082 public <T> Collection<T> findAll(Class<T> clazz) { 083 return selectAdapter(clazz).findAll(clazz); 084 } 085 086 @Override 087 public <T> Collection<T> findMatching(Class<T> clazz, Map<String, ?> fieldValues) { 088 return selectAdapter(clazz).findMatching(clazz, fieldValues); 089 } 090 091 @Override 092 public <T> Collection<T> findMatchingOrderBy(Class<T> clazz, Map<String, ?> fieldValues, String sortField, 093 boolean sortAscending) { 094 return selectAdapter(clazz).findMatchingOrderBy(clazz, fieldValues, sortField, sortAscending); 095 } 096 097 @Override 098 public Map<String, ?> getPrimaryKeyFieldValues(Object dataObject) { 099 return selectAdapter(dataObject).getPrimaryKeyFieldValues(dataObject); 100 } 101 102 @Override 103 public void retrieveNonKeyFields(Object persistableObject) { 104 selectAdapter(persistableObject).retrieveNonKeyFields(persistableObject); 105 } 106 107 @Override 108 public void retrieveReferenceObject(Object persistableObject, String referenceObjectName) { 109 selectAdapter(persistableObject).retrieveReferenceObject(persistableObject, referenceObjectName); 110 } 111 112 @Override 113 public void refreshAllNonUpdatingReferences(Object persistableObject) { 114 selectAdapter(persistableObject).refreshAllNonUpdatingReferences(persistableObject); 115 } 116 117 @Override 118 public boolean isProxied(Object object) { 119 return selectAdapter(object).isProxied(object); 120 } 121 122 @Override 123 public Object resolveProxy(Object object) { 124 return selectAdapter(object).resolveProxy(object); 125 } 126 127 // Lookup methods 128 129 @Override 130 public <T> Collection<T> findCollectionBySearchHelper(Class<T> dataObjectClass, Map<String, String> formProperties, 131 boolean unbounded, boolean allPrimaryKeyValuesPresentAndNotWildcard, Integer searchResultsLimit) { 132 return selectAdapter(dataObjectClass).findCollectionBySearchHelper(dataObjectClass, formProperties, unbounded, 133 allPrimaryKeyValuesPresentAndNotWildcard, searchResultsLimit); 134 } 135 136 @Override 137 public <T> Collection<T> findCollectionBySearchHelper(Class<T> dataObjectClass, Map<String, String> formProperties, 138 List<String> wildcardAsLiteralPropertyNames, boolean unbounded, 139 boolean allPrimaryKeyValuesPresentAndNotWildcard, Integer searchResultsLimit) { 140 return selectAdapter(dataObjectClass).findCollectionBySearchHelper(dataObjectClass, formProperties, 141 wildcardAsLiteralPropertyNames, unbounded, allPrimaryKeyValuesPresentAndNotWildcard, 142 searchResultsLimit); 143 } 144 145 @Override 146 public <T> T findObjectBySearch(Class<T> type, Map<String, String> formProps) { 147 return selectAdapter(type).findObjectBySearch(type, formProps); 148 } 149 150 @Override 151 public boolean allPrimaryKeyValuesPresentAndNotWildcard(Class<?> boClass, Map<String, String> formProps) { 152 return selectAdapter(boClass).allPrimaryKeyValuesPresentAndNotWildcard(boClass, formProps); 153 } 154 155 @Override 156 public List<String> listPrimaryKeyFieldNames(Class<?> type) { 157 return selectAdapter(type).listPrimaryKeyFieldNames(type); 158 } 159 160 @Override 161 public Class<?> determineCollectionObjectType(Class<?> containingType, String collectionPropertyName) { 162 return selectAdapter(containingType).determineCollectionObjectType(containingType, collectionPropertyName); 163 } 164 165 @Override 166 public boolean hasReference(Class<?> boClass, String referenceName) { 167 return selectAdapter(boClass).hasReference(boClass, referenceName); 168 } 169 170 @Override 171 public boolean hasCollection(Class<?> boClass, String collectionName) { 172 return selectAdapter(boClass).hasCollection(boClass, collectionName); 173 } 174 175 @Override 176 public boolean isExtensionAttribute(Class<?> boClass, String attributePropertyName, Class<?> propertyType) { 177 return selectAdapter(boClass).isExtensionAttribute(boClass, attributePropertyName, propertyType); 178 } 179 180 @Override 181 public Class<?> getExtensionAttributeClass(Class<?> boClass, String attributePropertyName) { 182 return selectAdapter(boClass).getExtensionAttributeClass(boClass, attributePropertyName); 183 } 184 185 @Override 186 public Map<String, ?> getPrimaryKeyFieldValuesDOMDS(Object dataObject) { 187 return selectAdapter(dataObject).getPrimaryKeyFieldValuesDOMDS(dataObject); 188 } 189 190 @Override 191 public boolean equalsByPrimaryKeys(Object do1, Object do2) { 192 return selectAdapter(do1).equalsByPrimaryKeys(do1, do2); 193 } 194 195 @Override 196 public void materializeAllSubObjects(Object object) { 197 selectAdapter(object).materializeAllSubObjects(object); 198 } 199 200 @Override 201 public Class<?> getPropertyType(Object object, String propertyName) { 202 return selectAdapter(object).getPropertyType(object, propertyName); 203 } 204 205 @Override 206 public Object getExtension( 207 Class<?> businessObjectClass) throws InstantiationException, IllegalAccessException { 208 return selectAdapter(businessObjectClass).getExtension(businessObjectClass); 209 } 210 211 @Override 212 public void refreshReferenceObject(Object businessObject, String referenceObjectName) { 213 selectAdapter(businessObject).refreshReferenceObject(businessObject, referenceObjectName); 214 } 215 216 @Override 217 public boolean isLockable(Object object) { 218 return selectAdapter(object).isLockable(object); 219 } 220 221 @Override 222 public void verifyVersionNumber(Object dataObject) { 223 selectAdapter(dataObject).verifyVersionNumber(dataObject); 224 } 225 226 @Override 227 public RemotableQuickFinder.Builder createQuickFinder(Class<?> containingClass, String attributeName) { 228 return selectAdapter(containingClass).createQuickFinder(containingClass, attributeName); 229 } 230 231 @Override 232 public boolean isReferenceUpdatable(Class<?> type, String referenceName) { 233 return selectAdapter(type).isReferenceUpdatable(type, referenceName); 234 } 235 236 @Override 237 @SuppressWarnings("rawtypes") 238 public Map<String, Class> listReferenceObjectFields(Class<?> type) { 239 return selectAdapter(type).listReferenceObjectFields(type); 240 } 241 242 @Override 243 public boolean isCollectionUpdatable(Class<?> type, String collectionName) { 244 return selectAdapter(type).isCollectionUpdatable(type, collectionName); 245 } 246 247 @Override 248 @SuppressWarnings("rawtypes") 249 public Map<String, Class> listCollectionObjectTypes(Class<?> type) { 250 return selectAdapter(type).listCollectionObjectTypes(type); 251 } 252 253 @Override 254 public Object getReferenceIfExists(Object bo, String referenceName) { 255 return selectAdapter(bo).getReferenceIfExists(bo, referenceName); 256 } 257 258 @Override 259 public boolean allForeignKeyValuesPopulatedForReference(Object bo, String referenceName) { 260 return selectAdapter(bo).allForeignKeyValuesPopulatedForReference(bo, referenceName); 261 } 262 263 @Override 264 public RelationshipDefinition getDictionaryRelationship(Class<?> c, String attributeName) { 265 return selectAdapter(c).getDictionaryRelationship(c, attributeName); 266 } 267 268 @Override 269 public String getTitleAttribute(Class<?> dataObjectClass) { 270 return selectAdapter(dataObjectClass).getTitleAttribute(dataObjectClass); 271 } 272 273 @Override 274 public boolean areNotesSupported(Class<?> dataObjectClass) { 275 return selectAdapter(dataObjectClass).areNotesSupported(dataObjectClass); 276 } 277 278 @Override 279 public String getDataObjectIdentifierString(Object dataObject) { 280 return selectAdapter(dataObject).getDataObjectIdentifierString(dataObject); 281 } 282 283 @Override 284 public Class<?> getInquiryObjectClassIfNotTitle(Object dataObject, String propertyName) { 285 return selectAdapter(dataObject).getInquiryObjectClassIfNotTitle(dataObject, propertyName); 286 } 287 288 @Override 289 public Map<String, String> getInquiryParameters(Object dataObject, List<String> keys, String propertyName) { 290 return selectAdapter(dataObject).getInquiryParameters(dataObject, keys, propertyName); 291 } 292 293 @Override 294 public boolean hasLocalLookup(Class<?> dataObjectClass) { 295 return selectContextualAdapter().hasLocalLookup(dataObjectClass); 296 } 297 298 @Override 299 public boolean hasLocalInquiry(Class<?> dataObjectClass) { 300 return selectContextualAdapter().hasLocalInquiry(dataObjectClass); 301 } 302 303 @Override 304 public org.kuali.rice.krad.bo.DataObjectRelationship getDataObjectRelationship(Object dataObject, 305 Class<?> dataObjectClass, String attributeName, String attributePrefix, boolean keysOnly, 306 boolean supportsLookup, boolean supportsInquiry) { 307 return selectAdapter(dataObjectClass).getDataObjectRelationship(dataObject, dataObjectClass, attributeName, 308 attributePrefix, keysOnly, supportsLookup, supportsInquiry); 309 } 310 311 @Override 312 public boolean isPersistable(Class<?> dataObjectClass) { 313 return selectAdapter(dataObjectClass).isPersistable(dataObjectClass); 314 } 315 316 @Override 317 public ForeignKeyFieldsPopulationState getForeignKeyFieldsPopulationState(Object dataObject, String referenceName) { 318 return selectAdapter(dataObject).getForeignKeyFieldsPopulationState(dataObject, referenceName); 319 } 320 321 @Override 322 public Map<String, String> getForeignKeysForReference(Class<?> clazz, String attributeName) { 323 return selectAdapter(clazz).getForeignKeysForReference(clazz, attributeName); 324 } 325 326 @Override 327 public boolean hasPrimaryKeyFieldValues(Object dataObject) { 328 return selectAdapter(dataObject).hasPrimaryKeyFieldValues(dataObject); 329 } 330 331 @Override 332 public void setObjectPropertyDeep(Object bo, String propertyName, Class type, 333 Object propertyValue) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { 334 selectAdapter(bo).setObjectPropertyDeep(bo, propertyName, type, propertyValue); 335 } 336 337 @Override 338 @SuppressWarnings("rawtypes") 339 public Class materializeClassForProxiedObject(Object object) { 340 return selectAdapter(object).materializeClassForProxiedObject(object); 341 } 342 343 @Override 344 public Object getNestedValue(Object bo, String fieldName) { 345 return selectAdapter(bo).getNestedValue(bo, fieldName); 346 } 347 348 @Override 349 @SuppressWarnings("rawtypes") 350 public Object createNewObjectFromClass(Class clazz) { 351 return selectAdapter(clazz).createNewObjectFromClass(clazz); 352 } 353 354 @Override 355 public boolean isNull(Object object) { 356 return selectAdapter(object).isNull(object); 357 } 358 359 @Override 360 public void setObjectProperty(Object bo, String propertyName, Class propertyType, 361 Object propertyValue) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { 362 selectAdapter(bo).setObjectProperty(bo, propertyName, propertyType, propertyValue); 363 } 364 365 @Override 366 public <T extends Document> T findByDocumentHeaderId(Class<T> documentClass, String id) { 367 return selectAdapter(documentClass).findByDocumentHeaderId(documentClass, id); 368 } 369 370 @Override 371 public <T extends Document> List<T> findByDocumentHeaderIds(Class<T> documentClass, List<String> ids) { 372 return selectAdapter(documentClass).findByDocumentHeaderIds(documentClass, ids); 373 } 374 375 protected LegacyDataAdapter selectAdapter(Object dataObject) { 376 if (LegacyUtils.isKnsEnabled() && (dataObject instanceof Class) && LegacyUtils.useLegacy( 377 (Class<?>) dataObject)) { 378 return getKnsLegacyDataAdapter(); 379 } else if (LegacyUtils.isKnsEnabled() && !(dataObject instanceof Class) && LegacyUtils.useLegacyForObject( 380 dataObject)) { 381 return getKnsLegacyDataAdapter(); 382 } else { 383 return getKradLegacyDataAdapter(); 384 } 385 386 } 387 388 /** 389 * This is used to select the adapter when we only care whether the application is operating within the legacy 390 * context (KNS) or not. It does not factor a data object class into the calculation. 391 * 392 * @return true if the application is currently within a legacy context, false otherwise 393 */ 394 protected LegacyDataAdapter selectContextualAdapter() { 395 if (LegacyUtils.isKnsEnabled() && LegacyUtils.isInLegacyContext()) { 396 return getKnsLegacyDataAdapter(); 397 } 398 return getKradLegacyDataAdapter(); 399 } 400 401 public LegacyDataAdapter getKradLegacyDataAdapter() { 402 return kradLegacyDataAdapter; 403 } 404 405 public void setKradLegacyDataAdapter(LegacyDataAdapter kradLegacyDataAdapter) { 406 this.kradLegacyDataAdapter = kradLegacyDataAdapter; 407 } 408 409 public LegacyDataAdapter getKnsLegacyDataAdapter() { 410 return knsLegacyDataAdapter; 411 } 412 413 public void setKnsLegacyDataAdapter(LegacyDataAdapter knsLegacyDataAdapter) { 414 this.knsLegacyDataAdapter = knsLegacyDataAdapter; 415 } 416 417} 418