View Javadoc
1   /*
2    * Copyright 2008 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.ole.sys.document.validation;
17  
18  import java.util.List;
19  import java.util.Map;
20  
21  import org.apache.commons.lang.StringUtils;
22  import org.kuali.ole.sys.document.validation.event.AttributedDocumentEvent;
23  
24  /**
25   * An abstract class that creates an easy way to branch between validations.  Basically,
26   * extenders set a branch map - a map where the key is the name of the branch and the value
27   * is the validation to perform to check on that branch.  Extenders also implement the
28   * determineBranch method, which returns the name of the branch to validate against;
29   * if null is returned, then no validation will occur.
30   */
31  public abstract class BranchingValidation extends ParameterizedValidation implements Validation {
32      protected Map<String, Validation> branchMap;
33      protected List<ValidationFieldConvertible> parameterProperties;
34      protected boolean shouldQuitOnFail = false;
35  
36      /**
37       * Determines which branch, if any, within the branchMap should be used as the validation to take.
38       * @param event the event which triggered this validation
39       * @return the name of the branch to take, or a null or empty string to not take any branch and simply pass validation as true
40       */
41      protected abstract String determineBranch(AttributedDocumentEvent event);
42      
43      /**
44       * Note: these parameter properties only help determine what branching should take place; these properties will not affect in anyway the branch children
45       * @see org.kuali.ole.sys.document.validation.Validation#getParameterProperties()
46       */
47      public List<ValidationFieldConvertible> getParameterProperties() {
48          return this.parameterProperties;
49      }
50  
51      /**
52       * Sets the parameterProperties attribute value.
53       * @param parameterProperties The parameterProperties to set.
54       */
55      public void setParameterProperties(List<ValidationFieldConvertible> parameterProperties) {
56          this.parameterProperties = parameterProperties;
57      }
58  
59      /**
60       * @see org.kuali.ole.sys.document.validation.Validation#shouldQuitOnFail()
61       */
62      public boolean shouldQuitOnFail() {
63          return shouldQuitOnFail;
64      }
65  
66      /**
67       * Sets the shouldQuitOnFail attribute value.
68       * @param shouldQuitOnFail The shouldQuitOnFail to set.
69       */
70      public void setShouldQuitOnFail(boolean shouldQuitOnFail) {
71          this.shouldQuitOnFail = shouldQuitOnFail;
72      }
73  
74      /**
75       * 
76       * @see org.kuali.ole.sys.document.validation.Validation#stageValidation(org.kuali.ole.sys.document.validation.event.AttributedDocumentEvent)
77       */
78      public boolean stageValidation(AttributedDocumentEvent event) {
79          populateParametersFromEvent(event);
80          return validate(event);
81      }
82  
83      /**
84       * Using the branch name returned by determineBranch(), validates the event against the corresponding
85       * branch in the branch map.  If a null or empty string is returned from determineBrach(), this method
86       * simply returns true; if there is no validation in the branchMap for the given name, an IllegalStateException
87       * is thrown.
88       * @see org.kuali.ole.sys.document.validation.Validation#validate(org.kuali.ole.sys.document.validation.event.AttributedDocumentEvent)
89       */
90      public boolean validate(AttributedDocumentEvent event) {
91          String branchName = determineBranch(event);
92          if (!StringUtils.isBlank(branchName)) {
93              Validation validation = branchMap.get(branchName);
94              if (validation == null) {
95                  throw new IllegalStateException("Branching Validation "+this.getClass().getName()+" cannot find a branch named "+branchName);
96              }
97              return validation.stageValidation(event);
98          } else {
99              return true;
100         }
101     }
102 
103     /**
104      * Gets the branchMap attribute. 
105      * @return Returns the branchMap.
106      */
107     public Map<String, Validation> getBranchMap() {
108         return branchMap;
109     }
110 
111     /**
112      * Sets the branchMap attribute value.
113      * @param branchMap The branchMap to set.
114      */
115     public void setBranchMap(Map<String, Validation> branchMap) {
116         this.branchMap = branchMap;
117     }
118 
119 }