You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by cj...@apache.org on 2009/07/16 17:04:39 UTC

svn commit: r794707 - in /myfaces/core/trunk: api/src/main/java/javax/faces/render/RenderKit.java impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java impl/src/main/java/org/apache/myfaces/config/annotation/AnnotationConfigurator.java

Author: cjhoward
Date: Thu Jul 16 15:04:39 2009
New Revision: 794707

URL: http://svn.apache.org/viewvc?rev=794707&view=rev
Log:
MYFACES-2268 - support for client behavior renderers via XML and annotations.

Modified:
    myfaces/core/trunk/api/src/main/java/javax/faces/render/RenderKit.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotationConfigurator.java

Modified: myfaces/core/trunk/api/src/main/java/javax/faces/render/RenderKit.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/render/RenderKit.java?rev=794707&r1=794706&r2=794707&view=diff
==============================================================================
--- myfaces/core/trunk/api/src/main/java/javax/faces/render/RenderKit.java (original)
+++ myfaces/core/trunk/api/src/main/java/javax/faces/render/RenderKit.java Thu Jul 16 15:04:39 2009
@@ -21,6 +21,7 @@
 import java.io.OutputStream;
 import java.io.Writer;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 
@@ -35,9 +36,24 @@
  */
 public abstract class RenderKit
 {
+    private HashMap<String, ClientBehaviorRenderer> clientBehaviorRenderers;
+    
+    public RenderKit ()
+    {
+        this.clientBehaviorRenderers = new HashMap<String, ClientBehaviorRenderer>();
+    }
+    
     public void addClientBehaviorRenderer(String type, ClientBehaviorRenderer renderer)
     {
-        throw new UnsupportedOperationException();
+        if (type == null) {
+            throw new NullPointerException ("type is null");
+        }
+        
+        if (renderer == null) {
+            throw new NullPointerException ("renderer is null");
+        }
+        
+        this.clientBehaviorRenderers.put (type, renderer);
     }
 
     public abstract void addRenderer(String family, String rendererType, Renderer renderer);
@@ -48,14 +64,16 @@
     
     public ClientBehaviorRenderer getClientBehaviorRenderer(String type)
     {
-        throw new UnsupportedOperationException();
+        if (type == null) {
+            throw new NullPointerException ("type is null");
+        }
+        
+        return this.clientBehaviorRenderers.get (type);
     }
     
     public Iterator<String> getClientBehaviorRendererTypes()
     {
-        List<String> emptyList = Collections.emptyList();
-
-        return emptyList.iterator();
+        return this.clientBehaviorRenderers.keySet().iterator();
     }
 
     /**

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java?rev=794707&r1=794706&r2=794707&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java Thu Jul 16 15:04:39 2009
@@ -74,6 +74,7 @@
 import org.apache.myfaces.component.visit.VisitContextFactoryImpl;
 import org.apache.myfaces.config.annotation.AnnotationConfigurator;
 import org.apache.myfaces.config.element.Behavior;
+import org.apache.myfaces.config.element.ClientBehaviorRenderer;
 import org.apache.myfaces.config.element.ManagedBean;
 import org.apache.myfaces.config.element.NavigationRule;
 import org.apache.myfaces.config.element.Renderer;
@@ -1819,6 +1820,8 @@
             for (Renderer element : dispenser.getRenderers(renderKitId))
             {
                 javax.faces.render.Renderer renderer;
+                Collection<ClientBehaviorRenderer> clientBehaviorRenderers = dispenser.getClientBehaviorRenderers (renderKitId);
+                
                 try
                 {
                     renderer = (javax.faces.render.Renderer) ClassUtils.newInstance(element.getRendererClass());
@@ -1831,6 +1834,26 @@
                 }
 
                 renderKit.addRenderer(element.getComponentFamily(), element.getRendererType(), renderer);
+                
+                // Add in client behavior renderers.
+                
+                for (ClientBehaviorRenderer clientBehaviorRenderer : clientBehaviorRenderers) {
+                    try {
+                        javax.faces.render.ClientBehaviorRenderer behaviorRenderer = (javax.faces.render.ClientBehaviorRenderer)
+                            ClassUtils.newInstance (clientBehaviorRenderer.getRendererClass());
+                        
+                        renderKit.addClientBehaviorRenderer(clientBehaviorRenderer.getRendererType(), behaviorRenderer);
+                    }
+                    
+                    catch (Throwable e) {
+                        // Ignore.
+                        
+                        if (log.isErrorEnabled()) {
+                            log.error ("failed to configure client behavior renderer class " +
+                                 clientBehaviorRenderer.getRendererClass(), e);
+                        }
+                    }
+                }
             }
 
             renderKitFactory.addRenderKit(renderKitId, renderKit);

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotationConfigurator.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotationConfigurator.java?rev=794707&r1=794706&r2=794707&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotationConfigurator.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotationConfigurator.java Thu Jul 16 15:04:39 2009
@@ -52,6 +52,8 @@
 import javax.faces.convert.FacesConverter;
 import javax.faces.event.ComponentSystemEvent;
 import javax.faces.event.NamedEvent;
+import javax.faces.render.ClientBehaviorRenderer;
+import javax.faces.render.FacesBehaviorRenderer;
 import javax.faces.render.FacesRenderer;
 import javax.faces.render.RenderKit;
 import javax.faces.render.RenderKitFactory;
@@ -901,8 +903,33 @@
             application.addBehavior (facesBehavior.value(), clazz.getName());
         }
         
+        FacesBehaviorRenderer facesBehaviorRenderer = (FacesBehaviorRenderer) clazz.getAnnotation (FacesBehaviorRenderer.class);
+        
+        if (facesBehaviorRenderer != null) {
+            String renderKitId = facesBehaviorRenderer.renderKitId();
+            RenderKit renderKit;
+            
+            if (log.isTraceEnabled()) {
+                log.trace ("addClientBehaviorRenderer(" + renderKitId + ", " + facesBehaviorRenderer.rendererType() + ", " +
+                     clazz.getName() + ")");
+            }
+            
+            try {
+                ClientBehaviorRenderer clientBehaviorRenderer;
+                
+                renderKit = renderKitFactory().getRenderKit (null, renderKitId);
+                
+                clientBehaviorRenderer = (ClientBehaviorRenderer) clazz.newInstance();
+                
+                renderKit.addClientBehaviorRenderer(facesBehaviorRenderer.rendererType(), clientBehaviorRenderer);
+            }
+            
+            catch (Throwable e) {
+                throw new FacesException (e);
+            }
+        }
+        
         // TODO: All annotations scanned at startup must be configured here!
-        //FacesBehaviorRenderer
     }
     
     /**