KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > resource > DefaultResourceManager


1 package org.objectweb.celtix.resource;
2
3 import java.io.InputStream JavaDoc;
4 import java.util.LinkedList JavaDoc;
5 import java.util.List JavaDoc;
6 import java.util.logging.Level JavaDoc;
7 import java.util.logging.Logger JavaDoc;
8
9 import org.objectweb.celtix.common.logging.LogUtils;
10
11 public class DefaultResourceManager implements ResourceManager {
12     
13     private static final Logger JavaDoc LOG = LogUtils.getL7dLogger(DefaultResourceManager.class);
14     private static ResourceManager instance;
15
16     protected final List JavaDoc<ResourceResolver> resolvers = new LinkedList JavaDoc<ResourceResolver>();
17
18
19     public DefaultResourceManager() {
20         initializeDefaultResolvers();
21     }
22     
23     public final <T> T resolveResource(String JavaDoc name, Class JavaDoc<T> type) {
24         return findResource(name, type, false);
25     }
26
27
28     public final InputStream JavaDoc getResourceAsStream(String JavaDoc name) {
29         return findResource(name, InputStream JavaDoc.class, true);
30     }
31
32
33     public final void addResourceResolver(ResourceResolver resolver) {
34         if (!resolvers.contains(resolver)) {
35             resolvers.add(0, resolver);
36         }
37     }
38
39     public final void removeResourceResolver(ResourceResolver resolver) {
40         if (resolvers.contains(resolver)) {
41             resolvers.remove(resolver);
42         }
43     }
44
45
46     public final List JavaDoc getResourceResolvers() {
47         return resolvers;
48     }
49
50     
51     private <T> T findResource(String JavaDoc name, Class JavaDoc<T> type, boolean asStream) {
52         if (LOG.isLoggable(Level.FINE)) {
53             LOG.fine("resolving resource <" + name + ">" + (asStream ? " as stream "
54                                                             : " type <" + type + ">"));
55         }
56
57         T ret = null;
58         for (ResourceResolver rr : resolvers) {
59             if (asStream) {
60                 ret = type.cast(rr.getAsStream(name));
61             } else {
62                 ret = rr.resolve(name, type);
63             }
64             if (ret != null) {
65                 break;
66             }
67         }
68         return ret;
69     }
70
71
72     public static synchronized ResourceManager instance() {
73         if (instance == null) {
74             instance = new DefaultResourceManager();
75         }
76         return instance;
77     }
78     public static synchronized void clearInstance() {
79         instance = null;
80     }
81
82     private void initializeDefaultResolvers() {
83         addResourceResolver(new ClasspathResolver());
84         addResourceResolver(new ClassLoaderResolver(getClass().getClassLoader()));
85     }
86
87 }
88
Popular Tags