1 12 13 17 package com.openedit.generators; 18 19 import java.util.Enumeration ; 20 21 import javax.servlet.http.HttpServletRequest ; 22 import javax.xml.transform.Source ; 23 import javax.xml.transform.Transformer ; 24 import javax.xml.transform.TransformerFactory ; 25 import javax.xml.transform.stream.StreamResult ; 26 import javax.xml.transform.stream.StreamSource ; 27 28 import org.apache.commons.logging.Log; 29 import org.apache.commons.logging.LogFactory; 30 31 import com.openedit.Generator; 32 import com.openedit.OpenEditException; 33 import com.openedit.WebPageRequest; 34 import com.openedit.page.Page; 35 import com.openedit.page.manage.PageManager; 36 37 38 44 public class XsltGenerator extends BaseGenerator implements Generator 45 { 46 private static Log log = LogFactory.getLog(XsltGenerator.class); 47 protected String fieldStyleSheet; 48 protected PageManager fieldPageManager; 49 protected boolean fieldUseRequestParameters; 50 protected Transformer fieldTransformer; 51 protected long lastModTime = -1; 52 65 public void generate( WebPageRequest inContext, Page inPage, Output inOut ) 66 throws OpenEditException 67 { 68 StreamSource xmlSource = null; 69 xmlSource = new StreamSource (inPage.getReader()); 70 71 try 75 { 76 Transformer transformer = getTransformer(); 77 synchronized ( transformer ) 78 { 79 if ( useRequestParameters() ) 80 { 81 populateParameters( inContext ); 82 } 83 84 StreamResult result = new StreamResult (inOut.getWriter()); 85 String home = (String ) inContext.getPageValue("home"); 86 transformer.setParameter("home", home); 87 88 transformer.transform(xmlSource, result); 89 transformer.clearParameters(); 90 } 91 } 92 catch (Exception ex) 93 { 94 throw new OpenEditException(ex); 95 } 96 } 97 98 protected Transformer getTransformer() throws Exception 99 { 100 Page style = getPageManager().getPage( getStyleSheet() ); 101 long mod = style.getContentItem().lastModified().getTime(); 102 if ( mod != lastModTime) 103 { 104 lastModTime = mod; 105 Source source = new StreamSource (style.getReader()); 106 fieldTransformer = TransformerFactory.newInstance().newTransformer(source); 107 } 108 return fieldTransformer; 109 } 110 111 114 protected void populateParameters( WebPageRequest inContext ) throws Exception 115 { 116 HttpServletRequest request = inContext.getRequest(); 117 getTransformer().setParameter("requestURI", request.getRequestURI()); 118 getTransformer().setParameter("queryString", request.getQueryString()); 119 120 for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) 121 { 122 String name = (String ) e.nextElement(); 123 getTransformer().setParameter(name, request.getParameter(name)); 124 } 125 } 126 127 131 protected boolean useRequestParameters() 132 { 133 return fieldUseRequestParameters; 134 } 135 136 public void setUseRequestParamters( boolean inUseRequestParameters ) 137 { 138 fieldUseRequestParameters = inUseRequestParameters; 139 } 140 public PageManager getPageManager() 141 { 142 return fieldPageManager; 143 } 144 public void setPageManager( PageManager pageManager ) 145 { 146 fieldPageManager = pageManager; 147 } 148 public String getStyleSheet() 149 { 150 return fieldStyleSheet; 151 } 152 public void setStyleSheet( String styleSheet ) 153 { 154 fieldStyleSheet = styleSheet; 155 } 156 } | Popular Tags |