1 package net.pterodactylus.sone.database.memory;
3 import java.util.HashMap;
4 import java.util.HashSet;
7 import java.util.concurrent.locks.ReadWriteLock;
8 import java.util.concurrent.locks.ReentrantReadWriteLock;
10 import net.pterodactylus.sone.data.Sone;
13 * Groups {@link Sone}-related database functionality.
15 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
17 public class MemorySoneDatabase {
19 private final ReadWriteLock lock = new ReentrantReadWriteLock();
20 private final ConfigurationLoader configurationLoader;
21 private final Set<String> knownSones = new HashSet<String>();
22 private final Map<String, Long> soneUpdateTimes = new HashMap<String, Long>();
24 public MemorySoneDatabase(ConfigurationLoader configurationLoader) {
25 this.configurationLoader = configurationLoader;
32 private void loadKnownSones() {
33 lock.writeLock().lock();
36 knownSones.addAll(configurationLoader.loadKnownSones());
38 lock.writeLock().unlock();
46 boolean isKnownSone(String soneId) {
47 lock.readLock().lock();
49 return knownSones.contains(soneId);
51 lock.readLock().unlock();
55 void setSoneKnown(String soneId) {
56 lock.writeLock().lock();
58 knownSones.add(soneId);
61 lock.writeLock().unlock();
65 private void saveKnownSones() {
66 lock.readLock().lock();
68 configurationLoader.saveKnownSones(knownSones);
70 lock.readLock().unlock();
74 void updateSoneTime(String soneId, long soneTime) {
75 lock.writeLock().lock();
77 soneUpdateTimes.put(soneId, soneTime);
79 lock.writeLock().unlock();