diff options
Diffstat (limited to 'netx/net/sourceforge/jnlp/cache/CacheEntry.java')
-rw-r--r-- | netx/net/sourceforge/jnlp/cache/CacheEntry.java | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/netx/net/sourceforge/jnlp/cache/CacheEntry.java b/netx/net/sourceforge/jnlp/cache/CacheEntry.java new file mode 100644 index 0000000..7906e0c --- /dev/null +++ b/netx/net/sourceforge/jnlp/cache/CacheEntry.java @@ -0,0 +1,172 @@ +// Copyright (C) 2001-2003 Jon A. Maxwell (JAM) +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +package net.sourceforge.jnlp.cache; + +import java.io.*; +import java.net.*; +import java.util.*; +import java.lang.reflect.*; +import java.security.*; +import javax.jnlp.*; + +import net.sourceforge.jnlp.*; +import net.sourceforge.jnlp.runtime.*; +import net.sourceforge.jnlp.util.*; + +/** + * Describes an entry in the cache.<p> + * + * @author <a href="mailto:[email protected]">Jon A. Maxwell (JAM)</a> - initial author + * @version $Revision: 1.10 $ + */ +public class CacheEntry { + + /** the remote resource location */ + private URL location; + + /** the requested version */ + private Version version; + + /** info about the cached file */ + private PropertiesFile properties; + + + /** + * Create a CacheEntry for the resources specified as a remote + * URL. + * + * @param location the remote resource location + * @param version the version of the resource + */ + public CacheEntry(URL location, Version version) { + this.location = location; + this.version = version; + + File infoFile = CacheUtil.getCacheFile(location, version); + infoFile = new File(infoFile.getPath()+".info"); // replace with something that can't be clobbered + + properties = new PropertiesFile(infoFile, JNLPRuntime.getMessage("CAutoGen")); + } + + /** + * Initialize the cache entry data from a connection to the + * remote resource (does not store data). + */ + void initialize(URLConnection connection) { + long modified = connection.getLastModified(); + long length = connection.getContentLength(); // an int + + properties.setProperty("content-length", Long.toString(length)); + properties.setProperty("last-modified", Long.toString(modified)); + } + + /** + * Returns the remote location this entry caches. + */ + public URL getLocation() { + return location; + } + + /** + * Returns the time in the local system clock that the file was + * most recently checked for an update. + */ + public long getLastUpdated() { + try { + return Long.parseLong(properties.getProperty("last-updated")); + } + catch (Exception ex) { + return 0; + } + } + + /** + * Sets the time in the local system clock that the file was + * most recently checked for an update. + */ + public void setLastUpdated(long updatedTime) { + properties.setProperty("last-updated", Long.toString(updatedTime)); + } + + /** + * Returns whether there is a version of the URL contents in + * the cache and it is up to date. This method may not return + * immediately. + * + * @param connection a connection to the remote URL + * @return whether the cache contains the version + */ + public boolean isCurrent(URLConnection connection) { + boolean cached = isCached(); + + if (!cached) + return false; + + try { + long remoteModified = connection.getLastModified(); + long cachedModified = Long.parseLong(properties.getProperty("last-modified")); + + if (remoteModified > 0 && remoteModified <= cachedModified) + return true; + else + return false; + } + catch (Exception ex) { + if (JNLPRuntime.isDebug()) + ex.printStackTrace(); + + return cached; // if can't connect return whether already in cache + } + } + + /** + * Returns true if the cache has a local copy of the contents + * of the URL matching the specified version string. + * + * @return true if the resource is in the cache + */ + public boolean isCached() { + File localFile = CacheUtil.getCacheFile(location, version); + if (!localFile.exists()) + return false; + + try { + long cachedLength = localFile.length(); + long remoteLength = Long.parseLong(properties.getProperty("content-length", "-1")); + + if (remoteLength >= 0 && cachedLength != remoteLength) + return false; + else + return true; + } + catch (Exception ex) { + if (JNLPRuntime.isDebug()) + ex.printStackTrace(); + + return false; // should throw? + } + } + + /** + * Save the current information for the cache entry. + */ + protected void store() { + properties.store(); + } + +} |