Remove Service interface.
[Sone.git] / src / main / java / net / pterodactylus / sone / database / memory / MemoryDatabase.java
index 8d60e0f..c49f978 100644 (file)
@@ -57,11 +57,9 @@ import com.google.common.base.Optional;
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.ListMultimap;
-import com.google.common.collect.Maps;
 import com.google.common.collect.SetMultimap;
 import com.google.common.collect.SortedSetMultimap;
 import com.google.common.collect.TreeMultimap;
-import com.google.common.util.concurrent.AbstractService;
 import com.google.inject.Inject;
 
 /**
@@ -69,7 +67,7 @@ import com.google.inject.Inject;
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
-public class MemoryDatabase extends AbstractService implements Database {
+public class MemoryDatabase implements Database {
 
        private static final Logger logger = getLogger(MemoryDatabase.class.getName());
 
@@ -79,8 +77,8 @@ public class MemoryDatabase extends AbstractService implements Database {
        /** The configuration. */
        private final Configuration configuration;
 
-       private final Map<String, Identity> identities = Maps.newHashMap();
        private final Map<String, Sone> sones = new HashMap<String, Sone>();
+       private final MemoryIdentityDatabase memoryIdentityDatabase;
        private final MemoryPostDatabase memoryPostDatabase;
 
        /** All post replies by their ID. */
@@ -125,6 +123,7 @@ public class MemoryDatabase extends AbstractService implements Database {
        public MemoryDatabase(Configuration configuration) {
                this.configuration = configuration;
                memoryPostDatabase = new MemoryPostDatabase(this, lock, configuration);
+               memoryIdentityDatabase = new MemoryIdentityDatabase(lock);
        }
 
        //
@@ -132,40 +131,33 @@ public class MemoryDatabase extends AbstractService implements Database {
        //
 
        @Override
-       protected void doStart() {
+       public void start() {
                memoryPostDatabase.start();
                loadKnownPostReplies();
                notifyStarted();
        }
 
        @Override
-       protected void doStop() {
+       public void stop() {
                try {
                        memoryPostDatabase.stop();
+                       configuration.save();
                } catch (DatabaseException de1) {
                        logger.log(Level.WARNING, "Could not stop post database!", de1);
+               } catch (ConfigurationException ce1) {
+                       logger.log(Level.WARNING, "Could not save configuration!", ce1);
                }
                notifyStopped();
        }
 
        @Override
        public Optional<Identity> getIdentity(String identityId) {
-               lock.readLock().lock();
-               try {
-                       return fromNullable(identities.get(identityId));
-               } finally {
-                       lock.readLock().unlock();
-               }
+               return memoryIdentityDatabase.getIdentity(identityId);
        }
 
        @Override
        public void storeIdentity(Identity identitiy) {
-               lock.writeLock().lock();
-               try {
-                       identities.put(identitiy.getId(), identitiy);
-               } finally {
-                       lock.writeLock().unlock();
-               }
+               memoryIdentityDatabase.storeIdentity(identitiy);
        }
 
        @Override