    001    /*******************************************************************************
    002     * Copyright (C) PicoContainer Organization. All rights reserved.
    003     * ---------------------------------------------------------------------------
    004     * The software in this package is published under the terms of the BSD style
    005     * license a copy of which has been included with this distribution in the
    006     * LICENSE.txt file.
    007     ******************************************************************************/
    008    package org.picocontainer.classname;
    009
    010    import org.picocontainer.MutablePicoContainer;
    011    import org.picocontainer.PicoContainer;
    012    import org.picocontainer.classname.ClassPathElement;
    013
    014    import java.net.URL;
    015
    016    /**
    017     * A ClassLoadingPicoContainer extends PicoContainer with classloader juggling capability
    018     *
    019     * @author Paul Hammant
    020     * @author Aslak Helles&oslash;y
    021     */
    022    public interface ClassLoadingPicoContainer extends MutablePicoContainer {
    023
    024        /**
    025         * Adds a new URL that will be used in classloading
    026         *
    027         * @param url url of the jar to find components in.
    028         * @return ClassPathElement to add permissions to (subject to security
    029         *         policy)
    030         */
    031        ClassPathElement addClassLoaderURL(URL url);
    032
    033        /**
    034         * Returns class loader that is the aggregate of the URLs added.
    035         *
    036         * @return A ClassLoader
    037         */
    038        ClassLoader getComponentClassLoader();
    039
    040        /**
    041         * Make a child container with a given name
    042         *
    043         * @param name the container name
    044         * @return The ScriptedPicoContainer
    045         */
    046        ClassLoadingPicoContainer makeChildContainer(String name);
    047
    048        /**
    049         * Addes a child container with a given name
    050         *
    051         * @param name the container name
    052         * @param child the child PicoContainer
    053         */
    054        ClassLoadingPicoContainer addChildContainer(String name, PicoContainer child);
    055
    056    }