You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by aw...@apache.org on 2007/08/22 06:30:28 UTC

svn commit: r568410 - in /myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal: io/ renderkit/core/desktop/ renderkit/core/ppr/ renderkit/core/xhtml/

Author: awiner
Date: Tue Aug 21 21:30:23 2007
New Revision: 568410

URL: http://svn.apache.org/viewvc?rev=568410&view=rev
Log:
TRINIDAD-641: PPR can easily trim content of leaves and NamingContainers
- For the following leaf components, don't bother rendering anything during PPR unless they're
  a target:
   - chart
   - chooseDate
   - icon
   - outputText
   - image
   - inputHidden
   - media
   - most input components
   - goButton
   - commandButton
   - singleStepButtonBar
   - outputFormatted
- And for the following naming containers, don't bother rendering anything during PPR
  unless it's a target or it contains a target
   - table
   - treeTable
   - tree
   - navigationPane
   - train

Modified:
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/io/DebugHtmlResponseWriter.java
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/desktop/ChartRenderer.java
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/desktop/TrainRenderer.java
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/ppr/PPRResponseWriter.java
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/ChooseDateRenderer.java
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/GoButtonRenderer.java
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/IconRenderer.java
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/ImageRenderer.java
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/InputHiddenRenderer.java
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/InputLabelAndMessageRenderer.java
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/LabelAndMessageRenderer.java
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/MediaRenderer.java
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/MessageRenderer.java
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/NavigationPaneRenderer.java
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/OutputFormattedRenderer.java
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/OutputTextRenderer.java
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/PartialPageUtils.java
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/SingleStepButtonBarRenderer.java
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/TableRenderer.java
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/TreeRenderer.java
    myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/XhtmlRenderer.java

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/io/DebugHtmlResponseWriter.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/io/DebugHtmlResponseWriter.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/io/DebugHtmlResponseWriter.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/io/DebugHtmlResponseWriter.java Tue Aug 21 21:30:23 2007
@@ -30,6 +30,7 @@
 import javax.faces.component.UIComponent;
 import javax.faces.context.ResponseWriter;
 
+import org.apache.myfaces.trinidad.context.RenderingContext;
 import org.apache.myfaces.trinidad.logging.TrinidadLogger;
 
 
@@ -81,8 +82,12 @@
     }
 
 
