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
87
88
89
90 TransformerHandler handler = factory.newTransformerHandler(templates);
91
92
93 return new TransformerFilterImpl(handler);
94
95
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
111 return new TransformerFilterImpl(handler);
112
113
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
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
139 Templates t = (Templates) cache.get(systemId);
140
141 if (t == null) {
142
143
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
218
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
236
237
238
239
240
241
242
243