KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > cache > xslt > FactoryCache


1 /*
2
3 This software is OSI Certified Open Source Software.
4 OSI Certified is a certification mark of the Open Source Initiative.
5
6 The license (Mozilla version 1.0) can be read at the MMBase site.
7 See http://www.MMBase.org/license
8
9 */

10 package org.mmbase.cache.xslt;
11
12 import org.mmbase.cache.Cache;
13 import org.mmbase.util.xml.URIResolver;
14
15 import javax.xml.transform.TransformerFactory JavaDoc;
16
17 import java.io.File JavaDoc;
18 import java.net.URL JavaDoc;
19
20 /**
21  * A cache for XSL Transformer Factories. There is one needed for
22  * every directory, or more precisely, for every instance of
23  * org.mmbase.util.xml.URIResolver.
24  *
25  * @author Michiel Meeuwissen
26  * @version $Id: FactoryCache.java,v 1.7 2005/01/30 16:46:38 nico Exp $
27  */

28 public class FactoryCache extends Cache {
29
30     private static int cacheSize = 50;
31     private static FactoryCache cache;
32     private static File JavaDoc defaultDir = new File JavaDoc("");
33
34     public static FactoryCache getCache() {
35         return cache;
36     }
37
38     static {
39         cache = new FactoryCache(cacheSize);
40         putCache(cache);
41     }
42
43     public String JavaDoc getName() {
44         return "XSLFactories";
45     }
46     public String JavaDoc getDescription() {
47         return "XSL Transformer Factories";
48     }
49
50     /**
51      * Creates the XSL Template Cache.
52      */

53     private FactoryCache(int size) {
54         super(size);
55     }
56
57     /**
58      * If it you are sure not to use the URIResolver, then you can as
59      * well use always the same Factory. This function supplies one.
60      */

61     public TransformerFactory JavaDoc getDefaultFactory() {
62         return getFactory(defaultDir);
63     }
64
65     /**
66      * Make a factory for a certain URIResolver.
67      */

68     public TransformerFactory JavaDoc getFactory(URIResolver uri) {
69         TransformerFactory JavaDoc tf = (TransformerFactory JavaDoc) get(uri);
70         if (tf == null) {
71             tf = TransformerFactory.newInstance();
72             tf.setURIResolver(uri);
73             // you must set the URIResolver in the tfactory, because it will not be called everytime, when you use Templates-caching.
74
put(uri, tf);
75         }
76         return tf;
77     }
78     /**
79      * Gets a Factory from the cache. This cache is 'intelligent', you
80      * can also get from it when it is not in the cache, in which case
81      * a new Factory will be created (and put in the cache).
82      * @deprecated
83      */

84     
85     public TransformerFactory JavaDoc getFactory(File JavaDoc cwd) {
86         try {
87             TransformerFactory JavaDoc tf = (TransformerFactory JavaDoc) get(new URIResolver(new URL JavaDoc("file://" + cwd), true)); // quick access (true means: don't actually create an URIResolver)
88
if (tf == null) {
89                 // try again, but now construct URIResolver first.
90
return getFactory(new URIResolver(new URL JavaDoc("file://" + cwd)));
91             } else {
92                 return tf;
93             }
94         } catch (Exception JavaDoc e) {
95             return null;
96         }
97     }
98
99     public TransformerFactory JavaDoc getFactory(URL JavaDoc cwd) {
100         TransformerFactory JavaDoc tf = (TransformerFactory JavaDoc) get(new URIResolver(cwd, true)); // quick access (true means: don't actually create an URIResolver)
101
if (tf == null) {
102             // try again, but now construct URIResolver first.
103
return getFactory(new URIResolver(cwd));
104         } else {
105             return tf;
106         }
107     }
108
109
110
111 }
112
Popular Tags