avoid duplicate article instances
[pnews.git] / war / src / main / java / pnews / servlet / ArticleStore.java
diff --git a/war/src/main/java/pnews/servlet/ArticleStore.java b/war/src/main/java/pnews/servlet/ArticleStore.java
new file mode 100644 (file)
index 0000000..0b40cc3
--- /dev/null
@@ -0,0 +1,36 @@
+package pnews.servlet;
+
+import java.lang.ref.WeakReference;
+import java.util.HashMap;
+
+import pnews.Article;
+
+public class ArticleStore {
+        public final static ArticleStore singleton = new ArticleStore();
+        private final HashMap<String, WeakReference<Article>> articles = new HashMap<>();
+        
+        public Article get(String link) {
+                WeakReference<Article> ref;
+                
+                synchronized (articles) {
+                        ref = articles.get(link);
+                        if (ref == null)
+                                return null;
+                        return ref.get();
+                }
+        }
+        
+        public Article getArticle(String link, ArticleFactory factory) {
+                Article result;
+                
+                synchronized (articles) {
+                        result = get(link);
+                        if (result == null) {
+                                result = factory.create();
+                                articles.put(link, new WeakReference<>(result));
+                        }
+                        
+                        return result;
+                }
+        }
+}