Author: craigmcc
Date: Tue Aug  1 23:45:32 2006
New Revision: 427919

URL: http://svn.apache.org/viewvc?rev=427919&view=rev
Log:
Configure the default ViewControllerMapper implementation via a default
application scope managed bean.  For backwards compatibility, the
previous method (context init parameter
"org.apache.shale.view.ViewControllerMapper") is still recognized, but
this usage is deprecated.

SHALE-246

Modified:
    
shale/framework/trunk/shale-apps/shale-mailreader-jpa/src/main/webapp/META-INF/context.xml
    
shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/Constants.java
    
shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/faces/FacesConstants.java
    
shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/faces/ViewViewHandler.java
    
shale/framework/trunk/shale-core/src/main/resources/META-INF/faces-config.xml

Modified: 
shale/framework/trunk/shale-apps/shale-mailreader-jpa/src/main/webapp/META-INF/context.xml
URL: 
http://svn.apache.org/viewvc/shale/framework/trunk/shale-apps/shale-mailreader-jpa/src/main/webapp/META-INF/context.xml?rev=427919&r1=427918&r2=427919&view=diff
==============================================================================
--- 
shale/framework/trunk/shale-apps/shale-mailreader-jpa/src/main/webapp/META-INF/context.xml
 (original)
+++ 
shale/framework/trunk/shale-apps/shale-mailreader-jpa/src/main/webapp/META-INF/context.xml
 Tue Aug  1 23:45:32 2006
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<Context path=""/>
+<Context path="/shale-mailreader-jpa"/>

Modified: 
shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/Constants.java
URL: 
http://svn.apache.org/viewvc/shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/Constants.java?rev=427919&r1=427918&r2=427919&view=diff
==============================================================================
--- 
shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/Constants.java
 (original)
+++ 
shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/Constants.java
 Tue Aug  1 23:45:32 2006
@@ -16,6 +16,8 @@
 
 package org.apache.shale.view;
 
+import org.apache.shale.view.impl.DefaultViewControllerMapper;
+
 
 /**
  * <p>Manifest constants related to Shale view support that are relevant
@@ -41,9 +43,13 @@
      * fully qualified class name of the [EMAIL PROTECTED] 
ViewControllerMapper} to be
      * used is stored.  If not present, the default value is
      * <code>org.apache.shale.view.DefaultViewControllerMapper</code>.</p>
+     *
+     * @deprecated Replace the application scoped managed bean stored with
+     *  key Constants.VIEW_CONTROLLER_MAPPER_KEY instead
      */
     public static final String VIEW_CONTROLLER_MAPPER =
       "org.apache.shale.view.VIEW_CONTROLLER_MAPPER";
+
 
 
 }

Modified: 
shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/faces/FacesConstants.java
URL: 
http://svn.apache.org/viewvc/shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/faces/FacesConstants.java?rev=427919&r1=427918&r2=427919&view=diff
==============================================================================
--- 
shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/faces/FacesConstants.java
 (original)
+++ 
shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/faces/FacesConstants.java
 Tue Aug  1 23:45:32 2006
@@ -16,6 +16,8 @@
 
 package org.apache.shale.view.faces;
 
+import org.apache.shale.view.ViewControllerMapper;
+
 
 /**
  * <p>Manifest constants related to Shale view support, which are specific

Modified: 
shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/faces/ViewViewHandler.java
URL: 
http://svn.apache.org/viewvc/shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/faces/ViewViewHandler.java?rev=427919&r1=427918&r2=427919&view=diff
==============================================================================
--- 
shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/faces/ViewViewHandler.java
 (original)
+++ 
shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/faces/ViewViewHandler.java
 Tue Aug  1 23:45:32 2006
@@ -28,6 +28,7 @@
 import javax.faces.component.UIViewRoot;
 import javax.faces.context.FacesContext;
 import javax.faces.el.EvaluationException;
+import javax.faces.el.ValueBinding;
 import javax.faces.el.VariableResolver;
 import javax.faces.render.RenderKit;
 import javax.faces.render.RenderKitFactory;
@@ -183,25 +184,36 @@
      * @param context <code>FacesContext</code> for the current request
      */
     private ViewControllerMapper getViewControllerMapper(FacesContext context) 
{
-        if (mapper == null) {
-            mapper = (ViewControllerMapper)
-              context.getExternalContext().getApplicationMap().
-              get(FacesConstants.VIEW_MAPPER);
-        }
+
+        // DEPRECATED - respect the context init parameter if specified
         if (mapper == null) {
             mapper = getViewControllerMapperInstance(context);
-            context.getExternalContext().getApplicationMap().
-              put(FacesConstants.VIEW_MAPPER, mapper);
         }
-        return mapper;
+
+        // DEPRECATED - return cached instance from context init parameter
+        if (mapper != null) {
+            return mapper;
+        }
+
+        // Live lookup of the appropriate mapper as a managed bean
+        ValueBinding vb = context.getApplication().createValueBinding
+          ("#{" + FacesConstants.VIEW_MAPPER + "}");
+        ViewControllerMapper vcm = (ViewControllerMapper) vb.getValue(context);
+        return vcm;
+
     }
 
 
     /**
-     * <p>Create and return the [EMAIL PROTECTED] ViewControllerMapper} 
instance
-     * we will use for this application.</p>
+     * <p>Create and return the custom configured [EMAIL PROTECTED] 
ViewControllerMapper}
+     * instance we will use for this application, or <code>null</code>
+     * if there is no such instance.</p>
      *
      * @param context <code>FacesContext</code> for the current request
+     *
+     * @deprecated As of version 1.0.3, replace the application scoped
+     *  managed bean at FacesConstants.VIEW_MAPPER instead of using the
+     *  deprecated context initialization parameter mentioned here
      */
     private ViewControllerMapper getViewControllerMapperInstance
             (FacesContext context) {
@@ -209,7 +221,7 @@
         String className =
           
context.getExternalContext().getInitParameter(Constants.VIEW_CONTROLLER_MAPPER);
         if (className == null) {
-            className = 
"org.apache.shale.view.impl.DefaultViewControllerMapper";
+            return null;
         }
         ClassLoader cl = Thread.currentThread().getContextClassLoader();
         if (cl == null) {

Modified: 
shale/framework/trunk/shale-core/src/main/resources/META-INF/faces-config.xml
URL: 
http://svn.apache.org/viewvc/shale/framework/trunk/shale-core/src/main/resources/META-INF/faces-config.xml?rev=427919&r1=427918&r2=427919&view=diff
==============================================================================
--- 
shale/framework/trunk/shale-core/src/main/resources/META-INF/faces-config.xml 
(original)
+++ 
shale/framework/trunk/shale-core/src/main/resources/META-INF/faces-config.xml 
Tue Aug  1 23:45:32 2006
@@ -105,6 +105,17 @@
     <managed-bean-scope>application</managed-bean-scope>
   </managed-bean>
 
+  <managed-bean>
+    <description>
+      Default implementation of org.apache.shale.view.ViewControllerMapper
+      used to map from view identifiers to the managed bean name of the
+      corresponding view controller bean.
+    </description>
+    <managed-bean-name>org.apache.shale.view.VIEW_MAPPER</managed-bean-name>
+    
<managed-bean-class>org.apache.shale.view.impl.DefaultViewControllerMapper</managed-bean-class>
+    <managed-bean-scope>application</managed-bean-scope>
+  </managed-bean>
+
   <!-- Custom Renderers -->
   <render-kit>
     <renderer>


Reply via email to