Convert “Sone locked” into EventBus-based event.
[Sone.git] / src / main / java / net / pterodactylus / sone / core / Core.java
index fcde685..ed8cc72 100644 (file)
@@ -35,6 +35,16 @@ import java.util.logging.Logger;
 import net.pterodactylus.sone.core.Options.DefaultOption;
 import net.pterodactylus.sone.core.Options.Option;
 import net.pterodactylus.sone.core.Options.OptionWatcher;
+import net.pterodactylus.sone.core.event.MarkPostKnownEvent;
+import net.pterodactylus.sone.core.event.MarkPostReplyKnownEvent;
+import net.pterodactylus.sone.core.event.MarkSoneKnownEvent;
+import net.pterodactylus.sone.core.event.NewPostFoundEvent;
+import net.pterodactylus.sone.core.event.NewPostReplyFoundEvent;
+import net.pterodactylus.sone.core.event.NewSoneFoundEvent;
+import net.pterodactylus.sone.core.event.PostRemovedEvent;
+import net.pterodactylus.sone.core.event.PostReplyRemovedEvent;
+import net.pterodactylus.sone.core.event.SoneLockedEvent;
+import net.pterodactylus.sone.core.event.SoneRemovedEvent;
 import net.pterodactylus.sone.data.Album;
 import net.pterodactylus.sone.data.Client;
 import net.pterodactylus.sone.data.Image;
@@ -70,6 +80,9 @@ import net.pterodactylus.util.version.Version;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.Collections2;
+import com.google.common.eventbus.EventBus;
+import com.google.inject.Inject;
+
 import freenet.keys.FreenetURI;
 
 /**
@@ -94,6 +107,9 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
        /** The core listener manager. */
        private final CoreListenerManager coreListenerManager = new CoreListenerManager(this);
 
+       /** The event bus. */
+       private final EventBus eventBus;
+
        /** The configuration. */
        private Configuration configuration;
 
@@ -191,8 +207,11 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
         *            The identity manager
         * @param webOfTrustUpdater
         *            The WebOfTrust updater
+        * @param eventBus
+        *            The event bus
         */
-       public Core(Configuration configuration, FreenetInterface freenetInterface, IdentityManager identityManager, WebOfTrustUpdater webOfTrustUpdater) {
+       @Inject
+       public Core(Configuration configuration, FreenetInterface freenetInterface, IdentityManager identityManager, WebOfTrustUpdater webOfTrustUpdater, EventBus eventBus) {
                super("Sone Core");
                this.configuration = configuration;
                this.freenetInterface = freenetInterface;
@@ -201,6 +220,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
                this.imageInserter = new ImageInserter(this, freenetInterface);
                this.updateChecker = new UpdateChecker(freenetInterface);
                this.webOfTrustUpdater = webOfTrustUpdater;
+               this.eventBus = eventBus;
        }
 
        //
@@ -416,7 +436,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
                                sone = new Sone(id, true);
                                sones.put(id, sone);
                        }
-                       if (!sone.isLocal()) {
+                       if ((sone != null) && !sone.isLocal()) {
                                sone = new Sone(id, true);
                                sones.put(id, sone);
                        }
@@ -779,7 +799,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
        public void lockSone(Sone sone) {
                synchronized (lockedSones) {
                        if (lockedSones.add(sone)) {
-                               coreListenerManager.fireSoneLocked(sone);
+                               eventBus.post(new SoneLockedEvent(sone));
                        }
                }
        }
@@ -882,7 +902,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
                                }
                                sone.setKnown(!newSone);
                                if (newSone) {
-                                       coreListenerManager.fireNewSoneFound(sone);
+                                       eventBus.post(new NewSoneFoundEvent(sone));
                                        for (Sone localSone : getLocalSones()) {
                                                if (localSone.getOptions().getBooleanOption("AutoFollow").get()) {
                                                        followSone(localSone, sone);
@@ -1090,7 +1110,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
                                        for (Post post : storedSone.getPosts()) {
                                                posts.remove(post.getId());
                                                if (!sone.getPosts().contains(post)) {
-                                                       coreListenerManager.firePostRemoved(post);
+                                                       eventBus.post(new PostRemovedEvent(post));
                                                }
                                        }
                                }
@@ -1103,7 +1123,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
                                                                knownPosts.add(post.getId());
                                                                post.setKnown(true);
                                                        } else if (!knownPosts.contains(post.getId())) {
-                                                               coreListenerManager.fireNewPostFound(post);
+                                                               eventBus.post(new NewPostFoundEvent(post));
                                                        }
                                                }
                                                posts.put(post.getId(), post);
