You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2016/05/04 15:47:16 UTC

svn commit: r1742297 - in /myfaces/tobago/trunk: tobago-core/src/main/java/org/apache/myfaces/tobago/context/ tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/ tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/to...

Author: lofwyr
Date: Wed May  4 15:47:16 2016
New Revision: 1742297

URL: http://svn.apache.org/viewvc?rev=1742297&view=rev
Log:
TOBAGO-1502: Advanced tc:sheet support for Bootstrap
- cleanup: remove getRenderedColumns()
- fix: do not render a "real" column for UIColumnEvent components

Modified:
    myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/context/Markup.java
    myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISheet.java
    myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/standard/standard/tag/SheetRenderer.java

Modified: myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/context/Markup.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/context/Markup.java?rev=1742297&r1=1742296&r2=1742297&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/context/Markup.java (original)
+++ myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/context/Markup.java Wed May  4 15:47:16 2016
@@ -71,6 +71,10 @@ public final class Markup implements Ser
   public static final Markup EXPANDED = valueOf("expanded");
   public static final Markup FILLER = valueOf("filler");
   public static final Markup FATAL = valueOf("fatal");
+  /**
+   * @deprecated Can be selected via CSS3.
+   */
+  @Deprecated
   public static final Markup FIRST = valueOf("first");
   public static final Markup FOLDER = valueOf("folder");
   public static final Markup INFO = valueOf("info");

Modified: myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISheet.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISheet.java?rev=1742297&r1=1742296&r2=1742297&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISheet.java (original)
+++ myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISheet.java Wed May  4 15:47:16 2016
@@ -338,20 +338,12 @@ public abstract class AbstractUISheet ex
     return result;
   }
 
