blob: 5e878ca506dc97ebac866262f70eba238e8c4dee [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2015 Sonatype, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Stuart McCulloch (Sonatype, Inc.) - initial API and implementation
*******************************************************************************/
package org.eclipse.sisu.space;
import java.net.URL;
import java.util.Enumeration;
import org.eclipse.sisu.inject.DeferredClass;
/**
* Represents an abstract collection of related classes and resources.
*/
public interface ClassSpace
{
/**
* Loads the named class from the surrounding class space.
*
* @param name The class name
* @return Class instance
* @see ClassLoader#loadClass(String)
*/
Class<?> loadClass( String name )
throws TypeNotPresentException;
/**
* Defers loading of the named class from the surrounding class space.
*
* @param name The class name
* @return Deferred class
* @see ClassLoader#loadClass(String)
*/
DeferredClass<?> deferLoadClass( String name );
/**
* Queries the surrounding class space for the resource with the given name.
*
* @param name The resource name
* @return URL pointing to the resource; {@code null} if it wasn't found
* @see ClassLoader#getResource(String)
*/
URL getResource( String name );
/**
* Queries the surrounding class space for all resources with the given name.
*
* @param name The resource name
* @return Sequence of URLs, one for each matching resource
* @see ClassLoader#getResources(String)
*/
Enumeration<URL> getResources( String name );
/**
* Queries local class space content for entries matching the given pattern.
*
* @param path The initial search directory; for example {@code "META-INF"}
* @param glob The filename glob pattern; for example {@code "*.xml"}
* @param recurse If {@code true} recurse into sub-directories; otherwise only search initial directory
* @return Sequence of URLs, one for each matching entry
* @see org.osgi.framework.Bundle#findEntries(String, String, boolean)
*/
Enumeration<URL> findEntries( String path, String glob, boolean recurse );
}