com.softwareag.cis.plugin.registry
Class PlugInRegistry

java.lang.Object
  extended by com.softwareag.cis.plugin.registry.PlugInRegistry

public class PlugInRegistry
extends java.lang.Object

Parse plug-in files and register respective extensions with registry


Nested Class Summary
static class PlugInRegistry.CyclicDependencyException
           
 
Field Summary
static char CHAR_ID_DELIMITER
           
static java.lang.String DELETED_PLUGIN_XML
           
static java.lang.String MERGED_PLUGIN_XML
           
static java.lang.String PLUGIN_XML
           
static int PREFERRED_PLUGIN
           
static java.lang.String UPDATED_PLUGIN_DIR_SUFFIX
           
static java.lang.String UPDATED_PLUGIN_XML
           
 
Constructor Summary
PlugInRegistry(java.io.File directory)
          Constructor to initialize registry by parsing plug-in file of input directory
PlugInRegistry(java.io.File directory, ApplicationContext applicationContext)
           
 
Method Summary
 void addExtension(Extension extension)
          Contribute extension to an extension point.
 void addExtensionPoint(java.lang.String extensionPoint)
           
 void addPlugIn(PlugIn plugIn)
          Register this plug-in to the plug-in registry
 void checkForCycles()
          Check if cyclic dependency has been found among plug-ins
 boolean checkPlugInRefs(PlugIn plugIn)
          Checks if all direct references of this plug-in are resolved
 void clear()
          Remove all references to extensions, extension points and instances of classes implementing extension points
static java.util.List createExtensionList(com.softwareag.cis.server.Adapter adapter, java.lang.String extptId, java.lang.Class<?> interfac)
          Obtain list of extension implementations for given extension point
static java.util.List createExtensionList(ApplicationContext ac, java.lang.String extptId, java.lang.Class<?> interfac)
          Obtain list of extension implementations for given extension point
static java.lang.String createId(java.lang.String pluginId, java.lang.String extPointId)
          Create fully qualified id of extension point for given ID of plug-in and local ID of extension point
static java.lang.String extractPlugInId(java.lang.String extPointId)
          Extract ID of plug-in from given ID of extension point
 Extension getExtension(java.lang.String extensionPointId, java.lang.String extensionId)
          Get extension for given IDs of extension point and extension
 java.util.List<Extension> getExtensionByClass(java.lang.String extensionPointId, java.lang.String fqn)
          Get extensions for given ID of extension point and implementing class
 java.util.List<Extension> getExtensions(java.lang.String id)
          Get list of extensions for given external extension point id
 java.lang.String getFileName()
           
 java.io.InputStream getInputStream()
           
 PlugIn getPlugIn(java.lang.String plugInID)
          Get plug-in for given id
 java.util.List<PlugIn> getPlugIns()
          Get list of plug-ins
 boolean getUsePluginClassLoader()
          Shall plug-ins use their own class loader
 void parsePlugin(java.io.InputStream inputStream)
          Prepare the file path and to call the parsePluginFile function & register the plug-in
 void parsePlugin(java.lang.String pluginFileName)
          Prepare the file path and to call the parsePluginFile function & register the plug-in
 java.lang.ClassLoader popContextClassLoader(java.lang.ClassLoader saveClassLoader)
          Restore thread context class-loader
 java.lang.ClassLoader pushContextClassLoader(java.lang.ClassLoader newClassLoader)
          Set thread context class loader to given class loader
 java.lang.ClassLoader pushContextClassLoader(java.lang.String pluginId)
          Set thread context class loader to class loader of plug-in with given id
 void registerClassLoader(PlugIn plugIn)
           
 void registerExtensionPoints(PlugIn plugIn)
          Register all extension points of a given plug-in.
 void registerExtensions(PlugIn plugIn)
          Register all extensions of a given plug-in.
 void removeExtension(Extension extension)
          Removes this extension from an extensionPoint
 void removePlugIn(PlugIn plugIn)
          Remove plug-in from registry including all plug-ins depending on it.
 void setFileName(java.lang.String fileName)
           
 void setInputStream(java.io.InputStream inputStream)
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PREFERRED_PLUGIN

public static final int PREFERRED_PLUGIN
See Also:
Constant Field Values

CHAR_ID_DELIMITER

public static final char CHAR_ID_DELIMITER
See Also:
Constant Field Values

PLUGIN_XML

public static final java.lang.String PLUGIN_XML
See Also:
Constant Field Values

MERGED_PLUGIN_XML

public static final java.lang.String MERGED_PLUGIN_XML
See Also:
Constant Field Values

DELETED_PLUGIN_XML

public static final java.lang.String DELETED_PLUGIN_XML
See Also:
Constant Field Values

UPDATED_PLUGIN_XML

public static final java.lang.String UPDATED_PLUGIN_XML
See Also:
Constant Field Values

UPDATED_PLUGIN_DIR_SUFFIX

public static final java.lang.String UPDATED_PLUGIN_DIR_SUFFIX
See Also:
Constant Field Values
Constructor Detail

PlugInRegistry

public PlugInRegistry(java.io.File directory)
Constructor to initialize registry by parsing plug-in file of input directory

Parameters:
directory - directory path for plug-in files

