Class DefaultModuleWrapper

java.lang.Object
eu.cloudnetservice.driver.impl.module.DefaultModuleWrapper
All Implemented Interfaces:
eu.cloudnetservice.driver.inject.InjectionLayerHolder<Injector>, eu.cloudnetservice.driver.module.ModuleWrapper

public class DefaultModuleWrapper extends Object implements eu.cloudnetservice.driver.module.ModuleWrapper
Represents the default implementation of the module wrapper.
Since:
4.0
See Also:
  • ModuleWrapper
  • Field Details

    • LOGGER

      protected static final org.slf4j.Logger LOGGER
    • TASK_COMPARATOR

      protected static final Comparator<eu.cloudnetservice.driver.module.ModuleTaskEntry> TASK_COMPARATOR
    • source

      private final URL source
    • sourceUri

      private final URI sourceUri
    • module

      private final eu.cloudnetservice.driver.module.Module module
    • dataDirectory

      private final Path dataDirectory
    • provider

      private final eu.cloudnetservice.driver.module.ModuleProvider provider
    • classLoader

      private final URLClassLoader classLoader
    • dependingModules

      private final Set<eu.cloudnetservice.driver.module.ModuleDependency> dependingModules
    • moduleConfiguration

      private final eu.cloudnetservice.driver.module.ModuleConfiguration moduleConfiguration
    • moduleInjectionLayer

      private final eu.cloudnetservice.driver.inject.InjectionLayer<Injector> moduleInjectionLayer
    • moduleLifecycleUpdateLock

      private final Lock moduleLifecycleUpdateLock
    • tasks

      private final Map<eu.cloudnetservice.driver.module.ModuleLifeCycle, List<eu.cloudnetservice.driver.module.ModuleTaskEntry>> tasks
    • lifeCycle

      private final AtomicReference<eu.cloudnetservice.driver.module.ModuleLifeCycle> lifeCycle
  • Constructor Details

    • DefaultModuleWrapper

      public DefaultModuleWrapper(@NonNull @NonNull URL source, @NonNull @NonNull eu.cloudnetservice.driver.module.Module module, @NonNull @NonNull Path dataDirectory, @NonNull @NonNull eu.cloudnetservice.driver.module.ModuleProvider provider, @NonNull @NonNull URLClassLoader classLoader, @NonNull @NonNull Set<eu.cloudnetservice.driver.module.ModuleDependency> dependingModules, @NonNull @NonNull eu.cloudnetservice.driver.module.ModuleConfiguration moduleConfiguration, @NonNull @NonNull eu.cloudnetservice.driver.inject.InjectionLayer<Injector> moduleInjectionLayer) throws URISyntaxException
      Creates a new instance of a default module wrapper.
      Parameters:
      source - the module file from which this module was loaded initially.
      module - the instance of the module main class constructed by the provider.
      dataDirectory - the data directory of this module relative to the module provider directory.
      provider - the provider which loaded this module.
      classLoader - the class loader which was used to load the main class from the file.
      dependingModules - the modules this module depends on and which need to get loaded first.
      moduleConfiguration - the parsed module configuration located in the module file.
      moduleInjectionLayer - the injection layer of the module.
      Throws:
      URISyntaxException - if the given module source is not formatted strictly according to RFC2396.
      NullPointerException - if one of the given arguments is null.
  • Method Details

    • moduleTasks

      @NonNull public @NonNull Map<eu.cloudnetservice.driver.module.ModuleLifeCycle, List<eu.cloudnetservice.driver.module.ModuleTaskEntry>> moduleTasks()
      Specified by:
      moduleTasks in interface eu.cloudnetservice.driver.module.ModuleWrapper
    • dependingModules

      @NonNull public @NonNull @Unmodifiable Set<eu.cloudnetservice.driver.module.ModuleDependency> dependingModules()
      Specified by:
      dependingModules in interface eu.cloudnetservice.driver.module.ModuleWrapper
    • module

      @NonNull public @NonNull eu.cloudnetservice.driver.module.Module module()
      Specified by:
      module in interface eu.cloudnetservice.driver.module.ModuleWrapper
    • moduleLifeCycle

      @NonNull public @NonNull eu.cloudnetservice.driver.module.ModuleLifeCycle moduleLifeCycle()
      Specified by:
      moduleLifeCycle in interface eu.cloudnetservice.driver.module.ModuleWrapper
    • moduleProvider

      @NonNull public @NonNull eu.cloudnetservice.driver.module.ModuleProvider moduleProvider()
      Specified by:
      moduleProvider in interface eu.cloudnetservice.driver.module.ModuleWrapper
    • moduleConfiguration

      @NonNull public @NonNull eu.cloudnetservice.driver.module.ModuleConfiguration moduleConfiguration()
      Specified by:
      moduleConfiguration in interface eu.cloudnetservice.driver.module.ModuleWrapper
    • classLoader

      @NonNull public @NonNull ClassLoader classLoader()
      Specified by:
      classLoader in interface eu.cloudnetservice.driver.module.ModuleWrapper
    • loadModule

      @NonNull public @NonNull eu.cloudnetservice.driver.module.ModuleWrapper loadModule()
      Specified by:
      loadModule in interface eu.cloudnetservice.driver.module.ModuleWrapper
    • startModule

      @NonNull public @NonNull eu.cloudnetservice.driver.module.ModuleWrapper startModule()
      Specified by:
      startModule in interface eu.cloudnetservice.driver.module.ModuleWrapper
    • reloadModule

      @NonNull public @NonNull eu.cloudnetservice.driver.module.ModuleWrapper reloadModule()
      Specified by:
      reloadModule in interface eu.cloudnetservice.driver.module.ModuleWrapper
    • stopModule

      @NonNull public @NonNull eu.cloudnetservice.driver.module.ModuleWrapper stopModule()
      Specified by:
      stopModule in interface eu.cloudnetservice.driver.module.ModuleWrapper
    • unloadModule

      @NonNull public @NonNull eu.cloudnetservice.driver.module.ModuleWrapper unloadModule()
      Specified by:
      unloadModule in interface eu.cloudnetservice.driver.module.ModuleWrapper
    • dataDirectory

      @NonNull public @NonNull Path dataDirectory()
      Specified by:
      dataDirectory in interface eu.cloudnetservice.driver.module.ModuleWrapper
    • url

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

      @NonNull public @NonNull URI uri()
      Specified by:
      uri in interface eu.cloudnetservice.driver.module.ModuleWrapper
    • injectionLayer

      @NonNull public @NonNull eu.cloudnetservice.driver.inject.InjectionLayer<Injector> injectionLayer()
      Specified by:
      injectionLayer in interface eu.cloudnetservice.driver.inject.InjectionLayerHolder<Injector>
      Specified by:
      injectionLayer in interface eu.cloudnetservice.driver.module.ModuleWrapper
    • resolveModuleTasks

      @NonNull protected @NonNull Map<eu.cloudnetservice.driver.module.ModuleLifeCycle, List<eu.cloudnetservice.driver.module.ModuleTaskEntry>> resolveModuleTasks(@NonNull @NonNull eu.cloudnetservice.driver.module.Module module)
      Resolves all module tasks in the main class of a module. Declared methods are working as well. The returned map should only contain the tasks sorted as there will be no later step to sort them. Not all module lifecycle states must be in the returned map, if a lifecycle is missing it will be assumed that there is no tasks for that lifecycle.
      Parameters:
      module - the module instance (better known as the module main class) to resolve the tasks of.
      Returns:
      all sorted resolved tasks mapped to the lifecycle they will be called in.
    • pushLifecycleChange

      protected void pushLifecycleChange(@NonNull @NonNull eu.cloudnetservice.driver.module.ModuleLifeCycle lifeCycle, boolean notifyProvider)
      Fires all handlers registered for the specified lifeCycle.
      Parameters:
      lifeCycle - the lifecycle to fire the tasks of.
      notifyProvider - if the module provider should be notified about the change or not.
    • fireModuleTaskEntry

      protected boolean fireModuleTaskEntry(@NonNull @NonNull eu.cloudnetservice.driver.module.ModuleTaskEntry entry)
      Fires a specific module task entry.
      Parameters:
      entry - the entry to fire.
      Returns:
      true if the entry couldn't be fired successfully, false otherwise.