Class PluginRegistry


  • public class PluginRegistry
    extends Object
    This singleton provides access to all the plugins in the Kettle universe.
    It allows you to register types and plugins, query plugin lists per category, list plugins per type, etc.
    Author:
    matt
    • Method Detail

      • getInstance

        public static PluginRegistry getInstance()
        Returns:
        The one and only PluginRegistry instance
      • addParentClassLoaderPatterns

        public void addParentClassLoaderPatterns​(PluginInterface plugin,
                                                 String[] patterns)
      • getPlugin

        public PluginInterface getPlugin​(Class<? extends PluginTypeInterface> pluginType,
                                         String id)
        Get a plugin from the registry
        Parameters:
        pluginType - The type of plugin to look for
        id - The ID to scan for
        Returns:
        the plugin or null if nothing was found.
      • getPluginsByCategory

        public <T extends PluginTypeInterfaceList<PluginInterface> getPluginsByCategory​(Class<T> pluginType,
                                                                                          String pluginCategory)
        Retrieve a list of plugins per category.
        Parameters:
        pluginType - The type of plugins to search
        pluginCategory - The category to look in
        Returns:
        An unmodifiable list of plugins that belong to the specified type and category.
      • getCategories

        public List<String> getCategories​(Class<? extends PluginTypeInterface> pluginType)
        Retrieve a list of all categories for a certain plugin type.
        Parameters:
        pluginType - The plugin type to search categories for.
        Returns:
        The list of categories for this plugin type. The list can be modified (sorted etc) but will not impact the registry in any way.
      • loadClass

        public Object loadClass​(PluginInterface plugin)
                         throws KettlePluginException
        Load and instantiate the main class of the plugin specified.
        Parameters:
        plugin - The plugin to load the main class for.
        Returns:
        The instantiated class
        Throws:
        KettlePluginException - In case there was a loading problem.
      • loadClass

        public <T> T loadClass​(Class<? extends PluginTypeInterface> pluginType,
                               Object object,
                               Class<T> classType)
                        throws KettlePluginException
        Load the class of the type specified for the plugin that owns the class of the specified object.
        Parameters:
        pluginType - the type of plugin
        object - The object for which we want to search the class to find the plugin
        classType - The type of class to load
        Returns:
        the instantiated class.
        Throws:
        KettlePluginException
      • loadClass

        public <T> T loadClass​(Class<? extends PluginTypeInterface> pluginType,
                               String pluginId,
                               Class<T> classType)
                        throws KettlePluginException
        Load the class of the type specified for the plugin with the ID specified.
        Parameters:
        pluginType - the type of plugin
        pluginId - The plugin id to use
        classType - The type of class to load
        Returns:
        the instantiated class.
        Throws:
        KettlePluginException
      • addClassFactory

        public <T> void addClassFactory​(Class<? extends PluginTypeInterface> pluginType,
                                        Class<T> tClass,
                                        String id,
                                        Callable<T> callable)
                                 throws KettlePluginException
        Add a Class Mapping + factory for a plugin. This allows extra classes to be added to existing plugins.
        Type Parameters:
        T - Type of the object factoried
        Parameters:
        pluginType - Type of plugin
        tClass - Class to factory
        id - ID of the plugin to extend
        callable - Factory Callable
        Throws:
        KettlePluginException
      • loadClass

        public <T> T loadClass​(PluginInterface plugin,
                               Class<T> pluginClass)
                        throws KettlePluginException
        Load and instantiate the plugin class specified
        Parameters:
        plugin - the plugin to load
        pluginClass - the class to be loaded
        Returns:
        The instantiated class
        Throws:
        KettlePluginException - In case there was a class loading problem somehow
      • addPluginType

        public static void addPluginType​(PluginTypeInterface type)
        Add a PluginType to be managed by the registry
        Parameters:
        type -
      • getAddedPluginTypes

        public static List<PluginTypeInterface> getAddedPluginTypes()
        Added so we can tell when types have been added (but not necessarily registered)
        Returns:
        the list of added plugin types
      • getPluginId

        public String getPluginId​(Object pluginClass)
        Find the plugin ID based on the class
        Parameters:
        pluginClass -
        Returns:
        The ID of the plugin to which this class belongs (checks the plugin class maps)
      • getPluginId

        public String getPluginId​(Class<? extends PluginTypeInterface> pluginType,
                                  Object pluginClass)
        Find the plugin ID based on the class
        Parameters:
        pluginType - the type of plugin
        pluginClass - The class to look for
        Returns:
        The ID of the plugin to which this class belongs (checks the plugin class maps) or null if nothing was found.
      • getPlugin

        public PluginInterface getPlugin​(Class<? extends PluginTypeInterface> pluginType,
                                         Object pluginClass)
        Retrieve the Plugin for a given class
        Parameters:
        pluginType - The type of plugin to search for
        pluginClass - The class of this object is used to look around
        Returns:
        the plugin or null if nothing could be found
      • findPluginWithName

        public PluginInterface findPluginWithName​(Class<? extends PluginTypeInterface> pluginType,
                                                  String pluginName)
        Find the plugin ID based on the name of the plugin
        Parameters:
        pluginType - the type of plugin
        pluginName - The name to look for
        Returns:
        The plugin with the specified name or null if nothing was found.
      • findPluginWithDescription

        public PluginInterface findPluginWithDescription​(Class<? extends PluginTypeInterface> pluginType,
                                                         String pluginDescription)
        Find the plugin ID based on the description of the plugin
        Parameters:
        pluginType - the type of plugin
        pluginDescription - The description to look for
        Returns:
        The plugin with the specified description or null if nothing was found.
      • findPluginWithId

        public PluginInterface findPluginWithId​(Class<? extends PluginTypeInterface> pluginType,
                                                String pluginId)
        Find the plugin ID based on the name of the plugin
        Parameters:
        pluginType - the type of plugin
        pluginId - The name to look for
        Returns:
        The plugin with the specified name or null if nothing was found.
      • getPluginPackages

        public List<String> getPluginPackages​(Class<? extends PluginTypeInterface> pluginType)
        Returns:
        a unique list of all the step plugin package names
      • getClass

        public <T> T getClass​(PluginInterface plugin,
                              String className)
                       throws KettlePluginException
        Load the class with a certain name using the class loader of certain plugin.
        Parameters:
        plugin - The plugin for which we want to use the class loader
        className - The name of the class to load
        Returns:
        the name of the class
        Throws:
        KettlePluginException - In case there is something wrong
      • getClass

        public <T> T getClass​(PluginInterface plugin,
                              T classType)
                       throws KettlePluginException
        Load the class with a certain name using the class loader of certain plugin.
        Parameters:
        plugin - The plugin for which we want to use the class loader
        classType - The type of class to load
        Returns:
        the name of the class
        Throws:
        KettlePluginException - In case there is something wrong
      • addPluginListener

        public <T extends PluginTypeInterface> void addPluginListener​(Class<T> typeToTrack,
                                                                      PluginTypeListener listener)
        Allows the tracking of plugins as they come and go.
        Type Parameters:
        T - extension of PluginTypeInterface
        Parameters:
        typeToTrack - extension of PluginTypeInterface to track.
        listener - receives notification when a plugin of the specified type is added/removed/modified
      • reset

        public void reset()