Remove updated time setter from Sone, store update time in database.
[Sone.git] / src / main / java / net / pterodactylus / sone / database / memory / MemorySoneDatabase.java
1 package net.pterodactylus.sone.database.memory;
2
3 import java.util.HashMap;
4 import java.util.HashSet;
5 import java.util.Map;
6 import java.util.Set;
7 import java.util.concurrent.locks.ReadWriteLock;
8 import java.util.concurrent.locks.ReentrantReadWriteLock;
9
10 import net.pterodactylus.sone.data.Sone;
11
12 /**
13  * Groups {@link Sone}-related database functionality.
14  *
15  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
16  */
17 public class MemorySoneDatabase {
18
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>();
23
24         public MemorySoneDatabase(ConfigurationLoader configurationLoader) {
25                 this.configurationLoader = configurationLoader;
26         }
27
28         void start() {
29                 loadKnownSones();
30         }
31
32         private void loadKnownSones() {
33                 lock.writeLock().lock();
34                 try {
35                         knownSones.clear();
36                         knownSones.addAll(configurationLoader.loadKnownSones());
37                 } finally {
38                         lock.writeLock().unlock();
39                 }
40         }
41
42         void stop() {
43                 saveKnownSones();
44         }
45
46         boolean isKnownSone(String soneId) {
47                 lock.readLock().lock();
48                 try {
49                         return knownSones.contains(soneId);
50                 } finally {
51                         lock.readLock().unlock();
52                 }
53         }
54
55         void setSoneKnown(String soneId) {
56                 lock.writeLock().lock();
57                 try {
58                         knownSones.add(soneId);
59                         saveKnownSones();
60                 } finally {
61                         lock.writeLock().unlock();
62                 }
63         }
64
65         private void saveKnownSones() {
66                 lock.readLock().lock();
67                 try {
68                         configurationLoader.saveKnownSones(knownSones);
69                 } finally {
70                         lock.readLock().unlock();
71                 }
72         }
73
74         void updateSoneTime(String soneId, long soneTime) {
75                 lock.writeLock().lock();
76                 try {
77                         soneUpdateTimes.put(soneId, soneTime);
78                 } finally {
79                         lock.writeLock().unlock();
80                 }
81         }
82
83 }