KickJava   Java API By Example, From Geeks To Geeks.

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


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 org.mmbase.util.Entry;
14 import org.mmbase.util.functions.Parameters;
15 import org.mmbase.util.transformers.*;
16 import javax.servlet.jsp.*;
17 import java.util.*;
18 import org.mmbase.util.logging.*;
19
20 /**
21  * Configures a new Escaper on this page.
22  *
23  * @author Michiel Meeuwissen
24  * @version $Id: EscaperTag.java,v 1.9 2006/07/17 15:38:47 johannes Exp $
25  * @since MMBase-1.8
26  */

27
28 public class EscaperTag extends ContextReferrerTag implements ParamHandler {
29
30     private static final Logger log = Logging.getLoggerInstance(EscaperTag.class);
31     protected Parameters parameters;
32     protected CharTransformer transformer;
33     
34     private Attribute type = Attribute.NULL;
35     private Attribute referid = Attribute.NULL;
36            
37     private ParameterizedTransformerFactory factory;
38
39     public void setType(String JavaDoc t) throws JspTagException {
40         type = getAttribute(t);
41     }
42     public void setReferid(String JavaDoc r) throws JspTagException {
43         referid = getAttribute(r);
44     }
45
46     public void addParameter(String JavaDoc key, Object JavaDoc value) throws JspTagException {
47         parameters.set(key, value);
48     }
49
50     public void chain(CharTransformer trans) throws JspTagException {
51         if (transformer == null) {
52             throw new JspTagException("This Escaper tag is not a chain (it defines a type)");
53         }
54         if (! (transformer instanceof ChainedCharTransformer)) {
55             throw new JspTagException("Transformer " + transformer + " is not a chain");
56         }
57         ((ChainedCharTransformer) transformer).add(trans);
58     }
59
60     public int doStartTag() throws JspException {
61         if (referid != Attribute.NULL) {
62             transformer = ContentTag.getCharTransformer(referid.getString(this), this);
63             if (transformer == null) transformer = ContentTag.COPY;
64         } else {
65             if (type != Attribute.NULL) {
66                 factory = ContentTag.getTransformerFactory(type.getString(this));
67                 parameters = factory.createParameters();
68                 parameters.setAutoCasting(true);
69                 fillStandardParameters(parameters);
70             } else {
71                 transformer = new ChainedCharTransformer();
72             }
73         }
74
75         return super.doStartTag();
76     }
77
78
79     public int doEndTag() throws JspTagException {
80         if(transformer == null) {
81             if (log.isDebugEnabled()) {
82                 log.debug("Parameters " + parameters);
83             }
84             transformer = (CharTransformer) factory.createTransformer(parameters);
85         }
86         if (getId() != null) {
87             getContextProvider().getContextContainer().register(getId(), transformer);
88         } else {
89             EscaperTag parent = (EscaperTag) findParentTag(EscaperTag.class, null, false);
90             if (parent == null) throw new JspTagException("EscaperTag without id must live as child of another Escaper tag");
91             parent.chain(transformer);
92
93         }
94         factory = null;
95         parameters = null;
96         transformer = null;
97         return super.doEndTag();
98     }
99
100     public void doFinally() {
101         factory = null;
102         parameters = null;
103         transformer = null;
104         super.doFinally();
105     }
106 }
107
Popular Tags