001/** 002 * Copyright 2005-2016 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 */ 016package org.kuali.rice.krad.service.impl; 017 018import org.apache.commons.lang.StringUtils; 019import org.apache.log4j.Logger; 020import org.kuali.rice.core.api.config.property.ConfigurationService; 021import org.kuali.rice.core.api.util.ClassLoaderUtils; 022import org.kuali.rice.core.web.format.Formatter; 023import org.kuali.rice.kew.api.KewApiServiceLocator; 024import org.kuali.rice.kew.api.doctype.DocumentType; 025import org.kuali.rice.kew.api.doctype.DocumentTypeService; 026import org.kuali.rice.krad.bo.BusinessObject; 027import org.kuali.rice.krad.datadictionary.AttributeDefinition; 028import org.kuali.rice.krad.datadictionary.AttributeSecurity; 029import org.kuali.rice.krad.datadictionary.BusinessObjectEntry; 030import org.kuali.rice.krad.datadictionary.CollectionDefinition; 031import org.kuali.rice.krad.datadictionary.DataDictionary; 032import org.kuali.rice.krad.datadictionary.DataDictionaryEntryBase; 033import org.kuali.rice.krad.datadictionary.DataObjectEntry; 034import org.kuali.rice.krad.datadictionary.DocumentEntry; 035import org.kuali.rice.krad.datadictionary.InactivationBlockingMetadata; 036import org.kuali.rice.krad.datadictionary.PrimitiveAttributeDefinition; 037import org.kuali.rice.krad.datadictionary.RelationshipDefinition; 038import org.kuali.rice.krad.datadictionary.control.ControlDefinition; 039import org.kuali.rice.krad.datadictionary.exception.UnknownBusinessClassAttributeException; 040import org.kuali.rice.krad.datadictionary.exception.UnknownDocumentTypeException; 041import org.kuali.rice.krad.datadictionary.validation.ValidationPattern; 042import org.kuali.rice.krad.document.Document; 043import org.kuali.rice.krad.keyvalues.KeyValuesFinder; 044import org.kuali.rice.krad.service.DataDictionaryService; 045import org.kuali.rice.krad.service.KualiModuleService; 046import org.kuali.rice.krad.uif.UifConstants; 047import org.kuali.rice.krad.uif.view.View; 048import org.kuali.rice.krad.uif.UifConstants.ViewType; 049 050import java.io.IOException; 051import java.util.ArrayList; 052import java.util.Collections; 053import java.util.HashMap; 054import java.util.Iterator; 055import java.util.List; 056import java.util.Map; 057import java.util.Set; 058import java.util.regex.Pattern; 059 060/** 061 * Service implementation for a DataDictionary. It is a thin wrapper around creating, initializing, and 062 * returning a DataDictionary. This is the default, Kuali delivered implementation 063 * 064 * @author Kuali Rice Team (rice.collab@kuali.org) 065 */ 066public class DataDictionaryServiceImpl implements DataDictionaryService { 067 private static final Logger LOG = Logger.getLogger(DataDictionaryServiceImpl.class); 068 069 private DataDictionary dataDictionary; 070 071 private ConfigurationService kualiConfigurationService; 072 private KualiModuleService kualiModuleService; 073 private volatile DocumentTypeService documentTypeService; 074 075 /** 076 * @see org.kuali.rice.krad.service.DataDictionaryService#setBaselinePackages(java.lang.String) 077 */ 078 public void setBaselinePackages(List baselinePackages) throws IOException { 079 this.addDataDictionaryLocations(baselinePackages); 080 } 081 082 /** 083 * Default constructor. 084 */ 085 public DataDictionaryServiceImpl() { 086 this.dataDictionary = new DataDictionary(); 087 } 088 089 public DataDictionaryServiceImpl(DataDictionary dataDictionary) { 090 this.dataDictionary = dataDictionary; 091 } 092 093 /** 094 * @see org.kuali.rice.krad.service.DataDictionaryService#getDataDictionary() 095 */ 096 public DataDictionary getDataDictionary() { 097 return dataDictionary; 098 } 099 100 /** 101 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeControlDefinition(java.lang.String) 102 */ 103 public ControlDefinition getAttributeControlDefinition(String entryName, String attributeName) { 104 ControlDefinition controlDefinition = null; 105 106 AttributeDefinition attributeDefinition = getAttributeDefinition(entryName, attributeName); 107 if (attributeDefinition != null) { 108 controlDefinition = attributeDefinition.getControl(); 109 } 110 111 return controlDefinition; 112 } 113 114 /** 115 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeSize(java.lang.String) 116 */ 117 public Integer getAttributeSize(String entryName, String attributeName) { 118 Integer size = null; 119 120 AttributeDefinition attributeDefinition = getAttributeDefinition(entryName, attributeName); 121 if (attributeDefinition != null) { 122 ControlDefinition controlDefinition = attributeDefinition.getControl(); 123 if (controlDefinition.isText() || controlDefinition.isCurrency()) { 124 size = controlDefinition.getSize(); 125 } 126 } 127 128 return size; 129 } 130 131 /** 132 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeMinLength(java.lang.String) 133 */ 134 public Integer getAttributeMinLength(String entryName, String attributeName) { 135 Integer minLength = null; 136 137 AttributeDefinition attributeDefinition = getAttributeDefinition(entryName, attributeName); 138 if (attributeDefinition != null) { 139 minLength = attributeDefinition.getMinLength(); 140 } 141 142 return minLength; 143 } 144 145 /** 146 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeMaxLength(java.lang.String) 147 */ 148 public Integer getAttributeMaxLength(String entryName, String attributeName) { 149 Integer maxLength = null; 150 151 AttributeDefinition attributeDefinition = getAttributeDefinition(entryName, attributeName); 152 if (attributeDefinition != null) { 153 maxLength = attributeDefinition.getMaxLength(); 154 } 155 156 return maxLength; 157 } 158 159 /** 160 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeExclusiveMin 161 */ 162 public String getAttributeExclusiveMin(String entryName, String attributeName) { 163 AttributeDefinition attributeDefinition = getAttributeDefinition(entryName, attributeName); 164 return attributeDefinition == null ? null : attributeDefinition.getExclusiveMin(); 165 } 166 167 /** 168 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeInclusiveMax 169 */ 170 public String getAttributeInclusiveMax(String entryName, String attributeName) { 171 AttributeDefinition attributeDefinition = getAttributeDefinition(entryName, attributeName); 172 return attributeDefinition == null ? null : attributeDefinition.getInclusiveMax(); 173 } 174 175 /** 176 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeValidatingExpression(java.lang.String) 177 */ 178 public Pattern getAttributeValidatingExpression(String entryName, String attributeName) { 179 Pattern regex = null; 180 181 AttributeDefinition attributeDefinition = getAttributeDefinition(entryName, attributeName); 182 if (attributeDefinition != null) { 183 if (attributeDefinition.hasValidationPattern()) { 184 regex = attributeDefinition.getValidationPattern().getRegexPattern(); 185 } else { 186 // workaround for existing calls which don't bother checking for null return values 187 regex = Pattern.compile(".*"); 188 } 189 } 190 191 return regex; 192 } 193 194 /** 195 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeLabel(java.lang.String) 196 */ 197 public String getAttributeLabel(String entryName, String attributeName) { 198 String label = ""; 199 200 AttributeDefinition attributeDefinition = getAttributeDefinition(entryName, attributeName); 201 if (attributeDefinition != null) { 202 // KULRICE-4445 prevent NullPointerException by ensuring a label is set 203 label = attributeDefinition.getLabel(); 204 if (!StringUtils.isEmpty(attributeDefinition.getDisplayLabelAttribute())) { 205 attributeDefinition = getAttributeDefinition(entryName, attributeDefinition.getDisplayLabelAttribute()); 206 if (attributeDefinition != null) { 207 label = attributeDefinition.getLabel(); 208 } 209 } 210 } 211 212 return label; 213 } 214 215 /** 216 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeShortLabel(java.lang.String) 217 */ 218 public String getAttributeShortLabel(String entryName, String attributeName) { 219 String shortLabel = ""; 220 221 AttributeDefinition attributeDefinition = getAttributeDefinition(entryName, attributeName); 222 if (attributeDefinition != null) { 223 if (!StringUtils.isEmpty(attributeDefinition.getDisplayLabelAttribute())) { 224 attributeDefinition = getAttributeDefinition(entryName, attributeDefinition.getDisplayLabelAttribute()); 225 if (attributeDefinition != null) { 226 shortLabel = attributeDefinition.getShortLabel(); 227 } 228 } else { 229 shortLabel = attributeDefinition.getShortLabel(); 230 } 231 } 232 233 return shortLabel; 234 } 235 236 /** 237 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeErrorLabel(java.lang.String) 238 */ 239 public String getAttributeErrorLabel(String entryName, String attributeName) { 240 String longAttributeLabel = this.getAttributeLabel(entryName, attributeName); 241 String shortAttributeLabel = this.getAttributeShortLabel(entryName, attributeName); 242 return longAttributeLabel + " (" + shortAttributeLabel + ")"; 243 } 244 245 /** 246 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeFormatter(java.lang.String) 247 */ 248 public Class<? extends Formatter> getAttributeFormatter(String entryName, String attributeName) { 249 Class formatterClass = null; 250 251 AttributeDefinition attributeDefinition = getAttributeDefinition(entryName, attributeName); 252 if (attributeDefinition != null) { 253 if (attributeDefinition.hasFormatterClass()) { 254 formatterClass = ClassLoaderUtils.getClass(attributeDefinition.getFormatterClass()); 255 } 256 } 257 258 return formatterClass; 259 } 260 261 /** 262 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeForceUppercase(java.lang.String) 263 */ 264 public Boolean getAttributeForceUppercase(String entryName, 265 String attributeName) throws UnknownBusinessClassAttributeException { 266 Boolean forceUppercase = null; 267 268 AttributeDefinition attributeDefinition = getAttributeDefinition(entryName, attributeName); 269 if (attributeDefinition == null) { 270 throw new UnknownBusinessClassAttributeException( 271 "Could not find a matching data dictionary business class attribute entry for " + entryName + "." + 272 attributeName); 273 } 274 forceUppercase = attributeDefinition.getForceUppercase(); 275 276 return forceUppercase; 277 } 278 279 /** 280 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeDisplayMask(java.lang.String, java.lang.String) 281 */ 282 public AttributeSecurity getAttributeSecurity(String entryName, String attributeName) { 283 AttributeSecurity attributeSecurity = null; 284 285 AttributeDefinition attributeDefinition = getAttributeDefinition(entryName, attributeName); 286 if (attributeDefinition != null) { 287 attributeSecurity = attributeDefinition.getAttributeSecurity(); 288 } 289 290 return attributeSecurity; 291 } 292 293 /** 294 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeSummary(java.lang.String) 295 */ 296 public String getAttributeSummary(String entryName, String attributeName) { 297 String summary = null; 298 299 AttributeDefinition attributeDefinition = getAttributeDefinition(entryName, attributeName); 300 if (attributeDefinition != null) { 301 summary = attributeDefinition.getSummary(); 302 } 303 304 return summary; 305 } 306 307 /** 308 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeDescription(java.lang.String) 309 */ 310 public String getAttributeDescription(String entryName, String attributeName) { 311 String description = null; 312 313 AttributeDefinition attributeDefinition = getAttributeDefinition(entryName, attributeName); 314 if (attributeDefinition != null) { 315 description = attributeDefinition.getDescription(); 316 } 317 318 return description; 319 } 320 321 /** 322 * @see org.kuali.rice.krad.service.DataDictionaryService#isAttributeRequired(java.lang.Class, java.lang.String) 323 */ 324 public Boolean isAttributeRequired(String entryName, String attributeName) { 325 Boolean required = null; 326 327 AttributeDefinition attributeDefinition = getAttributeDefinition(entryName, attributeName); 328 if (attributeDefinition != null) { 329 required = attributeDefinition.isRequired(); 330 } 331 332 return required; 333 } 334 335 /** 336 * @see org.kuali.rice.krad.service.DataDictionaryService#isAttributeDefined(java.lang.Class, java.lang.String) 337 */ 338 public Boolean isAttributeDefined(String entryName, String attributeName) { 339 boolean isDefined = false; 340 341 AttributeDefinition attributeDefinition = getAttributeDefinition(entryName, attributeName); 342 if (attributeDefinition != null) { 343 isDefined = true; 344 } 345 346 return isDefined; 347 } 348 349 /** 350 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeValuesScopeId(java.lang.Class, 351 * java.lang.String) 352 */ 353 public Class<? extends KeyValuesFinder> getAttributeValuesFinderClass(String entryName, String attributeName) { 354 Class valuesFinderClass = null; 355 356 AttributeDefinition attributeDefinition = getAttributeDefinition(entryName, attributeName); 357 if (attributeDefinition != null) { 358 String valuesFinderClassName = attributeDefinition.getControl().getValuesFinderClass(); 359 valuesFinderClass = ClassLoaderUtils.getClass(valuesFinderClassName); 360 } 361 362 return valuesFinderClass; 363 } 364 365 /** 366 * @see org.kuali.rice.krad.service.DataDictionaryService#getCollectionLabel(java.lang.Class, java.lang.String) 367 */ 368 public String getCollectionLabel(String entryName, String collectionName) { 369 String label = ""; 370 371 CollectionDefinition collectionDefinition = getCollectionDefinition(entryName, collectionName); 372 if (collectionDefinition != null) { 373 label = collectionDefinition.getLabel(); 374 } 375 376 return label; 377 } 378 379 /** 380 * @see org.kuali.rice.krad.service.DataDictionaryService#getCollectionShortLabel(java.lang.Class, java.lang.String) 381 */ 382 public String getCollectionShortLabel(String entryName, String collectionName) { 383 String shortLabel = ""; 384 385 CollectionDefinition collectionDefinition = getCollectionDefinition(entryName, collectionName); 386 if (collectionDefinition != null) { 387 shortLabel = collectionDefinition.getShortLabel(); 388 } 389 390 return shortLabel; 391 } 392 393 /** 394 * @see org.kuali.rice.krad.service.DataDictionaryService#getCollectionElementLabel(java.lang.Class, 395 * java.lang.String) 396 */ 397 public String getCollectionElementLabel(String entryName, String collectionName, Class dataObjectClass) { 398 String elementLabel = ""; 399 400 CollectionDefinition collectionDefinition = getCollectionDefinition(entryName, collectionName); 401 if (collectionDefinition != null) { 402 elementLabel = collectionDefinition.getElementLabel(); 403 if (StringUtils.isEmpty(elementLabel)) { 404 BusinessObjectEntry boe = getDataDictionary().getBusinessObjectEntry(dataObjectClass.getName()); 405 if (boe != null) { 406 elementLabel = boe.getObjectLabel(); 407 } 408 } 409 } 410 411 return elementLabel; 412 } 413 414 /** 415 * @see org.kuali.rice.krad.service.DataDictionaryService#getCollectionSummary(java.lang.Class, java.lang.String) 416 */ 417 public String getCollectionSummary(String entryName, String collectionName) { 418 String summary = null; 419 420 CollectionDefinition collectionDefinition = getCollectionDefinition(entryName, collectionName); 421 if (collectionDefinition != null) { 422 summary = collectionDefinition.getSummary(); 423 } 424 425 return summary; 426 } 427 428 /** 429 * @see org.kuali.rice.krad.service.DataDictionaryService#getCollectionDescription(java.lang.Class, 430 * java.lang.String) 431 */ 432 public String getCollectionDescription(String entryName, String collectionName) { 433 String description = null; 434 435 CollectionDefinition collectionDefinition = getCollectionDefinition(entryName, collectionName); 436 if (collectionDefinition != null) { 437 description = collectionDefinition.getDescription(); 438 } 439 440 return description; 441 } 442 443 public Class<? extends BusinessObject> getRelationshipSourceClass(String entryName, String relationshipName) { 444 Class sourceClass = null; 445 446 RelationshipDefinition rd = getRelationshipDefinition(entryName, relationshipName); 447 if (rd != null) { 448 sourceClass = rd.getSourceClass(); 449 } 450 451 return sourceClass; 452 } 453 454 public Class<? extends BusinessObject> getRelationshipTargetClass(String entryName, String relationshipName) { 455 Class targetClass = null; 456 457 RelationshipDefinition rd = getRelationshipDefinition(entryName, relationshipName); 458 if (rd != null) { 459 targetClass = rd.getTargetClass(); 460 } 461 462 return targetClass; 463 } 464 465 public List<String> getRelationshipSourceAttributes(String entryName, String relationshipName) { 466 List<String> sourceAttributes = null; 467 468 RelationshipDefinition rd = getRelationshipDefinition(entryName, relationshipName); 469 if (rd != null) { 470 sourceAttributes = new ArrayList<String>(); 471 472 for (PrimitiveAttributeDefinition pad : rd.getPrimitiveAttributes()) { 473 sourceAttributes.add(pad.getSourceName()); 474 } 475 } 476 477 return sourceAttributes; 478 } 479 480 public List<String> getRelationshipTargetAttributes(String entryName, String relationshipName) { 481 List<String> targetAttributes = null; 482 483 RelationshipDefinition rd = getRelationshipDefinition(entryName, relationshipName); 484 if (rd != null) { 485 targetAttributes = new ArrayList<String>(); 486 487 for (PrimitiveAttributeDefinition pad : rd.getPrimitiveAttributes()) { 488 targetAttributes.add(pad.getTargetName()); 489 } 490 } 491 492 return targetAttributes; 493 } 494 495 public List<String> getRelationshipEntriesForSourceAttribute(String entryName, String sourceAttributeName) { 496 List<String> relationships = new ArrayList<String>(); 497 498 DataDictionaryEntryBase entry = 499 (DataDictionaryEntryBase) getDataDictionary().getDictionaryObjectEntry(entryName); 500 501 for (RelationshipDefinition def : entry.getRelationships()) { 502 for (PrimitiveAttributeDefinition pddef : def.getPrimitiveAttributes()) { 503 if (StringUtils.equals(sourceAttributeName, pddef.getSourceName())) { 504 relationships.add(def.getObjectAttributeName()); 505 break; 506 } 507 } 508 } 509 return relationships; 510 } 511 512 public List<String> getRelationshipEntriesForTargetAttribute(String entryName, String targetAttributeName) { 513 List<String> relationships = new ArrayList<String>(); 514 515 DataDictionaryEntryBase entry = 516 (DataDictionaryEntryBase) getDataDictionary().getDictionaryObjectEntry(entryName); 517 518 for (RelationshipDefinition def : entry.getRelationships()) { 519 for (PrimitiveAttributeDefinition pddef : def.getPrimitiveAttributes()) { 520 if (StringUtils.equals(targetAttributeName, pddef.getTargetName())) { 521 relationships.add(def.getObjectAttributeName()); 522 break; 523 } 524 } 525 } 526 return relationships; 527 } 528 529 /** 530 * @param objectClass 531 * @param attributeName 532 * @return AttributeDefinition for the given dataObjectClass and attribute name, or null if there is none 533 * @throws IllegalArgumentException if the given Class is null or is not a BusinessObject class 534 */ 535 public AttributeDefinition getAttributeDefinition(String entryName, String attributeName) { 536 if (StringUtils.isBlank(attributeName)) { 537 throw new IllegalArgumentException("invalid (blank) attributeName"); 538 } 539 AttributeDefinition attributeDefinition = null; 540 541 DataDictionaryEntryBase entry = 542 (DataDictionaryEntryBase) getDataDictionary().getDictionaryObjectEntry(entryName); 543 if (entry != null) { 544 attributeDefinition = entry.getAttributeDefinition(attributeName); 545 } 546 547 return attributeDefinition; 548 } 549 550 /** 551 * @param entryName 552 * @param collectionName 553 * @return CollectionDefinition for the given entryName and collectionName, or null if there is none 554 */ 555 private CollectionDefinition getCollectionDefinition(String entryName, String collectionName) { 556 if (StringUtils.isBlank(collectionName)) { 557 throw new IllegalArgumentException("invalid (blank) collectionName"); 558 } 559 CollectionDefinition collectionDefinition = null; 560 561 DataDictionaryEntryBase entry = 562 (DataDictionaryEntryBase) getDataDictionary().getDictionaryObjectEntry(entryName); 563 if (entry != null) { 564 collectionDefinition = entry.getCollectionDefinition(collectionName); 565 } 566 567 return collectionDefinition; 568 } 569 570 /** 571 * @param entryName 572 * @param relationshipName 573 * @return RelationshipDefinition for the given entryName and relationshipName, or null if there is none 574 */ 575 private RelationshipDefinition getRelationshipDefinition(String entryName, String relationshipName) { 576 if (StringUtils.isBlank(relationshipName)) { 577 throw new IllegalArgumentException("invalid (blank) relationshipName"); 578 } 579 580 RelationshipDefinition relationshipDefinition = null; 581 582 DataDictionaryEntryBase entry = 583 (DataDictionaryEntryBase) getDataDictionary().getDictionaryObjectEntry(entryName); 584 if (entry != null) { 585 relationshipDefinition = entry.getRelationshipDefinition(relationshipName); 586 } 587 588 return relationshipDefinition; 589 } 590 591 /** 592 * @see org.kuali.rice.krad.service.DataDictionaryService#getRelationshipAttributeMap(java.lang.String, java.lang.String) 593 */ 594 public Map<String, String> getRelationshipAttributeMap(String entryName, String relationshipName) { 595 Map<String, String> attributeMap = new HashMap<String, String>(); 596 RelationshipDefinition relationshipDefinition = getRelationshipDefinition(entryName, relationshipName); 597 for (Iterator iter = relationshipDefinition.getPrimitiveAttributes().iterator(); iter.hasNext(); ) { 598 PrimitiveAttributeDefinition attribute = (PrimitiveAttributeDefinition) iter.next(); 599 attributeMap.put(attribute.getTargetName(), attribute.getSourceName()); 600 } 601 return attributeMap; 602 } 603 604 public boolean hasRelationship(String entryName, String relationshipName) { 605 return getRelationshipDefinition(entryName, relationshipName) != null; 606 } 607 608 public List<String> getRelationshipNames(String entryName) { 609 DataDictionaryEntryBase entry = 610 (DataDictionaryEntryBase) getDataDictionary().getDictionaryObjectEntry(entryName); 611 612 List<String> relationshipNames = new ArrayList<String>(); 613 for (RelationshipDefinition def : entry.getRelationships()) { 614 relationshipNames.add(def.getObjectAttributeName()); 615 } 616 return relationshipNames; 617 } 618 619 /** 620 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeControlDefinition(java.lang.String, java.lang.String) 621 */ 622 public ControlDefinition getAttributeControlDefinition(Class dataObjectClass, String attributeName) { 623 return getAttributeControlDefinition(dataObjectClass.getName(), attributeName); 624 } 625 626 /** 627 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeDescription(java.lang.String, java.lang.String) 628 */ 629 public String getAttributeDescription(Class dataObjectClass, String attributeName) { 630 return getAttributeDescription(dataObjectClass.getName(), attributeName); 631 } 632 633 /** 634 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeForceUppercase(java.lang.String, java.lang.String) 635 */ 636 public Boolean getAttributeForceUppercase(Class dataObjectClass, String attributeName) { 637 return getAttributeForceUppercase(dataObjectClass.getName(), attributeName); 638 } 639 640 /** 641 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeFormatter(java.lang.String, java.lang.String) 642 */ 643 public Class<? extends Formatter> getAttributeFormatter(Class dataObjectClass, String attributeName) { 644 return getAttributeFormatter(dataObjectClass.getName(), attributeName); 645 } 646 647 /** 648 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeLabel(java.lang.String, java.lang.String) 649 */ 650 public String getAttributeLabel(Class dataObjectClass, String attributeName) { 651 return getAttributeLabel(dataObjectClass.getName(), attributeName); 652 } 653 654 /** 655 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeMaxLength(java.lang.String, java.lang.String) 656 */ 657 public Integer getAttributeMaxLength(Class dataObjectClass, String attributeName) { 658 return getAttributeMaxLength(dataObjectClass.getName(), attributeName); 659 } 660 661 /** 662 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeShortLabel(java.lang.String, java.lang.String) 663 */ 664 public String getAttributeShortLabel(Class dataObjectClass, String attributeName) { 665 return getAttributeShortLabel(dataObjectClass.getName(), attributeName); 666 } 667 668 /** 669 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeErrorLabel(java.lang.String, java.lang.String) 670 */ 671 public String getAttributeErrorLabel(Class dataObjectClass, String attributeName) { 672 return getAttributeErrorLabel(dataObjectClass.getName(), attributeName); 673 } 674 675 /** 676 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeSize(java.lang.String, java.lang.String) 677 */ 678 public Integer getAttributeSize(Class dataObjectClass, String attributeName) { 679 return getAttributeSize(dataObjectClass.getName(), attributeName); 680 } 681 682 /** 683 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeSummary(java.lang.String, java.lang.String) 684 */ 685 public String getAttributeSummary(Class dataObjectClass, String attributeName) { 686 return getAttributeSummary(dataObjectClass.getName(), attributeName); 687 } 688 689 /** 690 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeValidatingExpression(java.lang.String, java.lang.String) 691 */ 692 public Pattern getAttributeValidatingExpression(Class dataObjectClass, String attributeName) { 693 return getAttributeValidatingExpression(dataObjectClass.getName(), attributeName); 694 } 695 696 /** 697 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeValuesFinderClass(java.lang.String, java.lang.String) 698 */ 699 public Class getAttributeValuesFinderClass(Class dataObjectClass, String attributeName) { 700 return getAttributeValuesFinderClass(dataObjectClass.getName(), attributeName); 701 } 702 703 /** 704 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeValidatingErrorMessageKey(java.lang.String, java.lang.String) 705 */ 706 public String getAttributeValidatingErrorMessageKey(String entryName, String attributeName) { 707 AttributeDefinition attributeDefinition = getAttributeDefinition(entryName, attributeName); 708 if (attributeDefinition != null) { 709 if (attributeDefinition.hasValidationPattern()) { 710 ValidationPattern validationPattern = attributeDefinition.getValidationPattern(); 711 return validationPattern.getValidationErrorMessageKey(); 712 } 713 } 714 return null; 715 } 716 717 /** 718 * @see org.kuali.rice.krad.service.DataDictionaryService#getAttributeValidatingErrorMessageParameters(java.lang.String, java.lang.String) 719 */ 720 public String[] getAttributeValidatingErrorMessageParameters(String entryName, String attributeName) { 721 AttributeDefinition attributeDefinition = getAttributeDefinition(entryName, attributeName); 722 if (attributeDefinition != null) { 723 if (attributeDefinition.hasValidationPattern()) { 724 ValidationPattern validationPattern = attributeDefinition.getValidationPattern(); 725 String attributeLabel = getAttributeErrorLabel(entryName, attributeName); 726 return validationPattern.getValidationErrorMessageParameters(attributeLabel); 727 } 728 } 729 return null; 730 } 731 732 /** 733 * @see org.kuali.rice.krad.service.DataDictionaryService#getCollectionDescription(java.lang.String, java.lang.String) 734 */ 735 public String getCollectionDescription(Class dataObjectClass, String collectionName) { 736 return getCollectionDescription(dataObjectClass.getName(), collectionName); 737 } 738 739 /** 740 * @see org.kuali.rice.krad.service.DataDictionaryService#getCollectionLabel(java.lang.String, java.lang.String) 741 */ 742 public String getCollectionLabel(Class dataObjectClass, String collectionName) { 743 return getCollectionLabel(dataObjectClass.getName(), collectionName); 744 } 745 746 /** 747 * @see org.kuali.rice.krad.service.DataDictionaryService#getCollectionShortLabel(java.lang.String, java.lang.String) 748 */ 749 public String getCollectionShortLabel(Class dataObjectClass, String collectionName) { 750 return getCollectionShortLabel(dataObjectClass.getName(), collectionName); 751 } 752 753 /** 754 * @see org.kuali.rice.krad.service.DataDictionaryService#getCollectionSummary(java.lang.String, java.lang.String) 755 */ 756 public String getCollectionSummary(Class dataObjectClass, String collectionName) { 757 return getCollectionSummary(dataObjectClass.getName(), collectionName); 758 } 759 760 /** 761 * @see org.kuali.rice.krad.service.DataDictionaryService#isAttributeDefined(java.lang.String, java.lang.String) 762 */ 763 public Boolean isAttributeDefined(Class dataObjectClass, String attributeName) { 764 return isAttributeDefined(dataObjectClass.getName(), attributeName); 765 } 766 767 /** 768 * @see org.kuali.rice.krad.service.DataDictionaryService#isAttributeRequired(java.lang.String, java.lang.String) 769 */ 770 public Boolean isAttributeRequired(Class dataObjectClass, String attributeName) { 771 return isAttributeRequired(dataObjectClass.getName(), attributeName); 772 } 773 774 /** 775 * @see org.kuali.rice.krad.service.DataDictionaryService#getDocumentLabelByClass(java.lang.Class) 776 */ 777 public String getDocumentLabelByClass(Class documentOrBusinessObjectClass) { 778 return getDocumentLabelByTypeName(getDocumentTypeNameByClass(documentOrBusinessObjectClass)); 779 } 780 781 /** 782 * @see org.kuali.rice.krad.service.DataDictionaryService#getDocumentLabelByTypeName(java.lang.String) 783 */ 784 public String getDocumentLabelByTypeName(String documentTypeName) { 785 String label = null; 786 if (StringUtils.isNotBlank(documentTypeName)) { 787 DocumentType documentType = getDocumentTypeService().getDocumentTypeByName(documentTypeName); 788 if (documentType != null) { 789 label = documentType.getLabel(); 790 } 791 } 792 return label; 793 } 794 795 /** 796 * @see org.kuali.rice.krad.service.DataDictionaryService#getDocumentTypeNameByClass(java.lang.Class) 797 */ 798 public String getDocumentTypeNameByClass(Class documentClass) { 799 if (documentClass == null) { 800 throw new IllegalArgumentException("invalid (null) documentClass"); 801 } 802 if (!Document.class.isAssignableFrom(documentClass)) { 803 throw new IllegalArgumentException("invalid (non-Document) documentClass"); 804 } 805 806 String documentTypeName = null; 807 808 DocumentEntry documentEntry = getDataDictionary().getDocumentEntry(documentClass.getName()); 809 if (documentEntry != null) { 810 documentTypeName = documentEntry.getDocumentTypeName(); 811 } 812 813 return documentTypeName; 814 } 815 816 /** 817 * @see org.kuali.rice.krad.service.DataDictionaryService#getValidDocumentTypeNameByClass(java.lang.Class) 818 */ 819 public String getValidDocumentTypeNameByClass(Class documentClass) { 820 String documentTypeName = getDocumentTypeNameByClass(documentClass); 821 if (StringUtils.isBlank(documentTypeName)) { 822 throw new UnknownDocumentTypeException( 823 "unable to get documentTypeName for unknown documentClass '" + documentClass.getName() + "'"); 824 } 825 return documentTypeName; 826 } 827 828 /** 829 * @see org.kuali.rice.krad.service.DataDictionaryService#getDocumentClassByTypeName(java.lang.String) 830 */ 831 public Class<? extends Document> getDocumentClassByTypeName(String documentTypeName) { 832 Class clazz = null; 833 834 DocumentEntry documentEntry = getDataDictionary().getDocumentEntry(documentTypeName); 835 if (documentEntry != null) { 836 clazz = documentEntry.getDocumentClass(); 837 } 838 839 return clazz; 840 } 841 842 /** 843 * @see org.kuali.rice.krad.service.DataDictionaryService#getValidDocumentClassByTypeName(java.lang.String) 844 */ 845 public Class<? extends Document> getValidDocumentClassByTypeName(String documentTypeName) { 846 Class clazz = getDocumentClassByTypeName(documentTypeName); 847 if (clazz == null) { 848 throw new UnknownDocumentTypeException( 849 "unable to get class for unknown documentTypeName '" + documentTypeName + "'"); 850 } 851 return clazz; 852 } 853 854 /** 855 * @see org.kuali.rice.krad.service.DataDictionaryService#getViewById(java.lang.String) 856 */ 857 public View getViewById(String viewId) { 858 return dataDictionary.getViewById(viewId); 859 } 860 861 /** 862 * @see org.kuali.rice.krad.service.DataDictionaryService#getDictionaryObject(java.lang.String) 863 */ 864 public Object getDictionaryObject(String id) { 865 return dataDictionary.getDictionaryObject(id); 866 } 867 868 /** 869 * @see org.kuali.rice.krad.service.DataDictionaryService#containsDictionaryObject(java.lang.String) 870 */ 871 public boolean containsDictionaryObject(String id) { 872 return dataDictionary.containsDictionaryObject(id); 873 } 874 875 /** 876 * @see org.kuali.rice.krad.service.DataDictionaryService#getViewByTypeIndex(java.lang.String, 877 * java.util.Map) 878 */ 879 public View getViewByTypeIndex(ViewType viewTypeName, Map<String, String> indexKey) { 880 return dataDictionary.getViewByTypeIndex(viewTypeName, indexKey); 881 } 882 883 public void addDataDictionaryLocation(String location) throws IOException { 884 dataDictionary.addConfigFileLocation(location); 885 } 886 887 public void addDataDictionaryLocations(List<String> locations) throws IOException { 888 for (String location : locations) { 889 addDataDictionaryLocation(location); 890 } 891 } 892 893 /** 894 * @see org.kuali.rice.krad.service.DataDictionaryService#getGroupByAttributesForEffectiveDating(java.lang.Class) 895 */ 896 public List<String> getGroupByAttributesForEffectiveDating(Class dataObjectClass) { 897 List<String> groupByList = null; 898 899 DataObjectEntry objectEntry = getDataDictionary().getDataObjectEntry(dataObjectClass.getName()); 900 if (objectEntry != null) { 901 groupByList = objectEntry.getGroupByAttributesForEffectiveDating(); 902 } 903 904 return groupByList; 905 } 906 907 /** 908 * Returns all of the inactivation blocks registered for a particular business object 909 * 910 * @see org.kuali.rice.krad.service.DataDictionaryService#getAllInactivationBlockingDefinitions(java.lang.Class) 911 */ 912 public Set<InactivationBlockingMetadata> getAllInactivationBlockingDefinitions( 913 Class inactivationBlockedBusinessObjectClass) { 914 Set<InactivationBlockingMetadata> blockingClasses = 915 dataDictionary.getAllInactivationBlockingMetadatas(inactivationBlockedBusinessObjectClass); 916 if (blockingClasses == null) { 917 return Collections.emptySet(); 918 } 919 return blockingClasses; 920 } 921 922 public DocumentTypeService getDocumentTypeService() { 923 if (documentTypeService == null) { 924 documentTypeService = KewApiServiceLocator.getDocumentTypeService(); 925 } 926 return documentTypeService; 927 } 928 929 public void setKualiConfigurationService(ConfigurationService kualiConfigurationService) { 930 this.kualiConfigurationService = kualiConfigurationService; 931 } 932 933 public ConfigurationService getKualiConfigurationService() { 934 return kualiConfigurationService; 935 } 936 937 public KualiModuleService getKualiModuleService() { 938 return kualiModuleService; 939 } 940 941 public void setKualiModuleService(KualiModuleService kualiModuleService) { 942 this.kualiModuleService = kualiModuleService; 943 } 944}