Class URLChangeTracker<T>

java.lang.Object
org.apache.tapestry5.ioc.internal.util.URLChangeTracker<T>
Type Parameters:
T - The type of the optional information about the tracked resource. This type should implement equals() and hashCode().

public class URLChangeTracker<T> 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
     
  • Constructor Summary

    Constructors
    Constructor
    Description
    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

    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.
    long
    add(URL url, T resourceInfo)
    Stores a new URL and associated memo (most probably a related class name) into the tracker, or returns the previous time stamp for a previously added URL.
    void
    Clears all URL and timestamp data stored in the tracker.
    boolean
    Re-acquires the last updated timestamp for each URL and returns true if any timestamp has changed.
    void
    Needed for testing; changes file timestamps so that a change will be detected by containsChanges().
    Re-acquires the last updated timestamp for each URL and returns the non-null resource information for all files with a changed timestamp.
    static File
    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 Details

  • Constructor Details

    • 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 Details

    • 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
    • add

      public long add(URL url, T resourceInfo)
      Stores a new URL and associated memo (most probably a related class name) 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
      resourceInfo - an optional object containing information about the tracked URL. It's returned in the getChangedResourcesInfo() method.
      Returns:
      the current timestamp for the URL (possibly rounded off for granularity reasons), or 0 if the URL is null
      Since:
      5.8.3
    • 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.
    • getChangedResourcesInfo

      Re-acquires the last updated timestamp for each URL and returns the non-null resource information for all files with a changed timestamp.
    • forceChange

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