Version 4.0.1: android compatibility
[nikiroo-utils.git] / src / be / nikiroo / utils / Cache.java
index dcbde74ea4b053ae512c7ed9149114af5f4aa77e..2b32d78d67c03d20ba94148b8f92b2f7bdabda23 100644 (file)
@@ -21,6 +21,12 @@ public class Cache {
        private long tooOldStable;
        private TraceHandler tracer = new TraceHandler();
 
+       /**
+        * Only for inheritance.
+        */
+       protected Cache() {
+       }
+
        /**
         * Create a new {@link Cache} object.
         * 
@@ -70,9 +76,31 @@ public class Cache {
         *            the new traces handler
         */
        public void setTraceHandler(TraceHandler tracer) {
+               if (tracer == null) {
+                       tracer = new TraceHandler(false, false, false);
+               }
+
                this.tracer = tracer;
        }
 
+       /**
+        * Check the resource to see if it is in the cache.
+        * 
+        * @param uniqueID
+        *            the resource to check
+        * @param allowTooOld
+        *            allow files even if they are considered too old
+        * @param stable
+        *            a stable file (that dones't change too often) -- parameter
+        *            used to check if the file is too old to keep or not
+        * 
+        * @return TRUE if it is
+        * 
+        */
+       public boolean check(String uniqueID, boolean allowTooOld, boolean stable) {
+               return check(getCached(uniqueID), allowTooOld, stable);
+       }
+
        /**
         * Check the resource to see if it is in the cache.
         * 
@@ -88,9 +116,26 @@ public class Cache {
         * 
         */
        public boolean check(URL url, boolean allowTooOld, boolean stable) {
-               File file = getCached(url);
-               if (file.exists()) {
-                       if (allowTooOld || !isOld(file, stable)) {
+               return check(getCached(url), allowTooOld, stable);
+       }
+
+       /**
+        * Check the resource to see if it is in the cache.
+        * 
+        * @param cached
+        *            the resource to check
+        * @param allowTooOld
+        *            allow files even if they are considered too old
+        * @param stable
+        *            a stable file (that dones't change too often) -- parameter
+        *            used to check if the file is too old to keep or not
+        * 
+        * @return TRUE if it is
+        * 
+        */
+       private boolean check(File cached, boolean allowTooOld, boolean stable) {
+               if (cached.exists() && cached.isFile()) {
+                       if (allowTooOld || !isOld(cached, stable)) {
                                return true;
                        }
                }
@@ -190,7 +235,8 @@ public class Cache {
         * @return the opened resource if found, NULL if not
         */
        private InputStream load(File cached, boolean allowTooOld, boolean stable) {
-               if (cached.exists() && (allowTooOld || !isOld(cached, stable))) {
+               if (cached.exists() && cached.isFile()
+                               && (allowTooOld || !isOld(cached, stable))) {
                        try {
                                return new MarkableFileInputStream(new FileInputStream(cached));
                        } catch (FileNotFoundException e) {
@@ -209,15 +255,13 @@ public class Cache {
         * @param uniqueID
         *            a unique ID used to locate the cached resource
         * 
-        * @return the resulting {@link File}
-        * 
         * @throws IOException
         *             in case of I/O error
         */
-       public File save(InputStream in, String uniqueID) throws IOException {
+       public void save(InputStream in, String uniqueID) throws IOException {
                File cached = getCached(uniqueID);
                cached.getParentFile().mkdirs();
-               return save(in, cached);
+               save(in, cached);
        }
 
        /**
@@ -228,14 +272,12 @@ public class Cache {
         * @param url
         *            the {@link URL} used to locate the cached resource
         * 
-        * @return the actual cache file
-        * 
         * @throws IOException
         *             in case of I/O error
         */
-       public File save(InputStream in, URL url) throws IOException {
+       public void save(InputStream in, URL url) throws IOException {
                File cached = getCached(url);
-               return save(in, cached);
+               save(in, cached);
        }
 
        /**
@@ -246,14 +288,11 @@ public class Cache {
         * @param cached
         *            the cached {@link File} to save to
         * 
-        * @return the actual cache file
-        * 
         * @throws IOException
         *             in case of I/O error
         */
-       private File save(InputStream in, File cached) throws IOException {
+       private void save(InputStream in, File cached) throws IOException {
                IOUtils.write(in, cached);
-               return cached;
        }
 
        /**
@@ -328,7 +367,11 @@ public class Cache {
                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 {