8974d10e329a0bb708a4569d297a47f3b3c6e5f4
[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 import com.google.common.base.Optional;
14
15 /**
16  * Helper class for interacting with a {@link Configuration}.
17  *
18  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
19  */
20 public class ConfigurationLoader {
21
22         private static final Logger logger =
23                         Logger.getLogger("Sone.Database.Memory.Configuration");
24         private final Configuration configuration;
25
26         public ConfigurationLoader(Configuration configuration) {
27                 this.configuration = configuration;
28         }
29
30         public synchronized Set<String> loadFriends(String localSoneId) {
31                 return loadIds("Sone/" + localSoneId + "/Friends");
32         }
33
34         public void saveFriends(String soneId, Collection<String> friends) {
35                 saveIds("Sone/" + soneId + "/Friends", friends);
36         }
37
38         public synchronized Set<String> loadKnownPosts() {
39                 return loadIds("KnownPosts");
40         }
41
42         public synchronized Set<String> loadKnownPostReplies() {
43                 return loadIds("KnownReplies");
44         }
45
46         public synchronized Set<String> loadBookmarkedPosts() {
47                 return loadIds("Bookmarks/Post");
48         }
49
50         private Set<String> loadIds(String prefix) {
51                 Set<String> ids = new HashSet<String>();
52                 int idCounter = 0;
53                 while (true) {
54                         String id = configuration
55                                         .getStringValue(prefix + "/" + idCounter++ + "/ID")
56                                         .getValue(null);
57                         if (id == null) {
58                                 break;
59                         }
60                         ids.add(id);
61                 }
62                 return ids;
63         }
64
65         public synchronized void saveBookmarkedPosts(
66                         Set<String> bookmarkedPosts) {
67                 saveIds("Bookmarks/Post", bookmarkedPosts);
68         }
69
70         private void saveIds(String prefix, Collection<String> ids) {
71                 try {
72                         int idCounter = 0;
73                         for (String id : ids) {
74                                 configuration
75                                                 .getStringValue(prefix + "/" + idCounter++ + "/ID")
76                                                 .setValue(id);
77                         }
78                         configuration
79                                         .getStringValue(prefix + "/" + idCounter + "/ID")
80                                         .setValue(null);
81                 } catch (ConfigurationException ce1) {
82                         logger.log(WARNING, "Could not save bookmarked posts!", ce1);
83                 }
84         }
85
86         public long getLocalSoneTime(String localSoneId) {
87                 Long time = configuration.getLongValue("Sone/" + localSoneId + "/Time").getValue(null);
88                 return Optional.fromNullable(time).or(-1L);
89         }
90
91         public String getLastInsertFingerprint(String localSoneId) {
92                 return configuration.getStringValue("Sone/" + localSoneId + "/LastInsertFingerprint").getValue("");
93         }
94
95 }