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 2012/04/18 11:04:23 UTC

svn commit: r1327429 [2/2] - in /myfaces/tobago/branches/tobago-tree-table: tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/ tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ tobago-core/src/main/java...

Modified: myfaces/tobago/branches/tobago-tree-table/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/branches/tobago-tree-table/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java?rev=1327429&r1=1327428&r2=1327429&view=diff
==============================================================================
--- myfaces/tobago/branches/tobago-tree-table/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java (original)
+++ myfaces/tobago/branches/tobago-tree-table/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java Wed Apr 18 09:04:22 2012
@@ -20,7 +20,6 @@ package org.apache.myfaces.tobago.render
 import org.apache.myfaces.tobago.component.UITreeNode;
 import org.apache.myfaces.tobago.internal.component.AbstractUIData;
 import org.apache.myfaces.tobago.internal.component.AbstractUITree;
-import org.apache.myfaces.tobago.internal.util.StringUtils;
 import org.apache.myfaces.tobago.renderkit.LayoutComponentRendererBase;
 import org.apache.myfaces.tobago.renderkit.css.Classes;
 import org.apache.myfaces.tobago.renderkit.css.Style;
@@ -37,7 +36,6 @@ import org.slf4j.LoggerFactory;
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 import java.io.IOException;
-import java.util.List;
 
 public class TreeRenderer extends LayoutComponentRendererBase {
 
@@ -46,38 +44,7 @@ public class TreeRenderer extends Layout
   @Override
   public void decode(FacesContext facesContext, UIComponent component) {
     final AbstractUITree tree = (AbstractUITree) component;
-
-    // marked
-    String marked = (String) facesContext.getExternalContext().getRequestParameterMap()
-        .get(tree.getClientId(facesContext) + ComponentUtils.SUB_SEPARATOR + AbstractUITree.SUFFIX_MARKED);
-    try {
-      tree.setSubmittedMarked(org.apache.commons.lang.StringUtils.isNotBlank(marked) ? Integer.parseInt(marked) : null);
-    } catch (NumberFormatException e) {
-      // should not happen
-      LOG.warn("Can't parse marked: + " + marked + "'", e);
-    }
-
-    // expanded
-    String expanded = (String) facesContext.getExternalContext().getRequestParameterMap()
-        .get(tree.getClientId(facesContext) + ComponentUtils.SUB_SEPARATOR + AbstractUIData.SUFFIX_EXPANDED);
-    try {
-      tree.setSubmittedExpanded(expanded != null ? StringUtils.parseIntegerList(expanded) : null);
-    } catch (NumberFormatException e) {
-      // should not happen
-      LOG.warn("Can't parse expanded: + " + expanded + "'", e);
-    }
-
-    // children
-    final int last = tree.hasRows() ? tree.getFirst() + tree.getRows() : Integer.MAX_VALUE;
-    for (int rowIndex = tree.getFirst(); rowIndex < last; rowIndex++) {
-      tree.setRowIndex(rowIndex);
-      if (!tree.isRowAvailable()) {
-        break;
-      }
-      for (UIComponent child : tree.getChildren()) {
-        child.processDecodes(facesContext);
-      }
-    }
+    RenderUtils.decodedStateOfTreeData(facesContext, tree);
   }
 
   @Override
@@ -117,8 +84,7 @@ public class TreeRenderer extends Layout
     writer.writeNameAttribute(markedId);
     writer.writeIdAttribute(markedId);
     writer.writeClassAttribute(Classes.create(tree, AbstractUITree.SUFFIX_MARKED));
-    final Integer markedValue = tree.getSubmittedMarked();
-    writer.writeAttribute(HtmlAttributes.VALUE, markedValue != null ? Integer.toString(markedValue) : "", false);
+    writer.writeAttribute(HtmlAttributes.VALUE, "", false);
     writer.endElement(HtmlElements.INPUT);
 
     writer.startElement(HtmlElements.INPUT, tree);
@@ -127,8 +93,7 @@ public class TreeRenderer extends Layout
     writer.writeNameAttribute(expandedId);
     writer.writeIdAttribute(expandedId);
     writer.writeClassAttribute(Classes.create(tree, AbstractUIData.SUFFIX_EXPANDED));
-    final List<Integer> value = tree.getSubmittedExpanded();
-    writer.writeAttribute(HtmlAttributes.VALUE, value != null ? StringUtils.joinWithSurroundingSeparator(value) : "", false);
+    writer.writeAttribute(HtmlAttributes.VALUE, ",", false);
     writer.endElement(HtmlElements.INPUT);
 
     final int last = tree.hasRows() ? tree.getFirst() + tree.getRows() : Integer.MAX_VALUE;

Modified: myfaces/tobago/branches/tobago-tree-table/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/util/RenderUtils.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/branches/tobago-tree-table/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/util/RenderUtils.java?rev=1327429&r1=1327428&r2=1327429&view=diff
==============================================================================
--- myfaces/tobago/branches/tobago-tree-table/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/util/RenderUtils.java (original)
+++ myfaces/tobago/branches/tobago-tree-table/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/util/RenderUtils.java Wed Apr 18 09:04:22 2012
@@ -20,8 +20,13 @@ package org.apache.myfaces.tobago.render
 import org.apache.myfaces.tobago.component.Attributes;
 import org.apache.myfaces.tobago.config.Configurable;
 import org.apache.myfaces.tobago.context.ResourceManagerUtils;
+import org.apache.myfaces.tobago.internal.component.AbstractUIData;
+import org.apache.myfaces.tobago.internal.component.AbstractUITree;
 import org.apache.myfaces.tobago.internal.util.StringUtils;
 import org.apache.myfaces.tobago.layout.Measure;
+import org.apache.myfaces.tobago.model.ExpandedState;
+import org.apache.myfaces.tobago.model.MarkedState;
+import org.apache.myfaces.tobago.model.TreePath;
 import org.apache.myfaces.tobago.renderkit.RendererBase;
 import org.apache.myfaces.tobago.util.ComponentUtils;
 import org.apache.myfaces.tobago.util.DebugUtils;
@@ -41,6 +46,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -356,4 +362,86 @@ public class RenderUtils {
             component.isItemDisabled(), component.getItemImage(), component.getMarkup());
   }
 
