Author: dolander Date: Sat Jan 29 14:04:50 2005 New Revision: 149075 URL: http://svn.apache.org/viewcvs?view=rev&rev=149075 Log: This is a "mostly" working version of the expandOnClient feature in the Tree. I've tested in both IE and Firefox. There is one remaining issue, I'm not cascading the inheritable state correctly from the tree.
Created a ServletTreeRenderer which is called in the XmlHttpRequest to render the new nodes that are the children of the node being expanded. Added a TreeRenderState property to the ITreeRootElement so the ServletTreeRender can get the state that was set on the Tree tag. Added: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/ServletTreeRenderer.java Modified: incubator/beehive/trunk/netui/src/javascript/tagshtml/netui-tree.js incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/requeststate/ServletInterceptorContext.java incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/StringBuilderRenderAppender.java incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/ITreeRootElement.java incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TagTreeRenderer.java incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/Tree.java incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeCRI.java incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeElement.java incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeRenderer.java incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeRootElement.java Modified: incubator/beehive/trunk/netui/src/javascript/tagshtml/netui-tree.js Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/javascript/tagshtml/netui-tree.js?view=diff&rev=149075&p1=incubator/beehive/trunk/netui/src/javascript/tagshtml/netui-tree.js&r1=149074&p2=incubator/beehive/trunk/netui/src/javascript/tagshtml/netui-tree.js&r2=149075 ============================================================================== --- incubator/beehive/trunk/netui/src/javascript/tagshtml/netui-tree.js (original) +++ incubator/beehive/trunk/netui/src/javascript/tagshtml/netui-tree.js Sat Jan 29 14:04:50 2005 @@ -125,13 +125,68 @@ } } +function getCData(node) +{ + for (var i=0;i<node.childNodes.length;i++) { + if (node.childNodes[i].nodeType == 4) + return node.childNodes[i]; + } + return null; +} + // If the XmlHttpRequest results in a valid XML document, this will be called function NetUITreeXmlHttpRequestReturn(req) { - var x = req.responseXML.getElementsByTagName("node"); - if (x == null || x.length == 0) + var nodeName = req.responseXML.getElementsByTagName("node"); + if (nodeName == null || nodeName.length == 0) return; - alert(x[0].childNodes[0].nodeValue); + + var treeDivs = req.responseXML.getElementsByTagName("treeDiv"); + + + nodeName = nodeName[0].childNodes[0].nodeValue; + + for (var i=0;i<document.links.length;i++) { + var attr = document.links[i].getAttribute("netui-tree-id"); + if (attr != null) { + if (attr == nodeName) { + var dump = "DUMP:\n"; + var treeNode = document.links[i]; + treeNode.removeAttribute("netui:expandOnServer"); + treeNode = treeNode.parentNode; + for (var j=0;j<treeDivs.length;j++) { + var txt = getCData(treeDivs[j]); + //alert("Text:" + txt.nodeValue); + if (txt == null) { + reportError("Didn't find the CDATA"); + return; + } + + var pElement = document.createElement("div"); + if (treeNode.nextSibling != null) { + var sib = treeNode.nextSibling; + pElement.innerHTML=txt.nodeValue; + var newNode = pElement.childNodes[0]; + treeNode.parentNode.insertBefore(newNode,sib); + treeNode = newNode; + //alert(dumpNodes(dump,pElement,0)); + } + } + } + } + } +} + +function dumpNodes(results, node, level) +{ + for (var i=0;i<level;i++) { + results = results + " "; + } + results = results + node + "\n"; + + for (var i=0;i<node.childNodes.length;i++) + results = dumpNodes(results,node.childNodes[i],level+1); + return results } function NetUIExpandTree() Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/requeststate/ServletInterceptorContext.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/requeststate/ServletInterceptorContext.java?view=diff&rev=149075&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/requeststate/ServletInterceptorContext.java&r1=149074&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/requeststate/ServletInterceptorContext.java&r2=149075 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/requeststate/ServletInterceptorContext.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/requeststate/ServletInterceptorContext.java Sat Jan 29 14:04:50 2005 @@ -45,7 +45,7 @@ return _response; } - public ServletContext getServletConteext() { + public ServletContext getServletContext() { return _context; } } Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/StringBuilderRenderAppender.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/StringBuilderRenderAppender.java?view=diff&rev=149075&p1=incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/StringBuilderRenderAppender.java&r1=149074&p2=incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/StringBuilderRenderAppender.java&r2=149075 ============================================================================== --- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/StringBuilderRenderAppender.java (original) +++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/StringBuilderRenderAppender.java Sat Jan 29 14:04:50 2005 @@ -51,4 +51,8 @@ assert _sb != null : "Render appender doesn't have a valid string builder"; _sb.append(c); } + + public String toString() { + return _sb.toString(); + } } Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/ITreeRootElement.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/ITreeRootElement.java?view=diff&rev=149075&p1=incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/ITreeRootElement.java&r1=149074&p2=incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/ITreeRootElement.java&r2=149075 ============================================================================== --- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/ITreeRootElement.java (original) +++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/ITreeRootElement.java Sat Jan 29 14:04:50 2005 @@ -32,4 +32,16 @@ * @param selectNode */ void changeSelected(String selectNode); + + /** + * return the TreeRenderState for this tree. + * @return + */ + TreeRenderState getTreeRenderState(); + + /** + * Set the TreeRenderState + * @param trs + */ + void setTreeRenderState(TreeRenderState trs); } Added: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/ServletTreeRenderer.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/ServletTreeRenderer.java?view=auto&rev=149075 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/ServletTreeRenderer.java Sat Jan 29 14:04:50 2005 @@ -0,0 +1,66 @@ +/* + * 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. + * + * $Header:$ + */ +package org.apache.beehive.netui.tags.tree; + +import org.apache.beehive.netui.tags.rendering.AbstractHtmlState; +import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.ServletContext; +import javax.servlet.jsp.JspException; + +public class ServletTreeRenderer extends TreeRenderer +{ + AbstractRenderAppender _writer; + StringBuilder _sb; + + ServletTreeRenderer(TreeRenderState trs,InheritableState iState,HttpServletRequest request, + HttpServletResponse response, ServletContext servletContext, + AbstractRenderAppender writer, StringBuilder sb) + { + super(trs,iState,request,response,servletContext); + _writer = writer; + _sb = sb; + } + + protected void renderBeforeNode(AbstractRenderAppender writer,TreeElement node) + { + writer.append("<![CDATA["); + } + + protected void renderAfterNode(AbstractRenderAppender writer,TreeElement node) + { + writer.append("]]>"); + TreeCRI.writeElement(_writer, "treeDiv",writer.toString().trim()); + _sb.setLength(0); + } + + protected void registerTagError(String message, Throwable e) + throws JspException + { + // @todo: add logging here + System.err.println("Error in rendering tree:" + message); + } + + protected String renderTagId(HttpServletRequest request, String tagId, AbstractHtmlState state) + { + // @todo: this needs to be implemented + return null; + } +} Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TagTreeRenderer.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TagTreeRenderer.java?view=diff&rev=149075&p1=incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TagTreeRenderer.java&r1=149074&p2=incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TagTreeRenderer.java&r2=149075 ============================================================================== --- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TagTreeRenderer.java (original) +++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TagTreeRenderer.java Sat Jan 29 14:04:50 2005 @@ -4,15 +4,17 @@ import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; class TagTreeRenderer extends TreeRenderer { private Tree _tree; - TagTreeRenderer(Tree tree,TreeRenderState trs,InheritableState iState,HttpServletRequest request,ServletContext servletContext) + TagTreeRenderer(Tree tree,TreeRenderState trs,InheritableState iState,HttpServletRequest request, + HttpServletResponse response, ServletContext servletContext) { - super(trs,iState,request,servletContext); + super(trs,iState,request,response,servletContext); _tree = tree; } Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/Tree.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/Tree.java?view=diff&rev=149075&p1=incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/Tree.java&r1=149074&p2=incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/Tree.java&r2=149075 ============================================================================== --- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/Tree.java (original) +++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/Tree.java Sat Jan 29 14:04:50 2005 @@ -666,6 +666,9 @@ return; } srs.writeFeature(sr, writer, CoreScriptFeature.TREE_INIT, true, false, null); + assert(treeRoot instanceof ITreeRootElement); + ITreeRootElement tre = (ITreeRootElement) treeRoot; + tre.setTreeRenderState(_trs); } // create a containing tree level <div> and place the tree level styles on it. @@ -682,6 +685,7 @@ if (_trs.runAtClient) { _divState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, "netui:treeName", ((INameable) treeRoot).getObjectname()); + } TagRenderingBase divRenderer = TagRenderingBase.Factory.getRendering(TagRenderingBase.DIV_TAG, request); divRenderer.doStartTag(writer, _divState); @@ -689,8 +693,8 @@ // Render the tree. AttributeRenderer extraAttrs = new AttributeRenderer(); - TagTreeRenderer ttr = new TagTreeRenderer(this,_trs,_iState,request,pageContext.getServletContext()); - ttr.render(sb, request, response, treeRoot, 0, extraAttrs, _iState); + TagTreeRenderer ttr = new TagTreeRenderer(this,_trs,_iState,request,response,pageContext.getServletContext()); + ttr.render(sb, treeRoot, 0, extraAttrs, _iState); if (hasErrors()) { reportErrors(); return; Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeCRI.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeCRI.java?view=diff&rev=149075&p1=incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeCRI.java&r1=149074&p2=incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeCRI.java&r2=149075 ============================================================================== --- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeCRI.java (original) +++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeCRI.java Sat Jan 29 14:04:50 2005 @@ -18,13 +18,15 @@ package org.apache.beehive.netui.tags.tree; import org.apache.beehive.netui.pageflow.requeststate.*; -import org.apache.beehive.netui.tags.rendering.StringBuilderRenderAppender; import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender; +import org.apache.beehive.netui.tags.rendering.StringBuilderRenderAppender; +import org.apache.beehive.netui.tags.TagConfig; +import javax.servlet.ServletContext; +import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.servlet.ServletResponse; -import javax.servlet.jsp.JspWriter; +import javax.servlet.jsp.JspException; import java.io.IOException; import java.io.Writer; @@ -43,6 +45,7 @@ HttpServletRequest request = (HttpServletRequest) ((ServletInterceptorContext) ctxt).getRequest(); ServletResponse response = ((ServletInterceptorContext) ctxt).getResponse(); + ServletContext servletContext = ((ServletInterceptorContext) ctxt).getServletContext(); // Create the command by striping off the context path and the extension String cmd = request.getRequestURI(); @@ -62,21 +65,22 @@ // check to see if we handle this command if (TREE_COLLAPSE.equals(cmd)) { - handleExpandCollapse(false, request, response); + handleExpandCollapse(false, request, response, servletContext); } else if (TREE_EXPAND.equals(cmd)) { - handleExpandCollapse(true, request, response); + handleExpandCollapse(true, request, response, servletContext); } return; } - private void handleExpandCollapse(boolean expand, HttpServletRequest req, ServletResponse response) + private void handleExpandCollapse(boolean expand, HttpServletRequest req, ServletResponse response, + ServletContext ctxt) { String tree = req.getParameter("tree"); String node = req.getParameter("node"); String expandSvr = req.getParameter("expandOnServer"); - System.err.println("TreeCommand:" + ((expand) ? "expand" : "collapse") + - " Tree:" + tree + " Node:" + node + " expandSvr:" + expandSvr); + //System.err.println("TreeCommand:" + ((expand) ? "expand" : "collapse") + + // " Tree:" + tree + " Node:" + node + " expandSvr:" + expandSvr); NameService ns = NameService.instance(req.getSession()); assert(ns != null); @@ -84,16 +88,18 @@ // get the tree from the name service INameable n = ns.get(tree); if (n == null) { + // @todo: need to log there errors System.err.println("Tree '" + tree + "' was not found in the NameService"); return; } - if (!(n instanceof TreeElement)) { - System.err.println("Named Tree was not an instance of a tree"); + if (!(n instanceof ITreeRootElement)) { + // @todo: need to log there errors + System.err.println("Named Tree was not an instance of a ITreeRootElement"); return; } - TreeElement root = (TreeElement) n; - TreeElement elem = root.findNode(node); + ITreeRootElement root = (ITreeRootElement) n; + TreeElement elem = ((TreeElement) root).findNode(node); if (elem == null) { System.err.println("Element '" + node + "' not found in the tree"); return; @@ -110,15 +116,38 @@ // add a tree identifier writeElement(writer, "node",node); + InheritableState iState = new InheritableState(); + iState.initalizeTreeState(); + iState.setImageRoot(req.getContextPath() + "/" + + TagConfig.getTreeImageLocation()); + + try { + TreeElement children[] = elem.getChildren(); + AttributeRenderer extraAttrs = new AttributeRenderer(); + int newLevel = elem.getLevel() + 1; + StringBuilder treeRendering = new StringBuilder(); + ServletTreeRenderer str = new ServletTreeRenderer(root.getTreeRenderState(),iState,req, + (HttpServletResponse) response,ctxt,writer,treeRendering); + for (int i = 0; i < children.length; i++) { + treeRendering.setLength(0); + str.render(treeRendering, children[i], newLevel, extraAttrs, iState); + } + } + catch (JspException se) { + // @todo: need to log this + se.printStackTrace(); + return; + } + + // add the tree text - writeElement(writer, "treeDiv","<![CDATA[<p>This is here</p>]]>"); - + writeEndElement(writer,TREE_EXPAND_ELEM); write(response,sb.toString()); } } - private void writeStartElement(AbstractRenderAppender writer,String elementName) + public static void writeStartElement(AbstractRenderAppender writer,String elementName) { writer.append("<"); writer.append(elementName); @@ -126,14 +155,14 @@ } - private void writeEndElement(AbstractRenderAppender writer,String elementName) + public static void writeEndElement(AbstractRenderAppender writer,String elementName) { writer.append("</"); writer.append(elementName); writer.append(">"); } - private void writeElement(AbstractRenderAppender writer, String elementName, String value) + public static void writeElement(AbstractRenderAppender writer, String elementName, String value) { writeStartElement(writer,elementName); writer.append(value); Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeElement.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeElement.java?view=diff&rev=149075&p1=incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeElement.java&r1=149074&p2=incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeElement.java&r2=149075 ============================================================================== --- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeElement.java (original) +++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeElement.java Sat Jan 29 14:04:50 2005 @@ -271,8 +271,9 @@ */ public void setExpanded(boolean expanded) { - if (expanded) + if (expanded) { _boolState = _boolState | EXPANDED; + } else _boolState = _boolState & (-1 ^ EXPANDED); } @@ -372,6 +373,17 @@ int last = _parent.size() - 1; assert(last >= 0); return (_parent.getChild(last) == this); + } + + public int getLevel() + { + TreeElement t = getParent(); + int level = 0; + while (t != null) { + t = t.getParent(); + level++; + } + return level; } /** Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeRenderer.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeRenderer.java?view=diff&rev=149075&p1=incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeRenderer.java&r1=149074&p2=incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeRenderer.java&r2=149075 ============================================================================== --- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeRenderer.java (original) +++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeRenderer.java Sat Jan 29 14:04:50 2005 @@ -53,8 +53,11 @@ private SpanTag.State _spanState = new SpanTag.State(); private ServletContext _servletContext; + private HttpServletRequest _req; + private HttpServletResponse _res; - TreeRenderer(TreeRenderState trs, InheritableState iState, HttpServletRequest request,ServletContext servletContext) + TreeRenderer(TreeRenderState trs, InheritableState iState, HttpServletRequest request, + HttpServletResponse response, ServletContext servletContext) { _trs = trs; _iState = iState; @@ -63,6 +66,8 @@ _divRenderer = TagRenderingBase.Factory.getRendering(TagRenderingBase.DIV_TAG, request); _spanRenderer = TagRenderingBase.Factory.getRendering(TagRenderingBase.SPAN_TAG, request); _servletContext = servletContext; + _req = request; + _res = response; } abstract protected void registerTagError(String message, Throwable e) @@ -70,28 +75,32 @@ abstract protected String renderTagId(HttpServletRequest request, String tagId, AbstractHtmlState state); + protected void renderBeforeNode(AbstractRenderAppender writer,TreeElement node) + { + } + + protected void renderAfterNode(AbstractRenderAppender writer,TreeElement node) + { + } + /** * This is a recursive method which generates the markup for the tree. * @param sb - * @param request - * @param response * @param node * @param level * @param attrs * @param state * @throws javax.servlet.jsp.JspException */ - protected void render(StringBuilder sb, HttpServletRequest request, HttpServletResponse response, - TreeElement node, int level, AttributeRenderer attrs, InheritableState state) + protected void render(StringBuilder sb, TreeElement node, int level, AttributeRenderer attrs, + InheritableState state) throws JspException { // assert the values... assert(sb != null); - assert(request != null); - assert(response != null); assert(node != null); - String encoding = response.getCharacterEncoding(); + String encoding = _res.getCharacterEncoding(); String nodeName = node.getName(); assert(nodeName != null); @@ -124,7 +133,7 @@ String tagId = node.getTagId(); String script = null; if (tagId != null) { - script = renderTagId(request, tagId, _divState); + script = renderTagId(_req, tagId, _divState); } attrs.renderDiv(_divState, node); if (_trs.runAtClient) { @@ -132,6 +141,7 @@ } sb.append(" "); StringBuilderRenderAppender writer = new StringBuilderRenderAppender(sb); + renderBeforeNode(writer,node); _divRenderer.doStartTag(writer, _divState); sb.append("\n"); if (script != null) @@ -139,7 +149,7 @@ // In devMode we will verify the structure of the tree. This will not run in // production mode. - ServletContext servletContext = InternalUtils.getServletContext(request); + ServletContext servletContext = InternalUtils.getServletContext(_req); boolean devMode = !AdapterManager.getServletContainerAdapter(servletContext).isInProductionMode(); if (devMode) { boolean error = false; @@ -199,7 +209,7 @@ // boolean flag that will indicate if there is an open anchor created boolean closeAnchor = false; if (!_trs.runAtClient) - closeAnchor = renderExpansionAnchor(sb, _anchorRenderer, request, response, node, nodeName); + closeAnchor = renderExpansionAnchor(sb, _anchorRenderer, node, nodeName); else { // Render client expansion and initialize the tree JavaScript support closeAnchor = renderClientExpansionAnchor(sb, _anchorRenderer, node, encodedNodeName); @@ -280,7 +290,7 @@ String uri = null; try { - uri = PageFlowUtils.getRewrittenActionURI(_servletContext,request,response,action,params,null,false); + uri = PageFlowUtils.getRewrittenActionURI(_servletContext,_req,_res,action,params,null,false); //uri = PageFlowTagUtils.rewriteActionURL(pageContext, action, params, null); } catch (URISyntaxException e) { @@ -291,7 +301,7 @@ } if (uri != null) { - selectionLink = response.encodeURL(uri); + selectionLink = _res.encodeURL(uri); } } } @@ -400,6 +410,7 @@ sb.append("\n "); _divRenderer.doEndTag(writer); sb.append("\n"); + renderAfterNode(writer,node); // now remove all of the attributes scoped with this... @@ -411,14 +422,13 @@ TreeElement children[] = node.getChildren(); int newLevel = level + 1; for (int i = 0; i < children.length; i++) { - render(sb, request, response, children[i], newLevel, attrs, state); + render(sb, children[i], newLevel, attrs, state); } } attrs.removeElement(node, removes); } private boolean renderExpansionAnchor(StringBuilder sb, TagRenderingBase anchorRenderer, - HttpServletRequest request, HttpServletResponse response, TreeElement node, String nodeName) throws JspException { @@ -427,7 +437,7 @@ if (action == null) { action = _iState.getSelectionAction(); } - boolean isAction = PageFlowTagUtils.isAction(request, action); + boolean isAction = PageFlowTagUtils.isAction(_req, action); if (!isAction) { registerTagError(Bundle.getString("Tags_BadAction", action), null); return false; @@ -440,8 +450,7 @@ params.put(TreeElement.TREE_ID, _trs.tagId); String uri = null; try { - uri = PageFlowUtils.getRewrittenActionURI(_servletContext,request,response,action,params,null,false); - //uri = PageFlowTagUtils.rewriteActionURL(pageContext, action, params, null); + uri = PageFlowUtils.getRewrittenActionURI(_servletContext,_req,_res,action,params,null,false); } catch (URISyntaxException e) { // report the error... @@ -453,7 +462,7 @@ boolean ret = false; if ((uri != null) && !node.isLeaf()) { _anchorState.clear(); - _anchorState.href = response.encodeURL(uri); + _anchorState.href = _res.encodeURL(uri); _anchorState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TARGET, _iState.getExpandTarget()); sb.append(" "); StringBuilderRenderAppender writer = new StringBuilderRenderAppender(sb); @@ -479,7 +488,7 @@ _anchorState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TreeElement.TREE_ANCHOR, (expanded ? TreeElement.TREE_EXPAND_STATE : TreeElement.TREE_COLLAPSE_STATE)); _anchorState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TreeElement.TREE_ANCHOR_ID, encodedNodeName); - if (node.isExpandOnServer()) { + if (node.isExpandOnServer() && !node.isExpanded()) { _anchorState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TreeElement.TREE_EXPAND, "true"); } Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeRootElement.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeRootElement.java?view=diff&rev=149075&p1=incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeRootElement.java&r1=149074&p2=incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeRootElement.java&r2=149075 ============================================================================== --- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeRootElement.java (original) +++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeRootElement.java Sat Jan 29 14:04:50 2005 @@ -25,6 +25,7 @@ public class TreeRootElement extends TreeElement implements ITreeRootElement { private TreeElement _selectedNode; + private TreeRenderState _trs; private String _name = null; private static final Logger logger = Logger.getInstance(TreeRootElement.class); @@ -73,6 +74,14 @@ n.setSelected(true); _selectedNode = n; return; + } + + public TreeRenderState getTreeRenderState() { + return _trs; + } + + public void setTreeRenderState(TreeRenderState trs) { + _trs = trs; } public void setObjectName(String name)
