You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by mb...@apache.org on 2007/02/25 14:04:50 UTC

svn commit: r511499 - in /myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config: FacesConfigDispenser.java FacesConfigValidator.java FacesConfigurator.java RuntimeConfig.java

Author: mbr
Date: Sun Feb 25 05:04:50 2007
New Revision: 511499

URL: http://svn.apache.org/viewvc?view=rev&rev=511499
Log:
added faces-config el-resolver handling
work in progress for MYFACES-1274

Modified:
    myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/FacesConfigDispenser.java
    myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/FacesConfigValidator.java
    myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java
    myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/RuntimeConfig.java

Modified: myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/FacesConfigDispenser.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/FacesConfigDispenser.java?view=diff&rev=511499&r1=511498&r2=511499
==============================================================================
--- myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/FacesConfigDispenser.java (original)
+++ myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/FacesConfigDispenser.java Sun Feb 25 05:04:50 2007
@@ -21,7 +21,7 @@
 import org.apache.myfaces.config.impl.digester.elements.Converter;
 import org.apache.myfaces.config.impl.digester.elements.ResourceBundle;
 
-import javax.faces.event.PhaseListener;
+import javax.el.ELResolver;
 
 import java.util.Iterator;
 
@@ -173,7 +173,12 @@
     public Iterator<String> getLifecyclePhaseListeners();
 
     /**
-     * @return
+     * @return Iterator over {@link ResourceBundle}
      */
     public Iterator<ResourceBundle> getResourceBundles();
+
+    /**
+     * @return Iterator over {@link ELResolver} implementation class names
+     */
+    public Iterator<String> getElResolvers();
 }

Modified: myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/FacesConfigValidator.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/FacesConfigValidator.java?view=diff&rev=511499&r1=511498&r2=511499
==============================================================================
--- myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/FacesConfigValidator.java (original)
+++ myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/FacesConfigValidator.java Sun Feb 25 05:04:50 2007
@@ -40,7 +40,7 @@
         // hidden 
     }
 
