Package org.pf4j
Class AbstractPluginManager
- java.lang.Object
-
- org.pf4j.AbstractPluginManager
-
- All Implemented Interfaces:
PluginManager
- Direct Known Subclasses:
DefaultPluginManager
public abstract class AbstractPluginManager extends java.lang.Object implements PluginManager
This class implements the boilerplate plugin code that anyPluginManager
implementation would have to support. It helps cut the noise out of the subclass that handles plugin management.This class is not thread-safe.
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
DEFAULT_PLUGINS_DIR
protected DependencyResolver
dependencyResolver
static java.lang.String
DEVELOPMENT_PLUGINS_DIR
protected boolean
exactVersionAllowed
protected ExtensionFactory
extensionFactory
protected ExtensionFinder
extensionFinder
private static org.slf4j.Logger
log
static java.lang.String
MODE_PROPERTY_NAME
protected java.util.Map<java.lang.String,java.lang.ClassLoader>
pluginClassLoaders
A map of plugin class loaders (the key is the 'pluginId').protected PluginDescriptorFinder
pluginDescriptorFinder
protected PluginFactory
pluginFactory
protected PluginLoader
pluginLoader
protected PluginRepository
pluginRepository
protected java.util.Map<java.lang.String,PluginWrapper>
plugins
A map of plugins this manager is responsible for (the key is the 'pluginId').static java.lang.String
PLUGINS_DIR_PROPERTY_NAME
protected java.nio.file.Path
pluginsRoot
protected java.util.List<PluginStateListener>
pluginStateListeners
The registeredPluginStateListener
s.protected PluginStatusProvider
pluginStatusProvider
protected java.util.List<PluginWrapper>
resolvedPlugins
A list with all resolved plugins (resolved dependency).protected RuntimeMode
runtimeMode
Cache value for the runtime mode.protected java.util.List<PluginWrapper>
startedPlugins
A list with started plugins.protected java.lang.String
systemVersion
The system version used for comparisons to the plugin requires attribute.protected java.util.List<PluginWrapper>
unresolvedPlugins
A list with unresolved plugins (unresolved dependency).protected VersionManager
versionManager
-
Constructor Summary
Constructors Constructor Description AbstractPluginManager()
The plugins root is supplied bySystem.getProperty("pf4j.pluginsDir", "plugins")
.AbstractPluginManager(java.nio.file.Path pluginsRoot)
ConstructsAbstractPluginManager
with the given plugins root.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
addPluginStateListener(PluginStateListener listener)
private void
checkPluginId(java.lang.String pluginId)
protected abstract ExtensionFactory
createExtensionFactory()
protected abstract ExtensionFinder
createExtensionFinder()
protected abstract PluginDescriptorFinder
createPluginDescriptorFinder()
protected abstract PluginFactory
createPluginFactory()
protected abstract PluginLoader
createPluginLoader()
protected abstract PluginRepository
createPluginRepository()
protected java.nio.file.Path
createPluginsRoot()
Add the possibility to override the plugins root.protected abstract PluginStatusProvider
createPluginStatusProvider()
protected abstract VersionManager
createVersionManager()
boolean
deletePlugin(java.lang.String pluginId)
Deletes a plugin.boolean
disablePlugin(java.lang.String pluginId)
Disables a plugin from being loaded.boolean
enablePlugin(java.lang.String pluginId)
Enables a plugin that has previously been disabled.protected void
firePluginStateEvent(PluginStateEvent event)
<T> java.util.List<java.lang.Class<? extends T>>
getExtensionClasses(java.lang.Class<T> type)
<T> java.util.List<java.lang.Class<? extends T>>
getExtensionClasses(java.lang.Class<T> type, java.lang.String pluginId)
java.util.List<java.lang.Class<?>>
getExtensionClasses(java.lang.String pluginId)
private <T> java.util.List<java.lang.Class<? extends T>>
getExtensionClasses(java.util.List<ExtensionWrapper<T>> extensionsWrapper)
java.util.Set<java.lang.String>
getExtensionClassNames(java.lang.String pluginId)
ExtensionFactory
getExtensionFactory()
<T> java.util.List<T>
getExtensions(java.lang.Class<T> type)
<T> java.util.List<T>
getExtensions(java.lang.Class<T> type, java.lang.String pluginId)
java.util.List
getExtensions(java.lang.String pluginId)
private <T> java.util.List<T>
getExtensions(java.util.List<ExtensionWrapper<T>> extensionsWrapper)
PluginWrapper
getPlugin(java.lang.String pluginId)
Retrieves the plugin with this id, or null if the plugin does not exist.java.lang.ClassLoader
getPluginClassLoader(java.lang.String pluginId)
Get theClassLoader
for plugin.protected java.util.Map<java.lang.String,java.lang.ClassLoader>
getPluginClassLoaders()
protected PluginDescriptorFinder
getPluginDescriptorFinder()
protected PluginFactory
getPluginFactory()
protected java.lang.String
getPluginLabel(PluginDescriptor pluginDescriptor)
The plugin label is used in logging and it's a string in formatpluginId@pluginVersion
.PluginLoader
getPluginLoader()
java.util.List<PluginWrapper>
getPlugins()
Returns a copy of plugins.java.util.List<PluginWrapper>
getPlugins(PluginState pluginState)
Returns a copy of plugins with that state.java.nio.file.Path
getPluginsRoot()
Gets the path of the folder where plugins are installed.java.util.List<PluginWrapper>
getResolvedPlugins()
Retrieves all resolved plugins (with resolved dependency).RuntimeMode
getRuntimeMode()
The runtime mode.java.util.List<PluginWrapper>
getStartedPlugins()
Retrieves all started plugins.java.lang.String
getSystemVersion()
Returns the system version.java.util.List<PluginWrapper>
getUnresolvedPlugins()
Retrieves all unresolved plugins (with unresolved dependency).java.lang.String
getVersion()
VersionManager
getVersionManager()
protected java.lang.String
idForPath(java.nio.file.Path pluginPath)
Tests for already loaded plugins on given path.protected void
initialize()
boolean
isExactVersionAllowed()
protected boolean
isPluginDisabled(java.lang.String pluginId)
protected boolean
isPluginValid(PluginWrapper pluginWrapper)
Check if this plugin is valid (satisfies "requires" param) for a given system version.java.lang.String
loadPlugin(java.nio.file.Path pluginPath)
Load a plugin.protected PluginWrapper
loadPluginFromPath(java.nio.file.Path pluginPath)
void
loadPlugins()
Load plugins.void
removePluginStateListener(PluginStateListener listener)
protected void
resolvePlugins()
void
setExactVersionAllowed(boolean exactVersionAllowed)
Set to true to allow requires expression to be exactly x.y.z.void
setSystemVersion(java.lang.String version)
Set the system version.PluginState
startPlugin(java.lang.String pluginId)
Start the specified plugin and its dependencies.void
startPlugins()
Start all active plugins.PluginState
stopPlugin(java.lang.String pluginId)
Stop the specified plugin and it's dependents.private PluginState
stopPlugin(java.lang.String pluginId, boolean stopDependents)
void
stopPlugins()
Stop all active plugins.boolean
unloadPlugin(java.lang.String pluginId)
Unload the specified plugin and it's dependents.private boolean
unloadPlugin(java.lang.String pluginId, boolean unloadDependents)
protected void
validatePluginDescriptor(PluginDescriptor descriptor)
Override this to change the validation criteria.PluginWrapper
whichPlugin(java.lang.Class<?> clazz)
Retrieves thePluginWrapper
that loaded the given class 'clazz'.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.pf4j.PluginManager
isDevelopment, isNotDevelopment
-
-
-
-
Field Detail
-
log
private static final org.slf4j.Logger log
-
PLUGINS_DIR_PROPERTY_NAME
public static final java.lang.String PLUGINS_DIR_PROPERTY_NAME
- See Also:
- Constant Field Values
-
MODE_PROPERTY_NAME
public static final java.lang.String MODE_PROPERTY_NAME
- See Also:
- Constant Field Values
-
DEFAULT_PLUGINS_DIR
public static final java.lang.String DEFAULT_PLUGINS_DIR
- See Also:
- Constant Field Values
-
DEVELOPMENT_PLUGINS_DIR
public static final java.lang.String DEVELOPMENT_PLUGINS_DIR
- See Also:
- Constant Field Values
-
pluginsRoot
protected java.nio.file.Path pluginsRoot
-
extensionFinder
protected ExtensionFinder extensionFinder
-
pluginDescriptorFinder
protected PluginDescriptorFinder pluginDescriptorFinder
-
plugins
protected java.util.Map<java.lang.String,PluginWrapper> plugins
A map of plugins this manager is responsible for (the key is the 'pluginId').
-
pluginClassLoaders
protected java.util.Map<java.lang.String,java.lang.ClassLoader> pluginClassLoaders
A map of plugin class loaders (the key is the 'pluginId').
-
unresolvedPlugins
protected java.util.List<PluginWrapper> unresolvedPlugins
A list with unresolved plugins (unresolved dependency).
-
resolvedPlugins
protected java.util.List<PluginWrapper> resolvedPlugins
A list with all resolved plugins (resolved dependency).
-
startedPlugins
protected java.util.List<PluginWrapper> startedPlugins
A list with started plugins.
-
pluginStateListeners
protected java.util.List<PluginStateListener> pluginStateListeners
The registeredPluginStateListener
s.
-
runtimeMode
protected RuntimeMode runtimeMode
Cache value for the runtime mode. No need to re-read it because it wont change at runtime.
-
systemVersion
protected java.lang.String systemVersion
The system version used for comparisons to the plugin requires attribute.
-
pluginRepository
protected PluginRepository pluginRepository
-
pluginFactory
protected PluginFactory pluginFactory
-
extensionFactory
protected ExtensionFactory extensionFactory
-
pluginStatusProvider
protected PluginStatusProvider pluginStatusProvider
-
dependencyResolver
protected DependencyResolver dependencyResolver
-
pluginLoader
protected PluginLoader pluginLoader
-
exactVersionAllowed
protected boolean exactVersionAllowed
-
versionManager
protected VersionManager versionManager
-
-
Constructor Detail
-
AbstractPluginManager
public AbstractPluginManager()
The plugins root is supplied bySystem.getProperty("pf4j.pluginsDir", "plugins")
.
-
AbstractPluginManager
public AbstractPluginManager(java.nio.file.Path pluginsRoot)
ConstructsAbstractPluginManager
with the given plugins root.- Parameters:
pluginsRoot
- the root to search for plugins
-
-
Method Detail
-
setSystemVersion
public void setSystemVersion(java.lang.String version)
Description copied from interface:PluginManager
Set the system version. This is used to compare against the plugin requires attribute. The default system version is 0.0.0 which disables all version checking.- Specified by:
setSystemVersion
in interfacePluginManager
-
getSystemVersion
public java.lang.String getSystemVersion()
Description copied from interface:PluginManager
Returns the system version.- Specified by:
getSystemVersion
in interfacePluginManager
- Returns:
- the system version
-
getPlugins
public java.util.List<PluginWrapper> getPlugins()
Returns a copy of plugins.- Specified by:
getPlugins
in interfacePluginManager
-
getPlugins
public java.util.List<PluginWrapper> getPlugins(PluginState pluginState)
Returns a copy of plugins with that state.- Specified by:
getPlugins
in interfacePluginManager
-
getResolvedPlugins
public java.util.List<PluginWrapper> getResolvedPlugins()
Description copied from interface:PluginManager
Retrieves all resolved plugins (with resolved dependency).- Specified by:
getResolvedPlugins
in interfacePluginManager
-
getUnresolvedPlugins
public java.util.List<PluginWrapper> getUnresolvedPlugins()
Description copied from interface:PluginManager
Retrieves all unresolved plugins (with unresolved dependency).- Specified by:
getUnresolvedPlugins
in interfacePluginManager
-
getStartedPlugins
public java.util.List<PluginWrapper> getStartedPlugins()
Description copied from interface:PluginManager
Retrieves all started plugins.- Specified by:
getStartedPlugins
in interfacePluginManager
-
getPlugin
public PluginWrapper getPlugin(java.lang.String pluginId)
Description copied from interface:PluginManager
Retrieves the plugin with this id, or null if the plugin does not exist.- Specified by:
getPlugin
in interfacePluginManager
- Parameters:
pluginId
- the unique plugin identifier, specified in its metadata- Returns:
- A PluginWrapper object for this plugin, or null if it does not exist.
-
loadPlugin
public java.lang.String loadPlugin(java.nio.file.Path pluginPath)
Description copied from interface:PluginManager
Load a plugin.- Specified by:
loadPlugin
in interfacePluginManager
- Parameters:
pluginPath
- the plugin location- Returns:
- the pluginId of the installed plugin as specified in its metadata
-
loadPlugins
public void loadPlugins()
Load plugins.- Specified by:
loadPlugins
in interfacePluginManager
-
unloadPlugin
public boolean unloadPlugin(java.lang.String pluginId)
Unload the specified plugin and it's dependents.- Specified by:
unloadPlugin
in interfacePluginManager
- Parameters:
pluginId
- the unique plugin identifier, specified in its metadata- Returns:
- true if the plugin was unloaded
-
unloadPlugin
private boolean unloadPlugin(java.lang.String pluginId, boolean unloadDependents)
-
deletePlugin
public boolean deletePlugin(java.lang.String pluginId)
Description copied from interface:PluginManager
Deletes a plugin.- Specified by:
deletePlugin
in interfacePluginManager
- Parameters:
pluginId
- the unique plugin identifier, specified in its metadata- Returns:
- true if the plugin was deleted
-
startPlugins
public void startPlugins()
Start all active plugins.- Specified by:
startPlugins
in interfacePluginManager
-
startPlugin
public PluginState startPlugin(java.lang.String pluginId)
Start the specified plugin and its dependencies.- Specified by:
startPlugin
in interfacePluginManager
- Returns:
- the plugin state
-
stopPlugins
public void stopPlugins()
Stop all active plugins.- Specified by:
stopPlugins
in interfacePluginManager
-
stopPlugin
public PluginState stopPlugin(java.lang.String pluginId)
Stop the specified plugin and it's dependents.- Specified by:
stopPlugin
in interfacePluginManager
- Returns:
- the plugin state
-
stopPlugin
private PluginState stopPlugin(java.lang.String pluginId, boolean stopDependents)
-
checkPluginId
private void checkPluginId(java.lang.String pluginId)
-
disablePlugin
public boolean disablePlugin(java.lang.String pluginId)
Description copied from interface:PluginManager
Disables a plugin from being loaded.- Specified by:
disablePlugin
in interfacePluginManager
- Parameters:
pluginId
- the unique plugin identifier, specified in its metadata- Returns:
- true if plugin is disabled
-
enablePlugin
public boolean enablePlugin(java.lang.String pluginId)
Description copied from interface:PluginManager
Enables a plugin that has previously been disabled.- Specified by:
enablePlugin
in interfacePluginManager
- Parameters:
pluginId
- the unique plugin identifier, specified in its metadata- Returns:
- true if plugin is enabled
-
getPluginClassLoader
public java.lang.ClassLoader getPluginClassLoader(java.lang.String pluginId)
Get theClassLoader
for plugin.- Specified by:
getPluginClassLoader
in interfacePluginManager
-
getExtensionClasses
public java.util.List<java.lang.Class<?>> getExtensionClasses(java.lang.String pluginId)
- Specified by:
getExtensionClasses
in interfacePluginManager
-
getExtensionClasses
public <T> java.util.List<java.lang.Class<? extends T>> getExtensionClasses(java.lang.Class<T> type)
- Specified by:
getExtensionClasses
in interfacePluginManager
-
getExtensionClasses
public <T> java.util.List<java.lang.Class<? extends T>> getExtensionClasses(java.lang.Class<T> type, java.lang.String pluginId)
- Specified by:
getExtensionClasses
in interfacePluginManager
-
getExtensions
public <T> java.util.List<T> getExtensions(java.lang.Class<T> type)
- Specified by:
getExtensions
in interfacePluginManager
-
getExtensions
public <T> java.util.List<T> getExtensions(java.lang.Class<T> type, java.lang.String pluginId)
- Specified by:
getExtensions
in interfacePluginManager
-
getExtensions
public java.util.List getExtensions(java.lang.String pluginId)
- Specified by:
getExtensions
in interfacePluginManager
-
getExtensionClassNames
public java.util.Set<java.lang.String> getExtensionClassNames(java.lang.String pluginId)
- Specified by:
getExtensionClassNames
in interfacePluginManager
-
getExtensionFactory
public ExtensionFactory getExtensionFactory()
- Specified by:
getExtensionFactory
in interfacePluginManager
-
getPluginLoader
public PluginLoader getPluginLoader()
-
getPluginsRoot
public java.nio.file.Path getPluginsRoot()
Description copied from interface:PluginManager
Gets the path of the folder where plugins are installed.- Specified by:
getPluginsRoot
in interfacePluginManager
- Returns:
- Path of plugins root
-
getRuntimeMode
public RuntimeMode getRuntimeMode()
Description copied from interface:PluginManager
The runtime mode. Must currently be either DEVELOPMENT or DEPLOYMENT.- Specified by:
getRuntimeMode
in interfacePluginManager
-
whichPlugin
public PluginWrapper whichPlugin(java.lang.Class<?> clazz)
Description copied from interface:PluginManager
Retrieves thePluginWrapper
that loaded the given class 'clazz'.- Specified by:
whichPlugin
in interfacePluginManager
-
addPluginStateListener
public void addPluginStateListener(PluginStateListener listener)
- Specified by:
addPluginStateListener
in interfacePluginManager
-
removePluginStateListener
public void removePluginStateListener(PluginStateListener listener)
- Specified by:
removePluginStateListener
in interfacePluginManager
-
getVersion
public java.lang.String getVersion()
-
createPluginRepository
protected abstract PluginRepository createPluginRepository()
-
createPluginFactory
protected abstract PluginFactory createPluginFactory()
-
createExtensionFactory
protected abstract ExtensionFactory createExtensionFactory()
-
createPluginDescriptorFinder
protected abstract PluginDescriptorFinder createPluginDescriptorFinder()
-
createExtensionFinder
protected abstract ExtensionFinder createExtensionFinder()
-
createPluginStatusProvider
protected abstract PluginStatusProvider createPluginStatusProvider()
-
createPluginLoader
protected abstract PluginLoader createPluginLoader()
-
createVersionManager
protected abstract VersionManager createVersionManager()
-
getPluginDescriptorFinder
protected PluginDescriptorFinder getPluginDescriptorFinder()
-
getPluginFactory
protected PluginFactory getPluginFactory()
-
getPluginClassLoaders
protected java.util.Map<java.lang.String,java.lang.ClassLoader> getPluginClassLoaders()
-
initialize
protected void initialize()
-
createPluginsRoot
protected java.nio.file.Path createPluginsRoot()
Add the possibility to override the plugins root. If aPLUGINS_DIR_PROPERTY_NAME
system property is defined than this method returns that root. IfgetRuntimeMode()
returnsRuntimeMode.DEVELOPMENT
thanDEVELOPMENT_PLUGINS_DIR
is returned else this method returnsDEFAULT_PLUGINS_DIR
.- Returns:
- the plugins root
-
isPluginValid
protected boolean isPluginValid(PluginWrapper pluginWrapper)
Check if this plugin is valid (satisfies "requires" param) for a given system version.- Parameters:
pluginWrapper
- the plugin to check- Returns:
- true if plugin satisfies the "requires" or if requires was left blank
-
isPluginDisabled
protected boolean isPluginDisabled(java.lang.String pluginId)
-
resolvePlugins
protected void resolvePlugins()
-
firePluginStateEvent
protected void firePluginStateEvent(PluginStateEvent event)
-
loadPluginFromPath
protected PluginWrapper loadPluginFromPath(java.nio.file.Path pluginPath)
-
idForPath
protected java.lang.String idForPath(java.nio.file.Path pluginPath)
Tests for already loaded plugins on given path.- Parameters:
pluginPath
- the path to investigate- Returns:
- id of plugin or null if not loaded
-
validatePluginDescriptor
protected void validatePluginDescriptor(PluginDescriptor descriptor)
Override this to change the validation criteria.- Parameters:
descriptor
- the plugin descriptor to validate- Throws:
PluginRuntimeException
- if validation fails
-
isExactVersionAllowed
public boolean isExactVersionAllowed()
- Returns:
- true if exact versions in requires is allowed
-
setExactVersionAllowed
public void setExactVersionAllowed(boolean exactVersionAllowed)
Set to true to allow requires expression to be exactly x.y.z. The default is false, meaning that using an exact version x.y.z will implicitly mean the same as >=x.y.z- Parameters:
exactVersionAllowed
- set to true or false
-
getVersionManager
public VersionManager getVersionManager()
- Specified by:
getVersionManager
in interfacePluginManager
-
getPluginLabel
protected java.lang.String getPluginLabel(PluginDescriptor pluginDescriptor)
The plugin label is used in logging and it's a string in formatpluginId@pluginVersion
.
-
getExtensionClasses
private <T> java.util.List<java.lang.Class<? extends T>> getExtensionClasses(java.util.List<ExtensionWrapper<T>> extensionsWrapper)
-
getExtensions
private <T> java.util.List<T> getExtensions(java.util.List<ExtensionWrapper<T>> extensionsWrapper)
-
-