1 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 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 t) throws JspTagException { 40 type = getAttribute(t); 41 } 42 public void setReferid(String r) throws JspTagException { 43 referid = getAttribute(r); 44 } 45 46 public void addParameter(String key, Object 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 |