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