org.vostok.lang.classes
Class DynamicClassLoader

java.lang.Object
  extended by java.lang.ClassLoader
      extended by org.vostok.lang.classes.DynamicClassLoader

public class DynamicClassLoader
extends java.lang.ClassLoader

A ClassFinder that allow loading classes from absolute url at runtime. Intended to be used with modular application (plugin).

Author:
levreau.jerome@vostoksystem.eu
See Also:
ClassLoader

Field Summary
protected  java.util.Hashtable<java.lang.String,java.lang.String[]> cache
          cache toutes les recherches de correspondance
protected  java.util.Hashtable<java.lang.String,java.lang.Class> classes
          liste des classes trouvées dans les jar
protected  java.io.File directory
          le répertoire scanné
protected  java.util.List<java.lang.String> jar
          les jar effectivment chargés
 
Method Summary
protected  java.lang.Class<?> findClass(java.lang.String name)
           
 java.io.File getDirectory()
          Directory this loaded managed
 boolean hasClass(java.lang.String c)
          vrai si ce class loader a charge la classe definie par c
static DynamicClassLoader newInstance(java.io.File directory)
          Load classes from this directory (and sub directories and jar files)
<E> E
newObjectInstance(java.lang.Class<E> type, java.lang.String name)
          create new instance of a class, casting is as "type".
 java.lang.Object newObjectInstance(java.lang.String name)
          create new instance of a class.
 java.lang.String[] whoImplement(java.lang.Class toimplement)
          find all classes using 'toimplement'.
 java.lang.String[] whoImplement(java.lang.String toimplement)
           
 
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findLibrary, findLoadedClass, findResource, findResources, findSystemClass, getPackage, getPackages, getParent, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, loadClass, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

directory

protected java.io.File directory
le répertoire scanné


jar

protected java.util.List<java.lang.String> jar
les jar effectivment chargés


classes

protected java.util.Hashtable<java.lang.String,java.lang.Class> classes
liste des classes trouvées dans les jar


cache

protected java.util.Hashtable<java.lang.String,java.lang.String[]> cache
cache toutes les recherches de correspondance

Method Detail

getDirectory

public java.io.File getDirectory()
Directory this loaded managed

Returns:

hasClass

public boolean hasClass(java.lang.String c)
vrai si ce class loader a charge la classe definie par c

Parameters:
c -
Returns:

newInstance

public static DynamicClassLoader newInstance(java.io.File directory)
                                      throws NotADirectoryException,
                                             java.io.IOException
Load classes from this directory (and sub directories and jar files)

Parameters:
directory - directory to scan for classes
Returns:
un class loader
Throws:
NotADirectoryException - si directory n'est pas un repertoire
java.io.IOException

whoImplement

public java.lang.String[] whoImplement(java.lang.Class toimplement)
find all classes using 'toimplement'. Can mean implementing an interface or extending a class.

Parameters:
target - base class / interface to look for
Returns:
list of matches ; can be empty but never null

whoImplement

public java.lang.String[] whoImplement(java.lang.String toimplement)
Parameters:
toimplement -
Returns:

newObjectInstance

public <E> E newObjectInstance(java.lang.Class<E> type,
                               java.lang.String name)
                    throws java.lang.ClassNotFoundException,
                           java.lang.InstantiationException,
                           java.lang.IllegalAccessException
create new instance of a class, casting is as "type".

Type Parameters:
E -
Parameters:
type - type expected
name - full calified name of the class
Returns:
a new instance of "name"
Throws:
java.lang.ClassNotFoundException
java.lang.InstantiationException
java.lang.IllegalAccessException

newObjectInstance

public java.lang.Object newObjectInstance(java.lang.String name)
                                   throws java.lang.ClassNotFoundException,
                                          java.lang.InstantiationException,
                                          java.lang.IllegalAccessException
create new instance of a class.

Type Parameters:
E -
Parameters:
type - type expected
name - full calified name of the class
Returns:
a new instance of "name", of the same type as "name"
Throws:
java.lang.ClassNotFoundException
java.lang.InstantiationException
java.lang.IllegalAccessException

findClass

protected java.lang.Class<?> findClass(java.lang.String name)
                                throws java.lang.ClassNotFoundException
Overrides:
findClass in class java.lang.ClassLoader
Throws:
java.lang.ClassNotFoundException