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