getExtensions()
{
return _extensionsById.values();
}
public final void start( ElementStartContext context )
{
Extension ext = processExtension( context );
if ( ext == null )
{
return;
}
context.getScopeData().put( ExtensionVisitor.KEY_CLASSLOADER,
getClassLoader( ext ) );
String rsbundleClass = context.getAttributeValue( "rsbundle-class" );
if ( rsbundleClass != null &&
( rsbundleClass = rsbundleClass.trim()) != "" )
{
context.getScopeData().put( ExtensionHook.KEY_RSBUNDLE_CLASS,
rsbundleClass );
}
context.registerChildVisitor( NAME, _nameVisitor );
context.registerChildVisitor( OWNER, _ownerVisitor );
context.registerChildVisitor( CLASSPATHS, _classpathsVisitor );
context.registerChildVisitor( DependenciesVisitor.ELEMENT,
_dependenciesVisitor );
context.getScopeData().put( KEY_LOOKUP_DONE, false );
}
public void extension( ElementContext context, Extension extension )
{
_extensionsById.put( extension.getID(), extension );
}
protected ElementVisitor createNameVisitor()
{
return new ElementVisitor()
{
public void start( ElementStartContext context )
{
String rsKey = context.getAttributeValue( "rskey" );
if ( rsKey == "" ) rsKey = null;
context.getScopeData().put( KEY_LAST_RSKEY, rsKey );
}
public void end( ElementEndContext context )
{
DefaultExtension extension = getExtension( context );
String rsKey = (String) context.getScopeData().get( KEY_LAST_RSKEY );
if ( rsKey != null )
{
extension.setRawName( "${" + rsKey + "}" );
}
else
{
DefaultElementContext dec = (DefaultElementContext) context;
extension.setRawName( dec.getRawText() );
}
}
};
}
protected ElementVisitor createOwnerVisitor()
{
return new ElementVisitor()
{
public void start( ElementStartContext context )
{
String rsKey = context.getAttributeValue( "rskey" );
if ( rsKey == "" ) rsKey = null;
context.getScopeData().put( KEY_LAST_RSKEY, rsKey );
}
public void end( ElementEndContext context )
{
DefaultExtension extension = getExtension( context );
String rsKey = (String) context.getScopeData().get( KEY_LAST_RSKEY );
if ( rsKey != null )
{
extension.setRawOwner( "${" + rsKey + "}" );
}
else
{
DefaultElementContext dec = (DefaultElementContext) context;
extension.setRawOwner( dec.getRawText() );
}
}
};
}
protected ElementVisitor createClasspathsVisitor()
{
return new ClasspathsVisitor();
}
protected ElementVisitor createDependenciesVisitor()
{
return new DependenciesVisitor();
}
/**
* Get the class loader that should be used by default to load an
* extension.
*
* This implementation returns Thread.currentThread().getContextClassLoader().
*
* @param extension the extension being processed.
* @return the classloader to use to load resources for the specified
* extension.
*/
protected ClassLoader getClassLoader( Extension extension )
{
return Thread.currentThread().getContextClassLoader();
}
protected final void addExtensionSourceToClasspath( ElementContext context )
{
super.addExtensionSourceToClasspath( context );
Boolean done = (Boolean)context.getScopeData().get( KEY_LOOKUP_DONE );
if ( done == null || !done.booleanValue() )
{
context.getScopeData().put( KEY_LOOKUP_DONE, true );
Extension extension = getExtension( context );
if ( extension instanceof DefaultExtension &&
context instanceof DefaultElementContext )
{
DefaultElementContext dContext = (DefaultElementContext) context;
DefaultExtension de = (DefaultExtension) extension;
de.setName( dContext.getProcessedText( de.getRawName() ) );
de.setOwner( dContext.getProcessedText( de.getRawOwner() ) );
}
}
}
}