67f3425ef3597435d3737c8832289bcca97f275b
[Sone.git] / src / main / java / net / pterodactylus / sone / database / memory / MemorySoneDatabase.java
1 package net.pterodactylus.sone.database.memory;
2
3 import java.util.HashSet;
4 import java.util.Set;
5 import java.util.concurrent.locks.ReadWriteLock;
6 import java.util.concurrent.locks.ReentrantReadWriteLock;
7
8 import net.pterodactylus.sone.data.Sone;
9
10 /**
11  * Groups {@link Sone}-related database functionality.
12  *
13  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
14  */
15 public class MemorySoneDatabase {
16
17         private final ReadWriteLock lock = new ReentrantReadWriteLock();
18         private final ConfigurationLoader configurationLoader;
19         private final Set<String> knownSones = new HashSet<String>();
20
21         public MemorySoneDatabase(ConfigurationLoader configurationLoader) {
22                 this.configurationLoader = configurationLoader;
23         }
24
25         void start() {
26                 loadKnownSones();
27         }
28
29         private void loadKnownSones() {
30                 lock.writeLock().lock();
31                 try {
32                         knownSones.clear();
33                         knownSones.addAll(configurationLoader.loadKnownSones());
34                 } finally {
35                         lock.writeLock().unlock();
36                 }
37         }
38
39         void stop() {
40                 saveKnownSones();
41         }
42
43         boolean isKnownSone(String soneId) {
44                 lock.readLock().lock();
45                 try {
46                         return knownSones.contains(soneId);
47                 } finally {
48                         lock.readLock().unlock();
49                 }
50         }
51
52         void setSoneKnown(String soneId) {
53                 lock.writeLock().lock();
54                 try {
55                         knownSones.add(soneId);
56                         saveKnownSones();
57                 } finally {
58                         lock.writeLock().unlock();
59                 }
60         }
61
62         private void saveKnownSones() {
63                 lock.readLock().lock();
64                 try {
65                         configurationLoader.saveKnownSones(knownSones);
66                 } finally {
67                         lock.readLock().unlock();
68                 }
69         }
70
71 }