KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > bridge > jsp > taglib > NodeReferrerTag


1 /*
2
3 This software is OSI Certified Open Source Software.
4 OSI Certified is a certification mark of the Open Source Initiative.
5
6 The license (Mozilla version 1.0) can be read at the MMBase site.
7 See http://www.MMBase.org/license
8
9 */

10 package org.mmbase.bridge.jsp.taglib;
11
12 import org.mmbase.bridge.jsp.taglib.util.Attribute;
13 import javax.servlet.jsp.JspTagException JavaDoc;
14 import javax.servlet.jsp.PageContext JavaDoc;
15 import java.util.Locale JavaDoc;
16 import org.mmbase.util.functions.Parameter;
17 import org.mmbase.util.functions.Parameters;
18
19 import org.mmbase.bridge.Node;
20 import org.mmbase.bridge.Cloud;
21
22 import org.mmbase.util.logging.Logger;
23 import org.mmbase.util.logging.Logging;
24 /**
25  * A tag which is a 'NodeReferrerTag's can be the child of a
26  * NodeProvider tag, which supplies a 'Node' to its child tags. For
27  * example the FieldTag, needs the use the Node of the parent
28  * NodeProviderTag and therefore would be a NodeReferrerTag.
29  *
30  * @author Michiel Meeuwissen
31  * @version $Id: NodeReferrerTag.java,v 1.26.2.1 2006/12/05 19:34:50 michiel Exp $
32  */

33
34 public abstract class NodeReferrerTag extends CloudReferrerTag {
35
36     private static final Logger log = Logging.getLoggerInstance(NodeReferrerTag.class);
37     protected Attribute parentNodeId = Attribute.NULL;
38     private Attribute element = Attribute.NULL;
39     /**
40      * The element attribute is used to access elements of
41      * clusternodes.
42      * @since MMBase-1.7.4
43      */

44     public void setElement(String JavaDoc e) throws JspTagException JavaDoc {
45         element = getAttribute(e);
46     }
47
48
49     /**
50      * A NodeReferrer probably wants to supply the attribute 'node',
51      * to make it possible to refer to another node than the direct
52      * ancestor.
53      **/

54
55     public void setNode(String JavaDoc node) throws JspTagException JavaDoc {
56         parentNodeId = getAttribute(node);
57     }
58
59     /**
60     * This method tries to find an ancestor object of type NodeProvider
61     * @return the NodeProvider if found else an exception.
62     *
63     */

64     public NodeProvider findNodeProvider() throws JspTagException JavaDoc {
65         return (NodeProvider) findParentTag(NodeProvider.class, (String JavaDoc) parentNodeId.getValue(this));
66     }
67     /**
68     * This method tries to find an ancestor object of type NodeProvider
69     * @return the NodeProvider or null.
70     *
71     */

72     public NodeProvider findNodeProvider(boolean throwexception) throws JspTagException JavaDoc {
73         return (NodeProvider) findParentTag(NodeProvider.class, (String JavaDoc) parentNodeId.getValue(this), throwexception);
74     }
75
76     /**
77      * Gets the Node variable from the parent NodeProvider.
78      * @return a org.mmbase.bridge.Node
79      */

80
81     protected Node getNode() throws JspTagException JavaDoc {
82         Node node = findNodeProvider().getNodeVar();
83         if (node != null && element != Attribute.NULL) {
84             node = node.getNodeValue(element.getString(this));
85         }
86         return node;
87     }
88     public Cloud getCloudVar() throws JspTagException JavaDoc {
89         NodeProvider np = findNodeProvider(false);
90         if (np != null) {
91             Node n = np.getNodeVar();
92             if (n != null) return n.getCloud();
93         }
94         return super.getCloudVar();
95     }
96
97
98     protected void fillStandardParameters(Parameters p) throws JspTagException JavaDoc {
99         super.fillStandardParameters(p);
100         NodeProvider np = findNodeProvider(false);
101         if (np != null) {
102             Node node = np.getNodeVar();
103             Cloud cloud = node.getCloud();
104             p.setIfDefined(Parameter.CLOUD, cloud);
105             p.setIfDefined(Parameter.USER, cloud.getUser());
106
107         }
108     }
109
110     public Locale JavaDoc getLocale() throws JspTagException JavaDoc {
111         LocaleTag localeTag = (LocaleTag)findParentTag(LocaleTag.class, null, false);
112         if (localeTag != null) {
113             Locale JavaDoc locale = localeTag.getLocale();
114             if (locale != null) {
115                 return locale;
116             }
117         }
118         CloudProvider cp = findCloudProvider(false);
119         if (cp != null) {
120             return getCloudVar().getLocale();
121         }
122         NodeProvider np = findNodeProvider(false);
123         if (np != null) {
124             return np.getNodeVar().getCloud().getLocale();
125         }
126         Locale JavaDoc loc = (Locale JavaDoc) pageContext.getAttribute(LocaleTag.KEY, LocaleTag.SCOPE);
127         if (loc != null) return loc;
128         return getCloudContext().getDefaultLocale();
129     }
130
131 }
132
Popular Tags