PlugInRegistry

public PlugInRegistry(java.io.File directory,
                      ApplicationContext applicationContext)
Method Detail

getFileName

public java.lang.String getFileName()

setFileName

public void setFileName(java.lang.String fileName)

getInputStream

public java.io.InputStream getInputStream()

setInputStream

public void setInputStream(java.io.InputStream inputStream)

getPlugIns

public java.util.List<PlugIn> getPlugIns()
Get list of plug-ins

Returns:
list of known plug-ins

addExtensionPoint

public void addExtensionPoint(java.lang.String extensionPoint)

addExtension

public void addExtension(Extension extension)
Contribute extension to an extension point. The method is public so that It can be used without restrictions, e.g. the initial intention is using It during runtime. The passed Extension object should be properly constructed, e.g. imitating parsed plugin.xml during PluginRegistry init. Should be used with care! It could leave the Plugin Registry in inconsistent state!


removeExtension

public void removeExtension(Extension extension)
Removes this extension from an extensionPoint


getExtensions

public java.util.List<Extension> getExtensions(java.lang.String id)
Get list of extensions for given external extension point id

Parameters:
id - external extension point id
Returns:
the list - may be empty - but do never return null!

getExtension

public Extension getExtension(java.lang.String extensionPointId,
                              java.lang.String extensionId)
Get extension for given IDs of extension point and extension

Returns:
the matching Extension or null if not existing

getExtensionByClass

public java.util.List<Extension> getExtensionByClass(java.lang.String extensionPointId,
                                                     java.lang.String fqn)
Get extensions for given ID of extension point and implementing class

Parameters:
extensionPointId -
fqn - the fully qualified name of the class implementing the extension point
Returns:
the matching extensions or empty List if none

createExtensionList

public static java.util.List createExtensionList(com.softwareag.cis.server.Adapter adapter,
                                                 java.lang.String extptId,
                                                 java.lang.Class<?> interfac)
Obtain list of extension implementations for given extension point

Parameters:
adapter - the adapter used to obtain application context and for error reporting
extptId - qualified id of extension point
interfac - the interface or class which must be implemented or extended by all extensions of given extension point
Returns:
the list of extension

createExtensionList

public static java.util.List createExtensionList(ApplicationContext ac,
                                                 java.lang.String extptId,
                                                 java.lang.Class<?> interfac)
Obtain list of extension implementations for given extension point

Parameters:
ac - application context
extptId - qualified id of extension point
interfac - the interface or class which must be implemented or extended by all extensions of given extension point
Returns:
the list of extension

registerClassLoader

public void registerClassLoader(PlugIn plugIn)
Parameters:
plugIn -

registerExtensionPoints

public void registerExtensionPoints(PlugIn plugIn)
Register all extension points of a given plug-in.


registerExtensions

public void registerExtensions(PlugIn plugIn)
Register all extensions of a given plug-in.

Parameters:
plugIn -

checkPlugInRefs

public boolean checkPlugInRefs(PlugIn plugIn)
Checks if all direct references of this plug-in are resolved

Returns:
true if all direct references of this plug-in are resolved

getPlugIn

public PlugIn getPlugIn(java.lang.String plugInID)
Get plug-in for given id

Returns:
the PlugIn or null, if not found

parsePlugin

public void parsePlugin(java.lang.String pluginFileName)
Prepare the file path and to call the parsePluginFile function & register the plug-in


parsePlugin

public void parsePlugin(java.io.InputStream inputStream)
Prepare the file path and to call the parsePluginFile function & register the plug-in


addPlugIn

public void addPlugIn(PlugIn plugIn)
Register this plug-in to the plug-in registry


removePlugIn

public void removePlugIn(PlugIn plugIn)
Remove plug-in from registry including all plug-ins depending on it.


createId

public static java.lang.String createId(java.lang.String pluginId,
                                        java.lang.String extPointId)
Create fully qualified id of extension point for given ID of plug-in and local ID of extension point

Returns:
the fully qualified extension id

extractPlugInId

public static java.lang.String extractPlugInId(java.lang.String extPointId)
Extract ID of plug-in from given ID of extension point

Returns:
the ID of the plug-in

getUsePluginClassLoader

public boolean getUsePluginClassLoader()
Shall plug-ins use their own class loader

Returns:
always true

pushContextClassLoader

public java.lang.ClassLoader pushContextClassLoader(java.lang.String pluginId)
Set thread context class loader to class loader of plug-in with given id

Returns:
the original thread context class loader

pushContextClassLoader

public java.lang.ClassLoader pushContextClassLoader(java.lang.ClassLoader newClassLoader)
Set thread context class loader to given class loader

Parameters:
newClassLoader - the original thread context class loader

popContextClassLoader

public java.lang.ClassLoader popContextClassLoader(java.lang.ClassLoader saveClassLoader)
Restore thread context class-loader

Parameters:
saveClassLoader - the original thread context class-loader

clear

public void clear()
Remove all references to extensions, extension points and instances of classes implementing extension points


checkForCycles

public void checkForCycles()
Check if cyclic dependency has been found among plug-ins

Throws:
PlugInRegistry.CyclicDependencyException - if there is a detected cycle