org.mozilla.javascript.commonjs.module.provider

## Class CachingModuleScriptProviderBase

- java.lang.Object
- - org.mozilla.javascript.commonjs.module.provider.CachingModuleScriptProviderBase

- All Implemented Interfaces:
    java.io.Serializable, ModuleScriptProvider
  Direct Known Subclasses:
    SoftCachingModuleScriptProvider, StrongCachingModuleScriptProvider

      public abstract class CachingModuleScriptProviderBase
      extends java.lang.Object
      implements ModuleScriptProvider, java.io.Serializable

  Abstract base class that implements caching of loaded module scripts. It uses a `ModuleSourceProvider` to obtain the source text of the scripts. It supports a cache revalidation mechanism based on validator objects returned from the `ModuleSourceProvider`. Instances of this class and its subclasses are thread safe (and written to perform decently under concurrent access).
  See Also:
    Serialized Form

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `CachingModuleScriptProviderBase.CachedModuleScript` Instances of this class represent a loaded and cached module script.

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `CachingModuleScriptProviderBase(ModuleSourceProvider moduleSourceProvider)` Creates a new module script provider with the specified source.

  - ### Method Summary

    All Methods Static Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected static int` | `getConcurrencyLevel()` Returns the internal concurrency level utilized by caches in this JVM.
    `protected abstract CachingModuleScriptProviderBase.CachedModuleScript` | `getLoadedModule(java.lang.String moduleId)` Retrieves an already loaded moduleScript stored using `putLoadedModule(String, ModuleScript, Object)`.
    `ModuleScript` | `getModuleScript(Context cx, java.lang.String moduleId, java.net.URI moduleUri, java.net.URI baseUri, Scriptable paths)` Returns a module script.
    `protected abstract void` | `putLoadedModule(java.lang.String moduleId, ModuleScript moduleScript, java.lang.Object validator)` Store a loaded module script for later retrieval using `getLoadedModule(String)`.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### CachingModuleScriptProviderBase

          protected CachingModuleScriptProviderBase(ModuleSourceProvider moduleSourceProvider)

      Creates a new module script provider with the specified source.
      Parameters:
        `moduleSourceProvider` - provider for modules' source code

  - ### Method Detail

    - #### getModuleScript

          public ModuleScript getModuleScript(Context cx,
                                              java.lang.String moduleId,
                                              java.net.URI moduleUri,
                                              java.net.URI baseUri,
                                              Scriptable paths)
                                       throws java.lang.Exception

      Description copied from interface: `ModuleScriptProvider`
      Returns a module script. It should attempt to load the module script if it is not already available to it, or return an already loaded module script instance if it is available to it.
      Specified by:
        `getModuleScript` in interface `ModuleScriptProvider`
      Parameters:
        `cx` - current context. Can be used to compile module scripts.
        `moduleId` - the ID of the module. An implementation must only accept an absolute ID, starting with a term.
        `moduleUri` - the URI of the module. If this is not null, resolution of `moduleId` is bypassed and the script is directly loaded from `moduleUri`
        `baseUri` - the module path base URI from which `moduleUri` was derived.
        `paths` - the value of the require() function's "paths" attribute. If the require() function is sandboxed, it will be null, otherwise it will be a JavaScript Array object. It is up to the provider implementation whether and how it wants to honor the contents of the array.
      Returns:
        a module script representing the compiled code of the module. Null should be returned if the script could not found.
      Throws:
        `java.lang.Exception` - if there was an unrecoverable problem obtaining the script
        `java.lang.IllegalArgumentException` - if the module ID is syntactically not a valid absolute module identifier.

    - #### putLoadedModule

          protected abstract void putLoadedModule(java.lang.String moduleId,
                                                  ModuleScript moduleScript,
                                                  java.lang.Object validator)

      Store a loaded module script for later retrieval using `getLoadedModule(String)`.
      Parameters:
        `moduleId` - the ID of the module
        `moduleScript` - the module script
        `validator` - the validator for the module's source text entity

    - #### getLoadedModule

          protected abstract CachingModuleScriptProviderBase.CachedModuleScript getLoadedModule(java.lang.String moduleId)

      Retrieves an already loaded moduleScript stored using `putLoadedModule(String, ModuleScript, Object)`.
      Parameters:
        `moduleId` - the ID of the module
      Returns:
        a cached module script, or null if the module is not loaded.

    - #### getConcurrencyLevel

          protected static int getConcurrencyLevel()

      Returns the internal concurrency level utilized by caches in this JVM.
      Returns:
        the internal concurrency level utilized by caches in this JVM.