Update of /var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/tree
In directory james.mmbase.org:/tmp/cvs-serv30601

Modified Files:
        AbstractTreeReferrerListTag.java DepthProvider.java 
        DepthTag.java OnShrinkTag.java TreeProvider.java 
        TreeReferrerTag.java TreeTag.java 
Added Files:
        BasicDepthProvider.java 
Log Message:
  MMB-1593


See also: 
http://cvs.mmbase.org/viewcvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/tree
See also: http://www.mmbase.org/jira/browse/MMB-1593




Index: AbstractTreeReferrerListTag.java
===================================================================
RCS file: 
/var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/tree/AbstractTreeReferrerListTag.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- AbstractTreeReferrerListTag.java    5 Dec 2005 17:21:17 -0000       1.5
+++ AbstractTreeReferrerListTag.java    14 Feb 2008 14:36:31 -0000      1.6
@@ -9,6 +9,7 @@
 */
 package org.mmbase.bridge.jsp.taglib.tree;
 import javax.servlet.jsp.JspTagException;
+import javax.servlet.jsp.PageContext;
 
 import org.mmbase.bridge.jsp.taglib.ListProvider;
 import org.mmbase.bridge.jsp.taglib.util.*;
@@ -16,7 +17,7 @@
 /**
  * @author Michiel Meeuwissen
  * @since MMBase-1.7
- * @version $Id: AbstractTreeReferrerListTag.java,v 1.5 2005/12/05 17:21:17 
michiel Exp $
+ * @version $Id: AbstractTreeReferrerListTag.java,v 1.6 2008/02/14 14:36:31 
michiel Exp $
  */
 abstract class AbstractTreeReferrerListTag extends TreeReferrerTag implements 
