Merge branch 'release/0.9.3'
[Sone.git] / src / main / java / net / pterodactylus / sone / database / memory / ConfigurationLoader.java
1 package net.pterodactylus.sone.database.memory;
2
3 import static java.util.logging.Level.WARNING;
4
5 import java.util.Collection;
6 import java.util.HashSet;
7 import java.util.Set;
8 import java.util.logging.Logger;
9
10 import net.pterodactylus.util.config.Configuration;
11 import net.pterodactylus.util.config.ConfigurationException;
12
13 /**
14  * Helper class for interacting with a {@link Configuration}.
15  *
16  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
17  */
18 public class ConfigurationLoader {
19
20         private static final Logger logger = Logger.getLogger(ConfigurationLoader.class.getName());
21         private final Configuration configuration;
22
23         public ConfigurationLoader(Configuration configuration) {
24                 this.configuration = configuration;
25         }
26
27         public synchronized Set<String> loadFriends(String localSoneId) {
28                 return loadIds("Sone/" + localSoneId + "/Friends");
29         }
30
31         public void saveFriends(String soneId, Collection<String> friends) {
32                 saveIds("Sone/" + soneId + "/Friends", friends);
33         }
34
35         public synchronized Set<String> loadKnownPosts() {
36                 return loadIds("KnownPosts");
37         }
38
39         public synchronized Set<String> loadKnownPostReplies() {
40                 return loadIds("KnownReplies");
41         }
42
43         public synchronized Set<String> loadBookmarkedPosts() {
44                 return loadIds("Bookmarks/Post");
45         }
46
47         private Set<String> loadIds(String prefix) {
48                 Set<String> ids = new HashSet<String>();
49                 int idCounter = 0;
50                 while (true) {
51                         String id = configuration
52                                         .getStringValue(prefix + "/" + idCounter++ + "/ID")
53                                         .getValue(null);
54                         if (id == null) {
55                                 break;
56                         }
57                         ids.add(id);
58                 }
59                 return ids;
60         }
61
62         public synchronized void saveBookmarkedPosts(
63                         Set<String> bookmarkedPosts) {
64                 saveIds("Bookmarks/Post", bookmarkedPosts);
65         }
66
67         private void saveIds(String prefix, Collection<String> ids) {
68                 try {
69                         int idCounter = 0;
70                         for (String id : ids) {
71                                 configuration
72                                                 .getStringValue(prefix + "/" + idCounter++ + "/ID")
73                                                 .setValue(id);
74                         }
75                         configuration
76                                         .getStringValue(prefix + "/" + idCounter + "/ID")
77                                         .setValue(null);
78                 } catch (ConfigurationException ce1) {
79                         logger.log(WARNING, "Could not save bookmarked posts!", ce1);
80                 }
81         }
82
83 }