+
+  public static void decodedStateOfTreeData(FacesContext facesContext, AbstractUIData data) {
+
+    final boolean isTree = data instanceof AbstractUITree;
+    // marked
+    final Integer markedIndex = isTree ? decodeMarkedIndex(facesContext, data) : null;
+
+    // expanded
+    final List<Integer> expandedIndices = decodeExpandedIndices(facesContext, data);
+
+    final int last = data.isRowsUnlimited() ? Integer.MAX_VALUE : data.getFirst() + data.getRows();
+    for (int rowIndex = data.getFirst(); rowIndex < last; rowIndex++) {
+      data.setRowIndex(rowIndex);
+      if (!data.isRowAvailable()) {
+        break;
+      }
+
+//        final Object rowData = data.getRowData();
+      final TreePath path = data.getPath();
+
+    // marked
+      if (isTree) {
+        final MarkedState markedState = ((AbstractUITree) data).getMarkedState();
+        final boolean oldMarked = markedState.isMarked(path);
+        final boolean newMarked = ((Integer)rowIndex).equals(markedIndex);
+        if (newMarked != oldMarked) {
+  //          new TreeMarkedEvent(node, oldValue, newValue).queue();
+          if (newMarked) {
+            markedState.setMarked(path);
+          } else {
+            markedState.setMarked(null);
+          }
+        }
+      }
+
+      // expanded
+      final ExpandedState expandedState = data.getExpandedState();
+      final boolean oldExpanded = expandedState.isExpanded(path);
+      final boolean newExpanded = expandedIndices.contains(rowIndex);
+      if (newExpanded != oldExpanded) {
+//          new TreeExpansionEvent(node, oldValue, newValue).queue();
+        if (newExpanded) {
+          expandedState.expand(path);
+        } else {
+          expandedState.collapse(path);
+        }
+      }
+
+    }
+    data.setRowIndex(-1);
+  }
+
+  private static Integer decodeMarkedIndex(FacesContext facesContext, AbstractUIData data) {
+    String markedString = null;
+    try {
+      markedString = (String) facesContext.getExternalContext().getRequestParameterMap()
+          .get(data.getClientId(facesContext) + ComponentUtils.SUB_SEPARATOR + AbstractUIData.SUFFIX_MARKED);
+      if (org.apache.commons.lang.StringUtils.isBlank(markedString)) {
+        return null;
+      }
+      return Integer.parseInt(markedString);
+    } catch (NumberFormatException e) {
+      // should not happen
+      LOG.warn("Can't parse marked: '" + markedString + "'", e);
+      return null;
+    }
+  }
+
+  private static List<Integer> decodeExpandedIndices(FacesContext facesContext, AbstractUIData data) {
+    List<Integer> expandedIndices;
+    String expandedString = null;
+    try {
+      expandedString = (String) facesContext.getExternalContext().getRequestParameterMap()
+          .get(data.getClientId(facesContext) + ComponentUtils.SUB_SEPARATOR + AbstractUIData.SUFFIX_EXPANDED);
+      expandedIndices = StringUtils.parseIntegerList(expandedString);
+    } catch (NumberFormatException e) {
+      // should not happen
+      LOG.warn("Can't parse expanded: '" + expandedString + "'", e);
+      return Collections.emptyList();
+    }
+    return expandedIndices;
+  }
 }