@@ -1115,7 +1135,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
                                        for (PostReply reply : storedSone.getReplies()) {
                                                replies.remove(reply.getId());
                                                if (!sone.getReplies().contains(reply)) {
-                                                       coreListenerManager.fireReplyRemoved(reply);
+                                                       eventBus.post(new PostReplyRemovedEvent(reply));
                                                }
                                        }
                                }
@@ -1128,7 +1148,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
                                                                knownReplies.add(reply.getId());
                                                                reply.setKnown(true);
                                                        } else if (!knownReplies.contains(reply.getId())) {
-                                                               coreListenerManager.fireNewReplyFound(reply);
+                                                               eventBus.post(new NewPostReplyFoundEvent(reply));
                                                        }
                                                }
                                                replies.put(reply.getId(), reply);
@@ -1219,7 +1239,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
 
        /**
         * Marks the given Sone as known. If the Sone was not {@link Post#isKnown()
-        * known} before, a {@link CoreListener#markSoneKnown(Sone)} event is fired.
+        * known} before, a {@link MarkSoneKnownEvent} is fired.
         *
         * @param sone
         *            The Sone to mark as known
@@ -1230,7 +1250,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
                        synchronized (knownSones) {
                                knownSones.add(sone.getId());
                        }
-                       coreListenerManager.fireMarkSoneKnown(sone);
+                       eventBus.post(new MarkSoneKnownEvent(sone));
                        touchConfiguration();
                }
        }
@@ -1532,7 +1552,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
                synchronized (posts) {
                        posts.put(post.getId(), post);
                }
-               coreListenerManager.fireNewPostFound(post);
+               eventBus.post(new NewPostFoundEvent(post));
                sone.addPost(post);
                touchConfiguration();
                localElementTicker.registerEvent(System.currentTimeMillis() + 10 * 1000, new Runnable() {
@@ -1563,7 +1583,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
                synchronized (posts) {
                        posts.remove(post.getId());
                }
-               coreListenerManager.firePostRemoved(post);
+               eventBus.post(new PostRemovedEvent(post));
                markPostKnown(post);
                touchConfiguration();
        }
@@ -1578,7 +1598,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
        public void markPostKnown(Post post) {
                post.setKnown(true);
                synchronized (knownPosts) {
-                       coreListenerManager.fireMarkPostKnown(post);
+                       eventBus.post(new MarkPostKnownEvent(post));
                        if (knownPosts.add(post.getId())) {
                                touchConfiguration();
                        }
@@ -1671,7 +1691,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
                        replies.put(reply.getId(), reply);
                }
                synchronized (knownReplies) {
-                       coreListenerManager.fireNewReplyFound(reply);
+                       eventBus.post(new NewPostReplyFoundEvent(reply));
                }
                sone.addReply(reply);
                touchConfiguration();
@@ -1721,7 +1741,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
        public void markReplyKnown(PostReply reply) {
                reply.setKnown(true);
                synchronized (knownReplies) {
-                       coreListenerManager.fireMarkReplyKnown(reply);
+                       eventBus.post(new MarkPostReplyKnownEvent(reply));
                        if (knownReplies.add(reply.getId())) {
                                touchConfiguration();
                        }
@@ -1893,6 +1913,9 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
                loadConfiguration();
                updateChecker.addUpdateListener(this);
                updateChecker.start();
+               identityManager.addIdentityListener(this);
+               identityManager.start();
+               webOfTrustUpdater.init();
                webOfTrustUpdater.start();
        }
 
@@ -1932,6 +1955,8 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
                updateChecker.stop();
                updateChecker.removeUpdateListener(this);
                soneDownloader.stop();
+               identityManager.removeIdentityListener(this);
+               identityManager.stop();
        }
 
        //
@@ -2397,7 +2422,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
                        synchronized (knownPosts) {
                                for (Post post : sone.getPosts()) {
                                        posts.remove(post.getId());
-                                       coreListenerManager.firePostRemoved(post);
+                                       eventBus.post(new PostRemovedEvent(post));
                                }
                        }
                }
@@ -2405,14 +2430,14 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
                        synchronized (knownReplies) {
                                for (PostReply reply : sone.getReplies()) {
                                        replies.remove(reply.getId());
-                                       coreListenerManager.fireReplyRemoved(reply);
+                                       eventBus.post(new PostReplyRemovedEvent(reply));
                                }
                        }
                }
                synchronized (sones) {
                        sones.remove(identity.getId());
                }
-               coreListenerManager.fireSoneRemoved(sone);
+               eventBus.post(new SoneRemovedEvent(sone));
        }
 
        //