1 /*
2 * Copyright 2007-2008 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.BusinessObject;
22 import org.kuali.rice.kns.bo.ExternalizableBusinessObject;
23 import org.kuali.rice.kns.bo.ModuleConfiguration;
24 import org.kuali.rice.kns.datadictionary.BusinessObjectEntry;
25 import org.springframework.beans.factory.InitializingBean;
26 import org.springframework.context.ApplicationContextAware;
27
28 /**
29 * This interface defines service methods for modules.
30 *
31 * @author Kuali Rice Team (rice.collab@kuali.org)
32 *
33 */
34 public interface ModuleService extends InitializingBean, ApplicationContextAware {
35
36 /**
37 *
38 * This method returns the module configuration.
39 *
40 * @return
41 */
42 public ModuleConfiguration getModuleConfiguration();
43
44 /**
45 *
46 * This method determines whether this service is responsible for the business object class passed in, or not.
47 *
48 * @param businessObjectClass
49 * @return
50 */
51 public boolean isResponsibleFor(Class businessObjectClass);
52
53 /**
54 *
55 * This method determines whether this service is responsible for the given jobname, or not.
56 *
57 * @param businessObjectClass
58 * @return
59 */
60 public boolean isResponsibleForJob(String jobName);
61
62 /**
63 *
64 * This method returns the list of primary keys for the EBO.
65 *
66 * @param businessObjectInterfaceClass
67 * @return
68 */
69 public List listPrimaryKeyFieldNames(Class businessObjectInterfaceClass);
70
71 /**
72 *
73 * This method returns a list of alternate primary keys. This is used when the "real" primary
74 * key is not the only one that can be used. For example, documentType has "documentTypeId"
75 * as its primary key, but the "name" could also be used.
76 * A List of Lists is returned because because there can be component keys:
77 * Ex:
78 * {name, date}
79 * {department, personId}
80 *
81 * @param businessObjectInterfaceClass
82 * @return List of List of Strings.
83 */
84 public List<List<String>> listAlternatePrimaryKeyFieldNames(Class businessObjectInterfaceClass);
85
86 /**
87 *
88 * This method gets the business object dictionary entry for the passed in externalizable business object class.
89 *
90 * @param businessObjectInterfaceClass
91 * @return
92 */
93 public BusinessObjectEntry getExternalizableBusinessObjectDictionaryEntry(Class businessObjectInterfaceClass);
94
95 /**
96 *
97 * This method gets the externalizable business object, given its type and a map of primary keys and values
98 *
99 * @param businessObjectInterfaceClass
100 * @param fieldValues
101 * @return
102 */
103 public <T extends ExternalizableBusinessObject> T getExternalizableBusinessObject(Class<T> businessObjectClass, Map<String, Object> fieldValues);
104
105 /**
106 *
107 * This method gets the list of externalizable business objects, given its type and a map of primary keys and values.
108 *
109 * @param businessObjectInterfaceClass
110 * @param fieldValues
111 * @return
112 */
113 public <T extends ExternalizableBusinessObject> List<T> getExternalizableBusinessObjectsList(
114 Class<T> businessObjectClass, Map<String, Object> fieldValues);
115
116 /**
117 *
118 * This method gets the list of externalizable business objects for lookup, given its type and a map of primary keys and values.
119 *
120 * @param <T>
121 * @param businessObjectClass
122 * @param fieldValues
123 * @param unbounded
124 * @return
125 */
126 public <T extends ExternalizableBusinessObject> List<T> getExternalizableBusinessObjectsListForLookup(
127 Class<T> businessObjectClass, Map<String, Object> fieldValues, boolean unbounded);
128
129 /**
130 * This method returns a URL so that the inquiry framework may redirect a user to the appropriate (possibly external) website
131 * at which to view inquiry information.
132 *
133 * @param inquiryBusinessObjectClass a {@link ExternalizableBusinessObject} managed by this module
134 * @param parameters any inquiry parameters, and the primary key values of the inquiryBusinessObjectClass would be in here
135 * @return a URL where externalizable business object information may be viewed.
136 */
137 public String getExternalizableBusinessObjectInquiryUrl(Class inquiryBusinessObjectClass, Map<String, String[]> parameters);
138
139 /**
140 *
141 * This method gets the lookup url for the given externalizable business object properties.
142 *
143 * @param parameters
144 * @return
145 */
146 public String getExternalizableBusinessObjectLookupUrl(Class inquiryBusinessObjectClass, Map<String, String> parameters);
147
148 /**
149 *
150 * This method retrieves the externalizable business object, if it is not already populated
151 * with the matching primary key values.
152 *
153 * @param businessObject
154 * @param currentInstanceExternalizableBO
155 * @param externalizableRelationshipName
156 * @return
157 */
158 public <T extends ExternalizableBusinessObject> T retrieveExternalizableBusinessObjectIfNecessary(
159 BusinessObject businessObject, T currentInstanceExternalizableBO, String externalizableRelationshipName);
160
161 /**
162 *
163 * This method retrieves a list of externalizable business objects given a business object,
164 * name of the relationship between the business object and the externalizable business object, and
165 * the externalizable business object class.
166 *
167 * @param businessObject
168 * @param externalizableRelationshipName
169 * @param externalizableClazz
170 * @return
171 */
172 public <T extends ExternalizableBusinessObject> List<T> retrieveExternalizableBusinessObjectsList(
173 BusinessObject businessObject, String externalizableRelationshipName, Class<T> externalizableClazz);
174
175 /**
176 *
177 * This method determines whether or not a bo class is externalizable.
178 *
179 * @param boClass
180 * @return
181 */
182 public boolean isExternalizable(Class boClass);
183
184 /**
185 * @param boClass
186 * @return
187 */
188 public boolean isExternalizableBusinessObjectLookupable(Class boClass);
189
190 /**
191 * @param boClass
192 * @return
193 */
194 public boolean isExternalizableBusinessObjectInquirable(Class boClass);
195
196 /**
197 * @param <T>
198 * @param boClass
199 * @return
200 */
201 public <T extends ExternalizableBusinessObject> T createNewObjectFromExternalizableClass(Class<T> boClass);
202
203 /**
204 * For a given ExternalizableBusinessObject interface, return the implementation class provided by this module.
205 */
206 public <E extends ExternalizableBusinessObject> Class<E> getExternalizableBusinessObjectImplementation(Class<E> externalizableBusinessObjectInterface);
207 }
208