Modified: myfaces/tobago/branches/tobago-tree-table/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-tree.js
URL: http://svn.apache.org/viewvc/myfaces/tobago/branches/tobago-tree-table/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-tree.js?rev=1327429&r1=1327428&r2=1327429&view=diff
==============================================================================
--- myfaces/tobago/branches/tobago-tree-table/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-tree.js (original)
+++ myfaces/tobago/branches/tobago-tree-table/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-tree.js Wed Apr 18 09:04:22 2012
@@ -20,9 +20,8 @@ Tobago.Tree = {};
 Tobago.Tree.toggleNode = function(element) {
   var src;
   var node = element.closest(".tobago-treeNode, .tobago-treeMenuNode");
-  var expanded = node
-      .closest(".tobago-treeMenu, .tobago-tree, .tobago-sheet")
-      .children(".tobago-treeMenu-expanded, .tobago-tree-expanded, .tobago-sheet-expanded");
+  var data = node.closest(".tobago-treeMenu, .tobago-tree, .tobago-sheet");
+  var expanded = data.children(".tobago-treeMenu-expanded, .tobago-tree-expanded, .tobago-sheet-expanded");
   var toggle = node.find(".tobago-treeMenuNode-toggle, .tobago-treeNode-toggle");
   var rowIndex = Tobago.Tree.rowIndex(node);
   if (Tobago.Tree.isExpanded(node, expanded)) {
@@ -39,18 +38,22 @@ Tobago.Tree.toggleNode = function(elemen
     node.filter(".tobago-treeNode").removeClass("tobago-treeNode-markup-expanded");
     node.filter(".tobago-treeMenuNode").removeClass("tobago-treeMenuNode-markup-expanded");
   } else {
-    Tobago.Tree.showChildren(node, expanded);
-    toggle.each(function() {
-      src = jQuery(this).data("tobago-srcopen");
-      if (src == null) { // use the close icon if there is no open icon
-        src = jQuery(this).data("tobago-srcclose");
-      }
-      jQuery(this).attr("src", src);
-      Tobago.fixPngAlpha(this);
-    });
+    var reload = Tobago.Tree.showChildren(node, expanded);
     expanded.attr("value", expanded.attr("value") + rowIndex + ",");
-    node.filter(".tobago-treeNode").addClass("tobago-treeNode-markup-expanded");
-    node.filter(".tobago-treeMenuNode").addClass("tobago-treeMenuNode-markup-expanded");
+    if (reload) {
+      Tobago.reloadComponent(element, data.attr("id"), null, {});
+    } else {
+      toggle.each(function() {
+        src = jQuery(this).data("tobago-srcopen");
+        if (src == null) { // use the close icon if there is no open icon
+          src = jQuery(this).data("tobago-srcclose");
+        }
+        jQuery(this).attr("src", src);
+        Tobago.fixPngAlpha(this);
+      });
+      node.filter(".tobago-treeNode").addClass("tobago-treeNode-markup-expanded");
+      node.filter(".tobago-treeMenuNode").addClass("tobago-treeMenuNode-markup-expanded");
+    }
   }
 };
 
@@ -76,6 +79,7 @@ Tobago.Tree.hideChildren = function (nod
 /**
  * Show the children of the node recursively, there parents are expanded.
  * @param node A jQuery-Object as a node of the tree.
+ * @return is reload needed (to get all nodes from the server)
  */
 Tobago.Tree.showChildren = function (node, expanded) {
   var treeParentSelector = "[data-tobago-treeparent='" + node.attr("id") + "']";
@@ -87,12 +91,20 @@ Tobago.Tree.showChildren = function (nod
     children = node.nextAll(treeParentSelector);
     children.show();
   }
+  if (children.length == 0) {
+    // no children in DOM, reload it from the server
+    return true;
+  }
   children.each(function () {
     var child = jQuery(this);
     if (Tobago.Tree.isExpanded(child, expanded)) {
-      Tobago.Tree.showChildren(child, expanded);
+      var reload = Tobago.Tree.showChildren(child, expanded);
+      if (reload) {
+        return true;
+      }
     }
   });
+  return false;
 };
 
 Tobago.Tree.init = function(elements) {
@@ -181,6 +193,16 @@ Tobago.Tree.init = function(elements) {
     node.addClass("tobago-treeMenuNode-markup-marked");
   });
 
+  // init marked field
+  Tobago.Utils.selectWidthJQuery(elements, ".tobago-treeMenu, .tobago-tree").each(function() {
+    var marked = jQuery(this).children(".tobago-treeMenu-marked, .tobago-tree-marked");
+    var string = "";
+    jQuery(this).find(".tobago-treeMenuNode-markup-marked, .tobago-treeNode-markup-marked").each(function() {
+      string = Tobago.Tree.rowIndex(jQuery(this));
+    });
+    marked.attr("value", string);
+  });
+
   // init expanded field
   Tobago.Utils.selectWidthJQuery(elements, ".tobago-treeMenu, .tobago-tree, .tobago-sheet").each(function() {
     var expanded = jQuery(this).children(".tobago-treeMenu-expanded, .tobago-tree-expanded, .tobago-sheet-expanded");