Class FileHandlerReloadingDetector

  • All Implemented Interfaces:
    ReloadingDetector
    Direct Known Subclasses:
    VFSFileHandlerReloadingDetector

    public class FileHandlerReloadingDetector
    extends java.lang.Object
    implements ReloadingDetector

    A specialized implementation of ReloadingDetector which monitors a file specified by a FileHandler.

    An instance of this class is passed a FileHandler at construction time. Each time the isReloadingRequired() method is called, it checks whether the FileHandler points to a valid location. If this is the case, the file's last modification time is obtained and compared with the last stored time. If it has changed, a reload operation should be performed.

    Because file I/O may be expensive it is possible to configure a refresh delay as a time in milliseconds. This is the minimum interval between two checks. If the isReloadingRequired() method is called in shorter intervals, it does not perform a check, but directly returns false.

    To initialize an instance either isReloadingRequired() or reloadingPerformed() can be called. The first call of isReloadingRequired does not perform a check, but obtains the initial modification date of the monitored file. reloadingPerformed() always obtains the file's modification date and stores it internally.

    Since:
    2.0
    Version:
    $Id: FileHandlerReloadingDetector.java 1624601 2014-09-12 18:04:36Z oheger $
    • Constructor Summary

      Constructors 
      Constructor Description
      FileHandlerReloadingDetector()
      Creates a new instance of FileHandlerReloadingDetector with an uninitialized FileHandler object.
      FileHandlerReloadingDetector​(FileHandler handler)
      Creates a new instance of FileHandlerReloadingDetector and initializes it with the FileHandler to monitor and a default refresh delay.
      FileHandlerReloadingDetector​(FileHandler handler, long refreshDelay)
      Creates a new instance of FileHandlerReloadingDetector and initializes it with the FileHandler to monitor and the refresh delay.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected java.io.File getFile()
      Returns the File object which is monitored by this object.
      FileHandler getFileHandler()
      Returns the FileHandler associated with this object.
      protected long getLastModificationDate()
      Returns the date of the last modification of the monitored file.
      long getRefreshDelay()
      Returns the refresh delay.
      boolean isReloadingRequired()
      Checks whether all criteria for a reload operation are fulfilled.
      void reloadingPerformed()
      Notifies this object that a reload operation has been performed.
      protected void updateLastModified​(long time)
      Updates the last modification date of the monitored file.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • FileHandlerReloadingDetector

        public FileHandlerReloadingDetector​(FileHandler handler,
                                            long refreshDelay)
        Creates a new instance of FileHandlerReloadingDetector and initializes it with the FileHandler to monitor and the refresh delay. The handler is directly used, no copy is created. So it is possible to change the location monitored by manipulating the FileHandler object.
        Parameters:
        handler - the FileHandler associated with this detector (can be null)
        refreshDelay - the refresh delay; a value of 0 means that a check is performed in all cases
      • FileHandlerReloadingDetector

        public FileHandlerReloadingDetector​(FileHandler handler)
        Creates a new instance of FileHandlerReloadingDetector and initializes it with the FileHandler to monitor and a default refresh delay.
        Parameters:
        handler - the FileHandler associated with this detector (can be null)
      • FileHandlerReloadingDetector

        public FileHandlerReloadingDetector()
        Creates a new instance of FileHandlerReloadingDetector with an uninitialized FileHandler object. The file to be monitored has to be set later by manipulating the handler object returned by getFileHandler().
    • Method Detail

      • getFileHandler

        public FileHandler getFileHandler()
        Returns the FileHandler associated with this object. The underlying handler is directly returned, so changing its location also changes the file monitored by this detector.
        Returns:
        the associated FileHandler
      • getRefreshDelay

        public long getRefreshDelay()
        Returns the refresh delay. This is a time in milliseconds. The isReloadingRequired() method first checks whether the time since the previous check is more than this value in the past. Otherwise, no check is performed. This is a means to limit file I/O caused by this class.
        Returns:
        the refresh delay used by this object
      • isReloadingRequired

        public boolean isReloadingRequired()
        Checks whether all criteria for a reload operation are fulfilled. This method is called by external components to find out when reloading should take place. This implementation checks whether the associated FileHandler points to a valid file and whether the last modification time of this time has changed since the last check. The refresh delay is taken into account, too; a check is only performed if at least this time has passed since the last check.
        Specified by:
        isReloadingRequired in interface ReloadingDetector
        Returns:
        true if a reload operation should be performed, false otherwise
      • reloadingPerformed

        public void reloadingPerformed()
        Notifies this object that a reload operation has been performed. This method is called after reloadingRequired() has returned true. It can be used to reset internal state in order to detect the next reload operation. This implementation updates the internally stored last modification date with the current modification date of the monitored file. So the next change is detected when this file is changed again.
        Specified by:
        reloadingPerformed in interface ReloadingDetector
      • getLastModificationDate

        protected long getLastModificationDate()
        Returns the date of the last modification of the monitored file. A return value of 0 indicates, that the monitored file does not exist.
        Returns:
        the last modification date
      • updateLastModified

        protected void updateLastModified​(long time)
        Updates the last modification date of the monitored file. The need for a reload is detected only if the file's modification date is different from this value.
        Parameters:
        time - the new last modification date
      • getFile

        protected java.io.File getFile()
        Returns the File object which is monitored by this object. This method is called every time the file's last modification time is needed. If it returns null, no check is performed. This base implementation obtains the File from the associated FileHandler. It can also deal with URLs to jar files.
        Returns:
        the File to be monitored (can be null)