[ 
http://issues.apache.org/jira/browse/MYFACES-171?page=comments#action_62344 ]
     
Mathias Broekelmann commented on MYFACES-171:
---------------------------------------------

UIColumns is used by HtmlTableRendererBase which is also in share. If it is ok 
to use a class from components in share I�ve no problem with it. 
If not I would modify HtmlTableRendererBase to create some protected methods 
which will be implemented by the HtmlTableRenderer in components to avoid 
copying the code.

Here is a patch which moves the UIColumns component:

Index: conf/faces-config.xml
===================================================================
RCS file: /home/cvspublic/incubator-myfaces/conf/faces-config.xml,v
retrieving revision 1.116
diff -u -r1.116 faces-config.xml
--- conf/faces-config.xml       29 Mar 2005 11:40:50 -0000      1.116
+++ conf/faces-config.xml       7 Apr 2005 10:00:23 -0000
@@ -283,7 +283,7 @@
 
        <component>
                <component-type>org.apache.myfaces.Columns</component-type>
-               
<component-class>org.apache.myfaces.component.UIColumns</component-class>
+               
<component-class>org.apache.myfaces.custom.crosstable.UIColumns</component-class>
        </component>
 
     <!-- additional "by type" converters -->
Index: src/components/org/apache/myfaces/component/html/ext/HtmlDataTable.java
===================================================================
RCS file: 
/home/cvspublic/incubator-myfaces/src/components/org/apache/myfaces/component/html/ext/HtmlDataTable.java,v
retrieving revision 1.20
diff -u -r1.20 HtmlDataTable.java
--- src/components/org/apache/myfaces/component/html/ext/HtmlDataTable.java     
29 Mar 2005 11:40:50 -0000      1.20
+++ src/components/org/apache/myfaces/component/html/ext/HtmlDataTable.java     
7 Apr 2005 10:00:24 -0000
@@ -17,7 +17,7 @@
 
 import org.apache.myfaces.component.UserRoleAware;
 import org.apache.myfaces.component.UserRoleUtils;
-import org.apache.myfaces.component.UIColumns;
+import org.apache.myfaces.custom.crosstable.UIColumns;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
Index: src/components/org/apache/myfaces/custom/crosstable/HtmlColumnsTag.java
===================================================================
RCS file: 
/home/cvspublic/incubator-myfaces/src/components/org/apache/myfaces/custom/crosstable/HtmlColumnsTag.java,v
retrieving revision 1.1
diff -u -r1.1 HtmlColumnsTag.java
--- src/components/org/apache/myfaces/custom/crosstable/HtmlColumnsTag.java     
29 Mar 2005 11:40:50 -0000      1.1
+++ src/components/org/apache/myfaces/custom/crosstable/HtmlColumnsTag.java     
7 Apr 2005 10:00:24 -0000
@@ -17,7 +17,6 @@
 
 import javax.faces.component.UIComponent;
 
-import org.apache.myfaces.component.UIColumns;
 import org.apache.myfaces.renderkit.JSFAttr;
 import org.apache.myfaces.taglib.html.HtmlComponentBodyTagBase;
 
Index: 
src/components/org/apache/myfaces/renderkit/html/ext/HtmlTableRenderer.java
===================================================================
RCS file: 
/home/cvspublic/incubator-myfaces/src/components/org/apache/myfaces/renderkit/html/ext/HtmlTableRenderer.java,v
retrieving revision 1.2
diff -u -r1.2 HtmlTableRenderer.java
--- src/components/org/apache/myfaces/renderkit/html/ext/HtmlTableRenderer.java 
13 Oct 2004 11:50:59 -0000      1.2
+++ src/components/org/apache/myfaces/renderkit/html/ext/HtmlTableRenderer.java 
7 Apr 2005 10:00:24 -0000
@@ -5,10 +5,86 @@
  * @version $Revision: 1.2 $ $Date: 2004/10/13 11:50:59 $
  */
 
+import java.io.IOException;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIData;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import org.apache.myfaces.custom.crosstable.UIColumns;
 import org.apache.myfaces.renderkit.html.HtmlTableRendererBase;
 
 public class HtmlTableRenderer
         extends HtmlTableRendererBase
 {
     //private static final Log log = 
LogFactory.getLog(HtmlTableRenderer.class);
+  
+       protected void encodeColumnChild(FacesContext facesContext, 
ResponseWriter writer, 
+           UIData uiData, UIComponent component, String columnStyle) throws 
IOException
+       {
+               super.encodeColumnChild(facesContext, writer, uiData, 
component, columnStyle);
+               if (component instanceof UIColumns)
+               {
+                   UIColumns columns = (UIColumns) component;
+                   for (int k = 0, colSize = columns.getRowCount(); k < 
colSize; k++)
+                   {
+                       columns.setRowIndex(k);
+                       renderColumnBody(facesContext, writer, uiData, 
component, columnStyle);
+                   }
+                   columns.setRowIndex(-1);
+               }
+    }
+
+    protected void renderColumnChildHeaderOrFooterRow(FacesContext 
facesContext, 
+        ResponseWriter writer, UIComponent uiComponent, String styleClass, 
boolean header) throws IOException
+    {
+       super.renderColumnChildHeaderOrFooterRow(facesContext, writer, 
uiComponent, styleClass, header);
+               if (uiComponent instanceof UIColumns)
+               {
+                   UIColumns columns = (UIColumns) uiComponent;
+                   for (int i = 0, size = columns.getRowCount(); i < size; i++)
+                   {
+                       columns.setRowIndex(i);
+                       if (header)
+                       {
+                           renderColumnHeaderCell(facesContext, writer, 
columns, columns.getHeader(),
+                               styleClass, 0);
+                       }
+                       else
+                       {
+                           renderColumnFooterCell(facesContext, writer, 
columns, columns.getFooter(),
+                               styleClass, 0);
+                       }
+                   }
+                   columns.setRowIndex(-1);
+               }
+    }
+    
+    /**
+     * @see 
org.apache.myfaces.renderkit.html.HtmlTableRendererBase#determineChildColSpan(javax.faces.component.UIComponent)
+     */
+    protected int determineChildColSpan(UIComponent uiComponent)
+    {
+       int result = super.determineChildColSpan(uiComponent);
+               if (uiComponent instanceof UIColumns)
+               {
+                   result += ((UIColumns) uiComponent).getRowCount();
+               }
+               return result;
+    }
+    
+    /**
+     * @see 
org.apache.myfaces.renderkit.html.HtmlTableRendererBase#hasFacet(boolean, 
javax.faces.component.UIComponent)
+     */
+    protected boolean hasFacet(boolean header, UIComponent uiComponent)
+    {
+       boolean result = super.hasFacet(header, uiComponent);
+               if (!result && uiComponent instanceof UIColumns)
+               {
+                   UIColumns columns = (UIColumns) uiComponent;
+                   result = header ? columns.getHeader() != null : 
columns.getFooter() != null;
+               }
+               return result;
+    }
 }
Index: src/share/org/apache/myfaces/component/UIColumns.java
===================================================================
RCS file: src/share/org/apache/myfaces/component/UIColumns.java
diff -N src/share/org/apache/myfaces/component/UIColumns.java
--- src/share/org/apache/myfaces/component/UIColumns.java       29 Mar 2005 
11:40:50 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,56 +0,0 @@
-/*
- * Copyright 2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.myfaces.component;
-
-import javax.faces.component.UIData;
-
-/**
- * @author Mathias Broekelmann (latest modification by $Author: matzew $)
- * @version $Revision: 1.1 $ $Date: 2005/03/29 11:40:50 $
- * $Log: UIColumns.java,v $
- * Revision 1.1  2005/03/29 11:40:50  matzew
- * added new crosstable component (x:columns). Contributed by Mathias 
Broekelmann
- *
- */
-public class UIColumns extends UIData
-{
-  public static final String COMPONENT_TYPE = "org.apache.myfaces.Columns";
-  public static final String COMPONENT_FAMILY = UIData.COMPONENT_FAMILY;
-
-  /**
-   * 
-   */
-  public UIColumns()
-  {
-    super();
-  }
-  
-  /**
-   * @see javax.faces.component.UIComponentBase#getRendererType()
-   */
-  public String getRendererType()
-  {
-    return null;
-  }
-
-  /**
-   * @see javax.faces.component.UIComponent#getFamily()
-   */
-  public String getFamily()
-  {
-    return COMPONENT_FAMILY;
-  }
-}
Index: src/share/org/apache/myfaces/renderkit/html/HtmlTableRendererBase.java
===================================================================
RCS file: 
/home/cvspublic/incubator-myfaces/src/share/org/apache/myfaces/renderkit/html/HtmlTableRendererBase.java,v
retrieving revision 1.9
diff -u -r1.9 HtmlTableRendererBase.java
--- src/share/org/apache/myfaces/renderkit/html/HtmlTableRendererBase.java      
29 Mar 2005 11:40:50 -0000      1.9
+++ src/share/org/apache/myfaces/renderkit/html/HtmlTableRendererBase.java      
7 Apr 2005 10:00:24 -0000
@@ -19,7 +19,6 @@
 import org.apache.myfaces.renderkit.RendererUtils;
 import org.apache.myfaces.util.ArrayUtils;
 import org.apache.myfaces.util.StringUtils;
-import org.apache.myfaces.component.UIColumns;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -151,26 +150,11 @@
             List children = component.getChildren();
             for (int j = 0, size = component.getChildCount(); j < size; j++)
             {
-                UIComponent child = (UIComponent) children.get(j);
-                if(child.isRendered())
-                {
-                    if (child instanceof UIColumn)
-                    {
-                        String columnStyle = styles.getColumnStyle(j);
-                          renderColumnBody(facesContext, writer, uiData, 
child, columnStyle);
-                    }
-                    else if (child instanceof UIColumns)
-                    {
-                        UIColumns columns = (UIColumns) child;
-                        for (int k = 0, colSize = columns.getRowCount(); k < 
colSize; k++)
-                        {
-                            columns.setRowIndex(k);
-                            String columnStyle = styles.getColumnStyle(j);
-                            renderColumnBody(facesContext, writer, uiData, 
child, columnStyle);
-                        }
-                        columns.setRowIndex(-1);
-                    }
-                }
+               UIComponent child = (UIComponent) children.get(j);
+               if(child.isRendered())
+               {
+                       encodeColumnChild(facesContext, writer, uiData, child, 
styles.getColumnStyle(j));
+               }
             }
             renderRowEnd(facesContext, writer, uiData);
 
@@ -179,6 +163,15 @@
         writer.endElement(HTML.TBODY_ELEM);
     }
     
