1 /*
2 * Copyright 2005-2007 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.kns.service;
17
18 import java.util.List;
19 import java.util.Map;
20
21 import org.kuali.rice.kns.bo.PersistableBusinessObject;
22 import org.kuali.rice.kns.exception.ClassNotPersistableException;
23
24 public interface PersistenceService {
25 // public void initialize();
26
27 public void loadRepositoryDescriptor(String ojbRepositoryFilePath);
28
29 public void clearCache();
30
31 public Object resolveProxy(Object o);
32
33 /**
34 * @param persistableObject object whose primary key field name,value pairs you want
35 * @return a Map containing the names and values of fields specified the given class which are designated as key fields in the
36 * OJB repository file
37 * @throws IllegalArgumentException if the given Object is null
38 * @throws ClassNotPersistableException if the given object is of a type not described in the OJB repository
39 */
40 public Map getPrimaryKeyFieldValues(Object persistableObject);
41
42 /**
43 * @param persistableObject object whose primary key field name,value pairs you want
44 * @param sortFieldNames if true, the returned Map will iterate through its entries sorted by fieldName
45 * @return a Map containing the names and values of fields specified the given class which are designated as key fields in the
46 * OJB repository file
47 * @throws IllegalArgumentException if the given Object is null
48 * @throws ClassNotPersistableException if the given object is of a type not described in the OJB repository
49 */
50 public Map getPrimaryKeyFieldValues(Object persistableObject, boolean sortFieldNames);
51
52 /**
53 * @param persistableObject object whose objects need to be filled in based on primary keys
54 * @return the object whose key fields have just been retrieved
55 * @throws IllegalArgumentException if the given Object is null
56 * @throws ClassNotPersistableException if the given object is of a type not described in the OJB repository
57 */
58 public void retrieveNonKeyFields(Object persistableObject);
59
60 /**
61 * @param persistableObject object whose specified reference object needs to be filled in based on primary keys
62 * @param referenceObjectName the name of the reference object that will be filled in based on primary key values
63 * @throws IllegalArgumentException if the given Object is null
64 * @throws ClassNotPersistableException if the given object is of a type not described in the OJB repository
65 */
66 public void retrieveReferenceObject(Object persistableObject, String referenceObjectName);
67
68
69 /**
70 * @param persistableObject object whose specified reference objects need to be filled in based on primary keys
71 * @param referenceObjectNames the names of the reference objects that will be filled in based on primary key values
72 * @throws IllegalArgumentException if either of the given lists is null or empty, or if any of the referenceObjectNames is
73 * blank
74 * @throws ClassNotPersistableException if the given object is of a type not described in the OJB repository
75 */
76 public void retrieveReferenceObjects(Object persistableObject, List referenceObjectNames);
77
78 /**
79 * @param persistableObjects objects whose specified reference objects need to be filled in based on primary keys
80 * @param referenceObjectNames the names of the reference objects that will be filled in based on primary key values
81 * @throws IllegalArgumentException if either of the given lists is null or empty, or if any of the referenceObjectNames is
82 * blank
83 * @throws ClassNotPersistableException if the given object is of a type not described in the OJB repository
84 */
85 public void retrieveReferenceObjects(List persistableObjects, List referenceObjectNames);
86
87
88 /**
89 * @param persistableObject object whose objects need to have keys filled
90 * @return the object whose key fields have just been filled
91 * @throws IllegalArgumentException if the given Object is null
92 * @throws ClassNotPersistableException if the given object is of a type not described in the OJB repository
93 */
94 public void linkObjects(Object persistableObject);
95
96
97 /**
98 * Gets the value for the given field name from the object, works for anonymous fields as well as simple fields
99 *
100 * @param persistableObject object to get value from
101 * @param fieldName name of the field to get from the object
102 * @return Object value of field in object, or null
103 */
104 // This method never called
105 //public Object getFieldValue(Object persistableObject, String fieldName);
106
107 /**
108 * @param persistableObject object whose primary key field name,value pairs you want
109 * @param bounded - whether to restrict the number of rows returned
110 * @return a String representation of the primary key fields and values for the given persistableObject
111 * @throws IllegalArgumentException if the given Object is null
112 * @throws ClassNotPersistableException if the given object is of a type not described in the OJB repository
113 */
114 public String getFlattenedPrimaryKeyFieldValues(Object persistableObject);
115
116 /**
117 *
118 * This method examines whether all the foreign key fields for the specified reference contain values.
119 *
120 * @param bo
121 * @param referenceName
122 * @return true if they all are accessible and have values, false otherwise
123 *
124 */
125 public boolean allForeignKeyValuesPopulatedForReference(PersistableBusinessObject bo, String referenceName);
126
127 /**
128 *
129 * This method refreshes all reference objects to this main object that are 'non-updateable'. In general, this means that if a
130 * reference object is configured to not be updated when the parent document is saved, then they are non-updated.
131 *
132 * This will not refresh updateable objects, which can cause problems when you're creating new objects.
133 *
134 * See PersistenceServiceImpl.isUpdateableReference() for the full logic.
135 *
136 * @param bo - the businessObject to be refreshed
137 *
138 */
139 public void refreshAllNonUpdatingReferences(PersistableBusinessObject bo);
140
141 }