3 import java.lang.ref.WeakReference;
4 import java.util.ArrayList;
5 import java.util.HashMap;
6 import java.util.logging.Logger;
10 public class ArticleStore {
11 public final static ArticleStore singleton = new ArticleStore();
12 private final HashMap<String, WeakReference<Article>> articles = new HashMap<>();
13 private final static Logger LOG = Logger.getLogger(ArticleStore.class.getName());
15 public Article get(String link) {
16 WeakReference<Article> ref;
19 synchronized (articles) {
20 ref = articles.get(link);
27 LOG.info("Article has been released from memory: " + link);
28 articles.remove(link);
35 public Article getArticle(String link, ArticleFactory factory) {
38 synchronized (articles) {
41 result = factory.create();
42 articles.put(link, new WeakReference<>(result));
43 LOG.fine("Article has been added: " + result.link);
52 return articles.size();
56 public Article[] getArticles() {
57 ArrayList<Article> result;
60 synchronized (articles) {
61 result = new ArrayList<>(articles.size());
63 for (WeakReference<Article> r: articles.values()) {
69 return result.toArray(new Article[] {});