private File dir;
private long tooOldChanging;
private long tooOldStable;
+ private TraceHandler tracer = new TraceHandler();
/**
* Create a new {@link Cache} object.
}
}
+ /**
+ * The traces handler for this {@link Cache}.
+ *
+ * @return the traces handler
+ */
+ public TraceHandler getTraceHandler() {
+ return tracer;
+ }
+
+ /**
+ * The traces handler for this {@link Cache}.
+ *
+ * @param tracer
+ * the new traces handler
+ */
+ public void setTraceHandler(TraceHandler tracer) {
+ this.tracer = tracer;
+ }
+
/**
* Check the resource to see if it is in the cache.
*
return clean(onlyOld, dir);
}
- /**
- * Trace information (info/error) generated by this class.
- * <p>
- * You can override it if you don't want the default sysout/syserr.
- *
- * @param message
- * the message
- * @param error
- * TRUE for error messages, FALSE for information messages
- */
- protected void trace(String message, boolean error) {
- if (error) {
- System.err.println(message);
- } else {
- System.out.println(message);
- }
- }
-
/**
* Clean the cache (delete the cached items) in the given cache directory.
*
if (file.delete()) {
num++;
} else {
- trace("Cannot delete temporary file: "
- + file.getAbsolutePath(), true);
+ tracer.error("Cannot delete temporary file: "
+ + file.getAbsolutePath());
}
}
}
* used to check if the file is too old to keep or not
*
* @return the opened resource if found, NULL if not
- *
- * @throws IOException
- * in case of I/O error
*/
public InputStream load(String uniqueID, boolean allowTooOld, boolean stable) {
return load(getCached(uniqueID), allowTooOld, stable);
* used to check if the file is too old to keep or not
*
* @return the opened resource if found, NULL if not
- *
- * @throws IOException
- * in case of I/O error
*/
- public InputStream load(URL url, boolean allowTooOld, boolean stable)
- throws IOException {
+ public InputStream load(URL url, boolean allowTooOld, boolean stable) {
return load(getCached(url), allowTooOld, stable);
}
/**
* Open a resource from the cache if it exists.
*
- * @param url
+ * @param cached
* the resource to open
* @param allowTooOld
* allow files even if they are considered too old
* used to check if the file is too old to keep or not
*
* @return the opened resource if found, NULL if not
- *
- * @throws IOException
- * in case of I/O error
*/
private InputStream load(File cached, boolean allowTooOld, boolean stable) {
if (cached.exists() && (allowTooOld || !isOld(cached, stable))) {
* @param url
* the {@link URL} used to locate the cached resource
*
+ * @return the actual cache file
+ *
* @throws IOException
* in case of I/O error
*/
* @param cached
* the cached {@link File} to save to
*
+ * @return the actual cache file
+ *
* @throws IOException
* in case of I/O error
*/
return cached;
}
+ /**
+ * Remove the given resource from the cache.
+ *
+ * @param uniqueID
+ * a unique ID used to locate the cached resource
+ *
+ * @return TRUE if it was removed
+ */
+ public boolean remove(String uniqueID) {
+ File cached = getCached(uniqueID);
+ return cached.delete();
+ }
+
+ /**
+ * Remove the given resource from the cache.
+ *
+ * @param url
+ * the {@link URL} used to locate the cached resource
+ *
+ * @return TRUE if it was removed
+ */
+ public boolean remove(URL url) {
+ File cached = getCached(url);
+ return cached.delete();
+ }
+
/**
* Check if the {@link File} is too old according to
* {@link Cache#tooOldChanging}.
long time = new Date().getTime() - file.lastModified();
if (time < 0) {
- trace("Timestamp in the future for file: " + file.getAbsolutePath(),
- true);
+ tracer.error("Timestamp in the future for file: "
+ + file.getAbsolutePath());
}
return time < 0 || time > max;
if (name == null || name.isEmpty()) {
// File
File file = new File(url.getFile());
- subdir = new File(file.getParent().replace("..", "__"));
+ if (file.getParent() == null) {
+ subdir = new File("+");
+ } else {
+ subdir = new File(file.getParent().replace("..", "__"));
+ }
subdir = new File(dir, allowedChars(subdir.getPath()));
name = allowedChars(url.getFile());
} else {