View Javadoc
1   package org.kuali.student.r2.common.validator;
2   
3   import org.slf4j.Logger;
4   import org.slf4j.LoggerFactory;
5   
6   import java.util.ArrayList;
7   import java.util.HashMap;
8   import java.util.List;
9   import java.util.Map;
10  
11  /**
12   * ValidatorFactory provides a mechanism to 
13   *  
14   * 
15   * @author Kuali Rice Team (kuali-rice@googlegroups.com)
16   *
17   */
18  
19  // This class is a special case, this class/equivelent doesn't exist in R2 
20  //packages and is a common and has methods used in both R1 and R2 packages, 
21  //this class was duplicated to R2 and modified to work with R2 services
22  //BaseAbstractValidator, BaseAbstractValidator, Validator, ValidatorFactory
23  
24  public class ValidatorFactory {
25  	private static final Logger LOG = LoggerFactory.getLogger(ValidatorFactory.class);
26  	private volatile Map<String,Validator> customValidators = null; 
27  	private DefaultValidatorImpl defaultValidator = new DefaultValidatorImpl();
28  	
29  	private List<Validator> validatorList = new ArrayList<Validator>();
30  	
31  	public ValidatorFactory(){
32  		defaultValidator.setValidatorFactory(this);
33  	}
34  	
35  	/**
36  	 * Updated to fix double check lock not working
37  	 * @return
38  	 */
39  	public Map<String,Validator> getCustomValidators(){
40  		Map<String,Validator> result = customValidators;
41  	    if(result == null) {
42  	    	synchronized (this) {
43  	    		result = customValidators;
44  	    		if(result == null){
45  	    	        result = new HashMap<String, Validator>();
46  	    	        for(Validator validator: validatorList){
47  	    	            String validatorName = validator.getClass().getName();
48  	    	            result.put(validatorName, validator);
49  	    	        }
50  	    			customValidators = result;
51  	    		}
52  			}
53  	    }
54  	    return result;
55  	}
56  	
57  	
58  	public Validator getValidator(String customValidator) {
59  	
60  		LOG.info("Retrieving validatior: {}", customValidator);
61  	    
62  	    Validator v = getCustomValidators().get(customValidator); 
63  	    
64  	    if(v != null && v instanceof BaseAbstractValidator) {
65  	        BaseAbstractValidator bv = (BaseAbstractValidator)v;
66  	        bv.setValidatorFactory(this);
67  	        return bv;
68  	    } else {
69  	       return v;
70  	    }
71  	}
72  	
73  	public Validator getValidator(){
74  		return defaultValidator;
75  	}
76  	
77  	public DefaultValidatorImpl getDefaultValidator() {
78  		return defaultValidator;
79  	}
80  
81  	public void setDefaultValidator(DefaultValidatorImpl defaultValidator) {
82  		this.defaultValidator = defaultValidator;
83  		this.defaultValidator.setValidatorFactory(this);
84  	}
85  
86      public void setValidatorList(List<Validator> validatorList) {
87          this.validatorList = validatorList;
88      }
89  }