KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > openedit > generators > XsltGenerator


1 /*
2 Copyright (c) 2003 eInnovation Inc. All rights reserved
3
4 This library is free software; you can redistribute it and/or modify it under the terms
5 of the GNU Lesser General Public License as published by the Free Software Foundation;
6 either version 2.1 of the License, or (at your option) any later version.
7
8 This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
9 without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10 See the GNU Lesser General Public License for more details.
11 */

12
13 /*
14  * (c) Copyright 2001 MyCorporation.
15  * All Rights Reserved.
16  */

17 package com.openedit.generators;
18
19 import java.util.Enumeration JavaDoc;
20
21 import javax.servlet.http.HttpServletRequest JavaDoc;
22 import javax.xml.transform.Source JavaDoc;
23 import javax.xml.transform.Transformer JavaDoc;
24 import javax.xml.transform.TransformerFactory JavaDoc;
25 import javax.xml.transform.stream.StreamResult JavaDoc;
26 import javax.xml.transform.stream.StreamSource JavaDoc;
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 /**
39  * This generator transforms XML input through an XSLT stylesheet.
40  *
41  * @author Eric Galluzzo
42  * @author Matt Avery, mavery@einnovation.com
43  */

44 public class XsltGenerator extends BaseGenerator implements Generator
45 {
46     private static Log log = LogFactory.getLog(XsltGenerator.class);
47     protected String JavaDoc fieldStyleSheet;
48     protected PageManager fieldPageManager;
49     protected boolean fieldUseRequestParameters;
50     protected Transformer JavaDoc fieldTransformer;
51     protected long lastModTime = -1;
52     /**
53      * Run the given page through the stylesheet specified in its config file and output the result
54      * to the given output stream. This generator accepts a configuration which looks like this:
55      * <pre>
56      * &lt;generator name="xslt"&gt;
57      * &lt;stylesheet&gt;/path/to/my/stylesheet.xsl&lt;/stylesheet&gt;
58      * [&lt;use-request-parameters&gt;true&lt;/use-request-parameters&gt;]
59      * [&lt;generator&gt;...&lt;/generator&gt;]
60      * &lt;/generator&gt;
61      * </pre>
62      *
63      * @see Generator#generate(Page, WebPageContext)
64      */

65     public void generate( WebPageRequest inContext, Page inPage, Output inOut )
66         throws OpenEditException
67     {
68         StreamSource JavaDoc xmlSource = null;
69         xmlSource = new StreamSource JavaDoc(inPage.getReader());
70
71         // Put all the request parameters as parameters to the stylesheet, if
72
// the user so desired. In addition, pass "requestURI" and
73
// "queryString" parameters, which have the obvious values.
74
try
75         {
76             Transformer JavaDoc transformer = getTransformer();
77             synchronized ( transformer )
78             {
79                 if ( useRequestParameters() )
80                 {
81                     populateParameters( inContext );
82                 }
83     
84                 StreamResult JavaDoc result = new StreamResult JavaDoc(inOut.getWriter());
85                 String JavaDoc home = (String JavaDoc) inContext.getPageValue("home");
86                 transformer.setParameter("home", home);
87     
88                 transformer.transform(xmlSource, result);
89                 transformer.clearParameters();
90             }
91         }
92         catch (Exception JavaDoc ex)
93             {
94                 throw new OpenEditException(ex);
95             }
96     }
97
98     protected Transformer JavaDoc getTransformer() throws Exception JavaDoc
99     {
100         Page style = getPageManager().getPage( getStyleSheet() );
101         long mod = style.getContentItem().lastModified().getTime();
102         if ( mod != lastModTime)
103         {
104             lastModTime = mod;
105             Source JavaDoc source = new StreamSource JavaDoc(style.getReader());
106             fieldTransformer = TransformerFactory.newInstance().newTransformer(source);
107         }
108         return fieldTransformer;
109     }
110
111     /**
112      * @param inContext
113      */

114     protected void populateParameters( WebPageRequest inContext ) throws Exception JavaDoc
115     {
116         HttpServletRequest JavaDoc request = inContext.getRequest();
117         getTransformer().setParameter("requestURI", request.getRequestURI());
118         getTransformer().setParameter("queryString", request.getQueryString());
119         
120         for (Enumeration JavaDoc e = request.getParameterNames(); e.hasMoreElements();)
121         {
122             String JavaDoc name = (String JavaDoc) e.nextElement();
123             getTransformer().setParameter(name, request.getParameter(name));
124         }
125     }
126
127     /**
128      * @param inGenConfig
129      * @return
130      */

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 JavaDoc getStyleSheet()
149     {
150         return fieldStyleSheet;
151     }
152     public void setStyleSheet( String JavaDoc styleSheet )
153     {
154         fieldStyleSheet = styleSheet;
155     }
156 }
Popular Tags