Package org.zkoss.web.util.resource

## Class ExtendletLoader<V>

- java.lang.Object
- - org.zkoss.web.util.resource.ExtendletLoader<V>

- All Implemented Interfaces:
    `Loader<java.lang.String,​V>`

      public abstract class ExtendletLoader<V>
      extends java.lang.Object
      implements Loader<java.lang.String,​V>

  A skeletal implementation of the loader used to implement an extendlet. All you have to do is to implement `parse(java.io.InputStream, java.lang.String, java.lang.String)` and `getExtendletContext()`.

  If the real path is not the same as the path specified in URL, you can override `getRealPath(java.lang.String)`.

  Since:
    3.0.6
  Author:
    tomyeh
  See Also:
    `Extendlet`

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface org.zkoss.util.resource.Loader

      `Loader.Resource<V>`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor | Description
    --- | --- | ---
    `protected` | `ExtendletLoader()` |

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `int` | `getCheckPeriod()` | Returns the check period, or -1 if the content is never changed.
    `protected abstract ExtendletContext` | `getExtendletContext()` | Returns the extendlet context.
    `long` | `getLastModified​(java.lang.String src)` | Returns the last modified time.
    `protected java.lang.String` | `getRealPath​(java.lang.String path)` | Returns the real path for the specified path.
    `V` | `load​(java.lang.String src)` | Loads the resource.
    `protected abstract V` | `parse​(java.io.InputStream is, java.lang.String path, java.lang.String orgpath)` | It is called to parse the resource into an intermediate format depending on `Extendlet`.
    `boolean` | `shallCheck​(java.lang.String src, long expiredMillis)` | Returns whether to call `Loader.getLastModified(K)`.

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

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

- - ### Constructor Detail

    - #### ExtendletLoader

          protected ExtendletLoader()

  - ### Method Detail

    - #### getRealPath

          protected java.lang.String getRealPath​(java.lang.String path)

      Returns the real path for the specified path.

      Default: return path, i.e., the path specified in URL is the real path.

      Notice that `parse(java.io.InputStream, java.lang.String, java.lang.String)` will receive the original path (rather than the returned path).

      Parameters:
        `path` - the path specified in URL. Notice that it does NOT start with "~./". Rather it starts with "/". For example, "/zul/css/zk.wcs".
      Since:
        5.0.0

    - #### shallCheck

          public boolean shallCheck​(java.lang.String src,
                                    long expiredMillis)

      Description copied from interface: `Loader`
      Returns whether to call `Loader.getLastModified(K)`. If false, it assumes the current cached content is up-to-date.
      Specified by:
        `shallCheck` in interface `Loader<java.lang.String,​V>`
        `expiredMillis` - how many milli-seconds are expired after the last check. In most cases, just return true if expiredMillis > 0

    - #### getLastModified

          public long getLastModified​(java.lang.String src)

      Returns the last modified time.
      Specified by:
        `getLastModified` in interface `Loader<java.lang.String,​V>`

    - #### load

          public V load​(java.lang.String src)
                 throws java.lang.Exception

      Description copied from interface: `Loader`
      Loads the resource.

      The returned resource could be anything. It will be returned by `ResourceCache.get(java.lang.Object)`. However, if you want to have more control (e.g., whether to cache), you can return an instance of `Loader.Resource`. Then, the return value of `ResourceCache.get(java.lang.Object)` will be `Loader.Resource.resource`.

      Specified by:
        `load` in interface `Loader<java.lang.String,​V>`
      Returns:
        null if not found
      Throws:
        `java.lang.Exception` - you might throw any exception which will be passed back to the caller of `ResourceCache.get(java.lang.Object)`

    - #### parse

          protected abstract V parse​(java.io.InputStream is,
                                     java.lang.String path,
                                     java.lang.String orgpath)
                              throws java.lang.Exception

      It is called to parse the resource into an intermediate format depending on `Extendlet`.

      The object is returned directly by `load(java.lang.String)`, so you can return an instance of org.zkoss.util.resource.Loader.Resource to have more control on `ResourceCache`.

      Parameters:
        `is` - the content of the resource
        `path` - the path of the resource. It is the value returned by `getRealPath(java.lang.String)`, so called the real path
        `orgpath` - the original path. It is the path passed to the `path` argument of `getRealPath(java.lang.String)`. It is useful if you want to retrieve the additional information encoded into the URI.
      Throws:
        `java.lang.Exception`
      Since:
        5.0.0

    - #### getExtendletContext

          protected abstract ExtendletContext getExtendletContext()

      Returns the extendlet context.

    - #### getCheckPeriod

          public int getCheckPeriod()

      Returns the check period, or -1 if the content is never changed. Unit: milliseconds.

      Default: It checks if an integer (unit: second) is assigned to a system property called org.zkoss.util.resource.extendlet.checkPeriod. If no such system property, -1 is assumed (never change). For the runtime environment the content is never changed, since all extendlet resources are packed in JAR files.