1 16 17 package org.apache.taglibs.xtags.xpath; 18 19 20 21 import java.io.IOException ; 22 import java.util.Iterator ; 23 import java.util.List ; 24 25 import javax.servlet.jsp.PageContext ; 26 import javax.servlet.jsp.tagext.Tag ; 27 import javax.servlet.jsp.tagext.TagSupport ; 28 29 import org.dom4j.Node; 30 import org.dom4j.io.OutputFormat; 31 import org.dom4j.io.XMLWriter; 32 import org.dom4j.rule.Stylesheet; 33 34 38 public class TagHelper { 39 40 43 public static final String REQUEST_KEY_CONTEXT = "org.apache.taglibs.xtags.taglib.Context"; 44 45 47 public static final String REQUEST_KEY_STYLESHEET = "org.apache.taglibs.xtags.taglib.Stylesheet"; 48 49 protected static final OutputFormat outputFormat; 50 51 54 public static final String REQUEST_KEY_XML_WRITER = "org.apache.taglibs.xtags.XMLWriter"; 55 56 static { 57 outputFormat = new OutputFormat(); 58 outputFormat.setSuppressDeclaration(true); 59 } 60 61 62 public static OutputFormat getOutputFormat( PageContext pageContext ) { 63 return outputFormat; 64 } 65 66 public static XMLWriter getXMLWriter(PageContext pageContext, Tag thisTag) { 67 OutputTag tag = (OutputTag) TagSupport.findAncestorWithClass( 68 thisTag, OutputTag.class 69 ); 70 if ( tag != null ) { 71 return tag.getXMLWriter(); 72 } 73 return new XMLWriter( pageContext.getOut(), getOutputFormat( pageContext ) ); 74 } 75 76 public static XMLWriter createXMLWriter(PageContext pageContext) { 77 return new XMLWriter( pageContext.getOut(), getOutputFormat( pageContext ) ); 78 } 79 80 81 82 84 public static Object getInputNodes(PageContext pageContext) { 85 Object nodes = pageContext.getAttribute( 86 REQUEST_KEY_CONTEXT, PageContext.PAGE_SCOPE 87 ); 88 if (nodes == null) { 89 nodes = pageContext.getAttribute( 90 REQUEST_KEY_CONTEXT, PageContext.REQUEST_SCOPE 91 ); 92 } 93 return nodes; 94 } 95 96 98 public static Object getInputNodes(PageContext pageContext, Tag thisTag, boolean warn) { 99 Object context = null; 100 ContextNodeTag tag = (ContextNodeTag) TagSupport.findAncestorWithClass( 101 thisTag, ContextNodeTag.class 102 ); 103 if ( tag != null ) { 104 context = tag.getContext(); 105 } 106 if ( context == null ) { 107 context = getInputNodes( pageContext ); 108 } 109 116 return context; 117 } 118 119 public static void setInputNodes( PageContext pageContext, Object inputNodes ) { 120 if ( inputNodes == null ) { 121 pageContext.removeAttribute( 122 REQUEST_KEY_CONTEXT, 123 PageContext.PAGE_SCOPE 124 ); 125 pageContext.removeAttribute( 126 REQUEST_KEY_CONTEXT, 127 PageContext.REQUEST_SCOPE 128 ); 129 } 130 else { 131 pageContext.setAttribute( 132 REQUEST_KEY_CONTEXT, 133 inputNodes, 134 PageContext.PAGE_SCOPE 135 ); 136 pageContext.setAttribute( 137 REQUEST_KEY_CONTEXT, 138 inputNodes, 139 PageContext.REQUEST_SCOPE 140 ); 141 } 142 } 143 144 public static Stylesheet getStylesheet(PageContext pageContext) { 145 return (Stylesheet) pageContext.getAttribute( 146 REQUEST_KEY_STYLESHEET, 147 PageContext.REQUEST_SCOPE 148 ); 149 } 150 151 public static void setStylesheet(PageContext pageContext, Stylesheet stylesheet) { 152 pageContext.setAttribute( 153 REQUEST_KEY_STYLESHEET, 154 stylesheet, 155 PageContext.REQUEST_SCOPE 156 ); 157 } 158 159 public static void defineVariable(PageContext pageContext, String id, Object value ) { 160 if ( id != null ) { 161 pageContext.setAttribute( id, value ); 162 } 163 setInputNodes( pageContext, value ); 164 } 165 } 166 | Popular Tags |