Repository: deltaspike
Updated Branches:
  refs/heads/master d6923f276 -> 8a08cddd7


DELTASPIKE-426 fallback for full state-saving


Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/8a08cddd
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/8a08cddd
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/8a08cddd

Branch: refs/heads/master
Commit: 8a08cddd7e7551f2c7faad19fbc67e1407379e70
Parents: d6923f2
Author: gpetracek <[email protected]>
Authored: Wed Mar 12 15:43:48 2014 +0100
Committer: gpetracek <[email protected]>
Committed: Wed Mar 12 15:43:48 2014 +0100

----------------------------------------------------------------------
 .../AbstractContextualReferenceWrapper.java     | 20 ++++++++++++++++++--
 .../jsf/impl/injection/ConverterWrapper.java    | 19 +++++++++++++++++++
 .../jsf/impl/injection/ValidatorWrapper.java    | 14 ++++++++++++++
 3 files changed, 51 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/8a08cddd/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/AbstractContextualReferenceWrapper.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/AbstractContextualReferenceWrapper.java
 
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/AbstractContextualReferenceWrapper.java
index a60d1f6..62aca8f 100644
--- 
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/AbstractContextualReferenceWrapper.java
+++ 
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/AbstractContextualReferenceWrapper.java
@@ -105,10 +105,24 @@ abstract class AbstractContextualReferenceWrapper<T> 
implements PartialStateHold
 
         if (this.wrapped == null) //fallback for full state-saving
         {
-            //TODO check for @FacesConverter/@FacesValidator
-            //-> delegate to javax.faces.application.Application (+ unwrap it 
- since it will be wrapped again)
+            Class wrappedClass = 
ClassUtils.tryToLoadClassForName((String)wrappedState[0]);
+
+            T resolvedInstance = resolveInstanceForClass(context, 
wrappedClass);
+
+            //TODO re-visit logic for multiple (custom) wrappers
+            if (resolvedInstance instanceof AbstractContextualReferenceWrapper)
+            {
+                resolvedInstance = 
((AbstractContextualReferenceWrapper<T>)resolvedInstance).getWrapped();
+            }
+            this.wrapped = resolvedInstance;
+        }
+
+        if (this.wrapped == null)
+        {
             this.wrapped = 
(T)ClassUtils.tryToInstantiateClassForName((String)wrappedState[0]);
+            BeanProvider.injectFields(this.wrapped);
         }
+
         if (this.wrapped instanceof StateHolder)
         {
             ((StateHolder) this.wrapped).restoreState(context, 
wrappedState[1]);
@@ -135,4 +149,6 @@ abstract class AbstractContextualReferenceWrapper<T> 
implements PartialStateHold
     {
         return this.wrapped;
     }
+
+    protected abstract T resolveInstanceForClass(FacesContext facesContext, 
Class<?> wrappedClass);
 }

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/8a08cddd/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/ConverterWrapper.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/ConverterWrapper.java
 
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/ConverterWrapper.java
index 187f7a4..3f59748 100644
--- 
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/ConverterWrapper.java
+++ 
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/ConverterWrapper.java
@@ -22,6 +22,7 @@ import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 import javax.faces.convert.Converter;
 import javax.faces.convert.ConverterException;
+import javax.faces.convert.FacesConverter;
 
 public class ConverterWrapper extends 
AbstractContextualReferenceWrapper<Converter> implements Converter
 {
@@ -45,4 +46,22 @@ public class ConverterWrapper extends 
AbstractContextualReferenceWrapper<Convert
     {
         return getWrapped().getAsString(facesContext, component, value);
     }
+
+    @Override
+    protected Converter resolveInstanceForClass(FacesContext facesContext, 
Class<?> wrappedClass)
+    {
+        FacesConverter facesConverter = 
wrappedClass.getAnnotation(FacesConverter.class);
+
+        if (facesConverter == null)
+        {
+            return null;
+        }
+
+        if (!"".equals(facesConverter.value()))
+        {
+            return 
facesContext.getApplication().createConverter(facesConverter.value());
+        }
+
+        return 
facesContext.getApplication().createConverter(facesConverter.forClass());
+    }
 }

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/8a08cddd/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/ValidatorWrapper.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/ValidatorWrapper.java
 
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/ValidatorWrapper.java
index 96bee8e..d92b38b 100644
--- 
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/ValidatorWrapper.java
+++ 
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/ValidatorWrapper.java
@@ -20,6 +20,7 @@ package org.apache.deltaspike.jsf.impl.injection;
 
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
+import javax.faces.validator.FacesValidator;
 import javax.faces.validator.Validator;
 import javax.faces.validator.ValidatorException;
 
@@ -39,4 +40,17 @@ public class ValidatorWrapper extends 
AbstractContextualReferenceWrapper<Validat
     {
         getWrapped().validate(facesContext, component, value);
     }
+
+    @Override
+    protected Validator resolveInstanceForClass(FacesContext facesContext, 
Class<?> wrappedClass)
+    {
+        FacesValidator facesValidator = 
wrappedClass.getAnnotation(FacesValidator.class);
+
+        if (facesValidator == null)
+        {
+            return null;
+        }
+
+        return 
facesContext.getApplication().createValidator(facesValidator.value());
+    }
 }

Reply via email to