1 package net.pterodactylus.sone.database.memory;
3 import static java.util.logging.Level.WARNING;
5 import java.util.Collection;
6 import java.util.HashMap;
7 import java.util.HashSet;
9 import java.util.Map.Entry;
11 import java.util.logging.Logger;
13 import net.pterodactylus.util.config.Configuration;
14 import net.pterodactylus.util.config.ConfigurationException;
16 import com.google.common.base.Optional;
19 * Helper class for interacting with a {@link Configuration}.
21 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
23 public class ConfigurationLoader {
25 private static final Logger logger =
26 Logger.getLogger("Sone.Database.Memory.Configuration");
27 private final Configuration configuration;
29 public ConfigurationLoader(Configuration configuration) {
30 this.configuration = configuration;
33 public synchronized Set<String> loadFriends(String localSoneId) {
34 return loadIds("Sone/" + localSoneId + "/Friends");
37 public void saveFriends(String soneId, Collection<String> friends) {
38 saveIds("Sone/" + soneId + "/Friends", friends);
41 public synchronized Set<String> loadKnownSones() {
42 return loadIds("KnownSones");
45 public synchronized void saveKnownSones(Set<String> knownSones) {
46 saveIds("KnownSones", knownSones);
49 public synchronized Map<String, Long> loadSoneFollowingTimes() {
50 Map<String, Long> soneFollowingTimes = new HashMap<String, Long>();
53 String soneId = configuration.getStringValue("SoneFollowingTimes/" + counter + "/Sone").getValue(null);
57 long followingTime = configuration.getLongValue("SoneFollowingTimes/" + counter + "/Time").getValue(Long.MAX_VALUE);
58 soneFollowingTimes.put(soneId, followingTime);
61 return soneFollowingTimes;
64 public synchronized void saveSoneFollowingTimes(Map<String, Long> soneFollowingTimes) {
67 for (Entry<String, Long> soneFollowingTime : soneFollowingTimes.entrySet()) {
68 configuration.getStringValue("SoneFollowingTimes/" + counter + "/Sone")
69 .setValue(soneFollowingTime.getKey());
70 configuration.getLongValue("SoneFollowingTimes/" + counter + "/Time")
71 .setValue(soneFollowingTime.getValue());
74 configuration.getStringValue("SoneFollowingTimes/" + counter + "/Sone").setValue(null);
75 } catch (ConfigurationException ce1) {
76 logger.log(WARNING, "Could not save Sone following times!", ce1);
80 public synchronized Set<String> loadKnownPosts() {
81 return loadIds("KnownPosts");
84 public synchronized void saveKnownPosts(Set<String> knownPosts) {
85 saveIds("KnownPosts", knownPosts);
88 public synchronized Set<String> loadKnownPostReplies() {
89 return loadIds("KnownReplies");
92 public synchronized Set<String> loadBookmarkedPosts() {
93 return loadIds("Bookmarks/Post");
96 private Set<String> loadIds(String prefix) {
97 Set<String> ids = new HashSet<String>();
100 String id = configuration
101 .getStringValue(prefix + "/" + idCounter++ + "/ID")
111 public synchronized void saveBookmarkedPosts(
112 Set<String> bookmarkedPosts) {
113 saveIds("Bookmarks/Post", bookmarkedPosts);
116 private void saveIds(String prefix, Collection<String> ids) {
119 for (String id : ids) {
121 .getStringValue(prefix + "/" + idCounter++ + "/ID")
125 .getStringValue(prefix + "/" + idCounter + "/ID")
127 } catch (ConfigurationException ce1) {
128 logger.log(WARNING, "Could not save bookmarked posts!", ce1);
132 public long getLocalSoneTime(String localSoneId) {
133 Long time = configuration.getLongValue("Sone/" + localSoneId + "/Time").getValue(null);
134 return Optional.fromNullable(time).or(-1L);
137 public String getLastInsertFingerprint(String localSoneId) {
138 return configuration.getStringValue("Sone/" + localSoneId + "/LastInsertFingerprint").getValue("");