org.codehaus.classworlds.DefaultClassRealm Maven / Gradle / Ivy
package org.codehaus.classworlds;
/*
* Copyright 2001-2010 Codehaus Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* A compatibility wrapper for org.codehaus.plexus.classworlds.realm.ClassRealm
* provided for legacy code
*
* @author Andrew Williams
* @version $Id$
*/
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Enumeration;
public class DefaultClassRealm
implements ClassRealm
{
private ClassRealmAdapter adapter;
public DefaultClassRealm( ClassWorld world, String id )
{
this( world, id, null );
}
public DefaultClassRealm( ClassWorld world, String id, ClassLoader foreignClassLoader )
{
this.adapter = ClassRealmAdapter.getInstance(
new org.codehaus.plexus.classworlds.realm.ClassRealm(
ClassWorldReverseAdapter.getInstance( world ), id, foreignClassLoader ) );
}
public URL[] getConstituents()
{
return adapter.getConstituents();
}
public ClassRealm getParent()
{
return adapter.getParentRealm();
}
public void setParent( ClassRealm parent )
{
adapter.setParent( parent );
}
public String getId()
{
return adapter.getId();
}
public ClassWorld getWorld()
{
return adapter.getWorld();
}
public void importFrom( String realmId, String packageName )
throws NoSuchRealmException
{
adapter.importFrom( realmId, packageName );
}
public void addConstituent( URL constituent )
{
adapter.addConstituent( constituent );
}
/**
* Adds a byte[] class definition as a constituent for locating classes.
* Currently uses BytesURLStreamHandler to hold a reference of the byte[] in memory.
* This ensures we have a unifed URL resource model for all constituents.
* The code to cache to disk is commented out - maybe a property to choose which method?
*
* @param constituent class name
* @param b the class definition as a byte[]
*/
public void addConstituent(String constituent,
byte[] b) throws ClassNotFoundException
{
try
{
File path, file;
if (constituent.lastIndexOf('.') != -1)
{
path = new File("byteclass/" + constituent.substring(0, constituent.lastIndexOf('.') + 1).replace('.', File.separatorChar));
file = new File(path, constituent.substring(constituent.lastIndexOf('.') + 1) + ".class");
}
else
{
path = new File("byteclass/");
file = new File(path, constituent + ".class");
}
addConstituent( new URL( null,
file.toURI().toURL().toExternalForm(),
new BytesURLStreamHandler(b) ) );
}
catch (java.io.IOException e)
{
throw new ClassNotFoundException( "Couldn't load byte stream.", e );
}
}
public ClassRealm locateSourceRealm( String classname )
{
return adapter.locateSourceRealm( classname );
}
public ClassLoader getClassLoader()
{
return adapter.getClassLoader();
}
public ClassRealm createChildRealm( String id )
throws DuplicateRealmException
{
return adapter.createChildRealm( id );
}
// ----------------------------------------------------------------------
// ClassLoader API
// ----------------------------------------------------------------------
public Class loadClass( String name )
throws ClassNotFoundException
{
return adapter.loadClass( name );
}
public URL getResource( String name )
{
return adapter.getResource( name );
}
public InputStream getResourceAsStream( String name )
{
return adapter.getResourceAsStream( name );
}
public Enumeration findResources(String name)
throws IOException
{
return adapter.findResources( name );
}
public void display()
{
adapter.display();
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy