Class PluginManagerImpl

java.lang.Object
org.processmining.framework.plugin.impl.PluginManagerImpl
All Implemented Interfaces:
PluginManager

public final class PluginManagerImpl extends Object implements PluginManager
  • Method Details

    • addListener

      public void addListener(PluginManager.PluginManagerListener listener)
      Description copied from interface: PluginManager
      Adds a listener to the plugin manager.
      Specified by:
      addListener in interface PluginManager
      Parameters:
      listener - the listener to add.
    • getKnownClassesAnnotatedWith

      public Set<Class<?>> getKnownClassesAnnotatedWith(Class<? extends Annotation> annotationType)
      Description copied from interface: PluginManager
      Returns all known classes annotated with a certain annotationType. Not all of these classes are plugins! Note that only classes are available that carry the @KeepInProMCache annotation
      Specified by:
      getKnownClassesAnnotatedWith in interface PluginManager
      Parameters:
      annotationType - the type of annotation to be found
      Returns:
      a (possibly empty) set of classes (not null)
    • removeListener

      public void removeListener(PluginManager.PluginManagerListener listener)
      Description copied from interface: PluginManager
      Removes the listener from the plugin manager.
      Specified by:
      removeListener in interface PluginManager
      Parameters:
      listener - the listener to remove.
    • fireError

      protected void fireError(URL url, Throwable t, String className)
    • firePluginAdded

      protected void firePluginAdded(PluginDescriptor plugin, Collection<Class<?>> types)
    • initialize

      public static void initialize(Class<? extends PluginContext> pluginContextType)
    • getInstance

      public static PluginManager getInstance()
    • register

      public void register(URL url, PackageDescriptor pack)
      Description copied from interface: PluginManager
      registers a URL to this plugin manager. If the URL uses the FILE_PROTOCOl protocol and denotes a directory, then this folder is recursively scanned for files with the CLASS_EXTENSION extension. Otherwise, the URL is assumed to point to a jar file, of which the classes are scanned. Each class file is scanned for classes and/or methods annotated with the Plugin annotation. If a class is annotated with this annotation, then its methods are scanned for the PluginVariant annotation. For each plugin found, a PluginDescriptor object is instantiated. These plugin descriptors can later be used to invoke plugins.
      Specified by:
      register in interface PluginManager
      Parameters:
      url - The URL to register
      pack - The package that corresponds to the URL
    • register

      public void register(URL url, PackageDescriptor pack, ClassLoader loader)
      Description copied from interface: PluginManager
      registers a URL to this plugin manager. If the URL uses the FILE_PROTOCOl protocol and denotes a directory, then this folder is recursively scanned for files with the CLASS_EXTENSION extension. Otherwise, the URL is assumed to point to a jar file, of which the classes are scanned. Each class file is scanned for classes and/or methods annotated with the Plugin annotation. If a class is annotated with this annotation, then its methods are scanned for the PluginVariant annotation. For each plugin found, a PluginDescriptor object is instantiated. These plugin descriptors can later be used to invoke plugins.
      Specified by:
      register in interface PluginManager
      Parameters:
      url - The URL to register
      pack - The package that corresponds to the URL
      loader - The class loader used to load the jar files.
    • find

      public Set<Pair<Integer,PluginParameterBinding>> find(Class<? extends Annotation> annotation, Class<?> resultType, Class<? extends PluginContext> contextType, boolean totalMatch, boolean orderedParameters, boolean mustBeUserVisible, Class<?>... parameters)
      Description copied from interface: PluginManager
      This method retuns a collection of Pairs of Integer and PluginParameterBinding objects, such that:

      The method belonging to the plugin in the pluginParameterBinding carries the given annotation. If no specific annotation is required, the method should be called with Plugin.class. Note that the annotation required has to be on the same level as the Plugin annotation, i.e. either on a method or a class

      When invoked, the PluginParameterBinding returns an array of objects, of which the object at the index given by the integer in the pair is of the required result type, i.e. resultType.isAssignableFrom(p.getPlugin().getReturnTypes()[i]) If no specific return type is required, use Object.class for this parameter.

      The PluginParameterBinding can be executed in a PluginContext of the given type.

      If totalMatch is true, then the PluginParameterBinding binds all parameters of the plugin with all arguments. Otherwise, the PluginParameterBinding only requires a subset of the given arguments and is therefore not directly executable on the given set of arguments.

      If orderedParameters is true, then the PluginParameterBinding binds the given arguments in the given order, i.e. no arguments are reordered.

      If mustBeUserVisible is true, then the plugin must have the isUserVisible flag set to true.

      The PluginParameterBinding can be executed on arguments of the given types. The list of arguments can be empty, in which case no arguments are required to invoke the PluginParameterBinding. Note that only types of arguments are required, not the values. For checking whether arguments can be assigned to parameters of the Plugin, the isParameterAssignable method is used. Any ProMFutures should be unwrapped.

      Specified by:
      find in interface PluginManager
      Parameters:
      annotation - The annotation that should be present on the plugin (use Plugin.class if none is required).
      resultType - The required result type (use Object.class if no specific type is required).
      contextType - The context type in which this plugin should be executable. Note that this type should be the contextType of the context from which the find is called, or a supertype thereof.
      totalMatch - Whether or not all arguments should be used to execute this plugin.
      orderedParameters - Whether or not the arguments are given in the right order.
      mustBeUserVisible - Whether or not all returned plugins should be user visible.
      parameters - The types of the arguments provided to the plugin. Can be empty.
      Returns:
      A collection of pluginparameterbindings. They are executable if totalMatch is true.
    • find

      public Set<Pair<Integer,PluginParameterBinding>> find(Class<? extends Annotation> annotation, Class<?>[] resultTypes, Class<? extends PluginContext> contextType, boolean totalMatch, boolean orderedParameters, boolean mustBeUserVisible, Class<?>... parameters)
      Description copied from interface: PluginManager
      This method retuns a collection of Pairs of Integer and PluginParameterBinding objects, such that:

      The method belonging to the plugin in the pluginParameterBinding carries the given annotation. If no specific annotation is required, the method should be called with Plugin.class. Note that the annotation required has to be on the same level as the Plugin annotation, i.e. either on a method or a class

      When invoked, the PluginParameterBinding returns an array of objects, of which the object at the index given by the integer in the pair is of the required result type as specified in the input list, i.e. for all i resultTypes[i].isAssignableFrom(p.getPlugin().getReturnTypes()[i]) If no specific return type is required, use the other find method.

      The PluginParameterBinding can be executed in a PluginContext of the given type.

      If totalMatch is true, then the PluginParameterBinding binds all parameters of the plugin with all arguments. Otherwise, the PluginParameterBinding only requires a subset of the given arguments and is therefore not directly executable on the given set of arguments.

      If orderedParameters is true, then the PluginParameterBinding binds the given arguments in the given order, i.e. no arguments are reordered.

      If mustBeUserVisible is true, then the plugin must have the isUserVisible flag set to true.

      The PluginParameterBinding can be executed on arguments of the given types. The list of arguments can be empty, in which case no arguments are required to invoke the PluginParameterBinding. Note that only types of arguments are required, not the values. For checking whether arguments can be assigned to parameters of the Plugin, the isParameterAssignable method is used. Any ProMFutures should be unwrapped.

      Specified by:
      find in interface PluginManager
      Parameters:
      annotation - The annotation that should be present on the plugin (use Plugin.class if none is required).
      resultTypes - The exact, sorted list of required result types. If not specific type is requested, this find method should not be used.
      contextType - The context type in which this plugin should be executable. Note that this type should be the contextType of the context from which the find is called, or a supertype thereof.
      totalMatch - Whether or not all arguments should be used to execute this plugin.
      orderedParameters - Whether or not the arguments are given in the right order.
      mustBeUserVisible - Whether or not all returned plugins should be user visible.
      Returns:
      A collection of pluginparameterbindings. They are executable if totalMatch is true.
    • find

      public Collection<PluginDescriptor> find(String pluginName)
    • getPlugin

      public PluginDescriptor getPlugin(PluginDescriptorID id)
      Description copied from interface: PluginManager
      Returns a PluginDescriptor with the given id. Note that plugin IDs are persistent between runs.
      Specified by:
      getPlugin in interface PluginManager
      Parameters:
      id - the id of the plugin to get
      Returns:
      the plugin with the given id.
    • getPlugin

      public PluginDescriptor getPlugin(String id)
      Description copied from interface: PluginManager
      Returns a PluginDescriptor of which the toString() of its id equals the given id. Note that plugin IDs are persistent between runs.
      Specified by:
      getPlugin in interface PluginManager
      Parameters:
      id - the String representation of the id of the plugin to get
      Returns:
      the plugin with an id of which the String representation equals the given id.
    • getPluginsAcceptingAtLeast

      public Set<PluginParameterBinding> getPluginsAcceptingAtLeast(Class<? extends PluginContext> contextType, boolean mustBeUserVisible, Class<?>... parameters)
      Description copied from interface: PluginManager
      Returns PluginParameterBindings, which can be invoked in the given context on the given parameter types. Note that the PluginParameterBindings are not necessarily executable. However, they accept all given arguments as parameters.
      Specified by:
      getPluginsAcceptingAtLeast in interface PluginManager
      Parameters:
      contextType - The type of the context in which the binding is to be invoked.
      mustBeUserVisible - Whether or not the plugin should be user visible.
      parameters - The types of the arguments passed to the plugins. They are accepted by the returned plugins, but not necessarily in this order.
      Returns:
      a list of bindings
    • getPluginsAcceptingInAnyOrder

      public Set<PluginParameterBinding> getPluginsAcceptingInAnyOrder(Class<? extends PluginContext> contextType, boolean mustBeUserVisible, Class<?>... parameters)
      Description copied from interface: PluginManager
      Returns executable PluginParameterBindings, which can be invoked in the given context on the given parameter types. Note that the PluginParameterBindings are executable.
      Specified by:
      getPluginsAcceptingInAnyOrder in interface PluginManager
      Parameters:
      contextType - The type of the context in which the binding is to be invoked.
      mustBeUserVisible - Whether or not the plugin should be user visible.
      parameters - The types of the arguments passed to the plugins. They are accepted by the returned plugins, but not necessarily in this order.
      Returns:
      a list of executable bindings
    • getPluginsAcceptingOrdered

      public Set<PluginParameterBinding> getPluginsAcceptingOrdered(Class<? extends PluginContext> contextType, boolean mustBeUserVisible, Class<?>... parameters)
      Description copied from interface: PluginManager
      Returns executable PluginParameterBindings, which can be invoked in the given context on the given parameter types. Note that the PluginParameterBindings are executable.
      Specified by:
      getPluginsAcceptingOrdered in interface PluginManager
      Parameters:
      contextType - The type of the context in which the binding is to be invoked.
      mustBeUserVisible - Whether or not the plugin should be user visible.
      parameters - The types of the arguments passed to the plugins. They are accepted by the plugin in the order in which they are provided.
      Returns:
      a list of executable bindings
    • getPluginsResultingIn

      public Set<Pair<Integer,PluginDescriptor>> getPluginsResultingIn(Class<?> resultType, Class<? extends PluginContext> contextType, boolean mustBeUserVisible)
      Description copied from interface: PluginManager
      Find the plugins resulting in the given type. The result are pairs of integers and plugins, such that for each pair (i,p) holds that resultType.isAssignableFrom(p.getReturnTypes()[i])
      Specified by:
      getPluginsResultingIn in interface PluginManager
      Parameters:
      resultType - Can be null. if null, then any type is considered.
      mustBeUserVisible - Whether or not all returned plugins should be user visible.
      Returns:
      A collection of pairs of integers and plugins, such that for each pair (i,p) holds that resultType.isAssignableFrom(p.getReturnTypes()[i])
    • getAllPlugins

      public SortedSet<PluginDescriptor> getAllPlugins()
      Description copied from interface: PluginManager
      Returns all plugin descriptors
      Specified by:
      getAllPlugins in interface PluginManager
      Returns:
      all plugin descriptors known to the plugin manager.
    • getAllPlugins

      public SortedSet<PluginDescriptor> getAllPlugins(boolean mustBeVisible)
      Description copied from interface: PluginManager
      Returns all plugin descriptors known to the plugin manager. If set, only those plugins which are user visible are returned.
      Specified by:
      getAllPlugins in interface PluginManager
      Parameters:
      mustBeVisible - wether or not the returned plugins should be user visible.
      Returns:
      the plugin descriptors.
    • isParameterAssignable

      public boolean isParameterAssignable(Class<?> instanceType, Class<?> requestedType)
      Description copied from interface: PluginManager
      Returns true if the instance type can be cast to the requested type, or if the requested type is an array and the instance type can be cast to the component type of the requested type.
      Specified by:
      isParameterAssignable in interface PluginManager
      Parameters:
      instanceType - the type that has to be cast to the requested type.
      requestedType - the requested type
      Returns:
      true if a cast can be made, i.e. if an object of type instanceType can be assigned to a parameter of type requestedType of a plugin.
    • getKnownObjectTypes

      public Set<Class<?>> getKnownObjectTypes()
      Description copied from interface: PluginManager
      Returns the set of types that is known to the plugin manager. Basically, this set contains all types that are ever used as a parameter or a return type of a plugin.
      Specified by:
      getKnownObjectTypes in interface PluginManager
      Returns:
      a set of types.