--- /dev/null
+package be.nikiroo.utils;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * A memory only version of {@link Cache}.
+ *
+ * @author niki
+ */
+public class CacheMemory extends Cache {
+ private Map<String, byte[]> data = new HashMap<String, byte[]>();
+
+ /**
+ * Create a new {@link CacheMemory}.
+ */
+ public CacheMemory() {
+ }
+
+ @Override
+ public boolean check(String uniqueID, boolean allowTooOld, boolean stable) {
+ return data.containsKey(getKey(uniqueID));
+ }
+
+ @Override
+ public boolean check(URL url, boolean allowTooOld, boolean stable) {
+ return data.containsKey(getKey(url));
+ }
+
+ @Override
+ public int clean(boolean onlyOld) {
+ int cleaned = 0;
+ if (!onlyOld) {
+ cleaned = data.size();
+ data.clear();
+ }
+
+ return cleaned;
+ }
+
+ @Override
+ public InputStream load(String uniqueID, boolean allowTooOld, boolean stable) {
+ if (check(uniqueID, allowTooOld, stable)) {
+ return load(uniqueID, allowTooOld, stable);
+ }
+
+ return null;
+ }
+
+ @Override
+ public InputStream load(URL url, boolean allowTooOld, boolean stable) {
+ if (check(url, allowTooOld, stable)) {
+ return load(url, allowTooOld, stable);
+ }
+
+ return null;
+ }
+
+ @Override
+ public boolean remove(String uniqueID) {
+ return data.remove(getKey(uniqueID)) != null;
+ }
+
+ @Override
+ public boolean remove(URL url) {
+ return data.remove(getKey(url)) != null;
+ }
+
+ @Override
+ public long save(InputStream in, String uniqueID) throws IOException {
+ byte[] bytes = IOUtils.toByteArray(in);
+ data.put(getKey(uniqueID), bytes);
+ return bytes.length;
+ }
+
+ @Override
+ public long save(InputStream in, URL url) throws IOException {
+ byte[] bytes = IOUtils.toByteArray(in);
+ data.put(getKey(url), bytes);
+ return bytes.length;
+ }
+
+ /**
+ * Return a key mapping to the given unique ID.
+ *
+ * @param uniqueID
+ * the unique ID
+ *
+ * @return the key
+ */
+ private String getKey(String uniqueID) {
+ return "_/" + uniqueID;
+ }
+
+ /**
+ * Return a key mapping to the given urm.
+ *
+ * @param url
+ * thr url
+ *
+ * @return the key
+ */
+ private String getKey(URL url) {
+ return url.toString();
+ }
+}