Move friend-related functionality into the database.
[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 =
21                         Logger.getLogger("Sone.Database.Memory.Configuration");
22         private final Configuration configuration;
23
24         public ConfigurationLoader(Configuration configuration) {
25                 this.configuration = configuration;
26         }
27
28         public synchronized Set<String> loadFriends(String localSoneId) {
29                 return loadIds("Sone/" + localSoneId + "/Friends");
30         }
31
32         public void saveFriends(String soneId, Collection<String> friends) {
33                 saveIds("Sone/" + soneId + "/Friends", friends);
34         }
35
36         public synchronized Set<String> loadKnownPosts() {
37                 return loadIds("KnownPosts");
38         }
39
40         public synchronized Set<String> loadKnownPostReplies() {
41                 return loadIds("KnownReplies");
42         }
43
44         public synchronized Set<String> loadBookmarkedPosts() {
45                 return loadIds("Bookmarks/Post");
46         }
47
48         private Set<String> loadIds(String prefix) {
49                 Set<String> ids = new HashSet<String>();
50                 int idCounter = 0;
51                 while (true) {
52                         String id = configuration
53                                         .getStringValue(prefix + "/" + idCounter++ + "/ID")
54                                         .getValue(null);
55                         if (id == null) {
56                                 break;
57                         }
58                         ids.add(id);
59                 }
60                 return ids;
61         }
62
63         public synchronized void saveBookmarkedPosts(
64                         Set<String> bookmarkedPosts) {
65                 saveIds("Bookmarks/Post", bookmarkedPosts);
66         }
67
68         private void saveIds(String prefix, Collection<String> ids) {
69                 try {
70                         int idCounter = 0;
71                         for (String id : ids) {
72                                 configuration
73                                                 .getStringValue(prefix + "/" + idCounter++ + "/ID")
74                                                 .setValue(id);
75                         }
76                         configuration
77                                         .getStringValue(prefix + "/" + idCounter + "/ID")
78                                         .setValue(null);
79                 } catch (ConfigurationException ce1) {
80                         logger.log(WARNING, "Could not save bookmarked posts!", ce1);
81                 }
82         }
83
84 }