001 /** 002 * Copyright 2005-2012 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 */ 016 package org.kuali.rice.krad.service; 017 018 import org.kuali.rice.core.web.format.Formatter; 019 import org.kuali.rice.krad.bo.BusinessObject; 020 import org.kuali.rice.krad.datadictionary.AttributeDefinition; 021 import org.kuali.rice.krad.datadictionary.AttributeSecurity; 022 import org.kuali.rice.krad.datadictionary.DataDictionary; 023 import org.kuali.rice.krad.datadictionary.InactivationBlockingMetadata; 024 import org.kuali.rice.krad.datadictionary.control.ControlDefinition; 025 import org.kuali.rice.krad.datadictionary.exception.UnknownDocumentTypeException; 026 import org.kuali.rice.krad.document.Document; 027 import org.kuali.rice.krad.keyvalues.KeyValuesFinder; 028 import org.kuali.rice.krad.uif.view.View; 029 import org.kuali.rice.krad.uif.UifConstants.ViewType; 030 031 import java.io.IOException; 032 import java.util.List; 033 import java.util.Map; 034 import java.util.Set; 035 import java.util.regex.Pattern; 036 037 /** 038 * Defines the API for interacting with the data dictionary 039 * 040 * @author Kuali Rice Team (rice.collab@kuali.org) 041 */ 042 public interface DataDictionaryService { 043 044 /** 045 * Sequentially adds each package named (as a String) in the given List as a source of unique entries to the DataDictionary 046 * being constructed. Duplicate entries among any of the XML files in any of these packages will result in exceptions being 047 * thrown, hence service-initialization failure. 048 * 049 * @param baselinePackages 050 * @throws SourceException if any of the given packages can't be located 051 */ 052 public void setBaselinePackages(List baselinePackages) throws IOException; 053 054 /** 055 * @return current DataDictionary 056 */ 057 public DataDictionary getDataDictionary(); 058 059 public void addDataDictionaryLocations(List<String> locations) throws IOException; 060 061 // /** 062 // * Hook to allow the dataDictionary service to perform any post-build initialization tasks needed before the dataDictionary 063 // * itself will be publicly available. 064 // */ 065 // public void completeInitialization(); 066 067 /** 068 * the html control type used to render the field 069 */ 070 public ControlDefinition getAttributeControlDefinition(Class dataObjectClass, String attributeName); 071 072 /** 073 * the display size of the field if text control 074 */ 075 public Integer getAttributeSize(Class dataObjectClass, String attributeName); 076 077 /** 078 * the max length defined for the given attribute name. 079 */ 080 public Integer getAttributeMaxLength(Class dataObjectClass, String attributeName); 081 082 /** 083 * the regular expression defined to validate the given attribute name. 084 */ 085 public Pattern getAttributeValidatingExpression(Class dataObjectClass, String attributeName); 086 087 /** 088 * the label to be used for displaying the attribute. 089 */ 090 public String getAttributeLabel(Class dataObjectClass, String attributeName); 091 092 /** 093 * the short label to be used for displaying the attribute. 094 */ 095 public String getAttributeShortLabel(Class dataObjectClass, String attributeName); 096 097 /** 098 * the "label (short label)" used for displaying error messages 099 */ 100 public String getAttributeErrorLabel(Class dataObjectClass, String attributeName); 101 102 /** 103 * the formatter class used to format the attribute value 104 */ 105 public Class<? extends Formatter> getAttributeFormatter(Class dataObjectClass, String attributeName); 106 107 /** 108 * indicates whether or not to force input text into uppercase 109 */ 110 public Boolean getAttributeForceUppercase(Class dataObjectClass, String attributeName); 111 112 /** 113 * short help text for attribute 114 */ 115 public String getAttributeSummary(Class dataObjectClass, String attributeName); 116 117 /** 118 * detailed help text for attribute 119 */ 120 public String getAttributeDescription(Class dataObjectClass, String attributeName); 121 122 /** 123 * indicates whether or not the named attribute is required 124 */ 125 public Boolean isAttributeRequired(Class dataObjectClass, String attributeName); 126 127 /** 128 * indicates whether or not the named attribute is defined in the business object xml 129 */ 130 public Boolean isAttributeDefined(Class dataObjectClass, String attributeName); 131 132 /** 133 * the Class that returns a values list for this attribute 134 */ 135 public Class<? extends KeyValuesFinder> getAttributeValuesFinderClass(Class dataObjectClass, String attributeName); 136 137 /** 138 * the label to be used for displaying the collection. 139 */ 140 public String getCollectionLabel(Class dataObjectClass, String collectionName); 141 142 /** 143 * the short label to be used for displaying the collection. 144 */ 145 public String getCollectionShortLabel(Class dataObjectClass, String collectionName); 146 147 /** 148 * short help text for collection 149 */ 150 public String getCollectionSummary(Class dataObjectClass, String collectionName); 151 152 /** 153 * detailed help text for collection 154 */ 155 public String getCollectionDescription(Class dataObjectClass, String collectionName); 156 157 /** 158 * the html control type used to render the field 159 */ 160 public ControlDefinition getAttributeControlDefinition(String entryName, String attributeName); 161 162 /** 163 * the display size of the field if text control 164 */ 165 public Integer getAttributeSize(String entryName, String attributeName); 166 167 /** 168 * the min length defined for the given attribute name. 169 */ 170 public Integer getAttributeMinLength(String entryName, String attributeName); 171 172 /** 173 * the max length defined for the given attribute name. 174 */ 175 public Integer getAttributeMaxLength(String entryName, String attributeName); 176 177 /** 178 * @param entryName 179 * @param attributeName 180 * @return the exclusive minimum for the specified attribute, or <code>null</code> if none. 181 */ 182 public /*BigDecimal*/ String getAttributeExclusiveMin(String entryName, String attributeName); 183 184 /** 185 * @param entryName 186 * @param attributeName 187 * @return the inclusive maximum for the specified attribute, or <code>null</code> if none. 188 */ 189 public /*BigDecimal*/ String getAttributeInclusiveMax(String entryName, String attributeName); 190 191 /** 192 * the regular expression defined to validate the given attribute name. 193 */ 194 public Pattern getAttributeValidatingExpression(String entryName, String attributeName); 195 196 /** 197 * the label to be used for displaying the attribute. 198 */ 199 public String getAttributeLabel(String entryName, String attributeName); 200 201 /** 202 * the short label to be used for displaying the attribute. 203 */ 204 public String getAttributeShortLabel(String entryName, String attributeName); 205 206 /** 207 * the "label (short label)" used for displaying error messages 208 */ 209 public String getAttributeErrorLabel(String entryName, String attributeName); 210 211 /** 212 * the formatter class used to format the attribute value 213 */ 214 public Class<? extends Formatter> getAttributeFormatter(String entryName, String attributeName); 215 216 /** 217 * indicates whether or not to force input text into uppercase 218 */ 219 public Boolean getAttributeForceUppercase(String entryName, String attributeName); 220 221 /** 222 * the AttributeSecurity object defined for the attribute's data value 223 */ 224 public AttributeSecurity getAttributeSecurity(String entryName, String attributeName); 225 226 /** 227 * short help text for attribute 228 */ 229 public String getAttributeSummary(String entryName, String attributeName); 230 231 /** 232 * detailed help text for attribute 233 */ 234 public String getAttributeDescription(String entryName, String attributeName); 235 236 public String getAttributeValidatingErrorMessageKey(String entryName, String attributeName); 237 238 public String[] getAttributeValidatingErrorMessageParameters(String entryName, String attributeName); 239 240 /** 241 * indicates whether or not the named attribute is required 242 */ 243 public Boolean isAttributeRequired(String entryName, String attributeName); 244 245 /** 246 * indicates whether or not the named attribute is defined in the business object xml 247 */ 248 public Boolean isAttributeDefined(String entryName, String attributeName); 249 250 /** 251 * the Class that returns a values list for this attribute 252 */ 253 public Class<? extends KeyValuesFinder> getAttributeValuesFinderClass(String entryName, String attributeName); 254 255 /** 256 * AttributeDefinition associated with the given attributeName within the given entry 257 */ 258 public AttributeDefinition getAttributeDefinition(String entryName, String attributeName); 259 260 /** 261 * the label to be used for displaying the collection. 262 */ 263 public String getCollectionLabel(String entryName, String collectionName); 264 265 /** 266 * the short label to be used for displaying the collection. 267 */ 268 public String getCollectionShortLabel(String entryName, String collectionName); 269 270 /** 271 * the element label to be used for displaying the collection. 272 */ 273 public String getCollectionElementLabel(String entryName, String collectionName, Class dataObjectClass); 274 275 /** 276 * short help text for collection 277 */ 278 public String getCollectionSummary(String entryName, String collectionName); 279 280 /** 281 * detailed help text for collection 282 */ 283 public String getCollectionDescription(String entryName, String collectionName); 284 285 /** 286 * @param entryName 287 * @param relationshipName 288 * @return source Class for the given relationship, or null if there is no relationship with that name 289 */ 290 public Class<? extends BusinessObject> getRelationshipSourceClass(String entryName, String relationshipName); 291 292 /** 293 * @param entryName 294 * @param relationshipName 295 * @return target Class for the given relationship, or null if there is no relationship with that name 296 */ 297 public Class<? extends BusinessObject> getRelationshipTargetClass(String entryName, String relationshipName); 298 299 /** 300 * @param entryName 301 * @param relationshipName 302 * @return List<String> of source attributeNames for the given relationship, or null if there is no relationship with that name 303 */ 304 public List<String> getRelationshipSourceAttributes(String entryName, String relationshipName); 305 306 /** 307 * @param entryName 308 * @param relationshipName 309 * @return List<String> of target attributeNames for the given relationship, or null if there is no relationship with that name 310 */ 311 public List<String> getRelationshipTargetAttributes(String entryName, String relationshipName); 312 313 /** 314 * returns a Map that specifies the attributes of the relationship 315 * 316 * @param entryName - Name of the Business Object entry 317 * @param relationshipName - Name of the relationship 318 * @return Map - Target field as key, source field as value 319 */ 320 public Map<String, String> getRelationshipAttributeMap(String entryName, String relationshipName); 321 322 /** 323 * returns a list of names for all entries whose source parameter matches the parameter 324 * 325 * @param entryName Name of the Business Object entry 326 * @param sourceAttributeName name of the source attribute 327 * @return the names of all entries that use the sourceAttributeName as a primitive attribute 328 */ 329 public List<String> getRelationshipEntriesForSourceAttribute(String entryName, String sourceAttributeName); 330 331 /** 332 * returns a list of names for all entries whose source parameter matches the parameter 333 * 334 * @param entryName Name of the Business Object entry 335 * @param targetAttributeName name of the target attribute 336 * @return the names of all entries that use the targetAttributeName as a primitive attribute 337 */ 338 public List<String> getRelationshipEntriesForTargetAttribute(String entryName, String targetAttributeName); 339 340 /** 341 * Determines whether there is a relationship defined for the given entry with the given name 342 * 343 * @param entryName name of the BO entry 344 * @param relationshipName name of the relationship for the entry 345 * @return true iff there is a relationship with the given name defined for the BO entry in the DD 346 */ 347 public boolean hasRelationship(String entryName, String relationshipName); 348 349 /** 350 * Returns all of the relationships defined for a BO in the DD 351 * 352 * @param name of the BO entry 353 * @return a list of all DD defined mappings 354 */ 355 public List<String> getRelationshipNames(String entryName); 356 357 // /** 358 // * Returns the list of document class names 359 // * 360 // * @return 361 // */ 362 // public List getDocumentObjectClassnames(); 363 364 /** 365 * This method returns the user friendly label based on the workflow doc type name 366 * 367 * @param documentTypeName 368 * @return label 369 */ 370 public String getDocumentLabelByTypeName(String documentTypeName); 371 372 /** 373 * This method returns the user friendly label based on the document or business object class 374 * 375 * @param documentTypeName 376 * @return label 377 */ 378 public String getDocumentLabelByClass(Class documentOrBusinessObjectClass); 379 380 /** 381 * Returns the document type name declared in the dd for the given document 382 * class. If no valid document type is found 'null' is returned. 383 * 384 * @param documentClass 385 * @return documentTypeName 386 */ 387 public String getDocumentTypeNameByClass(Class documentClass); 388 389 /** 390 * Returns the document type name declared in the dd for the given document 391 * class. If no valid document type is found an 392 * {@link UnknownDocumentTypeException} is thrown. 393 * 394 * @param documentClass 395 * @return documentTypeName 396 */ 397 public String getValidDocumentTypeNameByClass(Class documentClass); 398 399 /** 400 * Returns the document class declared in the dd for the given document type 401 * name. If no document entry is found with given document type name, 'null' 402 * will be returned. 403 * 404 * @param documentTypeName 405 * @return document Class 406 */ 407 public Class<? extends Document> getDocumentClassByTypeName(String documentTypeName); 408 409 /** 410 * Returns the document class declared in the dd for the given document type 411 * name. If no document entry is found with given document type name, and 412 * {@link UnknownDocumentTypeException} will be thrown. 413 * 414 * @param documentTypeName 415 * @return document Class 416 */ 417 public Class<? extends Document> getValidDocumentClassByTypeName(String documentTypeName); 418 419 /** 420 * Returns the list of attributes that should be used for grouping when determining the current 421 * status of a business object that implements InactivateableFromTo 422 * 423 * @param businessObjectClass - business object class to get configured list for 424 * @return List of string attribute names that gives the group by list 425 */ 426 public List<String> getGroupByAttributesForEffectiveDating(Class businessObjectClass); 427 428 /** 429 * Returns all of the inactivation blocks registered for a particular business object 430 * 431 * @param inactivationBlockedBusinessObjectClass 432 * @return a set of all registered inactivation blocks for a particular business object 433 */ 434 public Set<InactivationBlockingMetadata> getAllInactivationBlockingDefinitions( 435 Class inactivationBlockedBusinessObjectClass); 436 437 /** 438 * Returns the View entry identified by the given id 439 * 440 * @param viewId - unique id for view 441 * @return View instance associated with the id 442 */ 443 public View getViewById(String viewId); 444 445 /** 446 * Returns an object from the dictionary by its spring bean name or id 447 * 448 * @param id - id or name for the bean definition 449 * @return Object object instance created or the singleton being maintained 450 */ 451 public Object getDictionaryObject(String id); 452 453 /** 454 * Indicates whether the data dictionary contains a bean with the given id 455 * 456 * @param id - id of the bean to check for 457 * @return boolean true if dictionary contains bean, false otherwise 458 */ 459 public boolean containsDictionaryObject(String id); 460 461 /** 462 * Returns View instance identified by the view type name and index 463 * 464 * @param viewTypeName - type name for the view 465 * @param indexKey - Map of index key parameters, these are the parameters the 466 * indexer used to index the view initially and needs to identify 467 * an unique view instance 468 * @return View instance that matches the given index 469 */ 470 public View getViewByTypeIndex(ViewType viewTypeName, Map<String, String> indexKey); 471 }