1 package net.wpitchoune.pnews;
3 import java.lang.ref.WeakReference;
4 import java.util.ArrayList;
5 import java.util.HashMap;
6 import java.util.logging.Logger;
8 public class ArticleStore {
9 public final static ArticleStore singleton = new ArticleStore();
10 private final HashMap<String, WeakReference<Article>> articles = new HashMap<>();
11 private final static Logger LOG = Logger.getLogger(ArticleStore.class.getName());
13 public Article get(String link) {
14 WeakReference<Article> ref;
17 synchronized (articles) {
18 ref = articles.get(link);
25 LOG.info("Article has been released from memory: " + link);
26 articles.remove(link);
33 public Article getArticle(String link, ArticleFactory factory) {
36 synchronized (articles) {
39 result = factory.create();
40 articles.put(link, new WeakReference<>(result));
41 LOG.fine("Article has been added: " + result.getLink());
50 return articles.size();
54 public Article[] getArticles() {
55 ArrayList<Article> result;
58 synchronized (articles) {
59 result = new ArrayList<>(articles.size());
61 for (WeakReference<Article> r: articles.values()) {
67 return result.toArray(new Article[] {});