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