Class DefaultModuleProvider
java.lang.Object
eu.cloudnetservice.driver.impl.module.DefaultModuleProvider
- All Implemented Interfaces:
eu.cloudnetservice.driver.module.ModuleProvider
@Singleton
@Provides(eu.cloudnetservice.driver.module.ModuleProvider.class)
public class DefaultModuleProvider
extends Object
implements eu.cloudnetservice.driver.module.ModuleProvider
Represents the default implementation of the module provider.
- Since:
- 4.0
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final eu.cloudnetservice.driver.module.ModuleDependencyLoaderstatic final Pathstatic final Pathprotected static final org.slf4j.Loggerprivate static final BindingKey<eu.cloudnetservice.driver.module.ModuleConfiguration> protected eu.cloudnetservice.driver.module.ModuleDependencyLoaderprotected Pathprotected eu.cloudnetservice.driver.module.ModuleProviderHandlerprotected final Collection<eu.cloudnetservice.driver.module.ModuleWrapper> -
Constructor Summary
ConstructorsConstructorDescriptionCreates a new default module provider by calling with the default library directory and the default dependency loader.DefaultModuleProvider(@NonNull Path moduleDirectory, @NonNull eu.cloudnetservice.driver.module.ModuleDependencyLoader moduleDependencyLoader) Creates a new default module provider with the given directory and dependency loader. -
Method Summary
Modifier and TypeMethodDescriptioncollectModuleProvidedRepositories(@NonNull eu.cloudnetservice.driver.module.ModuleConfiguration configuration) Collects all repositories provided in the givenModuleConfigurationto a standard url format.doLoadDependency(@NonNull eu.cloudnetservice.driver.module.ModuleDependency dependency, @NonNull eu.cloudnetservice.driver.module.ModuleConfiguration configuration, @Nullable eu.cloudnetservice.driver.module.ModuleProviderHandler handler, @NonNull Callable<URL> loader) Tries to load a module dependency.findModuleBySource(@NonNull URL fileSource) Finds a loaded module based on the given file source url.findModuleConfiguration(@NonNull URL moduleFile) Finds the module.json file in the provided module file and deserializes it.@NonNull eu.cloudnetservice.driver.module.ModuleProviderloadAll()loadDependencies(@NonNull Map<String, String> repos, @NonNull eu.cloudnetservice.driver.module.ModuleConfiguration configuration) Loads all dependencies defined in the module configuration file.@Nullable eu.cloudnetservice.driver.module.ModuleWrapperloadModule(@NonNull URL url) @Nullable eu.cloudnetservice.driver.module.ModuleWrapperloadModule(@NonNull Path path) @Nullable eu.cloudnetservice.driver.module.ModuleWrapper@NonNull eu.cloudnetservice.driver.module.ModuleDependencyLoadervoidmoduleDependencyLoader(@NonNull eu.cloudnetservice.driver.module.ModuleDependencyLoader moduleDependencyLoader) voidmoduleDirectoryPath(@NonNull Path moduleDirectory) @Nullable eu.cloudnetservice.driver.module.ModuleProviderHandlervoidmoduleProviderHandler(@Nullable eu.cloudnetservice.driver.module.ModuleProviderHandler moduleProviderHandler) @NonNull Collection<eu.cloudnetservice.driver.module.ModuleWrapper> modules()@NonNull Collection<eu.cloudnetservice.driver.module.ModuleWrapper> voidnotifyPostModuleLifecycleChange(@NonNull eu.cloudnetservice.driver.module.ModuleWrapper wrapper, @NonNull eu.cloudnetservice.driver.module.ModuleLifeCycle lifeCycle) booleannotifyPreModuleLifecycleChange(@NonNull eu.cloudnetservice.driver.module.ModuleWrapper wrapper, @NonNull eu.cloudnetservice.driver.module.ModuleLifeCycle lifeCycle) @NonNull eu.cloudnetservice.driver.module.ModuleProvider@NonNull eu.cloudnetservice.driver.module.ModuleProviderstartAll()@NonNull eu.cloudnetservice.driver.module.ModuleProviderstopAll()@NonNull eu.cloudnetservice.driver.module.ModuleProvider
-
Field Details
-
DEFAULT_LIB_DIR
-
DEFAULT_MODULE_DIR
-
LOGGER
protected static final org.slf4j.Logger LOGGER -
DEFAULT_DEP_LOADER
protected static final eu.cloudnetservice.driver.module.ModuleDependencyLoader DEFAULT_DEP_LOADER -
DATA_DIRECTORY_KEY
-
MODULE_CONFIG_KEY
private static final BindingKey<eu.cloudnetservice.driver.module.ModuleConfiguration> MODULE_CONFIG_KEY -
modules
-
moduleDirectory
-
moduleProviderHandler
protected eu.cloudnetservice.driver.module.ModuleProviderHandler moduleProviderHandler -
moduleDependencyLoader
protected eu.cloudnetservice.driver.module.ModuleDependencyLoader moduleDependencyLoader
-
-
Constructor Details
-
DefaultModuleProvider
public DefaultModuleProvider()Creates a new default module provider by calling with the default library directory and the default dependency loader.The default library directory is
DEFAULT_LIB_DIR. The default dependency loader isDEFAULT_DEP_LOADER -
DefaultModuleProvider
public DefaultModuleProvider(@NonNull @NonNull Path moduleDirectory, @NonNull @NonNull eu.cloudnetservice.driver.module.ModuleDependencyLoader moduleDependencyLoader) Creates a new default module provider with the given directory and dependency loader.- Parameters:
moduleDirectory- the directory where modules are stored.moduleDependencyLoader- the dependency loader to load all module dependencies.- Throws:
NullPointerException- if the given module directory or dependency loader is null.- See Also:
-
-
Method Details
-
moduleDirectoryPath
-
moduleDirectoryPath
-
moduleProviderHandler
-
moduleProviderHandler
-
moduleDependencyLoader
-
moduleDependencyLoader
-
modules
- Specified by:
modulesin interfaceeu.cloudnetservice.driver.module.ModuleProvider
-
modules
-
module
-
loadModule
-
loadModule
-
loadAll
-
startAll
-
reloadAll
-
stopAll
-
unloadAll
-
notifyPreModuleLifecycleChange
public boolean notifyPreModuleLifecycleChange(@NonNull @NonNull eu.cloudnetservice.driver.module.ModuleWrapper wrapper, @NonNull @NonNull eu.cloudnetservice.driver.module.ModuleLifeCycle lifeCycle) - Specified by:
notifyPreModuleLifecycleChangein interfaceeu.cloudnetservice.driver.module.ModuleProvider
-
notifyPostModuleLifecycleChange
public void notifyPostModuleLifecycleChange(@NonNull @NonNull eu.cloudnetservice.driver.module.ModuleWrapper wrapper, @NonNull @NonNull eu.cloudnetservice.driver.module.ModuleLifeCycle lifeCycle) - Specified by:
notifyPostModuleLifecycleChangein interfaceeu.cloudnetservice.driver.module.ModuleProvider
-
findModuleConfiguration
@NonNull protected @NonNull Optional<eu.cloudnetservice.driver.module.ModuleConfiguration> findModuleConfiguration(@NonNull @NonNull URL moduleFile) throws IOException Finds the module.json file in the provided module file and deserializes it.- Parameters:
moduleFile- the module file to find the module configuration of.- Returns:
- the deserialized module configuration file located in the provided module file.
- Throws:
IOException- if an I/O or deserialize exception occurs.NullPointerException- if the given module file is null.
-
findModuleBySource
@NonNull protected @NonNull Optional<eu.cloudnetservice.driver.module.ModuleWrapper> findModuleBySource(@NonNull @NonNull URL fileSource) throws URISyntaxException Finds a loaded module based on the given file source url.- Parameters:
fileSource- the source to find the associated module with.- Returns:
- the associated module to the given url.
- Throws:
URISyntaxException- if the given URL is not formatted strictly according to RFC2396.NullPointerException- if the given file source is null.
-
collectModuleProvidedRepositories
@NonNull protected @NonNull Map<String,String> collectModuleProvidedRepositories(@NonNull @NonNull eu.cloudnetservice.driver.module.ModuleConfiguration configuration) Collects all repositories provided in the givenModuleConfigurationto a standard url format.- Parameters:
configuration- the module configuration to read the repositories from.- Returns:
- all configured repositories in a standardized way.
- Throws:
NullPointerException- if configuration is null.
-
loadDependencies
@NonNull protected @NonNull Tuple2<Set<URL>, Set<eu.cloudnetservice.driver.module.ModuleDependency>> loadDependencies(@NonNull @NonNull Map<String, String> repos, @NonNull @NonNull eu.cloudnetservice.driver.module.ModuleConfiguration configuration) Loads all dependencies defined in the module configuration file.- Parameters:
repos- the repositories from which the dependencies can get loaded.configuration- the configuration of the module to load the dependencies of.- Returns:
- a pair, first are all the loaded dependencies; second are all the pending ones (module dependencies)
- Throws:
AssertionError- if one dependency can't be loaded.NullPointerException- if repos or configuration is null.
-
doLoadDependency
@NonNull protected @NonNull URL doLoadDependency(@NonNull @NonNull eu.cloudnetservice.driver.module.ModuleDependency dependency, @NonNull @NonNull eu.cloudnetservice.driver.module.ModuleConfiguration configuration, @Nullable @Nullable eu.cloudnetservice.driver.module.ModuleProviderHandler handler, @NonNull @NonNull Callable<URL> loader) Tries to load a module dependency. This method is fail-fast.- Parameters:
dependency- the dependency to load.configuration- the configuration from which the dependency was declared.handler- the provider handler if one is set and should be notified, else null.loader- the callback which will load the dependency.- Returns:
- the location of the loaded dependency in url form.
- Throws:
AssertionError- if loader fails to load the dependency.NullPointerException- if dependency, configuration, handler or loader is null.
-