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");