You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2010/05/18 04:00:07 UTC

svn commit: r945456 - /myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/ComponentTagHandlerDelegate.java

Author: lu4242
Date: Tue May 18 02:00:07 2010
New Revision: 945456

URL: http://svn.apache.org/viewvc?rev=945456&view=rev
Log:
MYFACES-2288 Implement Bean Validation (cleanup code unnecessary instantiation of HashMap)

Modified:
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/ComponentTagHandlerDelegate.java

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/ComponentTagHandlerDelegate.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/ComponentTagHandlerDelegate.java?rev=945456&r1=945455&r2=945456&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/ComponentTagHandlerDelegate.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/ComponentTagHandlerDelegate.java Tue May 18 02:00:07 2010
@@ -501,14 +501,14 @@ public class ComponentTagHandlerDelegate
     private void addDefaultValidators(FacesContext context, FaceletCompositionContext mctx,
                                       EditableValueHolder component)
     {
-        Application application = context.getApplication();
-        Map<String, String> validators = new HashMap<String, String>();
-        
         // add all defaultValidators
-        Map<String, String> defaultValidators = application.getDefaultValidatorInfo();
+        Map<String, String> defaultValidators = context.getApplication().getDefaultValidatorInfo();
         if (defaultValidators != null && defaultValidators.size() != 0)
         {
-            validators.putAll(defaultValidators);
+            for (Map.Entry<String, String> entry : defaultValidators.entrySet())
+            {
+                addDefaultValidator(context, mctx, component, entry.getKey(), entry.getValue());
+            }
         }
         // add all enclosing validators
         Iterator<String> enclosingValidatorIds = mctx.getEnclosingValidatorIds();
@@ -517,95 +517,89 @@ public class ComponentTagHandlerDelegate
             while (enclosingValidatorIds.hasNext())
             {
                 String validatorId = enclosingValidatorIds.next();
-                if (!validators.containsKey(validatorId))
+                if (!defaultValidators.containsKey(validatorId))
                 {
-                    validators.put(validatorId, null);
+                    addDefaultValidator(context, mctx, component, validatorId, null);
                 }
             }
         }
+    }
+    
+    private void addDefaultValidator(FacesContext context, FaceletCompositionContext mctx,
+            EditableValueHolder component, String validatorId, String validatorClassName)
+    {
+        Validator enclosingValidator = null;
         
-        if (!validators.isEmpty())
+        if (validatorClassName == null)
         {
-            // we have validators to add
-            Set<Map.Entry<String, String>> validatorInfoSet = validators.entrySet();
-            for (Map.Entry<String, String> entry : validatorInfoSet)
+            // we have no class name for validators of enclosing <f:validateBean> tags
+            // --> we have to create it to get the class name
+            // note that normally we can use this instance later anyway!
+            enclosingValidator = context.getApplication().createValidator(validatorId);
+            validatorClassName = enclosingValidator.getClass().getName();
+        }
+        
+        // check if the validator is already registered for the given component
+        // this happens if <f:validateBean /> is nested inside the component on the view
+        Validator validator = null;
+        for (Validator v : component.getValidators())
+        {
+            if (v.getClass().getName().equals(validatorClassName))
             {
-                String validatorId = entry.getKey();
-                String validatorClassName = entry.getValue();
-                Validator enclosingValidator = null;
-                
-                if (validatorClassName == null)
-                {
-                    // we have no class name for validators of enclosing <f:validateBean> tags
-                    // --> we have to create it to get the class name
-                    // note that normally we can use this instance later anyway!
-                    enclosingValidator = application.createValidator(validatorId);
-                    validatorClassName = enclosingValidator.getClass().getName();
-                }
-                
-                // check if the validator is already registered for the given component
-                // this happens if <f:validateBean /> is nested inside the component on the view
-                Validator validator = null;
-                for (Validator v : component.getValidators())
+                // found
+                validator = v;
+                break;
+            }
+        }
+        
+        if (validator == null)
+        {
+            if (shouldAddDefaultValidator(validatorId, context, mctx, component))
+            {
+                if (enclosingValidator != null)
                 {
-                    if (v.getClass().getName().equals(validatorClassName))
-                    {
-                        // found
-                        validator = v;
-                        break;
-                    }
+                    // we can use the instance from before
+                    validator = enclosingValidator;
                 }
-                
-                if (validator == null)
+                else
                 {
-                    if (shouldAddDefaultValidator(validatorId, context, mctx, component))
-                    {
-                        if (enclosingValidator != null)
-                        {
-                            // we can use the instance from before
-                            validator = enclosingValidator;
-                        }
-                        else
-                        {
-                            // create it
-                            validator = application.createValidator(validatorId);
-                        }
-                        // add the validator to the component
-                        component.addValidator(validator);
-                    }
-                    else
-                    {
-                        // no validator instance
-                        continue;
-                    }
+                    // create it
+                    validator = context.getApplication().createValidator(validatorId);
                 }
-                
-                // special things to configure for a BeanValidator
-                if (validator instanceof BeanValidator)
-                {
-                    BeanValidator beanValidator = (BeanValidator) validator;
-                    
-                    // check the validationGroups
-                    String validationGroups =  beanValidator.getValidationGroups();
-                    if (validationGroups == null 
-                            || validationGroups.matches(BeanValidator.EMPTY_VALIDATION_GROUPS_PATTERN))
-                    {
-                        // no validationGroups available
-                        // --> get the validationGroups from the stack
-                        String stackGroup = mctx.getFirstValidationGroupFromStack();
-                        if (stackGroup != null)
-                        {
-                            validationGroups = stackGroup;
-                        }
-                        else
-                        {
-                            // no validationGroups on the stack
-                            // --> set the default validationGroup
-                            validationGroups = javax.validation.groups.Default.class.getName();
-                        }
-                        beanValidator.setValidationGroups(validationGroups);
-                    }
+                // add the validator to the component
+                component.addValidator(validator);
+            }
+            else
+            {
+                // no validator instance
+                return;
+            }
+        }
+        
+        // special things to configure for a BeanValidator
+        if (validator instanceof BeanValidator)
+        {
+            BeanValidator beanValidator = (BeanValidator) validator;
+            
+            // check the validationGroups
+            String validationGroups =  beanValidator.getValidationGroups();
+            if (validationGroups == null 
+                    || validationGroups.matches(BeanValidator.EMPTY_VALIDATION_GROUPS_PATTERN))
+            {
+                // no validationGroups available
+                // --> get the validationGroups from the stack
+                String stackGroup = mctx.getFirstValidationGroupFromStack();
+                if (stackGroup != null)
+                {
+                    validationGroups = stackGroup;
+                }
+                else
+                {
+                    // no validationGroups on the stack
+                    // --> set the default validationGroup
+                    validationGroups = javax.validation.groups.Default.class.getName();
                 }
+                beanValidator.setValidationGroups(validationGroups);
             }
         }
     }