-    public static List validate(ExternalContext ctx, String ctxPath){
+    public static List<String> validate(ExternalContext ctx, String ctxPath){
         
         RuntimeConfig runtimeConfig = RuntimeConfig.getCurrentInstance(ctx);
         
@@ -50,16 +50,16 @@
                                 managedBeansMap.values() == null ? null :
                                     managedBeansMap.values().iterator();
         
-        Iterator navRules = runtimeConfig.getNavigationRules() == null ? 
+        Iterator<NavigationRule> navRules = runtimeConfig.getNavigationRules() == null ? 
                             null : runtimeConfig.getNavigationRules().iterator();
         
         return validate(managedBeans, navRules, ctxPath);
         
     }
     
-    public static List validate(Iterator managedBeans, Iterator navRules, String ctxPath){
+    public static List<String> validate(Iterator managedBeans, Iterator<NavigationRule> navRules, String ctxPath){
         
-        List list = new ArrayList();
+        List<String> list = new ArrayList<String>();
         
         if(navRules != null)
             validateNavRules(navRules, list, ctxPath);
@@ -70,11 +70,11 @@
         return list;
     }
 
-    private static void validateNavRules(Iterator navRules, List list, String ctxPath){
+    private static void validateNavRules(Iterator<NavigationRule> navRules, List<String> list, String ctxPath){
         
         while(navRules.hasNext()){
             
-            NavigationRule navRule = (NavigationRule) navRules.next();
+            NavigationRule navRule = navRules.next();
             
             validateNavRule(navRule, list, ctxPath);
             
@@ -82,7 +82,7 @@
         
     }
     
-    private static void validateNavRule(NavigationRule navRule, List list, String ctxPath){
+    private static void validateNavRule(NavigationRule navRule, List<String> list, String ctxPath){
         
         String fromId = navRule.getFromViewId();
         String filePath = ctxPath + fromId;
@@ -107,7 +107,7 @@
         
     }
     
-    private static void validateManagedBeans(Iterator managedBeans, List list){
+    private static void validateManagedBeans(Iterator managedBeans, List<String> list){
         
         while(managedBeans.hasNext()){
             
@@ -119,7 +119,7 @@
         
     }
 
-    private static void validateManagedBean(ManagedBean managedBean, List list){
+    private static void validateManagedBean(ManagedBean managedBean, List<String> list){
         
         String className = managedBean.getManagedBeanClassName();
         

Modified: myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java?view=diff&rev=511499&r1=511498&r2=511499
==============================================================================
--- myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java (original)
+++ myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java Sun Feb 25 05:04:50 2007
@@ -29,6 +29,8 @@
 import org.apache.myfaces.config.impl.digester.DigesterFacesConfigUnmarshallerImpl;
 import org.apache.myfaces.config.impl.digester.elements.ResourceBundle;
 import org.apache.myfaces.context.FacesContextFactoryImpl;
+import org.apache.myfaces.el.DefaultPropertyResolver;
+import org.apache.myfaces.el.VariableResolverImpl;
 import org.apache.myfaces.lifecycle.LifecycleFactoryImpl;
 import org.apache.myfaces.renderkit.RenderKitFactoryImpl;
 import org.apache.myfaces.renderkit.html.HtmlRenderKitImpl;
@@ -37,8 +39,10 @@
 import org.apache.myfaces.shared_impl.util.StateUtils;
 import org.apache.myfaces.shared_impl.util.serial.DefaultSerialFactory;
 import org.apache.myfaces.shared_impl.util.serial.SerialFactory;
+
 import org.xml.sax.SAXException;
 
+import javax.el.ELResolver;
 import javax.faces.FacesException;
 import javax.faces.FactoryFinder;
 import javax.faces.application.Application;
@@ -81,6 +85,7 @@
  * @author Manfred Geiler (latest modification by $Author$)
  * @version $Revision$ $Date$
  */
+@SuppressWarnings("deprecation")
 public class FacesConfigurator
 {
     private static final Log log = LogFactory.getLog(FacesConfigurator.class);
@@ -109,6 +114,8 @@
     private final ExternalContext _externalContext;
     private FacesConfigUnmarshaller _unmarshaller;
     private FacesConfigDispenser _dispenser;
+
+    private RuntimeConfig _runtimeConfig;
     private static final String JAR_EXTENSION = ".jar";
     private static final String META_INF_MANIFEST_SUFFIX = "!/META-INF/MANIFEST.MF";
     private static final String JAR_PREFIX = "jar:";
@@ -569,8 +576,7 @@
 
         application.setNavigationHandler((NavigationHandler) getApplicationObject(NavigationHandler.class, dispenser
                 .getNavigationHandlerIterator(), application.getNavigationHandler()));
-        application.setPropertyResolver((PropertyResolver) getApplicationObject(PropertyResolver.class, dispenser
-                .getPropertyResolverIterator(), application.getPropertyResolver()));
+        
         application.setStateManager((StateManager) getApplicationObject(StateManager.class, dispenser
                 .getStateManagerIterator(), application.getStateManager()));
         List<Locale> locales = new ArrayList<Locale>();
@@ -580,8 +586,6 @@
         }
         application.setSupportedLocales(locales);
 
-        application.setVariableResolver((VariableResolver) getApplicationObject(VariableResolver.class, dispenser
-                .getVariableResolverIterator(), application.getVariableResolver()));
         application.setViewHandler((ViewHandler) getApplicationObject(ViewHandler.class, dispenser
                 .getViewHandlerIterator(), application.getViewHandler()));
 
@@ -627,6 +631,31 @@
             String validatorId = (String) it.next();
             application.addValidator(validatorId, dispenser.getValidatorClass(validatorId));
         }
+
+        RuntimeConfig runtimeConfig = getRuntimeConfig();
+        
+        runtimeConfig.setPropertyResolverChainHead((PropertyResolver) getApplicationObject(PropertyResolver.class, dispenser
+                .getPropertyResolverIterator(), new DefaultPropertyResolver()));
+        
+        runtimeConfig.setVariableResolverChainHead((VariableResolver) getApplicationObject(VariableResolver.class, dispenser
+                .getVariableResolverIterator(), new VariableResolverImpl()));
+    }
+
+    /**
+     * @return
+     */
+    protected RuntimeConfig getRuntimeConfig()
+    {
+        if(_runtimeConfig == null) 
+        {
+            _runtimeConfig = RuntimeConfig.getCurrentInstance(_externalContext);
+        }
+        return _runtimeConfig;
+    }
+    
+    public void setRuntimeConfig(RuntimeConfig runtimeConfig)
+    {
+        _runtimeConfig = runtimeConfig;
     }
 
     private Object getApplicationObject(Class interfaceClass, Iterator classNamesIterator, Object defaultObject)
@@ -715,6 +744,11 @@
         for (Iterator<ResourceBundle> iter = dispenser.getResourceBundles(); iter.hasNext();)
         {
             runtimeConfig.addResourceBundle(iter.next());
+        }
+        
+        for (Iterator<String> iter = dispenser.getElResolvers(); iter.hasNext();)
+        {
+            runtimeConfig.addFacesConfigElResolver((ELResolver) ClassUtils.newInstance(iter.next(), ELResolver.class));
         }
     }
 

Modified: myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/RuntimeConfig.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/RuntimeConfig.java?view=diff&rev=511499&r1=511498&r2=511499
==============================================================================
--- myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/RuntimeConfig.java (original)
+++ myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/RuntimeConfig.java Sun Feb 25 05:04:50 2007
@@ -21,7 +21,12 @@
 import org.apache.myfaces.config.element.NavigationRule;
 import org.apache.myfaces.config.impl.digester.elements.ResourceBundle;
 
+import javax.el.CompositeELResolver;
+import javax.el.ELResolver;
+import javax.el.ExpressionFactory;
 import javax.faces.context.ExternalContext;
+import javax.faces.el.PropertyResolver;
+import javax.faces.el.VariableResolver;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -30,48 +35,53 @@
 import java.util.Map;
 
 /**
- * Holds all configuration information (from the faces-config xml files) that is
- * needed later during runtime. The config information in this class is only
- * available to the MyFaces core implementation classes (i.e. the myfaces source
- * tree). See MyfacesConfig for config parameters that can be used for shared or
- * component classes.
+ * Holds all configuration information (from the faces-config xml files) that is needed later during runtime. The config
+ * information in this class is only available to the MyFaces core implementation classes (i.e. the myfaces source
+ * tree). See MyfacesConfig for config parameters that can be used for shared or component classes.
  * 
  * @author Manfred Geiler (latest modification by $Author$)
- * @version $Revision$ $Date: 2006-05-29 05:59:46 +0200 (Mo, 29 Mai
- *          2006) $
+ * @version $Revision$ $Date$
  */
+@SuppressWarnings("deprecation")
 public class RuntimeConfig
 {
     private static final Log log = LogFactory.getLog(RuntimeConfig.class);
 
-    private static final String APPLICATION_MAP_PARAM_NAME = RuntimeConfig.class
-            .getName();
+    private static final String APPLICATION_MAP_PARAM_NAME = RuntimeConfig.class.getName();
 
     private final Collection<NavigationRule> _navigationRules = new ArrayList<NavigationRule>();
     private final Map<String, ManagedBean> _managedBeans = new HashMap<String, ManagedBean>();
     private boolean _navigationRulesChanged = false;
     private final Map<String, ResourceBundle> _resourceBundles = new HashMap<String, ResourceBundle>();
 
-    public static RuntimeConfig getCurrentInstance(
-            ExternalContext externalContext)
+    private CompositeELResolver facesConfigElResolvers;
+    private CompositeELResolver applicationElResolvers;
+
+    private VariableResolver _variableResolver;
+    private PropertyResolver _propertyResolver;
+
+    private ExpressionFactory _expressionFactory;
+
+    private PropertyResolver _propertyResolverChainHead;
+
+    private VariableResolver _variableResolverChainHead;
+
+    public static RuntimeConfig getCurrentInstance(ExternalContext externalContext)
     {
-        RuntimeConfig runtimeConfig = (RuntimeConfig) externalContext
-                .getApplicationMap().get(APPLICATION_MAP_PARAM_NAME);
+        RuntimeConfig runtimeConfig = (RuntimeConfig) externalContext.getApplicationMap().get(
+                APPLICATION_MAP_PARAM_NAME);
         if (runtimeConfig == null)
         {
             runtimeConfig = new RuntimeConfig();
-            externalContext.getApplicationMap().put(APPLICATION_MAP_PARAM_NAME,
-                    runtimeConfig);
+            externalContext.getApplicationMap().put(APPLICATION_MAP_PARAM_NAME, runtimeConfig);
         }
         return runtimeConfig;
     }
 
     /**
-     * Return the navigation rules that can be used by the NavigationHandler
-     * implementation.
+     * Return the navigation rules that can be used by the NavigationHandler implementation.
      * 
-     * @return a Collection of
-     *         {@link org.apache.myfaces.config.element.NavigationRule NavigationRule}s
+     * @return a Collection of {@link org.apache.myfaces.config.element.NavigationRule NavigationRule}s
      */
     public Collection<NavigationRule> getNavigationRules()
     {
@@ -96,11 +106,9 @@
     }
 
     /**
-     * Return the managed bean info that can be used by the VariableResolver
-     * implementation.
+     * Return the managed bean info that can be used by the VariableResolver implementation.
      * 
-     * @return a
-     *         {@link org.apache.myfaces.config.element.ManagedBean ManagedBean}
+     * @return a {@link org.apache.myfaces.config.element.ManagedBean ManagedBean}
      */
     public ManagedBean getManagedBean(String name)
     {
@@ -118,8 +126,7 @@
     }
 
     /**
-     * Return the resourcebundle which was configured in faces config by var
-     * name
+     * Return the resourcebundle which was configured in faces config by var name
      * 
      * @param name
      *            the name of the resource bundle (content of var)
@@ -147,15 +154,89 @@
         String var = bundle.getVar();
         if (_resourceBundles.containsKey(var) && log.isWarnEnabled())
         {
-            log
-                    .warn("Another resource bundle for var '" + var
-                            + "' with base name '"
-                            + _resourceBundles.get(var).getBaseName()
-                            + "' is already registered. '"
-                            + _resourceBundles.get(var).getBaseName()
-                            + "' will be replaced with '"
-                            + bundle.getBaseName() + "'.");
+            log.warn("Another resource bundle for var '" + var + "' with base name '"
+                    + _resourceBundles.get(var).getBaseName() + "' is already registered. '"
+                    + _resourceBundles.get(var).getBaseName() + "' will be replaced with '" + bundle.getBaseName()
+                    + "'.");
         }
         _resourceBundles.put(var, bundle);
+    }
+
+    public void addFacesConfigElResolver(ELResolver resolver)
+    {
+        if (facesConfigElResolvers == null)
+        {
+            facesConfigElResolvers = new CompositeELResolver();
+        }
+        facesConfigElResolvers.add(resolver);
+    }
+
+    public ELResolver getFacesConfigElResolvers()
+    {
+        return facesConfigElResolvers;
+    }
+
+    public void addApplicationElResolver(ELResolver resolver)
+    {
+        if (applicationElResolvers == null)
+        {
+            applicationElResolvers = new CompositeELResolver();
+        }
+        applicationElResolvers.add(resolver);
+    }
+
+    public ELResolver getApplicationElResolvers()
+    {
+        return applicationElResolvers;
+    }
+
+    public void setVariableResolver(VariableResolver variableResolver)
+    {
+        _variableResolver = variableResolver;
+    }
+
+    public VariableResolver getVariableResolver()
+    {
+        return _variableResolver;
+    }
+
+    public void setPropertyResolver(PropertyResolver propertyResolver)
+    {
+        _propertyResolver = propertyResolver;
+    }
+
+    public PropertyResolver getPropertyResolver()
+    {
+        return _propertyResolver;
+    }
+
+    public ExpressionFactory getExpressionFactory()
+    {
+        return _expressionFactory;
+    }
+
+    public void setExpressionFactory(ExpressionFactory expressionFactory)
+    {
+        _expressionFactory = expressionFactory;
+    }
+
+    public void setPropertyResolverChainHead(PropertyResolver resolver)
+    {
+        _propertyResolverChainHead = resolver;
+    }
+
+    public PropertyResolver getPropertyResolverChainHead()
+    {
+        return _propertyResolverChainHead;
+    }
+
+    public void setVariableResolverChainHead(VariableResolver resolver)
+    {
+        _variableResolverChainHead = resolver;
+    }
+
+    public VariableResolver getVariableResolverChainHead()
+    {
+        return _variableResolverChainHead;
     }
 }