ListProvider, DepthProvider {
 
@@ -24,6 +25,7 @@
     protected int index;
     protected TreeProvider tree;
 
+    private Object prevDepthProvider;
 
     public int getIndex() {
         return index;
@@ -55,6 +57,8 @@
 
 
     protected final void doStartTagHelper() throws JspTagException {
+        prevDepthProvider = pageContext.getAttribute(DepthProvider.KEY, 
PageContext.REQUEST_SCOPE);
+        pageContext.setAttribute(DepthProvider.KEY, new 
BasicDepthProvider(getDepth()), PageContext.REQUEST_SCOPE);
         collector = new ContextCollector(getContextProvider());
         tree = findTreeProvider();
         index = 0;
@@ -63,6 +67,8 @@
     public int doEndTag() throws JspTagException  {
         collector = null;
         tree     = null;
+        pageContext.setAttribute(DepthProvider.KEY, prevDepthProvider, 
PageContext.REQUEST_SCOPE);
+        prevDepthProvider = null;
         return super.doEndTag();
     }
     public javax.servlet.jsp.jstl.core.LoopTagStatus getLoopStatus() {


Index: DepthProvider.java
===================================================================
RCS file: 
/var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/tree/DepthProvider.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- DepthProvider.java  11 Feb 2004 20:40:13 -0000      1.2
+++ DepthProvider.java  14 Feb 2008 14:36:31 -0000      1.3
@@ -13,10 +13,12 @@
 /**
  * @author Michiel Meeuwissen
  * @since MMBase-1.7
- * @version $Id: DepthProvider.java,v 1.2 2004/02/11 20:40:13 keesj Exp $
+ * @version $Id: DepthProvider.java,v 1.3 2008/02/14 14:36:31 michiel Exp $
  */
 public interface DepthProvider {
 
+    public static final String KEY = "org.mmbase.taglib.depth";
+
     /**
      * Returns the 'size' of the current cluster node (the number of steps 
(minus the relation steps))
      */


Index: DepthTag.java
===================================================================
RCS file: 
/var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/tree/DepthTag.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- DepthTag.java       10 Feb 2007 16:49:27 -0000      1.5
+++ DepthTag.java       14 Feb 2008 14:36:31 -0000      1.6
@@ -18,12 +18,12 @@
 /**
  * @author Michiel Meeuwissen
  * @since MMBase-1.7
- * @version $Id: DepthTag.java,v 1.5 2007/02/10 16:49:27 nklasens Exp $
+ * @version $Id: DepthTag.java,v 1.6 2008/02/14 14:36:31 michiel Exp $
  */
 public class DepthTag extends TreeReferrerTag implements Writer {
 
     public int doStartTag() throws JspTagException {
-        DepthProvider dp =  findParentTag(DepthProvider.class, (String) 
parentTreeId.getValue(this));
+        DepthProvider dp =  findDepthProvider();
         helper.setValue(new Integer(dp.getDepth()));
         if (getId() != null) {
             getContextProvider().getContextContainer().register(getId(), 
helper.getValue());


Index: OnShrinkTag.java
===================================================================
RCS file: 
/var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/tree/OnShrinkTag.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- OnShrinkTag.java    14 Nov 2006 22:53:49 -0000      1.3
+++ OnShrinkTag.java    14 Feb 2008 14:36:31 -0000      1.4
@@ -16,19 +16,22 @@
 /**
  * @author Michiel Meeuwissen
  * @since MMBase-1.7
- * @version $Id: OnShrinkTag.java,v 1.3 2006/11/14 22:53:49 michiel Exp $
+ * @version $Id: OnShrinkTag.java,v 1.4 2008/02/14 14:36:31 michiel Exp $
  */
 public class OnShrinkTag extends TreeReferrerTag implements DepthProvider { 
     private static final Logger log = 
Logging.getLoggerInstance(OnShrinkTag.class);
     private int depth;
+    private Object prevDepthProvider;
 
     public int getDepth() {
         return depth;
     }
 
     public int doStartTag() throws JspTagException {
-        DepthProvider dp = findParentTag(DepthProvider.class, (String) 
parentTreeId.getValue(this));
+        DepthProvider dp = findDepthProvider();
         depth = dp.getDepth();
+        prevDepthProvider = pageContext.getAttribute(DepthProvider.KEY, 
PageContext.REQUEST_SCOPE);
+        pageContext.setAttribute(DepthProvider.KEY, new 
BasicDepthProvider(getDepth()), PageContext.REQUEST_SCOPE);
         return EVAL_BODY_BUFFERED;
     }
 
@@ -44,6 +47,11 @@
         return super.doAfterBody();
     }
 
+    public int doEndTag() throws JspTagException  {
+        pageContext.setAttribute(DepthProvider.KEY, prevDepthProvider, 
PageContext.REQUEST_SCOPE);
+        prevDepthProvider = null;
+        return super.doEndTag();
+    }
 
 }
 


Index: TreeProvider.java
===================================================================
RCS file: 
/var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/tree/TreeProvider.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- TreeProvider.java   14 Nov 2006 22:53:49 -0000      1.3
+++ TreeProvider.java   14 Feb 2008 14:36:31 -0000      1.4
@@ -16,10 +16,12 @@
 /**
  * @author Michiel Meeuwissen
  * @since MMBase-1.7
- * @version $Id: TreeProvider.java,v 1.3 2006/11/14 22:53:49 michiel Exp $
+ * @version $Id: TreeProvider.java,v 1.4 2008/02/14 14:36:31 michiel Exp $
  */
 public interface TreeProvider extends NodeProvider, ListProvider, 
DepthProvider {
 
+    public static final String KEY = "org.mmbase.taglib.tree";
+
     public int getPreviousDepth();
 
     public int getNextDepth();


Index: TreeReferrerTag.java
===================================================================
RCS file: 
/var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/tree/TreeReferrerTag.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- TreeReferrerTag.java        10 Feb 2007 16:49:27 -0000      1.3
+++ TreeReferrerTag.java        14 Feb 2008 14:36:31 -0000      1.4
@@ -9,8 +9,8 @@
 */
 package org.mmbase.bridge.jsp.taglib.tree;
 
-
 import javax.servlet.jsp.JspTagException;
+import javax.servlet.jsp.PageContext;
 
 import org.mmbase.bridge.jsp.taglib.NodeReferrerTag;
 import org.mmbase.bridge.jsp.taglib.util.Attribute;
@@ -19,7 +19,7 @@
 /**
  * @author Michiel Meeuwissen
  * @since MMBase-1.7
- * @version $Id: TreeReferrerTag.java,v 1.3 2007/02/10 16:49:27 nklasens Exp $
+ * @version $Id: TreeReferrerTag.java,v 1.4 2008/02/14 14:36:31 michiel Exp $
  */
 abstract public class TreeReferrerTag extends NodeReferrerTag {
 
@@ -32,6 +32,16 @@
     }
 
 
+    /**
+     * @since MMBase-1.8.6
+     */
+    protected DepthProvider findDepthProvider() throws JspTagException {
+        DepthProvider dp =  findParentTag(DepthProvider.class, (String) 
parentTreeId.getValue(this), false);
+        if (dp != null) return dp;
+        dp = (DepthProvider) pageContext.getAttribute(DepthProvider.KEY, 
PageContext.REQUEST_SCOPE);
+        if (dp != null) return dp;
+        throw new JspTagException("Could not find parent depth provider");
+    }
 
     /**
      * This method tries to find an ancestor object of type NodeProvider
@@ -39,12 +49,12 @@
      *
      */        
     public TreeProvider findTreeProvider() throws JspTagException {        
-        return findParentTag(TreeProvider.class, (String) 
parentTreeId.getValue(this));
+        TreeProvider dp =  findParentTag(TreeProvider.class, (String) 
parentTreeId.getValue(this), false);
+        if (dp != null) return dp;
+        dp = (TreeProvider) pageContext.getAttribute(TreeProvider.KEY, 
PageContext.REQUEST_SCOPE);
+        if (dp != null) return dp;
+        throw new JspTagException("Could not find parent depth provider");
     }
 
 
-
-    
-
 }
-


Index: TreeTag.java
===================================================================
RCS file: 
/var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/tree/TreeTag.java,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -b -r1.22 -r1.23
--- TreeTag.java        2 Mar 2007 21:01:15 -0000       1.22
+++ TreeTag.java        14 Feb 2008 14:36:31 -0000      1.23
@@ -9,8 +9,9 @@
 */
 package org.mmbase.bridge.jsp.taglib.tree;
 
-
 import javax.servlet.jsp.JspTagException;
+import javax.servlet.jsp.PageContext;
+
 import java.io.IOException;
 import java.util.Stack;
 
@@ -46,7 +47,7 @@
 </pre>
  * @author Michiel Meeuwissen
  * @since MMBase-1.7
- * @version $Id: TreeTag.java,v 1.22 2007/03/02 21:01:15 nklasens Exp $
+ * @version $Id: TreeTag.java,v 1.23 2008/02/14 14:36:31 michiel Exp $
  */
 public class TreeTag extends AbstractNodeProviderTag implements TreeProvider, 
QueryContainerReferrer  {
     private static final Logger log = Logging.getLoggerInstance(TreeTag.class);
@@ -64,6 +65,9 @@
 
     private Node nextNode;
 
+    private Object prevDepthProvider;
+    private Object prevTreeProvider;
+
     /**
      * Lists do implement ContextProvider
      */
@@ -180,6 +184,10 @@
         log.debug("starttag");
         shrinkStack = new Stack<Entry>();
         collector = new ContextCollector(getContextProvider());
+        prevDepthProvider = pageContext.getAttribute(DepthProvider.KEY, 
PageContext.REQUEST_SCOPE);
+        prevTreeProvider = pageContext.getAttribute(TreeProvider.KEY, 
PageContext.REQUEST_SCOPE);
+        pageContext.setAttribute(DepthProvider.KEY, this, 
PageContext.REQUEST_SCOPE);
+        pageContext.setAttribute(TreeProvider.KEY, this, 
PageContext.REQUEST_SCOPE);
 
         // serve parent timer tag:
         TimerTag t = findParentTag(TimerTag.class, null, false);
@@ -321,12 +329,16 @@
         if (t != null) {
             t.haltTimer(timerHandle);
         }
+        pageContext.setAttribute(DepthProvider.KEY, prevDepthProvider, 
PageContext.REQUEST_SCOPE);
+        pageContext.setAttribute(TreeProvider.KEY, prevTreeProvider, 
PageContext.REQUEST_SCOPE);
         // dereference for gc
         tree = null;
         iterator = null;
         shrinkStack = null;
         nextNode = null;
         collector = null;
+        prevDepthProvider = null;
+        prevTreeProvider = null;
         return super.doEndTag();
     }
 
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to