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 Details

    • DEFAULT_LIB_DIR

      public static final Path DEFAULT_LIB_DIR
    • DEFAULT_MODULE_DIR

      public static final Path 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

      private static final Class<Path> DATA_DIRECTORY_KEY
    • MODULE_CONFIG_KEY

      private static final BindingKey<eu.cloudnetservice.driver.module.ModuleConfiguration> MODULE_CONFIG_KEY
    • modules

      protected final Collection<eu.cloudnetservice.driver.module.ModuleWrapper> modules
    • moduleDirectory

      protected Path 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 is DEFAULT_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:
      • ModuleDependencyLoader
  • Method Details

    • moduleDirectoryPath

      @NonNull public @NonNull Path moduleDirectoryPath()
      Specified by:
      moduleDirectoryPath in interface eu.cloudnetservice.driver.module.ModuleProvider
    • moduleDirectoryPath

      public void moduleDirectoryPath(@NonNull @NonNull Path moduleDirectory)
      Specified by:
      moduleDirectoryPath in interface eu.cloudnetservice.driver.module.ModuleProvider
    • moduleProviderHandler

      @Nullable public @Nullable eu.cloudnetservice.driver.module.ModuleProviderHandler moduleProviderHandler()
      Specified by:
      moduleProviderHandler in interface eu.cloudnetservice.driver.module.ModuleProvider
    • moduleProviderHandler

      public void moduleProviderHandler(@Nullable @Nullable eu.cloudnetservice.driver.module.ModuleProviderHandler moduleProviderHandler)
      Specified by:
      moduleProviderHandler in interface eu.cloudnetservice.driver.module.ModuleProvider
    • moduleDependencyLoader

      @NonNull public @NonNull eu.cloudnetservice.driver.module.ModuleDependencyLoader moduleDependencyLoader()
      Specified by:
      moduleDependencyLoader in interface eu.cloudnetservice.driver.module.ModuleProvider
    • moduleDependencyLoader

      public void moduleDependencyLoader(@NonNull @NonNull eu.cloudnetservice.driver.module.ModuleDependencyLoader moduleDependencyLoader)
      Specified by:
      moduleDependencyLoader in interface eu.cloudnetservice.driver.module.ModuleProvider
    • modules

      @NonNull public @NonNull Collection<eu.cloudnetservice.driver.module.ModuleWrapper> modules()
      Specified by:
      modules in interface eu.cloudnetservice.driver.module.ModuleProvider
    • modules

      @NonNull public @NonNull Collection<eu.cloudnetservice.driver.module.ModuleWrapper> modules(@NonNull @NonNull String group)
      Specified by:
      modules in interface eu.cloudnetservice.driver.module.ModuleProvider
    • module

      @Nullable public @Nullable eu.cloudnetservice.driver.module.ModuleWrapper module(@NonNull @NonNull String name)
      Specified by:
      module in interface eu.cloudnetservice.driver.module.ModuleProvider
    • loadModule

      @Nullable public @Nullable eu.cloudnetservice.driver.module.ModuleWrapper loadModule(@NonNull @NonNull URL url)
      Specified by:
      loadModule in interface eu.cloudnetservice.driver.module.ModuleProvider
    • loadModule

      @Nullable public @Nullable eu.cloudnetservice.driver.module.ModuleWrapper loadModule(@NonNull @NonNull Path path)
      Specified by:
      loadModule in interface eu.cloudnetservice.driver.module.ModuleProvider
    • loadAll

      @NonNull public @NonNull eu.cloudnetservice.driver.module.ModuleProvider loadAll()
      Specified by:
      loadAll in interface eu.cloudnetservice.driver.module.ModuleProvider
    • startAll

      @NonNull public @NonNull eu.cloudnetservice.driver.module.ModuleProvider startAll()
      Specified by:
      startAll in interface eu.cloudnetservice.driver.module.ModuleProvider
    • reloadAll

      @NonNull public @NonNull eu.cloudnetservice.driver.module.ModuleProvider reloadAll()
      Specified by:
      reloadAll in interface eu.cloudnetservice.driver.module.ModuleProvider
    • stopAll

      @NonNull public @NonNull eu.cloudnetservice.driver.module.ModuleProvider stopAll()
      Specified by:
      stopAll in interface eu.cloudnetservice.driver.module.ModuleProvider
    • unloadAll

      @NonNull public @NonNull eu.cloudnetservice.driver.module.ModuleProvider unloadAll()
      Specified by:
      unloadAll in interface eu.cloudnetservice.driver.module.ModuleProvider
    • notifyPreModuleLifecycleChange

      public boolean notifyPreModuleLifecycleChange(@NonNull @NonNull eu.cloudnetservice.driver.module.ModuleWrapper wrapper, @NonNull @NonNull eu.cloudnetservice.driver.module.ModuleLifeCycle lifeCycle)
      Specified by:
      notifyPreModuleLifecycleChange in interface eu.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:
      notifyPostModuleLifecycleChange in interface eu.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 given ModuleConfiguration to 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.