KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > webman > util > xslt > XSLTTemplateCache


1 package de.webman.util.xslt;
2
3 import java.io.File JavaDoc;
4 import java.util.Hashtable JavaDoc;
5 import javax.xml.transform.ErrorListener JavaDoc;
6 import javax.xml.transform.Transformer JavaDoc;
7 import javax.xml.transform.TransformerFactory JavaDoc;
8 import javax.xml.transform.TransformerException JavaDoc;
9 import javax.xml.transform.stream.StreamSource JavaDoc;
10
11 /**
12  * Implementierung eines simplen XSL-Transformer-Caches.
13  *
14  * @author $Author: uli $
15  * @version $Revision: 1.1 $
16  */

17 public class XSLTTemplateCache
18 {
19
20     // $Id: XSLTTemplateCache.java,v 1.1 2001/09/10 14:32:49 uli Exp $
21

22     // Constants.
23

24     /**
25      * The stylesheet template cache.
26      */

27     private static Hashtable JavaDoc cache = new Hashtable JavaDoc();
28
29     /**
30      * The modification date cache.
31      */

32     private static Hashtable JavaDoc dates = new Hashtable JavaDoc();
33
34     /**
35      * The error listener.
36      */

37     private static ErrorListener JavaDoc ERROR_LISTENER = null;
38
39     /**
40      * The transformer factory.
41      */

42     private static TransformerFactory JavaDoc TRANSFORMER_FACTORY = null;
43
44
45     // Static access.
46

47     /**
48      * Returns the error listener.
49      *
50      * @return the error listener.
51      */

52     public static synchronized ErrorListener JavaDoc getErrorListener ()
53     {
54         if (ERROR_LISTENER == null)
55         {
56             // Lazy initialization.
57
ERROR_LISTENER = new XSLTErrorListener();
58         }
59
60         return ERROR_LISTENER;
61     }
62
63     /**
64      * Returns the transformer factory.
65      *
66      * @return the transformer factory.
67      */

68     public static synchronized TransformerFactory JavaDoc getTransformerFactory ()
69     {
70         if (TRANSFORMER_FACTORY == null)
71         {
72             // Lazy initialization.
73
TRANSFORMER_FACTORY = TransformerFactory.newInstance();
74             TRANSFORMER_FACTORY.setErrorListener(getErrorListener());
75         }
76
77         return TRANSFORMER_FACTORY;
78     }
79
80     /**
81      * Returns a transformer for the specified stylesheet.
82      *
83      * @param name the absolute file name of the stylesheet.
84      * @return a transformer for the specified stylesheet.
85      */

86     public static synchronized Transformer JavaDoc getTransformer (String JavaDoc name)
87         throws TransformerException JavaDoc
88     {
89         // Optimistic initialization.
90
Transformer JavaDoc transformer = (Transformer JavaDoc) cache.get(name);
91
92         // Check file date.
93
File JavaDoc file = new File JavaDoc(name);
94         Long JavaDoc lastModified = new Long JavaDoc(file.lastModified());
95         Long JavaDoc cacheModified = (Long JavaDoc) dates.get(name);
96
97         if (! lastModified.equals(cacheModified))
98         {
99             // Cache dirty or empty.
100
transformer = getTransformerFactory().newTransformer(new StreamSource JavaDoc(file));
101             transformer.setErrorListener(getErrorListener());
102
103             dates.put(name, lastModified);
104             cache.put(name, transformer);
105         }
106
107         return transformer;
108     }
109
110 }
111
Popular Tags