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
}
/**