1 package org.objectweb.celtix.resource; 2 3 import java.io.InputStream ; 4 import java.util.LinkedList ; 5 import java.util.List ; 6 import java.util.logging.Level ; 7 import java.util.logging.Logger ; 8 9 import org.objectweb.celtix.common.logging.LogUtils; 10 11 public class DefaultResourceManager implements ResourceManager { 12 13 private static final Logger LOG = LogUtils.getL7dLogger(DefaultResourceManager.class); 14 private static ResourceManager instance; 15 16 protected final List <ResourceResolver> resolvers = new LinkedList <ResourceResolver>(); 17 18 19 public DefaultResourceManager() { 20 initializeDefaultResolvers(); 21 } 22 23 public final <T> T resolveResource(String name, Class <T> type) { 24 return findResource(name, type, false); 25 } 26 27 28 public final InputStream getResourceAsStream(String name) { 29 return findResource(name, InputStream .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 getResourceResolvers() { 47 return resolvers; 48 } 49 50 51 private <T> T findResource(String name, Class <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 |