Package org.apache.tapestry5.ioc.internal.util

## Class URLChangeTracker

- java.lang.Object
- - org.apache.tapestry5.ioc.internal.util.URLChangeTracker

-     public class URLChangeTracker
      extends Object

  Given a (growing) set of URLs, can periodically check to see if any of the underlying resources has changed. This class is capable of using either millisecond-level granularity or second-level granularity. Millisecond-level granularity is used by default. Second-level granularity is provided for compatibility with browsers vis-a-vis resource caching -- that's how granular they get with their "If-Modified-Since", "Last-Modified" and "Expires" headers.

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static ClasspathURLConverter` | `DEFAULT_CONVERTER` |

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `URLChangeTracker()` | Creates a tracker using the default (does nothing) URL converter, with default (millisecond) granularity and folder tracking disabled.
    `URLChangeTracker​(ClasspathURLConverter classpathURLConverter)` | Creates a new URL change tracker with millisecond-level granularity and folder checking enabled.
    `URLChangeTracker​(ClasspathURLConverter classpathURLConverter, boolean granularitySeconds)` | Creates a new URL change tracker, using either millisecond-level granularity or second-level granularity and folder checking enabled.
    `URLChangeTracker​(ClasspathURLConverter classpathURLConverter, boolean granularitySeconds, boolean trackFolderChanges)` | Creates a new URL change tracker, using either millisecond-level granularity or second-level granularity.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `long` | `add​(URL url)` | Stores a new URL into the tracker, or returns the previous time stamp for a previously added URL.
    `void` | `clear()` | Clears all URL and timestamp data stored in the tracker.
    `boolean` | `containsChanges()` | Re-acquires the last updated timestamp for each URL and returns true if any timestamp has changed.
    `void` | `forceChange()` | Needed for testing; changes file timestamps so that a change will be detected by `containsChanges()`.
    `static File` | `toFileFromFileProtocolURL​(URL url)` | Converts a URL with protocol "file" to a File instance.

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

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

- - ### Field Detail

    - #### DEFAULT_CONVERTER

          public static final ClasspathURLConverter DEFAULT_CONVERTER

  - ### Constructor Detail

    - #### URLChangeTracker

          public URLChangeTracker()

      Creates a tracker using the default (does nothing) URL converter, with default (millisecond) granularity and folder tracking disabled.
      Since:
        5.2.1

    - #### URLChangeTracker

          public URLChangeTracker​(ClasspathURLConverter classpathURLConverter)

      Creates a new URL change tracker with millisecond-level granularity and folder checking enabled.
      Parameters:
        `classpathURLConverter` - used to convert URLs from one protocol to another

    - #### URLChangeTracker

          public URLChangeTracker​(ClasspathURLConverter classpathURLConverter,
                                  boolean granularitySeconds)

      Creates a new URL change tracker, using either millisecond-level granularity or second-level granularity and folder checking enabled.
      Parameters:
        `classpathURLConverter` - used to convert URLs from one protocol to another
        `granularitySeconds` - whether or not to use second granularity (as opposed to millisecond granularity)

    - #### URLChangeTracker

          public URLChangeTracker​(ClasspathURLConverter classpathURLConverter,
                                  boolean granularitySeconds,
                                  boolean trackFolderChanges)

      Creates a new URL change tracker, using either millisecond-level granularity or second-level granularity.
      Parameters:
        `classpathURLConverter` - used to convert URLs from one protocol to another
        `granularitySeconds` - whether or not to use second granularity (as opposed to millisecond granularity)
        `trackFolderChanges` - if true, then adding a file URL will also track the folder containing the file (this is useful when concerned about additions to a folder)
      Since:
        5.2.1

  - ### Method Detail

    - #### toFileFromFileProtocolURL

          public static File toFileFromFileProtocolURL​(URL url)

      Converts a URL with protocol "file" to a File instance.
      Since:
        5.2.0

    - #### add

          public long add​(URL url)

      Stores a new URL into the tracker, or returns the previous time stamp for a previously added URL. Filters out all non-file URLs.
      Parameters:
        `url` - of the resource to add, or null if not known
      Returns:
        the current timestamp for the URL (possibly rounded off for granularity reasons), or 0 if the URL is null

    - #### clear

          public void clear()

      Clears all URL and timestamp data stored in the tracker.

    - #### containsChanges

          public boolean containsChanges()

      Re-acquires the last updated timestamp for each URL and returns true if any timestamp has changed.

    - #### forceChange

          public void forceChange()

      Needed for testing; changes file timestamps so that a change will be detected by `containsChanges()`.