View Javadoc

1   package net.sf.tomp.xtcl.filter;
2   
3   import net.sf.tomp.xtcl.Context;
4   
5   import org.apache.commons.logging.Log;
6   import org.apache.commons.logging.LogFactory;
7   import org.xml.sax.XMLFilter;
8   
9   import javax.xml.transform.Templates;
10  import javax.xml.transform.TransformerConfigurationException;
11  import javax.xml.transform.TransformerException;
12  import javax.xml.transform.sax.SAXTransformerFactory;
13  import javax.xml.transform.sax.TransformerHandler;
14  import javax.xml.transform.stream.StreamSource;
15  
16  import java.util.HashMap;
17  import java.util.Map;
18  
19  /***
20   * DOCUMENT ME!
21   * 
22   * @author tomp
23   */
24  public class XTFilterFactoryImpl implements XTFilterFactory, TemplatesCache {
25      
26      private static Log log = LogFactory.getLog(XTFilterFactoryImpl.class);
27  
28      /*** DOCUMENT ME! */
29      protected Context context;
30  
31      /*** DOCUMENT ME! */
32      protected SAXTransformerFactory factory;
33  
34      /*** DOCUMENT ME! */
35      protected net.sf.joost.trax.TransformerFactoryImpl jtf;
36  
37      /*** DOCUMENT ME! */
38      protected Map cache;
39  
40      /***
41       * Creates a new XTFilterFactoryImpl object.
42       * 
43       * @param factory DOCUMENT ME!
44       * @param jtf DOCUMENT ME!
45       */
46      public XTFilterFactoryImpl(
47              Context c, 
48              SAXTransformerFactory factory,
49              net.sf.joost.trax.TransformerFactoryImpl jtf) {
50          this.context = c;
51          this.factory = factory;
52          this.jtf = jtf;
53          cache = new HashMap();
54      }
55  
56      /***
57       * DOCUMENT ME!
58       * 
59       * @param className DOCUMENT ME!
60       * @return DOCUMENT ME!
61       * @throws ClassNotFoundException DOCUMENT ME!
62       * @throws InstantiationException DOCUMENT ME!
63       * @throws IllegalAccessException DOCUMENT ME!
64       */
65      public XMLFilter newXMLFilter(String className)
66              throws ClassNotFoundException, InstantiationException,
67              IllegalAccessException {
68          Class filterClass = Class.forName(className);
69          XMLFilter f = (XMLFilter) filterClass.newInstance();
70          if(f instanceof XTFilter) {
71          	((XTFilter)f).setContext(context);
72          }
73          return f;
74      }
75  
76      /***
77       * DOCUMENT ME!
78       * 
79       * @param templates DOCUMENT ME!
80       * @return DOCUMENT ME!
81       * @throws TransformerConfigurationException DOCUMENT ME!
82       */
83      public XMLFilter newTransformerFilter(Templates templates)
84              throws TransformerConfigurationException {
85          /*
86           * if (!(templates instanceof PreparedStyleSheet)) { throw new
87           * TransformerConfigurationException( "Supplied Templates object was not
88           * created using Saxon"); }
89           */
90          TransformerHandler handler = factory.newTransformerHandler(templates);
91  
92          //Controller controller = (Controller)templates.newTransformer();
93          return new TransformerFilterImpl(handler);
94  
95          //return factory.newXMLFilter(templates);
96      }
97  
98      /***
99       * DOCUMENT ME!
100      * 
101      * @param systemId DOCUMENT ME!
102      * @return DOCUMENT ME!
103      * @throws TransformerConfigurationException DOCUMENT ME!
104      */
105     public XMLFilter newTransformerFilter(String systemId)
106             throws TransformerConfigurationException {
107         TransformerHandler handler = factory
108                 .newTransformerHandler(getTemplates(systemId));
109 
110         //Controller controller = (Controller)templates.newTransformer();
111         return new TransformerFilterImpl(handler);
112 
113         //return factory.newXMLFilter(new StreamSource(systemId));
114     }
115 
116     /***
117      * DOCUMENT ME!
118      * 
119      * @param systemId DOCUMENT ME!
120      * @return DOCUMENT ME!
121      * @throws TransformerConfigurationException DOCUMENT ME!
122      */
123     public Templates newTemplates(String systemId)
124             throws TransformerConfigurationException {
125         //System.out.println("----- newTemplates(systemId="+systemId+")");
126         return getTemplates(systemId);
127     }
128 
129     /***
130      * DOCUMENT ME!
131      * 
132      * @param systemId DOCUMENT ME!
133      * @return DOCUMENT ME!
134      * @throws TransformerConfigurationException DOCUMENT ME!
135      */
136     public Templates getTemplates(String systemId)
137             throws TransformerConfigurationException {
138         //System.out.println("----- newTemplates(systemId="+systemId+")");
139         Templates t = (Templates) cache.get(systemId);
140 
141         if (t == null) {
142 //            t = factory.newTemplates(new StreamSource(systemId));
143 //            changed by TP Sept 26 2004
144             try {
145             t = factory.newTemplates(factory.getURIResolver().resolve(systemId, ""));
146             } catch(TransformerException te) {
147                 throw new TransformerConfigurationException(te);
148             }
149             cache.put(systemId, t);
150         }
151 
152         return t;
153     }
154 
155     /***
156      * DOCUMENT ME!
157      * 
158      * @param templates DOCUMENT ME!
159      * @return DOCUMENT ME!
160      * @throws TransformerConfigurationException DOCUMENT ME!
161      */
162     public XMLFilter newJoostFilter(Templates templates)
163             throws TransformerConfigurationException {
164         log.debug("newJoostFilter(Templates=" + templates + ")");
165 
166         TransformerHandler handler = jtf.newTransformerHandler(templates);
167 
168         return new TransformerFilterImpl(handler);
169     }
170 
171     /***
172      * DOCUMENT ME!
173      * 
174      * @param systemId DOCUMENT ME!
175      * @return DOCUMENT ME!
176      * @throws TransformerConfigurationException DOCUMENT ME!
177      */
178     public Templates newJoostTemplates(String systemId)
179             throws TransformerConfigurationException {
180         return jtf.newTemplates(new StreamSource(systemId));
181     }
182 
183     /***
184      * DOCUMENT ME!
185      * 
186      * @param systemId DOCUMENT ME!
187      * @return DOCUMENT ME!
188      * @throws TransformerConfigurationException DOCUMENT ME!
189      */
190     public XMLFilter newJoostFilter(String systemId)
191             throws TransformerConfigurationException {
192         log.debug("newJoostFilter(systemId=" + systemId + ")");
193 
194         TransformerHandler handler = jtf
195                 .newTransformerHandler(new StreamSource(systemId));
196 
197         return new TransformerFilterImpl(handler);
198     }
199 
200     /***
201      * DOCUMENT ME!
202      * 
203      * @return DOCUMENT ME!
204      * @throws TransformerConfigurationException DOCUMENT ME!
205      */
206     public TeeFilter newTeeFilter() throws TransformerConfigurationException {
207         return new TeeFilterImpl();
208     }
209 
210     /***
211      * DOCUMENT ME!
212      * 
213      * @return DOCUMENT ME!
214      */
215 
216     /*
217      * public DerivationFilter newDerivationFilter() { return new
218      * DerivationFilter(); }
219      */
220     /***
221      * @return Returns the context.
222      */
223     public Context getContext() {
224         return context;
225     }
226     /***
227      * @param context The context to set.
228      */
229     public void setContext(Context context) {
230         this.context = context;
231     }
232 }
233 
234 /*
235  * The contents of this file are subject to the Mozilla Public License Version
236  * 1.1 (the "License"); you may not use this file except in compliance with the
237  * License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
238  * Software distributed under the License is distributed on an "AS IS" basis,
239  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
240  * the specific language governing rights and limitations under the License. The
241  * Original Code is: all this file. The Initial Developer of the Original Code
242  * is: Tomas Pitner, Masaryk University in Brno, Czech Republic. Contributor(s):
243  */