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 [EMAIL PROTECTED] 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 * <[EMAIL PROTECTED]> */ 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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]