-    // Check for elements that are not allowed inside each other
-    if (!_elementStack.empty())
+    // Check for elements that are not allowed inside each other -
+    // but only when PPR is off (with PPR, we're not rendering the
+    // whole tree, so it's easy for supposedly illegal combinations)
+    RenderingContext rc = RenderingContext.getCurrentInstance();
+    if (((rc == null) || (rc.getPartialPageContext() == null)) &&
+        !_elementStack.empty())
     {
       String parent = _elementStack.peek();
       Collection<String> allowedParents = _sAllowedParents.get(lowerName);

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/desktop/ChartRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/desktop/ChartRenderer.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/desktop/ChartRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/desktop/ChartRenderer.java Tue Aug 21 21:30:23 2007
@@ -184,6 +184,9 @@
     UIComponent         component,
     FacesBean           bean) throws IOException
   {
+    if (canSkipRendering(context, arc, component))
+      return;
+
     ResponseWriter rw = context.getResponseWriter();
     rw.startElement(XhtmlConstants.DIV_ELEMENT, component); 
     renderId(context, component);

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/desktop/TrainRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/desktop/TrainRenderer.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/desktop/TrainRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/desktop/TrainRenderer.java Tue Aug 21 21:30:23 2007
@@ -43,6 +43,7 @@
 import org.apache.myfaces.trinidad.logging.TrinidadLogger;
 import org.apache.myfaces.trinidad.skin.Icon;
 import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.OutputUtils;
+import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.PartialPageUtils;
 import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.ProcessUtils;
 import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SkinProperties;
 import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SkinSelectors;
@@ -161,6 +162,15 @@
     FacesBean        bean)
     throws IOException
   {
+    // Since Train is a naming container, we can be more
+    // efficient about skipping its children
+    if (!PartialPageUtils.containsPprTargets(arc,
+                                             component,
+                                             getClientId(context, component)))
+    {
+      return;
+    }
+
     if(!(component instanceof UIXProcess))
     {
       throw new ClassCastException(_LOG.getMessage(

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/ppr/PPRResponseWriter.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/ppr/PPRResponseWriter.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/ppr/PPRResponseWriter.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/ppr/PPRResponseWriter.java Tue Aug 21 21:30:23 2007
@@ -509,7 +509,8 @@
       {
         if (_state.enteringPPR != null)
         {
-          _LOG.warning("NO_PPR_CAPABLE_ID", _state.enteringPPR);
+          _LOG.warning("NO_PPR_CAPABLE_ID_FOUND_FOR_COMPONENT",
+                       _state.enteringPPR);
           _state.enteringPPR = null;
         }
 

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/ChooseDateRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/ChooseDateRenderer.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/ChooseDateRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/ChooseDateRenderer.java Tue Aug 21 21:30:23 2007
@@ -94,12 +94,15 @@
   @Override
   protected final void encodeAll(
     FacesContext        context,
-    RenderingContext arc,
+    RenderingContext    arc,
     UIComponent         component,
     FacesBean           bean) throws IOException
   {
     // Currently, we require scripting to render anything
     if (!supportsScripting(arc))
+      return;
+
+    if (canSkipRendering(context, arc, component))
       return;
 
     // If we are running in inline mode, make sure that we are

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java Tue Aug 21 21:30:23 2007
@@ -67,12 +67,15 @@
     UIComponent         component,
     FacesBean           bean) throws IOException
   {
+    String clientId = getClientId(context, component);
+    if (canSkipRendering(arc, clientId))
+      return;
+
     if (getPartialSubmit(bean))
     {
        AutoSubmitUtils.writeDependencies(context, arc);
     }
 
-    String clientId = getClientId(context, component);
     // Make sure we don't have anything to save
     assert(arc.getCurrentClientId() == null);
     arc.setCurrentClientId(clientId);

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/GoButtonRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/GoButtonRenderer.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/GoButtonRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/GoButtonRenderer.java Tue Aug 21 21:30:23 2007
@@ -72,6 +72,9 @@
     FacesBean           bean) throws IOException
   {
     String clientId = component.getClientId(context);
+    if (canSkipRendering(arc, clientId))
+      return;
+
     // Make sure we don't have anything to save
     assert(arc.getCurrentClientId() == null);
     arc.setCurrentClientId(clientId);

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/IconRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/IconRenderer.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/IconRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/IconRenderer.java Tue Aug 21 21:30:23 2007
@@ -55,6 +55,9 @@
     UIComponent         comp,
     FacesBean           bean) throws IOException
   {
+    if (canSkipRendering(context, arc, comp))
+      return;
+
     String name = getName(bean);
     
     if ("logo".equals(name))

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/ImageRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/ImageRenderer.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/ImageRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/ImageRenderer.java Tue Aug 21 21:30:23 2007
@@ -48,12 +48,20 @@
   }
 
   @Override
-  protected void encodeBegin(
+  public boolean getRendersChildren()
+  {
+    return true;
+  }
+
+  @Override
+  protected void encodeAll(
     FacesContext        context,
-    RenderingContext arc,
+    RenderingContext    arc,
     UIComponent         comp,
     FacesBean           bean) throws IOException
   {
+    if (canSkipRendering(context, arc, comp))
+      return;
 
     ResponseWriter rw = context.getResponseWriter();
     rw.startElement("img", comp);

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/InputHiddenRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/InputHiddenRenderer.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/InputHiddenRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/InputHiddenRenderer.java Tue Aug 21 21:30:23 2007
@@ -58,10 +58,13 @@
     UIComponent         component,
     FacesBean           bean) throws IOException
   {
+    String id = getClientId(context, component);
+    if (canSkipRendering(arc, id))
+      return;
+
     ResponseWriter rw = context.getResponseWriter();
     rw.startElement("input", component);
     rw.writeAttribute("type", "hidden", null);
-    String id = getClientId(context, component);
     rw.writeAttribute("id", id, "id");
     rw.writeAttribute("name", id, "id");
     rw.writeAttribute("value",

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/InputLabelAndMessageRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/InputLabelAndMessageRenderer.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/InputLabelAndMessageRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/InputLabelAndMessageRenderer.java Tue Aug 21 21:30:23 2007
@@ -85,14 +85,18 @@
   @Override
   protected void encodeAll(
     FacesContext        context,
-    RenderingContext arc,
+    RenderingContext    arc,
     UIComponent         component,
     FacesBean           bean) throws IOException
   {
     if (getSimple(bean))
     {
-      String saved = arc.getCurrentClientId();
       String clientId = component.getClientId(context);
+      // If we're a leaf component, see if we can skip our rendering
+      if (isLeafRenderer() && canSkipRendering(arc, clientId))
+        return;
+
+      String saved = arc.getCurrentClientId();
       arc.setCurrentClientId(clientId);
       
       // add the label to FormData so that it can be used in 

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/LabelAndMessageRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/LabelAndMessageRenderer.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/LabelAndMessageRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/LabelAndMessageRenderer.java Tue Aug 21 21:30:23 2007
@@ -170,8 +170,20 @@
     UIComponent         component,
     FacesBean           bean) throws IOException
   {
+    String clientId = component.getClientId(context);
+    
+    // If we're a leaf component, see if we can skip our rendering
+    if (isLeafRenderer() && canSkipRendering(arc, clientId))
+    {
+      // Except we really do have a "help" facet, so render that one...
+      UIComponent help = getFacet(component, "help");
+      if (help != null)
+        encodeChild(context, help);
+      return;
+    }
+
     String saved = arc.getCurrentClientId();
-    arc.setCurrentClientId(component.getClientId(context));
+    arc.setCurrentClientId(clientId);
 
 
     boolean isInTable = _isInTable();
@@ -417,9 +429,8 @@
     UIComponent         component,
     FacesBean           bean)
   {
-    UIComponent help = component.getFacet("help");
-    if ( help != null &&
-         help.isRendered())
+    UIComponent help = getFacet(component, "help");
+    if (help != null)
       return true;
 
     String id  = getLabelFor(context, arc, component, bean);
@@ -445,6 +456,11 @@
   {
     return (super.getClientId(context, component) +
             XhtmlConstants.COMPOSITE_ID_EXTENSION);
+  }
+
+  protected boolean isLeafRenderer()
+  {
+    return true;
   }
 
   protected String getDefaultLabelValign(FacesBean bean)

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/MediaRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/MediaRenderer.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/MediaRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/MediaRenderer.java Tue Aug 21 21:30:23 2007
@@ -148,6 +148,9 @@
     UIComponent         component,
     FacesBean           bean) throws IOException
   {
+    if (canSkipRendering(context, arc, component))
+      return;
+
     // get the mime type
     String mimeType = _getMimeType(bean);
 

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/MessageRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/MessageRenderer.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/MessageRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/MessageRenderer.java Tue Aug 21 21:30:23 2007
@@ -90,7 +90,7 @@
       }
     }
     
-    UIComponent help = component.getFacet("help");   
+    UIComponent help = getFacet(component, "help");   
    
     boolean isError = CoreMessage.MESSAGE_TYPE_ERROR.equals(messageType);
     
@@ -107,7 +107,7 @@
       inlineStyle = null;
     }
     
-    boolean hasHelp = (help != null && help.isRendered());   
+    boolean hasHelp = (help != null);
     boolean hasMessage = (message != null);
   
     

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/NavigationPaneRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/NavigationPaneRenderer.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/NavigationPaneRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/NavigationPaneRenderer.java Tue Aug 21 21:30:23 2007
@@ -67,10 +67,19 @@
   @Override
   protected void encodeAll(
     FacesContext        context,
-    RenderingContext arc,
+    RenderingContext    arc,
     UIComponent         component,
     FacesBean           bean) throws IOException
   {
+    // Since NavigationPane is a naming container, we can be more
+    // efficient about skipping its children
+    if (!PartialPageUtils.containsPprTargets(arc,
+                                             component,
+                                             getClientId(context, component)))
+    {
+      return;
+    }
+
     ResponseWriter writer = context.getResponseWriter();
 
     writer.startElement("div", component);

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/OutputFormattedRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/OutputFormattedRenderer.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/OutputFormattedRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/OutputFormattedRenderer.java Tue Aug 21 21:30:23 2007
@@ -46,27 +46,27 @@
   }
 
   @Override
-  protected void encodeBegin(
+  public boolean getRendersChildren()
+  {
+    return true;
+  }
+
+  @Override
+  protected void encodeAll(
     FacesContext        context,
     RenderingContext arc,
     UIComponent         comp,
     FacesBean           bean) throws IOException
   {
+    if (canSkipRendering(context, arc, comp))
+      return;
+
     ResponseWriter rw = context.getResponseWriter();
     rw.startElement("span", comp);
     
     renderId(context, comp);
     renderAllAttributes(context, arc, bean);
-  }
 
-  @Override
-  public void encodeEnd(
-    FacesContext        context,
-    RenderingContext arc,
-    UIComponent         comp,
-    FacesBean           bean) throws IOException
-  {
-    ResponseWriter rw = context.getResponseWriter();
     String value = getConvertedString(context, comp, bean);
     renderFormattedText(context, value);
     rw.endElement("span");

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/OutputTextRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/OutputTextRenderer.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/OutputTextRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/OutputTextRenderer.java Tue Aug 21 21:30:23 2007
@@ -49,34 +49,32 @@
   }
 
   @Override
-  protected void encodeBegin(
-    FacesContext        context,
-    RenderingContext arc,
-    UIComponent         comp,
-    FacesBean           bean) throws IOException
+  public boolean getRendersChildren()
   {
-    if (getEscape(bean))
-    {
-      ResponseWriter rw = context.getResponseWriter();
-      rw.startElement("span", comp);
-      
-      renderId(context, comp);
-      renderAllAttributes(context, arc, bean);
-    }
+    return true;
   }
 
   @Override
-  public void encodeEnd(
+  protected void encodeAll(
     FacesContext        context,
-    RenderingContext arc,
+    RenderingContext    arc,
     UIComponent         comp,
     FacesBean           bean) throws IOException
   {
+    if (canSkipRendering(context, arc, comp))
+      return;
+
     ResponseWriter rw = context.getResponseWriter();
     String value = getConvertedString(context, comp, bean);
+    boolean escape = getEscape(bean);
 
-    if (getEscape(bean))
+    if (escape)
     {
+      rw.startElement("span", comp);
+      
+      renderId(context, comp);
+      renderAllAttributes(context, arc, bean);
+
       _renderDescription(context, arc, bean);
 
       if (value != null)

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/PartialPageUtils.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/PartialPageUtils.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/PartialPageUtils.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/PartialPageUtils.java Tue Aug 21 21:30:23 2007
@@ -18,8 +18,11 @@
  */
 package org.apache.myfaces.trinidadinternal.renderkit.core.xhtml;
 
+import java.util.Iterator;
 import java.util.Map;
 
+import javax.faces.component.NamingContainer;
+import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 
 import org.apache.myfaces.trinidad.context.Agent;
@@ -42,6 +45,46 @@
 {
   private PartialPageUtils()
   {
+  }
+
+  /**
+   * Check if a NamingContainer has any partial targets
+   */
+  public static boolean containsPprTargets(
+    RenderingContext rc,
+    UIComponent      component,
+    String           clientId)
+  {
+    // This function can only be called with NamingContainers, so
+    // throw an exception if anyone tries otherwise
+    if (!(component instanceof NamingContainer)) 
+      throw new IllegalArgumentException();
+
+    // If PPR is off (ppc == null), or we're already rendering
+    // (isInsidePartialTarget()), then we have to render, so return true
+    PartialPageContext ppc = rc.getPartialPageContext();
+    if ((ppc == null) || ppc.isInsidePartialTarget())
+      return true;
+
+    // And if we're a partial target ourselves, return true
+    if (ppc.isPartialTarget(clientId))
+      return true;
+
+    // See if anything starts with our prefix
+    String clientIdPrefix = clientId + NamingContainer.SEPARATOR_CHAR;
+    Iterator<String> targets = ppc.getPartialTargets();
+    while (targets.hasNext())
+    {
+      String target = targets.next();
+      if (target == null)
+        continue;
+      // Found one!
+      if (target.startsWith(clientIdPrefix))
+        return true;
+    }
+    
+    // Couldn't find any:  bail
+    return false;
   }
 
   public static boolean isPartialRequest(FacesContext context)

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/SingleStepButtonBarRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/SingleStepButtonBarRenderer.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/SingleStepButtonBarRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/SingleStepButtonBarRenderer.java Tue Aug 21 21:30:23 2007
@@ -103,10 +103,13 @@
   @Override
   protected void encodeAll(
     FacesContext        context,
-    RenderingContext arc,
+    RenderingContext    arc,
     UIComponent         component,
     FacesBean           bean) throws IOException
   {
+    if (canSkipRendering(context, arc, component))
+      return;
+
     long currentValue = getSelectedStep(bean);
 
     // get max value

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/TableRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/TableRenderer.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/TableRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/TableRenderer.java Tue Aug 21 21:30:23 2007
@@ -22,9 +22,13 @@
 
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
+import javax.faces.component.NamingContainer;
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 import javax.faces.context.ResponseWriter;
@@ -43,14 +47,16 @@
 import org.apache.myfaces.trinidad.context.Agent;
 import org.apache.myfaces.trinidad.context.FormData;
 import org.apache.myfaces.trinidad.context.RequestContext;
+import org.apache.myfaces.trinidad.context.PartialPageContext;
+import org.apache.myfaces.trinidad.context.RenderingContext;
 import org.apache.myfaces.trinidad.event.RowDisclosureEvent;
 import org.apache.myfaces.trinidad.event.RangeChangeEvent;
 import org.apache.myfaces.trinidad.event.SortEvent;
 import org.apache.myfaces.trinidad.model.RowKeySet;
 import org.apache.myfaces.trinidad.model.SortCriterion;
-
-import org.apache.myfaces.trinidad.context.RenderingContext;
+import org.apache.myfaces.trinidad.render.ClientRowKeyManager;
 import org.apache.myfaces.trinidad.render.CoreRenderer;
+
 import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.table.CellUtils;
 import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.table.ColumnData;
 import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.table.DetailColumnRenderer;
@@ -140,6 +146,69 @@
     return _createRangeChangeEvent(table, newStart, newEnd);
   }
 
+
+  /**
+   * Returns the set of row keys identified by PPR.  Returns
+   * the empty set if no row keys are present, and null
+   * if row keys could not be properly identified.
+   */
+  static public Set<Object> getPartialRowKeys(
+    FacesContext     context,
+    RenderingContext arc, 
+    UIComponent      component,
+    String           clientId)
+  {
+    ClientRowKeyManager rowKeyManager = null;
+    if (component instanceof UIXCollection)
+      rowKeyManager = ((UIXCollection) component).getClientRowKeyManager();
+    
+    Set<Object> rowKeys = null;
+    String tablePrefix = clientId + NamingContainer.SEPARATOR_CHAR;
+    // Search for any PPR targets that start with "<tableClientId>:"
+    PartialPageContext ppc = arc.getPartialPageContext();
+    Iterator<String> targets = ppc.getPartialTargets();
+    while (targets.hasNext())
+    {
+      String target = targets.next();
+      if (target == null)
+        continue;
+      if (target.startsWith(tablePrefix))
+      {
+        // If we don't have a rowkeymanager, we know that the table
+        // has partial targets, but we can't process the rows individually
+        if (rowKeyManager == null)
+          return null;
+        
+        // Extract the client rowkey from the clientId
+        String clientRowKey = target.substring(tablePrefix.length());
+        int ncIndex = clientRowKey.indexOf(NamingContainer.SEPARATOR_CHAR);
+        // If we have a target that is in the table, but is not in a 
+        // particular row, just repaint the whole table
+        if (ncIndex < 0)
+          return null;
+        
+        clientRowKey = clientRowKey.substring(0, ncIndex);
+        
+        // Try to turn it into a server rowkey
+        Object rowKey = rowKeyManager.getRowKey(context, component, clientRowKey);
+        // if this fails, we have to process the whole table
+        if (rowKey == null)
+          return null;
+        
+        // We know this row exists, and needs to be processed
+        if (rowKeys == null)
+          rowKeys = new HashSet<Object>();        
+        rowKeys.add(rowKey);
+      }
+    }
+
+    // If we never found a rowkey, return the empty set, indicating
+    // that there are no rows to process
+    if (rowKeys == null)
+      rowKeys = Collections.emptySet();
+    return rowKeys;
+  }
+
   private static RangeChangeEvent _createRangeChangeEvent(
     CollectionComponent table,
     int newStart,
@@ -242,6 +311,27 @@
     UIComponent         component,
     FacesBean           bean) throws IOException
   {
+    Set<Object> keysToRender = null;
+    // See if we can skip rendering altogether
+    if (canSkipRendering(context, arc, component))
+    {
+      // If we're in here, then the table itself as a whole doesn't
+      // need to be re-rendered - but the contents might need to be!
+      keysToRender = getPartialRowKeys(context,
+                                       arc,
+                                       component,
+                                       getClientId(context, component));
+      // getPartialRowKeys() has a weird API.  null means there are contents
+      // that need to be rendered, but we couldn't figure out what row key
+      // they match up to, so just re-render everything and let PPR figure it
+      // out.  An empty set means *there's nothing*, so bail
+      //
+      if ((keysToRender != null) && keysToRender.isEmpty())
+        return;
+
+      // TODO: use keysToRender to only iterate onto rows
+      // that have targets
+    }
 
     // save current skin resource map, if any, on the local property
     Map<String, String> oldSkinResourceMap = arc.getSkinResourceKeyMap();

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/TreeRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/TreeRenderer.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/TreeRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/TreeRenderer.java Tue Aug 21 21:30:23 2007
@@ -111,6 +111,15 @@
     UIComponent      component,
     FacesBean        bean) throws IOException
   {
+    // Since Train is a naming container, we can be more
+    // efficient about skipping its children
+    if (!PartialPageUtils.containsPprTargets(rc,
+                                             component,
+                                             getClientId(context, component)))
+    {
+      return;
+    }
+
     UIXHierarchy tree = (UIXHierarchy) component;
     TreeUtils.expandFocusRowKey((UIXTree) component);
 

Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/XhtmlRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/XhtmlRenderer.java?rev=568410&r1=568409&r2=568410&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/XhtmlRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/XhtmlRenderer.java Tue Aug 21 21:30:23 2007
@@ -254,6 +254,54 @@
 
 
   /**
+   * Returns true if the component can skip its own rendering;
+   * true if PPR is on for this request, is not currently active,
+   * and this component not a target.  Note that if
+   * the component is not a leaf, then you'd still have to
+   * render the children.
+   * <p>
+   * Call this overload if you have the clientId already.
+   */
+  protected boolean canSkipRendering(
+    RenderingContext rc,
+    String           clientId)
+  {
+    PartialPageContext ppc = rc.getPartialPageContext();
+    if ((ppc == null) ||
+        ppc.isInsidePartialTarget() ||
+        ppc.isPartialTarget(clientId))
+      return false;
+
+    return true;
+  }
+
+  /**
+   * Returns true if the component can skip its own rendering;
+   * true if PPR is on for this request, is not currently active,
+   * and this component not a target.  Note that if
+   * the component is not a leaf, then you'd still have to
+   * render the children.
+   * <p>
+   * Call this overload if you don't have the clientId already.
+   */
+  protected boolean canSkipRendering(
+    FacesContext     context,
+    RenderingContext rc,
+    UIComponent      component)
+  {
+    PartialPageContext ppc = rc.getPartialPageContext();
+    if ((ppc == null) ||
+        ppc.isInsidePartialTarget())
+      return false;
+
+    String clientId = component.getClientId(context);
+    if (ppc.isPartialTarget(clientId))
+      return false;
+
+    return true;
+  }
+
+  /**
    * Returns true if the component should render an ID.  Components
    * that deliver events should always return "true".
    * @todo Profile and possibly optimize.