Coverage Report - org.kuali.rice.kns.service.DictionaryValidationService
 
Classes in this File Line Coverage Branch Coverage Complexity
DictionaryValidationService
N/A
N/A
1
 
 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.beans.PropertyDescriptor;
 19  
 
 20  
 import org.kuali.rice.kns.bo.BusinessObject;
 21  
 import org.kuali.rice.kns.datadictionary.ApcRuleDefinition;
 22  
 import org.kuali.rice.kns.datadictionary.ReferenceDefinition;
 23  
 import org.kuali.rice.kns.document.Document;
 24  
 import org.kuali.rice.kns.document.TransactionalDocument;
 25  
 
 26  
 
 27  
 /**
 28  
  * Defines the API for the validating against the data dictionary.
 29  
  * 
 30  
  * 
 31  
  */
 32  
 public interface DictionaryValidationService {
 33  
 
 34  
     /**
 35  
      * Validates the contents of a document (i.e. attributes within a document) against the data dictionary.
 36  
      * 
 37  
      * @param document - document to validate
 38  
      */
 39  
     public void validateDocument(Document document);
 40  
 
 41  
     /**
 42  
      * Validates the contents of a document (i.e. attributes within a document) against the data dictionary. Recursively checks
 43  
      * business objects of the document.
 44  
      * 
 45  
      * @param document - document to validate
 46  
      * @param depth - Specify how deep the recrusion should go (0 based). If a negative number is supplied, it's infinite.
 47  
      * 
 48  
      * @deprecated Use {@link #validateDocumentAndUpdatableReferencesRecursively(Document, int, boolean)}
 49  
      */
 50  
     @Deprecated
 51  
     public void validateDocumentRecursively(Document document, int depth);
 52  
 
 53  
     /**
 54  
      * Validates the contents of a document and recursively validates any of its updatable references
 55  
      * 
 56  
      * @param document the document
 57  
      * @param maxDepth the maximum numbers of levels to recurse
 58  
      * @param validateRequired whether to validate whether a field is required and is currently blank
 59  
      */
 60  
     public void validateDocumentAndUpdatableReferencesRecursively(Document document, int maxDepth, boolean validateRequired);
 61  
     
 62  
     /**
 63  
      * Validates the contents of a document and recursively validates any of its updatable references
 64  
      * 
 65  
      * @param document the document
 66  
      * @param maxDepth the maximum numbers of levels to recurse
 67  
      * @param validateRequired whether to validate whether a field is required and is currently blank
 68  
      * @param chompLastLetterSFromCollectionName if true, the error path for any collections encountered will have the last "s" removed from the collection name if it ends
 69  
      * with the letter "s".  If false, this method acts like {@link #validateDocumentAndUpdatableReferencesRecursively(Document, int, boolean)}
 70  
      */
 71  
     public void validateDocumentAndUpdatableReferencesRecursively(Document document, int maxDepth, boolean validateRequired, boolean chompLastLetterSFromCollectionName);
 72  
 
 73  
     /**
 74  
      * Validates the specified attribute of the given document against the data dictionary.
 75  
      * 
 76  
      * @param document
 77  
      * @param attributeName
 78  
      * @param errorPrefix
 79  
      */
 80  
     public void validateDocumentAttribute(Document document, String attributeName, String errorPrefix);
 81  
 
 82  
 
 83  
     /**
 84  
      * Validates the business object primitive attributes against the data dictionary. Adds errors to the map as they are
 85  
      * encountered.
 86  
      * 
 87  
      * @param businessObject - business object to validate
 88  
      */
 89  
     public void validateBusinessObject(BusinessObject businessObject);
 90  
 
 91  
     /**
 92  
      * Validates the business object primitive attributes against the data dictionary. Adds errors to the map as they are
 93  
      * encountered.
 94  
      * 
 95  
      * @param businessObject - business object to validate
 96  
      * @param validateRequired - whether to execute required field checks
 97  
      */
 98  
     public void validateBusinessObject(BusinessObject businessObject, boolean validateRequired);
 99  
     
 100  
     public void validateBusinessObjectOnMaintenanceDocument(BusinessObject businessObject, String docTypeName);
 101  
     
 102  
     /**
 103  
      * Encapsulates <code>{@link #validateBusinessObject(BusinessObject) and returns boolean so one doesn't need to check the 
 104  
      * ErrorMap.Validates the business object primitive attributes against the data dictionary. Adds errors to the map as they are
 105  
      * encountered.<br/>
 106  
      * <br/>
 107  
      * Makes no error path adjustments
 108  
      * 
 109  
      * @param businessObject - business object to validate
 110  
      * @return boolean validOrNot
 111  
      */
 112  
     public boolean isBusinessObjectValid(BusinessObject businessObject);
 113  
 
 114  
     /**
 115  
      * Encapsulates <code>{@link #validateBusinessObject(BusinessObject) and returns boolean so one doesn't need to check the 
 116  
      * ErrorMap.Validates the business object primitive attributes against the data dictionary. Adds errors to the map as they are
 117  
      * encountered.<br/>
 118  
      * <br/>
 119  
      * Makes no error path adjustments
 120  
      * 
 121  
      * @param businessObject - business object to validate
 122  
      * @param prefix - error prefix
 123  
      * @return boolean valid or not
 124  
      */
 125  
     public boolean isBusinessObjectValid(BusinessObject businessObject, String prefix);
 126  
 
 127  
     /**
 128  
      * Validates the business object against the dictionary, uses reflection to get any child business objects, and recursively
 129  
      * calls back. Adds errors to the map as they are encountered.
 130  
      * 
 131  
      * @param businessObject - business object to validate
 132  
      * @param depth - Specify how deep the recrusion should go (0 based). If a negative number is supplied, it's infinite.
 133  
      */
 134  
     public void validateBusinessObjectsRecursively(BusinessObject businessObject, int depth);
 135  
 
 136  
     /**
 137  
      * Validates an attribute of a given class for proper min, max length, syntax, and required.
 138  
      * 
 139  
      * @param entryName - name of the dd entry
 140  
      * @param attributeName - name of attribute in the bo class
 141  
      * @param attributeValue - current value to validate
 142  
      * @param errorKey - key to place the errors under
 143  
      */
 144  
     public void validateAttributeFormat(String entryName, String attributeName, String attributeValue, String errorKey);
 145  
 
 146  
     /**
 147  
      * Validates an attribute of a given class for proper min, max length, syntax, and required. The attribute will be validated
 148  
      * according to the specified data type.
 149  
      * 
 150  
      * @param entryName - name of the dd entry
 151  
      * @param attributeName - name of attribute in the bo class
 152  
      * @param attributeValue - current value to validate 
 153  
      * @param attributeDataType - data type that this attribute should be treated as for validation purposes
 154  
      * @param errorKey - key to place the errors under
 155  
      */
 156  
     public void validateAttributeFormat(String entryName, String attributeName, String attributeValue, String attributeDataType, String errorKey);
 157  
 
 158  
     /**
 159  
      * Validates an attribute of a given class for required check.
 160  
      * 
 161  
      * @param entryName - name of the dd entry
 162  
      * @param attributeName - name of attribute in the bo class
 163  
      * @param attributeValue - current value to validate
 164  
      * @param errorKey - key to place to errors under
 165  
      */
 166  
     public void validateAttributeRequired(String entryName, String attributeName, Object attributeValue, Boolean forMaintenance, String errorKey);
 167  
 
 168  
     /**
 169  
      * 
 170  
      * This method examines the populated BusinessObject bo instance passed in for a member named by the referenceName. If this
 171  
      * member exists, and if this member is a descendent of BusinessObject, then an existence check proceeds.
 172  
      * 
 173  
      * First the foreign keys for this reference are gathered, and then examined to see if they have values. If they do not have
 174  
      * values, the method ends with a true return value. If they all have values, then an object with those primary keys is retrieve
 175  
      * from the database. If one is retrieve, then the reference exists, and True is returned. Otherwise, false is returned.
 176  
      * 
 177  
      * This method assumes that you already have the errorPath set exactly as desired, and adds new errors to the errorMap with no
 178  
      * prefix, other than what has already been pushed onto the errorMap.
 179  
      * 
 180  
      * @param bo - The bo whose reference is being tested.
 181  
      * @param reference - The ReferenceDefinition to be existence tested.
 182  
      * @return True if no exceptions occur and the object exists in the db, false otherwise.
 183  
      * 
 184  
      */
 185  
     public boolean validateReferenceExists(BusinessObject bo, ReferenceDefinition reference);
 186  
 
 187  
     /**
 188  
      * 
 189  
      * This method examines the populated BusinessObject bo instance passed in for a member named by the referenceName. If this
 190  
      * member exists, and if this member is a descendent of BusinessObject, then an existence check proceeds.
 191  
      * 
 192  
      * First the foreign keys for this reference are gathered, and then examined to see if they have values. If they do not have
 193  
      * values, the method ends with a true return value. If they all have values, then an object with those primary keys is retrieve
 194  
      * from the database. If one is retrieve, then the reference exists, and True is returned. Otherwise, false is returned.
 195  
      * 
 196  
      * This method assumes that you already have the errorPath set exactly as desired, and adds new errors to the errorMap with no
 197  
      * prefix, other than what has already been pushed onto the errorMap.
 198  
      * 
 199  
      * @param bo - The bo whose reference is being tested.
 200  
      * @param referenceName - The name of the member to be existence tested.
 201  
      * @return True if no exceptions occur and the object exists in the db, false otherwise.
 202  
      * 
 203  
      */
 204  
     public boolean validateReferenceExists(BusinessObject bo, String referenceName);
 205  
 
 206  
     /**
 207  
      * 
 208  
      * This method retrieves the reference from the DB, and then tests whether the object is active.
 209  
      * 
 210  
      * It will return false if there is no activeIndicator field on this object, if the object doesnt exist in the DB, if the field
 211  
      * doesnt exist or cannot be cast as a boolean, if the field value is null, or if the field value is false.
 212  
      * 
 213  
      * It will only return true if the reference bo is present, the field is present, it is a boolean and non-null, and the value is
 214  
      * true.
 215  
      * 
 216  
      * This method assumes that you already have the errorPath set exactly as desired, and adds new errors to the errorMap with no
 217  
      * prefix, other than what has already been pushed onto the errorMap.
 218  
      * 
 219  
      * @param bo
 220  
      * @param reference
 221  
      * @return
 222  
      * 
 223  
      */
 224  
     public boolean validateReferenceIsActive(BusinessObject bo, ReferenceDefinition reference);
 225  
 
 226  
     /**
 227  
      * 
 228  
      * This method retrieves the reference from the DB, and then tests whether the object is active.
 229  
      * 
 230  
      * It will return false if there is no activeIndicator field on this object, if the object doesnt exist in the DB, if the field
 231  
      * doesnt exist or cannot be cast as a boolean, if the field value is null, or if the field value is false.
 232  
      * 
 233  
      * It will only return true if the reference bo is present, the field is present, it is a boolean and non-null, and the value is
 234  
      * true.
 235  
      * 
 236  
      * This method assumes that you already have the errorPath set exactly as desired, and adds new errors to the errorMap with no
 237  
      * prefix, other than what has already been pushed onto the errorMap.
 238  
      * 
 239  
      * @param bo
 240  
      * @param referenceName
 241  
      * @return
 242  
      * 
 243  
      */
 244  
     public boolean validateReferenceIsActive(BusinessObject bo, String referenceName);
 245  
 
 246  
     /**
 247  
      * 
 248  
      * This method intelligently tests the designated reference on the bo for both existence and active status, where appropriate.
 249  
      * 
 250  
      * It will not test anything if the foreign-key fields for the given reference arent filled out with values, and it will not
 251  
      * test active status if the reference doesnt exist.
 252  
      * 
 253  
      * Further, it will only test active status where the correct flag is set.
 254  
      * 
 255  
      * On failures of either sort, it will put the relevant errors into the GlobalVariables errorMap, and return a false. If there
 256  
      * are no failures, or nothing can be tested because the foreign-key fields arent fully filled out, it will return true and add
 257  
      * no errors.
 258  
      * 
 259  
      * This method assumes that you already have the errorPath set exactly as desired, and adds new errors to the errorMap with no
 260  
      * prefix, other than what has already been pushed onto the errorMap.
 261  
      * 
 262  
      * @param bo - the BusinessObject instance to be tested.
 263  
      * @param reference - the ReferenceDefinition to control the nature of the testing.
 264  
      * @return true or false as per the criteria above
 265  
      * 
 266  
      */
 267  
     public boolean validateReferenceExistsAndIsActive(BusinessObject bo, ReferenceDefinition reference);
 268  
 
 269  
     /**
 270  
      * 
 271  
      * This method intelligently tests the designated reference on the bo for both existence and active status, where appropriate.
 272  
      * 
 273  
      * It will not test anything if the foreign-key fields for the given reference arent filled out with values, and it will not
 274  
      * test active status if the reference doesnt exist.
 275  
      * 
 276  
      * Note that it will not fail or raise any error if all of the foreign-keys are filled with a value. If this needs to be tested
 277  
      * (ie, the 'if any field is filled, then all must be filled' rule), you'll have to do that separately.
 278  
      * 
 279  
      * Further, it will only test active status where the correct flag is set.
 280  
      * 
 281  
      * On failures of either sort, it will put the relevant errors into the GlobalVariables errorMap, and return a false. If there
 282  
      * are no failures, or nothing can be tested because the foreign-key fields arent fully filled out, it will return true and add
 283  
      * no errors.
 284  
      * 
 285  
      * This method assumes that you already have the errorPath set exactly as desired, and adds new errors to the errorMap with no
 286  
      * prefix, other than what has already been pushed onto the errorMap.
 287  
      * 
 288  
      * @param bo - the BusinessObject instance to be tested.
 289  
      * @param referenceName - the member name on the bo to be tested for existence and active-state
 290  
      * @param activeIndicatorAttributeName - the name on the class of the referenceName member to indicate active status
 291  
      * @param activeIndicatorReversed - a flag to indicate if the flag means closed or inactive, rather than active
 292  
      * @param activeIndicatorSet - a flag to control whether active state testing happens at all
 293  
      * @param attributeToHighlightOnFail - the fieldName to highlight with the error message on a failure
 294  
      * @param displayFieldName - the human-readable display name of the failed field, to go in the error message
 295  
      * @return true or false as per the criteria above
 296  
      */
 297  
     public boolean validateReferenceExistsAndIsActive(BusinessObject bo, String referenceName, String attributeToHighlightOnFail, String displayFieldName);
 298  
 
 299  
     /**
 300  
      * 
 301  
      * This method does an existence check against all references of a BusinessObject as defined in the MaintenanceDocument.xml file
 302  
      * for that business object.
 303  
      * 
 304  
      * Appropriate errors will also be placed in the GlobalVariables.ErrorMap.
 305  
      * 
 306  
      * This method assumes that you already have the errorPath set exactly as desired, and adds new errors to the errorMap with no
 307  
      * prefix, other than what has already been pushed onto the errorMap.
 308  
      * 
 309  
      * @param bo - BusinessObject instance that should be tested
 310  
      * @return true if all passed existence tests, false if any failed
 311  
      * 
 312  
      */
 313  
     public boolean validateDefaultExistenceChecks(BusinessObject bo);
 314  
     
 315  
         /**
 316  
          * 
 317  
          * Does an existence check against all references configured as a default existence check in the maintenance
 318  
          * document data dictionary file for the given business object
 319  
          * 
 320  
          * Appropriate errors will also be placed in the GlobalVariables.ErrorMap.
 321  
          * 
 322  
          * This method assumes that you already have the errorPath set exactly as desired, and adds new errors to the errorMap with no
 323  
          * prefix, other than what has already been pushed onto the errorMap.
 324  
          * 
 325  
          * @param bo parent business object instance to retrieve default checks for
 326  
          * @param newCollectionItem new collection line to validate
 327  
          * @param collectionName name of the collection in the parent
 328  
          * @return true if all passed existence tests, false if any failed
 329  
          * 
 330  
          */
 331  
         public boolean validateDefaultExistenceChecksForNewCollectionItem(BusinessObject bo, BusinessObject newCollectionItem, String collectionName);
 332  
 
 333  
         /**
 334  
          * 
 335  
          * This method does an existence check against all references of a transactionalDocument
 336  
          * 
 337  
          * Appropriate errors will also be placed in the GlobalVariables.ErrorMap.
 338  
          * 
 339  
          * This method assumes that you already have the errorPath set exactly as desired, and adds new errors to the errorMap with no
 340  
          * prefix, other than what has already been pushed onto the errorMap.
 341  
          * 
 342  
          * @param doc document instance that should be tested
 343  
          * @return true if all passed existence tests, false if any failed
 344  
          * 
 345  
          */
 346  
         public boolean validateDefaultExistenceChecksForTransDoc(TransactionalDocument document);
 347  
         
 348  
         /**
 349  
          * 
 350  
          * This method does an existence check against all references of a transactionalDocument
 351  
          * 
 352  
          * Appropriate errors will also be placed in the GlobalVariables.ErrorMap.
 353  
          * 
 354  
          * This method assumes that you already have the errorPath set exactly as desired, and adds new errors to the errorMap with no
 355  
          * prefix, other than what has already been pushed onto the errorMap.
 356  
          * 
 357  
          * @param doc document instance that should be tested
 358  
          * @param accountingLine that should be tested
 359  
          * @param collectionName that should be tested
 360  
          * @return true if all passed existence tests, false if any failed
 361  
          * 
 362  
          */
 363  
         public boolean validateDefaultExistenceChecksForNewCollectionItem(TransactionalDocument document, BusinessObject accountingLine, String collectionName);
 364  
     
 365  
     /**
 366  
      * 
 367  
      * This method applies a specific rule against the given BusinessObject as defined in the MaintenanceDocument.xml file.
 368  
      * 
 369  
      * Appropriate errors will also be placed in the GlobalVariables.ErrorMap.
 370  
      * 
 371  
      * This method assumes that you already have the errorPath set exactly as desired, and adds new errors to the errorMap with no
 372  
      * prefix, other than what has already been pushed onto the errorMap.
 373  
      * 
 374  
      * @param bo
 375  
      * @param apcRule
 376  
      * @return true if rule passes
 377  
      */
 378  
     public boolean validateApcRule(BusinessObject bo, ApcRuleDefinition apcRule);
 379  
 
 380  
     /**
 381  
      * This method applies all rules against the given BusinessObject as defined in the MaintenanceDocument.xml file.
 382  
      * 
 383  
      * Appropriate errors will also be placed in the GlobalVariables.ErrorMap.
 384  
      * 
 385  
      * This method assumes that you already have the errorPath set exactly as desired, and adds new errors to the errorMap with no
 386  
      * prefix, other than what has already been pushed onto the errorMap.
 387  
      * 
 388  
      * @param bo
 389  
      * @return true if rule passes
 390  
      */
 391  
     public boolean validateApcRules(BusinessObject bo);
 392  
     
 393  
     public void validatePrimitiveFromDescriptor(String entryName, Object object, PropertyDescriptor propertyDescriptor, String errorPrefix, boolean validateRequired);
 394  
 }