You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by ps...@apache.org on 2003/12/22 08:56:34 UTC
cvs commit: jakarta-log4j/src/java/org/apache/log4j/chainsaw/help HelpLocator.java
psmith 2003/12/21 23:56:34
Added: src/java/org/apache/log4j/chainsaw/help HelpLocator.java
Log:
added a HelpLocator class to assist in locating help resources.
Revision Changes Path
1.1 jakarta-log4j/src/java/org/apache/log4j/chainsaw/help/HelpLocator.java
Index: HelpLocator.java
===================================================================
/*
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met: 1.
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer. 2. Redistributions in
* binary form must reproduce the above copyright notice, this list of
* conditions and the following disclaimer in the documentation and/or other
* materials provided with the distribution. 3. The end-user documentation
* included with the redistribution, if any, must include the following
* acknowledgment: "This product includes software developed by the Apache
* Software Foundation (http://www.apache.org/)." Alternately, this
* acknowledgment may appear in the software itself, if and wherever such
* third-party acknowledgments normally appear. 4. The names "log4j" and
* "Apache Software Foundation" must not be used to endorse or promote products
* derived from this software without prior written permission. For written
* permission, please contact apache@apache.org. 5. Products derived from this
* software may not be called "Apache", nor may "Apache" appear in their name,
* without prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation. For more information on the
* Apache Software Foundation, please see <http://www.apache.org/> .
*
*/
package org.apache.log4j.chainsaw.help;
import org.apache.log4j.chainsaw.messages.MessageCenter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* A helper class that assists the HelpManager by serving as a collection of
* Class loaders based on URL roots.
*
* @author Paul Smith
* <ps...@apache.org>
*/
class HelpLocator {
private List classLoaders = new ArrayList();
HelpLocator() {
}
/**
* Adds a ClassLoader to be used as a help resource locator
*/
void installClassloaderLocator(ClassLoader cl) {
classLoaders.add(cl);
}
/**
* Adds a new locator to the current set of locators by using the passed in
* URL as a base to locate help resources. The URL SHOULD end in a '/'
* character.
*/
void installLocator(URL url) {
try {
classLoaders.add(new HelpResourceLoader(url));
} catch (Exception e) {
MessageCenter.getInstance().getLogger().error(
"Failed to setup the resoure loaders for the Help Subsystem");
}
}
/**
* Locates a help resource by using the internal resource locator collection.
*
* @return URL of the located resource, or null if it cannot be located.
*/
URL findResource(String name) {
URL url = null;
for (Iterator iter = classLoaders.iterator(); iter.hasNext();) {
ClassLoader loader = (ClassLoader) iter.next();
url = loader.getResource(name);
if (url != null) {
break;
}
}
return url;
}
private static class HelpResourceLoader extends ClassLoader {
private URL root;
private HelpResourceLoader(URL root) {
this.root = root;
}
/*
* (non-Javadoc)
*
* @see java.lang.ClassLoader#findResource(java.lang.String)
*/
protected URL findResource(String name) {
URL url = super.findResource(name);
if (url != null) {
return url;
}
try {
URL resourceURL = new URL(root, name);
return new URLClassLoader(
new URL[] { root, resourceURL }).findResource(
name);
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
}
// public static void main(String[] args) throws Exception {
// HelpLocator locator = new HelpLocator();
// locator.installLocator(new File(".").toURL());
// locator.installLocator(new
// URL("http://java.sun.com/j2se/1.4.2/docs/api/"));
// String[] resources =
// new String[] { "build.properties", "java/lang/ClassLoader.html", };
//
// for (int i = 0; i < resources.length; i++) {
// String resource = resources[i];
// URL url = locator.findResource(resource);
// System.out.println("resource=" + resource + ", url=" + url);
// }
// }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: log4j-dev-help@jakarta.apache.org