+       protected void encodeColumnChild(FacesContext facesContext, 
ResponseWriter writer, 
+           UIData uiData, UIComponent component, String columnStyle) throws 
IOException
+       {
+        if (component instanceof UIColumn)
+        {
+                       renderColumnBody(facesContext, writer, uiData, 
component, columnStyle);
+        }
+       }
+
     /**
      * Renders the body of a given <code>UIColumn</code> (everything but the 
header and footer facets).
      * @param facesContext the <code>FacesContext</code>.
@@ -311,24 +304,11 @@
             UIComponent uiComponent = (UIComponent) it.next();
             if(uiComponent.isRendered())
             {
-              if (uiComponent instanceof UIColumn)
-              {
-                  colspan++;
-                  if (!hasColumnFacet)
-                  {
-                      hasColumnFacet = header ? ((UIColumn) 
uiComponent).getHeader() != null : ((UIColumn) uiComponent)
-                              .getFooter() != null;
-                  }
-              }
-              else if (uiComponent instanceof UIColumns)
-              {
-                  UIColumns columns = (UIColumns) uiComponent;
-                  colspan += columns.getRowCount();
-                  if (!hasColumnFacet)
-                  {
-                      hasColumnFacet = header ? columns.getHeader() != null : 
columns.getFooter() != null;
-                  }
-              }
+               colspan += determineChildColSpan(uiComponent);
+               if(!hasColumnFacet)
+               {
+                       hasColumnFacet = hasFacet(header, uiComponent); 
+               }
             }
         }
 
@@ -362,6 +342,30 @@
     }
 
        /**
+        * @param header
+        * @param uiComponent
+        * @return
+        */
+       protected boolean hasFacet(boolean header, UIComponent uiComponent)
+       {
+               if (uiComponent instanceof UIColumn)
+               {
+                       UIColumn uiColumn = (UIColumn) uiComponent;
+                       return header ? uiColumn.getHeader() != null : 
uiColumn.getFooter() != null;
+               }
+               return false;
+       }
+       
+       protected int determineChildColSpan(UIComponent uiComponent)
+       {
+               if (uiComponent instanceof UIColumn)
+               {
+                   return 1;
+               }
+               return 0;
+       }
+
+    /**
         * Renders the header row of the table being rendered.
         * @param facesContext the <code>FacesContext</code>.
         * @param writer the <code>ResponseWriter</code>.
@@ -461,43 +465,30 @@
             UIComponent uiComponent = (UIComponent) it.next();
             if(uiComponent.isRendered())
             {
-              if (uiComponent instanceof UIColumn)
-              {
-                  if (header)
-                  {
-                      renderColumnHeaderCell(facesContext, writer, 
uiComponent, 
-                          ((UIColumn) uiComponent).getHeader(), styleClass, 0);
-                  }
-                  else
-                  {
-                      renderColumnFooterCell(facesContext, writer, 
uiComponent, 
-                          ((UIColumn) uiComponent).getFooter(), styleClass, 0);
-                  }
-              }
-              else if (uiComponent instanceof UIColumns)
-              {
-                  UIColumns columns = (UIColumns) uiComponent;
-                  for (int i = 0, size = columns.getRowCount(); i < size; i++)
-                  {
-                      columns.setRowIndex(i);
-                      if (header)
-                      {
-                          renderColumnHeaderCell(facesContext, writer, 
columns, columns.getHeader(),
-                              styleClass, 0);
-                      }
-                      else
-                      {
-                          renderColumnFooterCell(facesContext, writer, 
columns, columns.getFooter(),
-                              styleClass, 0);
-                      }
-                  }
-                  columns.setRowIndex(-1);
-              }
+                renderColumnChildHeaderOrFooterRow(facesContext, writer, 
uiComponent, styleClass, header);
             }
         }
         writer.endElement(HTML.TR_ELEM);
     }
 
+    protected void renderColumnChildHeaderOrFooterRow(FacesContext 
facesContext, 
+        ResponseWriter writer, UIComponent uiComponent, String styleClass, 
boolean header) throws IOException
+    {
+      if (uiComponent instanceof UIColumn)
+      {
+          if (header)
+          {
+              renderColumnHeaderCell(facesContext, writer, uiComponent, 
+                  ((UIColumn) uiComponent).getHeader(), styleClass, 0);
+          }
+          else
+          {
+              renderColumnFooterCell(facesContext, writer, uiComponent, 
+                  ((UIColumn) uiComponent).getFooter(), styleClass, 0);
+          }
+      }
+    }
+
     /**
      * Renders the header facet for the given <code>UIColumn</code>.
      * @param facesContext the <code>FacesContext</code>.

> Wrong src tree for UIColumns
> ----------------------------
>
>          Key: MYFACES-171
>          URL: http://issues.apache.org/jira/browse/MYFACES-171
>      Project: MyFaces
>         Type: Task
>     Versions: 1.0.9 beta
>     Reporter: Manfred Geiler
>     Priority: Minor

>
> UIColumns class for new crosstable component should be moved from share src 
> tree to components tree.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira

Reply via email to