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.io.IOException;
19 import java.math.BigDecimal;
20 import java.util.List;
21 import java.util.Map;
22 import java.util.Set;
23 import java.util.regex.Pattern;
24
25 import org.kuali.rice.kns.bo.BusinessObject;
26 import org.kuali.rice.kns.datadictionary.AttributeSecurity;
27 import org.kuali.rice.kns.datadictionary.DataDictionary;
28 import org.kuali.rice.kns.datadictionary.InactivationBlockingMetadata;
29 import org.kuali.rice.kns.datadictionary.control.ControlDefinition;
30 import org.kuali.rice.kns.datadictionary.mask.Mask;
31 import org.kuali.rice.kns.document.Document;
32 import org.kuali.rice.kns.exception.UnknownDocumentTypeException;
33 import org.kuali.rice.kns.lookup.keyvalues.KeyValuesFinder;
34 import org.kuali.rice.kns.rule.PromptBeforeValidation;
35 import org.kuali.rice.kns.web.format.Formatter;
36
37
38 /**
39 * This interface defines the API for interacting with the data dictionary.
40 *
41 *
42 */
43 public interface DataDictionaryService {
44 /**
45 * Sequentially adds each package named (as a String) in the given List as a source of unique entries to the DataDictionary
46 * being constructed. Duplicate entries among any of the XML files in any of these packages will result in exceptions being
47 * thrown, hence service-initialization failure.
48 *
49 * @param baselinePackages
50 * @throws SourceException if any of the given packages can't be located
51 */
52 public void setBaselinePackages(List baselinePackages) throws IOException;
53
54 /**
55 * @return current DataDictionary
56 */
57 public DataDictionary getDataDictionary();
58
59 public void addDataDictionaryLocations(List<String> locations) throws IOException;
60
61 // /**
62 // * Hook to allow the dataDictionary service to perform any post-build initialization tasks needed before the dataDictionary
63 // * itself will be publicly available.
64 // */
65 // public void completeInitialization();
66
67 /**
68 * the html control type used to render the field
69 */
70 public ControlDefinition getAttributeControlDefinition(Class businessObjectClass, String attributeName);
71
72
73 /**
74 * the display size of the field if text control
75 */
76 public Integer getAttributeSize(Class businessObjectClass, String attributeName);
77
78
79 /**
80 * the max length defined for the given attribute name.
81 */
82 public Integer getAttributeMaxLength(Class businessObjectClass, String attributeName);
83
84
85 /**
86 * the regular expression defined to validate the given attribute name.
87 */
88 public Pattern getAttributeValidatingExpression(Class businessObjectClass, String attributeName);
89
90
91 /**
92 * the label to be used for displaying the attribute.
93 */
94 public String getAttributeLabel(Class businessObjectClass, String attributeName);
95
96
97 /**
98 * the short label to be used for displaying the attribute.
99 */
100 public String getAttributeShortLabel(Class businessObjectClass, String attributeName);
101
102
103 /**
104 * the "label (short label)" used for displaying error messages
105 */
106 public String getAttributeErrorLabel(Class businessObjectClass, String attributeName);
107
108 /**
109 * the formatter class used to format the attribute value
110 */
111 public Class<? extends Formatter> getAttributeFormatter(Class businessObjectClass, String attributeName);
112
113
114 /**
115 * indicates whether or not to force input text into uppercase
116 */
117 public Boolean getAttributeForceUppercase(Class businessObjectClass, String attributeName);
118
119 /**
120 * short help text for attribute
121 */
122 public String getAttributeSummary(Class businessObjectClass, String attributeName);
123
124 /**
125 * detailed help text for attribute
126 */
127 public String getAttributeDescription(Class businessObjectClass, String attributeName);
128
129 /**
130 * indicates whether or not the named attribute is required
131 */
132 public Boolean isAttributeRequired(Class businessObjectClass, String attributeName);
133
134 /**
135 * indicates whether or not the named attribute is defined in the business object xml
136 */
137 public Boolean isAttributeDefined(Class businessObjectClass, String attributeName);
138
139 /**
140 * the Class that returns a values list for this attribute
141 */
142 public Class<? extends KeyValuesFinder> getAttributeValuesFinderClass(Class businessObjectClass, String attributeName);
143
144 /**
145 * the label to be used for displaying the collection.
146 */
147 public String getCollectionLabel(Class businessObjectClass, String collectionName);
148
149
150 /**
151 * the short label to be used for displaying the collection.
152 */
153 public String getCollectionShortLabel(Class businessObjectClass, String collectionName);
154
155
156 /**
157 * short help text for collection
158 */
159 public String getCollectionSummary(Class businessObjectClass, String collectionName);
160
161
162 /**
163 * detailed help text for collection
164 */
165 public String getCollectionDescription(Class businessObjectClass, String collectionName);
166
167 /**
168 * the html control type used to render the field
169 */
170 public ControlDefinition getAttributeControlDefinition(String entryName, String attributeName);
171
172
173 /**
174 * the display size of the field if text control
175 */
176 public Integer getAttributeSize(String entryName, String attributeName);
177
178
179 /**
180 * the max length defined for the given attribute name.
181 */
182 public Integer getAttributeMaxLength(String entryName, String attributeName);
183
184 /**
185 * @param entryName
186 * @param attributeName
187 * @return the exclusive minimum for the specified attribute, or <code>null</code> if none.
188 */
189 public BigDecimal getAttributeExclusiveMin(String entryName, String attributeName);
190
191 /**
192 * @param entryName
193 * @param attributeName
194 * @return the inclusive maximum for the specified attribute, or <code>null</code> if none.
195 */
196 public BigDecimal getAttributeInclusiveMax(String entryName, String attributeName);
197
198
199 /**
200 * the regular expression defined to validate the given attribute name.
201 */
202 public Pattern getAttributeValidatingExpression(String entryName, String attributeName);
203
204
205 /**
206 * the label to be used for displaying the attribute.
207 */
208 public String getAttributeLabel(String entryName, String attributeName);
209
210
211 /**
212 * the short label to be used for displaying the attribute.
213 */
214 public String getAttributeShortLabel(String entryName, String attributeName);
215
216
217 /**
218 * the "label (short label)" used for displaying error messages
219 */
220 public String getAttributeErrorLabel(String entryName, String attributeName);
221
222
223 /**
224 * the formatter class used to format the attribute value
225 */
226 public Class<? extends Formatter> getAttributeFormatter(String entryName, String attributeName);
227
228
229 /**
230 * indicates whether or not to force input text into uppercase
231 */
232 public Boolean getAttributeForceUppercase(String entryName, String attributeName);
233
234 /**
235 * the AttributeSecurity object defined for the attribute's data value
236 */
237 public AttributeSecurity getAttributeSecurity(String entryName, String attributeName);
238
239 /**
240 * short help text for attribute
241 */
242 public String getAttributeSummary(String entryName, String attributeName);
243
244
245 /**
246 * detailed help text for attribute
247 */
248 public String getAttributeDescription(String entryName, String attributeName);
249
250 public String getAttributeValidatingErrorMessageKey(String entryName, String attributeName);
251
252 public String[] getAttributeValidatingErrorMessageParameters(String entryName, String attributeName);
253
254 /**
255 * indicates whether or not the named attribute is required
256 */
257 public Boolean isAttributeRequired(String entryName, String attributeName);
258
259 /**
260 * indicates whether or not the named attribute is defined in the business object xml
261 */
262 public Boolean isAttributeDefined(String entryName, String attributeName);
263
264 /**
265 * the Class that returns a values list for this attribute
266 */
267 public Class<? extends KeyValuesFinder> getAttributeValuesFinderClass(String entryName, String attributeName);
268
269 /**
270 * the label to be used for displaying the collection.
271 */
272 public String getCollectionLabel(String entryName, String collectionName);
273
274
275 /**
276 * the short label to be used for displaying the collection.
277 */
278 public String getCollectionShortLabel(String entryName, String collectionName);
279
280 /**
281 * the element label to be used for displaying the collection.
282 */
283 public String getCollectionElementLabel(String entryName, String collectionName, Class businessObjectClass);
284
285
286 /**
287 * short help text for collection
288 */
289 public String getCollectionSummary(String entryName, String collectionName);
290
291
292 /**
293 * detailed help text for collection
294 */
295 public String getCollectionDescription(String entryName, String collectionName);
296
297
298 /**
299 * @param entryName
300 * @param relationshipName
301 * @return source Class for the given relationship, or null if there is no relationship with that name
302 */
303 public Class<? extends BusinessObject> getRelationshipSourceClass(String entryName, String relationshipName);
304
305 /**
306 * @param entryName
307 * @param relationshipName
308 * @return target Class for the given relationship, or null if there is no relationship with that name
309 */
310 public Class<? extends BusinessObject> getRelationshipTargetClass(String entryName, String relationshipName);
311
312 /**
313 * @param entryName
314 * @param relationshipName
315 * @return List<String> of source attributeNames for the given relationship, or null if there is no relationship with that name
316 */
317 public List<String> getRelationshipSourceAttributes(String entryName, String relationshipName);
318
319 /**
320 * @param entryName
321 * @param relationshipName
322 * @return List<String> of target attributeNames for the given relationship, or null if there is no relationship with that name
323 */
324 public List<String> getRelationshipTargetAttributes(String entryName, String relationshipName);
325
326 /**
327 *
328 * returns a Map that specifies the attributes of the relationship
329 * @param entryName - Name of the Business Object entry
330 * @param relationshipName - Name of the relationship
331 * @return Map - Target field as key, source field as value
332 */
333 public Map<String, String> getRelationshipAttributeMap(String entryName, String relationshipName);
334
335 /**
336 * returns a list of names for all entries whose source parameter matches the parameter
337 * @param entryName Name of the Business Object entry
338 * @param sourceAttributeName name of the source attribute
339 * @return the names of all entries that use the sourceAttributeName as a primitive attribute
340 */
341 public List<String> getRelationshipEntriesForSourceAttribute(String entryName, String sourceAttributeName);
342
343 /**
344 * returns a list of names for all entries whose source parameter matches the parameter
345 * @param entryName Name of the Business Object entry
346 * @param targetAttributeName name of the target attribute
347 * @return the names of all entries that use the targetAttributeName as a primitive attribute
348 */
349 public List<String> getRelationshipEntriesForTargetAttribute(String entryName, String targetAttributeName);
350
351 /**
352 * Determines whether there is a relationship defined for the given entry with the given name
353 * @param entryName name of the BO entry
354 * @param relationshipName name of the relationship for the entry
355 * @return true iff there is a relationship with the given name defined for the BO entry in the DD
356 */
357 public boolean hasRelationship(String entryName, String relationshipName);
358
359 /**
360 * Returns all of the relationships defined for a BO in the DD
361 * @param name of the BO entry
362 * @return a list of all DD defined mappings
363 */
364 public List<String> getRelationshipNames(String entryName);
365
366 // /**
367 // * Returns the list of document class names
368 // *
369 // * @return
370 // */
371 // public List getDocumentObjectClassnames();
372
373 /**
374 * This method returns the user friendly label based on the workflow doc type name
375 * @param documentTypeName
376 * @return label
377 */
378 public String getDocumentLabelByTypeName(String documentTypeName);
379
380 /**
381 * This method returns the user friendly label based on the document or business object class
382 * @param documentTypeName
383 * @return label
384 */
385 public String getDocumentLabelByClass(Class documentOrBusinessObjectClass);
386
387 /**
388 * Returns the document type name declared in the dd for the given document
389 * class. If no valid document type is found 'null' is returned.
390 *
391 * @param documentClass
392 * @return documentTypeName
393 */
394 public String getDocumentTypeNameByClass(Class documentClass);
395
396 /**
397 * Returns the document type name declared in the dd for the given document
398 * class. If no valid document type is found an
399 * {@link UnknownDocumentTypeException} is thrown.
400 *
401 * @param documentClass
402 * @return documentTypeName
403 */
404 public String getValidDocumentTypeNameByClass(Class documentClass);
405
406 /**
407 * Returns the document class declared in the dd for the given document type
408 * name. If no document entry is found with given document type name, 'null'
409 * will be returned.
410 *
411 * @param documentTypeName
412 * @return document Class
413 */
414 public Class<? extends Document> getDocumentClassByTypeName(String documentTypeName);
415
416 /**
417 * Returns the document class declared in the dd for the given document type
418 * name. If no document entry is found with given document type name, and
419 * {@link UnknownDocumentTypeException} will be thrown.
420 *
421 * @param documentTypeName
422 * @return document Class
423 */
424 public Class<? extends Document> getValidDocumentClassByTypeName(String documentTypeName);
425
426 /**
427 * @param document
428 * @return preRulesCheckClass associated with the given document's type
429 */
430 public Class<? extends PromptBeforeValidation> getPromptBeforeValidationClass(String docTypeName);
431
432 public Map getDataDictionaryMap();
433
434 /**
435 * Returns all of the inactivation blocks registered for a particular business object
436 *
437 * @param inactivationBlockedBusinessObjectClass
438 * @return a set of all registered inactivation blocks for a particular business object
439 */
440 public Set<InactivationBlockingMetadata> getAllInactivationBlockingDefinitions(Class inactivationBlockedBusinessObjectClass);
441 }