Class CachedFile

  • All Implemented Interfaces:
    Closeable, AutoCloseable

    public class CachedFile
    extends Object
    implements Closeable
    Downloads a file and caches it on disk in order to reduce network load. Supports URLs, local files, and a custom scheme (resource:) to get resources from the current JOSM *.jar file as well as plugins *.jar files. (Local caching is only done for URLs.)

    The mirrored file is only downloaded if it has been more than 7 days since last download. (Time can be configured.)

    The file content is normally accessed with getInputStream(), but you can also get the mirrored copy with getFile().

    • Constructor Detail

      • CachedFile

        public CachedFile​(String name)
        Constructs a CachedFile object from a given filename, URL or internal resource.
        Parameters:
        name - can be:
        • relative or absolute file name
        • file:///SOME/FILE the same as above
        • http://... a URL. It will be cached on disk.
        • resource://SOME/FILE file from the classpath (usually in the current *.jar)
        • josmdir://SOME/FILE file inside josm user data directory (since r7058)
        • josmplugindir://SOME/FILE file inside josm plugin directory (since r7834)
    • Method Detail

      • setName

        public CachedFile setName​(String name)
        Set the name of the resource.
        Parameters:
        name - can be:
        • relative or absolute file name
        • file:///SOME/FILE the same as above
        • http://... a URL. It will be cached on disk.
        • resource://SOME/FILE file from the classpath (usually in the current *.jar)
        • josmdir://SOME/FILE file inside josm user data directory (since r7058)
        • josmplugindir://SOME/FILE file inside josm plugin directory (since r7834)
        Returns:
        this object
      • setMaxAge

        public CachedFile setMaxAge​(long maxAge)
        Set maximum age of cache file. Only applies to URLs. When this time has passed after the last download of the file, the cache is considered stale and a new download will be attempted.
        Parameters:
        maxAge - the maximum cache age in seconds
        Returns:
        this object
      • setDestDir

        public CachedFile setDestDir​(String destDir)
        Set the destination directory for the cache file. Only applies to URLs.
        Parameters:
        destDir - the destination directory
        Returns:
        this object
      • setHttpAccept

        public CachedFile setHttpAccept​(String httpAccept)
        Set the accepted MIME types sent in the HTTP Accept header. Only applies to URLs.
        Parameters:
        httpAccept - the accepted MIME types
        Returns:
        this object
      • setHttpHeaders

        public CachedFile setHttpHeaders​(Map<String,​String> headers)
        Sets the http headers. Only applies to URL pointing to http or https resources
        Parameters:
        headers - that should be sent together with request
        Returns:
        this object
      • setFastFail

        public void setFastFail​(boolean fastFail)
        Sets whether opening HTTP connections should fail fast, i.e., whether a low connect timeout should be used.
        Parameters:
        fastFail - whether opening HTTP connections should fail fast
      • setParam

        public void setParam​(String parameter)
        Sets additional URL parameter (used e.g. for maps)
        Parameters:
        parameter - the URL parameter
        Since:
        13536
      • getMaxAge

        public long getMaxAge()
        Returns maximum age of cache file. Only applies to URLs. When this time has passed after the last download of the file, the cache is considered stale and a new download will be attempted.
        Returns:
        the maximum cache age in seconds
      • getByteContent

        public byte[] getByteContent()
                              throws IOException
        Get the full content of the requested resource as a byte array.
        Returns:
        the full content of the requested resource as byte array
        Throws:
        IOException - in case of an I/O error
      • getFile

        public File getFile()
                     throws IOException
        Get local file for the requested resource.
        Returns:
        The local cache file for URLs. If the resource is a local file, returns just that file.
        Throws:
        IOException - when the resource with the given name could not be retrieved
      • findZipEntryPath

        public String findZipEntryPath​(String extension,
                                       String namepart)
        Looks for a certain entry inside a zip file and returns the entry path. Replies a file in the top level directory of the ZIP file which has an extension extension. If more than one files have this extension, the last file whose name includes namepart is opened.
        Parameters:
        extension - the extension of the file we're looking for
        namepart - the name part
        Returns:
        The zip entry path of the matching file. null if this cached file doesn't represent a zip file or if there was no matching file in the ZIP file.
      • cleanup

        public static void cleanup​(String name)
        Clear the cache for the given resource. This forces a fresh download.
        Parameters:
        name - the URL
      • cleanup

        public static void cleanup​(String name,
                                   String destDir)
        Clear the cache for the given resource. This forces a fresh download.
        Parameters:
        name - the URL
        destDir - the destination directory (see setDestDir(java.lang.String))
      • getPrefKey

        private static String getPrefKey​(URL url,
                                         String destDir)
        Get preference key to store the location and age of the cached file. 2 resources that point to the same url, but that are to be stored in different directories will not share a cache file.
        Parameters:
        url - URL
        destDir - destination directory
        Returns:
        Preference key