1f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project/* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved.
2f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project *
3f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * This program and the accompanying materials are made available under
4f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * the terms of the Common Public License v1.0 which accompanies this distribution,
5f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * and is available at http://www.eclipse.org/legal/cpl-v10.html
6f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project *
7f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * $Id: ResourceLoader.java,v 1.1.1.1.2.1 2004/06/20 18:24:05 vlad_r Exp $
8f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */
9f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectpackage com.vladium.util;
10f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
11f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.io.IOException;
12f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.io.InputStream;
13f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.net.URL;
14f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.util.Enumeration;
15f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
16f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ----------------------------------------------------------------------------
17f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project/**
18f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * A static API that can be used as a drop-in replacement for
19f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * java.lang.ClassLoader API (the class/resource loading part). This
20f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * implementation is merely a wrapper around ClassLoaderResolverget.ClassLoader()
21f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * method.
22f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project *
23f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @author Vlad Roubtsov, (C) 2003
24f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */
25f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectpublic
26f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectabstract class ResourceLoader
27f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project{
28f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // public: ................................................................
29f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
30f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    /**
31f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project     * @see java.lang.ClassLoader#loadClass(java.lang.String)
32f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project     */
33f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public static Class loadClass (final String name)
34f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        throws ClassNotFoundException
35f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
36f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final Class caller = ClassLoaderResolver.getCallerClass (1);
37f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final ClassLoader loader = ClassLoaderResolver.getClassLoader (caller);
38f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
39f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        return Class.forName (name, false, loader);
40f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
41f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
42f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    /**
43f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project     * @see java.lang.ClassLoader#getResource(java.lang.String)
44f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project     */
45f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public static URL getResource (final String name)
46f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
47f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final Class caller = ClassLoaderResolver.getCallerClass (1);
48f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final ClassLoader loader = ClassLoaderResolver.getClassLoader (caller);
49f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
50f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if (loader != null)
51f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return loader.getResource (name);
52f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        else
53f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return ClassLoader.getSystemResource (name);
54f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
55f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
56f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    /**
57f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project     * @see java.lang.ClassLoader#getResourceAsStream(java.lang.String)
58f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project     */
59f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public static InputStream getResourceAsStream (final String name)
60f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
61f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final Class caller = ClassLoaderResolver.getCallerClass (1);
62f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final ClassLoader loader = ClassLoaderResolver.getClassLoader (caller);
63f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
64f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if (loader != null)
65f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return loader.getResourceAsStream (name);
66f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        else
67f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return ClassLoader.getSystemResourceAsStream (name);
68f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
69f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
70f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    /**
71f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project     * @see java.lang.ClassLoader#getResources(java.lang.String)
72f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project     */
73f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public static Enumeration getResources (final String name)
74f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        throws IOException
75f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
76f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final Class caller = ClassLoaderResolver.getCallerClass (1);
77f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final ClassLoader loader = ClassLoaderResolver.getClassLoader (caller);
78f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
79f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if (loader != null)
80f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return loader.getResources (name);
81f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        else
82f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return ClassLoader.getSystemResources (name);
83f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
84f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
85f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
86f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public static Class loadClass (final String name, final ClassLoader loader)
87f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        throws ClassNotFoundException
88f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
89f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        return Class.forName (name, false, loader != null ? loader : ClassLoader.getSystemClassLoader ());
90f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
91f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
92f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public static URL getResource (final String name, final ClassLoader loader)
93f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
94f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if (loader != null)
95f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return loader.getResource (name);
96f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        else
97f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return ClassLoader.getSystemResource (name);
98f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
99f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
100f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public static InputStream getResourceAsStream (final String name, final ClassLoader loader)
101f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
102f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if (loader != null)
103f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return loader.getResourceAsStream (name);
104f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        else
105f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return ClassLoader.getSystemResourceAsStream (name);
106f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
107f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
108f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public static Enumeration getResources (final String name, final ClassLoader loader)
109f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        throws IOException
110f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
111f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if (loader != null)
112f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return loader.getResources (name);
113f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        else
114f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return ClassLoader.getSystemResources (name);
115f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
116f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
117f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // protected: .............................................................
118f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
119f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // package: ...............................................................
120f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
121f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // private: ...............................................................
122f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
123f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
124f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    private ResourceLoader () {} // prevent subclassing
125f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
126f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project} // end of class
127f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ----------------------------------------------------------------------------