-  // TODO remove
-  @Deprecated
-  public List<AbstractUIColumnBase> getRenderedColumns() {
-    ArrayList<AbstractUIColumnBase> result = new ArrayList<AbstractUIColumnBase>();
-    findColumns(this, result, false);
-    return result;
-  }
-
   private void findColumns(final UIComponent component, final List<AbstractUIColumnBase> result, final boolean all) {
     for (final UIComponent child : component.getChildren()) {
       if (all || child.isRendered()) {
         if (child instanceof AbstractUIColumnBase) {
           result.add((AbstractUIColumnBase) child);
-        } else if (child instanceof AbstractUIData){
+        } else if (child instanceof AbstractUIData) {
           // ignore columns of nested sheets
         } else {
           findColumns(child, result, all);
@@ -416,14 +408,16 @@ public abstract class AbstractUISheet ex
       LOG.warn("This should not happen. Please file a bug in the issue tracker to reproduce this case.");
       return;
     }
-    final LayoutTokens columns = new LayoutTokens();
-    final List<AbstractUIColumnBase> renderedColumns = getRenderedColumns();
-    for (final AbstractUIColumnBase ignored : renderedColumns) {
-      columns.addToken(RelativeLayoutToken.DEFAULT_INSTANCE);
+    final LayoutTokens tokens = new LayoutTokens();
+    final List<AbstractUIColumnBase> columns = getAllColumns();
+    for (final UIColumn column : columns) {
+      if (!(column instanceof AbstractUIColumnEvent)) {
+        tokens.addToken(RelativeLayoutToken.DEFAULT_INSTANCE);
+      }
     }
     final LayoutTokens rows = new LayoutTokens();
     rows.addToken(AutoLayoutToken.INSTANCE);
-    final Grid grid = new Grid(columns, rows);
+    final Grid grid = new Grid(tokens, rows);
 
     for(final UIComponent child : header.getChildren()) {
         if (child.isRendered()) {

Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/standard/standard/tag/SheetRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/standard/standard/tag/SheetRenderer.java?rev=1742297&r1=1742296&r2=1742297&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/standard/standard/tag/SheetRenderer.java (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/standard/standard/tag/SheetRenderer.java Wed May  4 15:47:16 2016
@@ -35,6 +35,7 @@ import org.apache.myfaces.tobago.context
 import org.apache.myfaces.tobago.context.ResourceManagerUtils;
 import org.apache.myfaces.tobago.event.PageAction;
 import org.apache.myfaces.tobago.internal.component.AbstractUIColumnBase;
+import org.apache.myfaces.tobago.internal.component.AbstractUIColumnEvent;
 import org.apache.myfaces.tobago.internal.component.AbstractUIColumnNode;
 import org.apache.myfaces.tobago.internal.component.AbstractUICommand;
 import org.apache.myfaces.tobago.internal.component.AbstractUIData;
@@ -158,23 +159,25 @@ public class SheetRenderer extends Rende
       final List<AbstractUIColumnBase> columns = sheet.getAllColumns();
       int i = 0;
       for (final AbstractUIColumnBase column : columns) {
-        final AbstractUIOut out = (AbstractUIOut) CreateComponentUtils.createComponent(
-            facesContext, UIOut.COMPONENT_TYPE, RendererTypes.Out, "_col" + i);
-        out.setTransient(true);
+        if (!(column instanceof AbstractUIColumnEvent)) {
+          final AbstractUIOut out = (AbstractUIOut) CreateComponentUtils.createComponent(
+              facesContext, UIOut.COMPONENT_TYPE, RendererTypes.Out, "_col" + i);
+          out.setTransient(true);
 //        out.setValue(column.getLabel());
-        ValueExpression valueExpression = column.getValueExpression(Attributes.label.getName());
-        if (valueExpression != null) {
-          out.setValueExpression(Attributes.value.getName(), valueExpression);
-        } else {
-          out.setValue(ComponentUtils.getAttribute(column, Attributes.label));
-        }
-        valueExpression = column.getValueExpression(Attributes.rendered.getName());
-        if (valueExpression != null) {
-          out.setValueExpression(Attributes.rendered.getName(), valueExpression);
-        } else {
-          out.setRendered(ComponentUtils.getBooleanAttribute(column, Attributes.rendered));
+          ValueExpression valueExpression = column.getValueExpression(Attributes.label.getName());
+          if (valueExpression != null) {
+            out.setValueExpression(Attributes.value.getName(), valueExpression);
+          } else {
+            out.setValue(ComponentUtils.getAttribute(column, Attributes.label));
+          }
+          valueExpression = column.getValueExpression(Attributes.rendered.getName());
+          if (valueExpression != null) {
+            out.setValueExpression(Attributes.rendered.getName(), valueExpression);
+          } else {
+            out.setRendered(ComponentUtils.getBooleanAttribute(column, Attributes.rendered));
+          }
+          header.getChildren().add(out);
         }
-        header.getChildren().add(out);
         i++;
       }
       sheet.setHeader(header);
@@ -225,8 +228,7 @@ public class SheetRenderer extends Rende
     final SheetState state = sheet.getSheetState(facesContext);
     final List<Integer> columnWidths = sheet.getState().getColumnWidths();
     final List<Integer> selectedRows = getSelectedRows(sheet, state);
-    final List<AbstractUIColumnBase> renderedColumnList = sheet.getRenderedColumns();
-    final List<AbstractUIColumnBase> allColumnList = sheet.getAllColumns();
+    final List<AbstractUIColumnBase> columns = sheet.getAllColumns();
     final boolean showHeader = sheet.isShowHeader();
     final boolean autoLayout = sheet.isAutoLayout();
 
@@ -279,10 +281,10 @@ public class SheetRenderer extends Rende
       writer.writeClassAttribute(Classes.create(sheet, "headerTable"),
           BootstrapClass.TABLE, BootstrapClass.TABLE_BORDERED, TobagoClass.TABLE_LAYOUT__FIXED);
 
-      writeColgroup(writer, columnWidths, allColumnList);
+      writeColgroup(writer, columnWidths, columns);
 
       writer.startElement(HtmlElements.TBODY);
-      encodeHeaderRows(facesContext, sheet, writer, renderedColumnList);
+      encodeHeaderRows(facesContext, sheet, writer, columns);
       writer.endElement(HtmlElements.TBODY);
       writer.endElement(HtmlElements.TABLE);
       writer.endElement(HtmlElements.HEADER);
@@ -306,10 +308,10 @@ public class SheetRenderer extends Rende
 
     if (autoLayout) {
       writer.startElement(HtmlElements.THEAD);
-      encodeHeaderRows(facesContext, sheet, writer, renderedColumnList);
+      encodeHeaderRows(facesContext, sheet, writer, columns);
       writer.endElement(HtmlElements.THEAD);
     } else {
-      writeColgroup(writer, columnWidths, allColumnList);
+      writeColgroup(writer, columnWidths, columns);
     }
 
     // Print the Content
@@ -376,65 +378,60 @@ public class SheetRenderer extends Rende
         writer.writeAttribute(DataAttributes.TREE_PARENT, parentId, false);
       }
 
-      int columnIndex = -1;
-      for (final UIColumn column : renderedColumnList) {
-        columnIndex++;
-
-        writer.startElement(HtmlElements.TD);
+      for (final UIColumn column : columns) {
+        if (!(column instanceof AbstractUIColumnEvent)) {
+          writer.startElement(HtmlElements.TD);
+          Markup markup = column instanceof Visual ? ((Visual) column).getMarkup() : Markup.NULL;
+          if (markup == null) {
+            markup = Markup.NULL;
+          }
+          if (rowAction) {
+            markup = markup.add(Markup.CLICKABLE);
+          }
+          if (isPure(column)) {
+            markup = markup.add(Markup.PURE);
+          }
+          final String textAlign = ComponentUtils.getStringAttribute(column, Attributes.align);
+          if (textAlign != null) {
+            switch (TextAlign.valueOf(textAlign)) {
+              case right:
+                markup = markup.add(Markup.RIGHT);
+                break;
+              case center:
+                markup = markup.add(Markup.CENTER);
+                break;
+              case justify:
+                markup = markup.add(Markup.JUSTIFY);
+                break;
+              default:
+                // nothing to do
+            }
+          }
+          writer.writeClassAttribute(Classes.create(sheet, "cell", markup));
 
-        Markup markup = column instanceof Visual ? ((Visual) column).getMarkup() : Markup.NULL;
-        if (markup == null) {
-          markup = Markup.NULL;
-        }
-        if (columnIndex == 0) {
-          markup = markup.add(Markup.FIRST);
-        }
-        if (rowAction) {
-          markup = markup.add(Markup.CLICKABLE);
-        }
-        if (isPure(column)) {
-          markup = markup.add(Markup.PURE);
-        }
-        final String textAlign = ComponentUtils.getStringAttribute(column, Attributes.align);
-        if (textAlign != null) {
-          switch (TextAlign.valueOf(textAlign)) {
-            case right:
-              markup = markup.add(Markup.RIGHT);
-              break;
-            case center:
-              markup = markup.add(Markup.CENTER);
-              break;
-            case justify:
-              markup = markup.add(Markup.JUSTIFY);
-              break;
-            default:
-              // nothing to do
-          }
-        }
-        writer.writeClassAttribute(Classes.create(sheet, "cell", markup));
-
-        if (column instanceof UIColumnSelector) {
-          UIColumnSelector selector = (UIColumnSelector) column;
-          writer.startElement(HtmlElements.INPUT);
-          if (selectable.isSingle()) {
-            writer.writeAttribute(HtmlAttributes.TYPE, HtmlInputTypes.RADIO);
+          if (column instanceof UIColumnSelector) {
+            UIColumnSelector selector = (UIColumnSelector) column;
+            writer.startElement(HtmlElements.INPUT);
+            if (selectable.isSingle()) {
+              writer.writeAttribute(HtmlAttributes.TYPE, HtmlInputTypes.RADIO);
+            } else {
+              writer.writeAttribute(HtmlAttributes.TYPE, HtmlInputTypes.CHECKBOX);
+            }
+            writer.writeAttribute(HtmlAttributes.CHECKED, selected);
+            writer.writeAttribute(HtmlAttributes.DISABLED, selector.isDisabled());
+            writer.writeClassAttribute(Classes.create(sheet, "columnSelector"));
+            writer.endElement(HtmlElements.INPUT);
+          } else if (column instanceof AbstractUIColumnNode) {
+            RenderUtils.encode(facesContext, column);
           } else {
-            writer.writeAttribute(HtmlAttributes.TYPE, HtmlInputTypes.CHECKBOX);
-          }
-          writer.writeAttribute(HtmlAttributes.CHECKED, selected);
-          writer.writeAttribute(HtmlAttributes.DISABLED, selector.isDisabled());
-          writer.writeClassAttribute(Classes.create(sheet, "columnSelector"));
-          writer.endElement(HtmlElements.INPUT);
-        } else if (column instanceof AbstractUIColumnNode) {
-          RenderUtils.encode(facesContext, column);
-        } else {
-          final List<UIComponent> children = sheet.getRenderedChildrenOf(column);
-          for (final UIComponent grandKid : children) {
-            RenderUtils.encode(facesContext, grandKid);
+            final List<UIComponent> children = sheet.getRenderedChildrenOf(column);
+            for (final UIComponent grandKid : children) {
+              RenderUtils.encode(facesContext, grandKid);
+            }
           }
-        }
 
-        writer.endElement(HtmlElements.TD);
+          writer.endElement(HtmlElements.TD);
+        }
       }
 
       if (!autoLayout) {
@@ -453,19 +450,20 @@ public class SheetRenderer extends Rende
 
     if (emptySheet && showHeader) {
       writer.startElement(HtmlElements.TR);
-      int columnIndex = -1;
-      for (final UIColumn ignored : renderedColumnList) {
-        columnIndex++;
-        writer.startElement(HtmlElements.TD);
-        writer.startElement(HtmlElements.DIV);
-        if (columnWidths != null) {
-          final Integer divWidth = columnWidths.get(columnIndex);
-          final Style divStyle = new Style();
-          divStyle.setWidth(Measure.valueOf(divWidth));
-          writer.writeStyleAttribute(divStyle);
+      for (int j = 0; j < columns.size(); j++) {
+        final UIColumn column = columns.get(j);
+        if (!(column instanceof AbstractUIColumnEvent)) {
+          writer.startElement(HtmlElements.TD);
+          writer.startElement(HtmlElements.DIV);
+          if (columnWidths != null) {
+            final Integer divWidth = columnWidths.get(j);
+            final Style divStyle = new Style();
+            divStyle.setWidth(Measure.valueOf(divWidth));
+            writer.writeStyleAttribute(divStyle);
+          }
+          writer.endElement(HtmlElements.DIV);
+          writer.endElement(HtmlElements.TD);
         }
-        writer.endElement(HtmlElements.DIV);
-        writer.endElement(HtmlElements.TD);
       }
       if (!autoLayout) {
         writer.startElement(HtmlElements.TD);
@@ -679,12 +677,13 @@ public class SheetRenderer extends Rende
 
   private void encodeHeaderRows(
       final FacesContext facesContext, final UISheet sheet, final TobagoResponseWriter writer,
-      final List<AbstractUIColumnBase> renderedColumnList)
+      final List<AbstractUIColumnBase> columns)
       throws IOException {
 
     final Selectable selectable = sheet.getSelectable();
     final Grid grid = sheet.getHeaderGrid();
     final boolean autoLayout = sheet.isAutoLayout();
+    int offset = 0;
 
     for (int i = 0; i < grid.getRowCount(); i++) {
       writer.startElement(HtmlElements.TR);
@@ -705,7 +704,7 @@ public class SheetRenderer extends Rende
           writer.startElement(HtmlElements.DIV);
           writer.writeClassAttribute(Classes.create(sheet, "headerCell"));
           writer.startElement(HtmlElements.SPAN);
-          final AbstractUIColumnBase column = renderedColumnList.get(j);
+          final AbstractUIColumnBase column = columns.get(j + offset);
           Icons sorterIcon = null;
           Markup markup = Markup.NULL;
           String tip = ComponentUtils.getStringAttribute(column, Attributes.tip);
@@ -760,9 +759,6 @@ public class SheetRenderer extends Rende
             }
           }
 
-          if (j == 0) {
-            markup = markup.add(Markup.FIRST);
-          }
           if (pure) {
             markup = markup.add(Markup.PURE);
           }
@@ -836,8 +832,8 @@ public class SheetRenderer extends Rende
 
           writer.endElement(HtmlElements.SPAN);
           if (!autoLayout) {
-            if (renderedColumnList.get(j).isResizable()) {
-              encodeResizing(writer, sheet, j + cell.getColumnSpan() - 1);
+            if (column.isResizable()) {
+              encodeResizing(writer, sheet, j + offset + cell.getColumnSpan() - 1);
             }
           }
           writer.endElement(HtmlElements.DIV);
@@ -867,11 +863,11 @@ public class SheetRenderer extends Rende
 
   private void writeColgroup(
       final TobagoResponseWriter writer, final List<Integer> columnWidths,
-      final List<AbstractUIColumnBase> columnList) throws IOException {
+      final List<AbstractUIColumnBase> columns) throws IOException {
     writer.startElement(HtmlElements.COLGROUP);
-    for (int i = 0; i < columnList.size(); i++) {
-      final AbstractUIColumnBase column =  columnList.get(i);
-      if (column.isRendered()) {
+    for (int i = 0; i < columns.size(); i++) {
+      final AbstractUIColumnBase column =  columns.get(i);
+      if (column.isRendered() && !(column instanceof AbstractUIColumnEvent)) {
         writeCol(writer, columnWidths != null ? columnWidths.get(i) : null);
       }
     }