Store locality of a Sone in the Sone itself, remove related methods from Database.
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Fri, 14 Oct 2011 05:30:44 +0000 (07:30 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Wed, 30 May 2012 07:51:31 +0000 (09:51 +0200)
22 files changed:
src/main/java/net/pterodactylus/sone/core/Core.java
src/main/java/net/pterodactylus/sone/core/SoneDownloader.java
src/main/java/net/pterodactylus/sone/data/Sone.java
src/main/java/net/pterodactylus/sone/database/Database.java
src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java
src/main/java/net/pterodactylus/sone/fcp/DeletePostCommand.java
src/main/java/net/pterodactylus/sone/fcp/DeleteReplyCommand.java
src/main/java/net/pterodactylus/sone/template/ProfileAccessor.java
src/main/java/net/pterodactylus/sone/template/SoneAccessor.java
src/main/java/net/pterodactylus/sone/text/SoneTextParser.java
src/main/java/net/pterodactylus/sone/web/DeleteAlbumPage.java
src/main/java/net/pterodactylus/sone/web/DeleteImagePage.java
src/main/java/net/pterodactylus/sone/web/DeletePostPage.java
src/main/java/net/pterodactylus/sone/web/DeleteReplyPage.java
src/main/java/net/pterodactylus/sone/web/EditAlbumPage.java
src/main/java/net/pterodactylus/sone/web/EditImagePage.java
src/main/java/net/pterodactylus/sone/web/WebInterface.java
src/main/java/net/pterodactylus/sone/web/ajax/DeletePostAjaxPage.java
src/main/java/net/pterodactylus/sone/web/ajax/DeleteReplyAjaxPage.java
src/main/java/net/pterodactylus/sone/web/ajax/EditAlbumAjaxPage.java
src/main/java/net/pterodactylus/sone/web/ajax/EditImageAjaxPage.java
src/test/java/net/pterodactylus/sone/text/SoneTextParserTest.java

index a574a59..d552f7f 100644 (file)
@@ -279,7 +279,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
         * @return The Sone rescuer for the given Sone
         */
        public SoneRescuer getSoneRescuer(Sone sone) {
-               Validation.begin().isNotNull("Sone", sone).check().is("Local Sone", isLocalSone(sone)).check();
+               Validation.begin().isNotNull("Sone", sone).check().is("Local Sone", sone.isLocal()).check();
                synchronized (soneRescuers) {
                        SoneRescuer soneRescuer = soneRescuers.get(sone);
                        if (soneRescuer == null) {
@@ -353,30 +353,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
         *         otherwise
         */
        public boolean hasSone(String id) {
-               return database.isLocalSone(id) || database.isRemoteSone(id);
-       }
-
-       /**
-        * Returns whether the given Sone is a local Sone.
-        *
-        * @param sone
-        *            The Sone to check for its locality
-        * @return {@code true} if the given Sone is local, {@code false} otherwise
-        */
-       public boolean isLocalSone(Sone sone) {
-               return database.isLocalSone(sone);
-       }
-
-       /**
-        * Returns whether the given ID is the ID of a local Sone.
-        *
-        * @param id
-        *            The Sone ID to check for its locality
-        * @return {@code true} if the given ID is a local Sone, {@code false}
-        *         otherwise
-        */
-       public boolean isLocalSone(String id) {
-               return database.isLocalSone(id);
+               return database.getSone(id, false) != null;
        }
 
        /**
@@ -437,30 +414,6 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
        }
 
        /**
-        * Returns whether the given Sone is a remote Sone.
-        *
-        * @param sone
-        *            The Sone to check
-        * @return {@code true} if the given Sone is a remote Sone, {@code false}
-        *         otherwise
-        */
-       public boolean isRemoteSone(Sone sone) {
-               return database.isRemoteSone(sone);
-       }
-
-       /**
-        * Returns whether the Sone with the given ID is a remote Sone.
-        *
-        * @param id
-        *            The ID of the Sone to check
-        * @return {@code true} if the Sone with the given ID is a remote Sone,
-        *         {@code false} otherwise
-        */
-       public boolean isRemoteSone(String id) {
-               return database.isRemoteSone(id);
-       }
-
-       /**
         * Returns whether the given Sone has been modified.
         *
         * @param sone
@@ -810,6 +763,30 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
        }
 
        /**
+<<<<<<< HEAD
+=======
+        * Adds a local Sone from the given ID which has to be the ID of an own
+        * identity.
+        *
+        * @param id
+        *            The ID of an own identity to add a Sone for
+        * @return The added (or already existing) Sone
+        */
+       public Sone addLocalSone(String id) {
+               if (database.getLocalSone(id, false) != null) {
+                       logger.log(Level.FINE, "Tried to add known local Sone: %s", id);
+                       return database.getLocalSone(id, false);
+               }
+               OwnIdentity ownIdentity = identityManager.getOwnIdentity(id);
+               if (ownIdentity == null) {
+                       logger.log(Level.INFO, "Invalid Sone ID: %s", id);
+                       return null;
+               }
+               return addLocalSone(ownIdentity);
+       }
+
+       /**
+>>>>>>> 4f36598... Store locality of a Sone in the Sone itself, remove related methods from Database.
         * Adds a local Sone from the given own identity.
         *
         * @param ownIdentity
@@ -1014,7 +991,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
         * @return The trust relationship
         */
        public Trust getTrust(Sone origin, Sone target) {
-               if (!isLocalSone(origin)) {
+               if (!origin.isLocal()) {
                        logger.log(Level.WARNING, String.format("Tried to get trust from remote Sone: %s", origin));
                        return null;
                }
@@ -1234,7 +1211,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
                        logger.log(Level.WARNING, String.format("Tried to delete Sone of non-own identity: %s", sone));
                        return;
                }
-               if (!database.isLocalSone(sone)) {
+               if (!sone.isLocal()) {
                        logger.log(Level.WARNING, String.format("Tried to delete non-local Sone: %s", sone));
                        return;
                }
@@ -1281,7 +1258,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
         *            The Sone to load and update
         */
        public void loadSone(Sone sone) {
-               if (!isLocalSone(sone)) {
+               if (!sone.isLocal()) {
                        logger.log(Level.FINE, String.format("Tried to load non-local Sone: %s", sone));
                        return;
                }
@@ -1558,7 +1535,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
         * @return The created post
         */
        public Post createPost(Sone sone, Sone recipient, long time, String text) {
-               if (!isLocalSone(sone)) {
+               if (!sone.isLocal()) {
                        logger.log(Level.FINE, String.format("Tried to create post for non-local Sone: %s", sone));
                        return null;
                }
@@ -1592,7 +1569,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
         *            The post to delete
         */
        public void deletePost(Post post) {
-               if (!isLocalSone(post.getSone())) {
+               if (!post.getSone().isLocal()) {
                        logger.log(Level.WARNING, String.format("Tried to delete post of non-local Sone: %s", post.getSone()));
                        return;
                }
@@ -1698,7 +1675,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
         * @return The created reply
         */
        public PostReply createReply(Sone sone, Post post, long time, String text) {
-               if (!isLocalSone(sone)) {
+               if (!sone.isLocal()) {
                        logger.log(Level.FINE, String.format("Tried to create reply for non-local Sone: %s", sone));
                        return null;
                }
@@ -1732,7 +1709,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
         */
        public void deleteReply(PostReply reply) {
                Sone sone = reply.getSone();
-               if (!isLocalSone(sone)) {
+               if (!sone.isLocal()) {
                        logger.log(Level.FINE, String.format("Tried to delete non-local reply: %s", reply));
                        return;
                }
@@ -1807,7 +1784,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
         *            The album to remove
         */
        public void deleteAlbum(Album album) {
-               Validation.begin().isNotNull("Album", album).check().is("Local Sone", isLocalSone(album.getSone())).check();
+               Validation.begin().isNotNull("Album", album).check().is("Local Sone", album.getSone().isLocal()).check();
                if (!album.isEmpty()) {
                        return;
                }
@@ -1834,7 +1811,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
         * @return The newly created image
         */
        public Image createImage(Sone sone, Album album, TemporaryImage temporaryImage) {
-               Validation.begin().isNotNull("Sone", sone).isNotNull("Album", album).isNotNull("Temporary Image", temporaryImage).check().is("Local Sone", isLocalSone(sone)).check().isEqual("Owner and Album Owner", sone, album.getSone()).check();
+               Validation.begin().isNotNull("Sone", sone).isNotNull("Album", album).isNotNull("Temporary Image", temporaryImage).check().is("Local Sone", sone.isLocal()).check().isEqual("Owner and Album Owner", sone, album.getSone()).check();
                Image image = new Image(temporaryImage.getId()).setSone(sone).setCreationTime(System.currentTimeMillis());
                album.addImage(image);
                synchronized (images) {
@@ -1853,7 +1830,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
         *            The image to delete
         */
        public void deleteImage(Image image) {
-               Validation.begin().isNotNull("Image", image).check().is("Local Sone", isLocalSone(image.getSone())).check();
+               Validation.begin().isNotNull("Image", image).check().is("Local Sone", image.getSone().isLocal()).check();
                deleteTemporaryImage(image.getId());
                image.getAlbum().removeImage(image);
                synchronized (images) {
@@ -1976,7 +1953,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
         *            The Sone to save
         */
        private synchronized void saveSone(Sone sone) {
-               if (!isLocalSone(sone)) {
+               if (!sone.isLocal()) {
                        logger.log(Level.FINE, String.format("Tried to save non-local Sone: %s", sone));
                        return;
                }
index 72ff008..d9b318c 100644 (file)
@@ -236,7 +236,7 @@ public class SoneDownloader extends AbstractService {
                        return null;
                }
 
-               Sone sone = new Sone(originalSone.getId()).setIdentity(originalSone.getIdentity());
+               Sone sone = new Sone(originalSone.getId(), originalSone.isLocal()).setIdentity(originalSone.getIdentity());
 
                SimpleXML soneXml;
                try {
index ac6e41a..d515424 100644 (file)
@@ -150,7 +150,7 @@ public class Sone implements Fingerprintable, Comparable<Sone> {
                }
        };
 
-       /** Filter that matches all {@link Core#isLocalSone(Sone) local Sones}. */
+       /** Filter that matches all {@link Core#getLocalSones() local Sones}. */
        public static final Filter<Sone> LOCAL_SONE_FILTER = new Filter<Sone>() {
 
                @Override
@@ -175,6 +175,9 @@ public class Sone implements Fingerprintable, Comparable<Sone> {
        /** The ID of this Sone. */
        private final String id;
 
+       /** Whether this is a local Sone. */
+       private final boolean local;
+
        /** The identity of this Sone. */
        private Identity identity;
 
@@ -229,9 +232,12 @@ public class Sone implements Fingerprintable, Comparable<Sone> {
         *
         * @param id
         *            The ID of the Sone
+        * @param local
+        *            {@code true} if this Sone is local, {@code false} otherwise
         */
-       public Sone(String id) {
+       public Sone(String id, boolean local) {
                this.id = id;
+               this.local = local;
        }
 
        //
@@ -275,6 +281,15 @@ public class Sone implements Fingerprintable, Comparable<Sone> {
        }
 
        /**
+        * Returns whether this Sone is local.
+        *
+        * @return {@code true} if this Sone is local, {@code false} otherwise
+        */
+       public boolean isLocal() {
+               return local;
+       }
+
+       /**
         * Returns the name of this Sone.
         *
         * @return The name of this Sone
index 7b48151..0ff7dfb 100644 (file)
@@ -29,62 +29,6 @@ import net.pterodactylus.sone.data.Sone;
 public interface Database {
 
        /**
-        * Returns whether the given Sone is a local Sone.
-        *
-        * @param sone
-        *            The Sone to check
-        * @return {@code true} if the given Sone is a local Sone, {@code false}
-        *         otherwise
-        * @throws IllegalArgumentException
-        *             if {@code sone} is {@code null}
-        * @throws DatabaseException
-        *             if a database error occurs
-        */
-       public boolean isLocalSone(Sone sone) throws DatabaseException;
-
-       /**
-        * Returns whether the given Sone ID belongs to a local Sone.
-        *
-        * @param id
-        *            The Sone ID to check
-        * @return {@code true} if the given Sone ID belongs to a local Sone,
-        *         {@code false} otherwise
-        * @throws IllegalArgumentException
-        *             if {@code id} is {@code null}
-        * @throws DatabaseException
-        *             if a database error occurs
-        */
-       public boolean isLocalSone(String id) throws DatabaseException;
-
-       /**
-        * Returns whether the given Sone is a remote Sone.
-        *
-        * @param sone
-        *            The Sone to check
-        * @return {@code true} if the given Sone is a remote Sone, {@code false}
-        *         otherwise
-        * @throws IllegalArgumentException
-        *             if {@code sone} is {@code null}
-        * @throws DatabaseException
-        *             if a database error occurs
-        */
-       public boolean isRemoteSone(Sone sone) throws DatabaseException;
-
-       /**
-        * Returns whether the given Sone ID belongs to a remote Sone.
-        *
-        * @param id
-        *            The Sone ID to check
-        * @return {@code true} if the given Sone ID belongs to a remote Sone,
-        *         {@code false} otherwise
-        * @throws IllegalArgumentException
-        *             if {@code id} is {@code null}
-        * @throws DatabaseException
-        *             if a database error occurs
-        */
-       public boolean isRemoteSone(String id) throws DatabaseException;
-
-       /**
         * Returns the Sone with the given ID, creating a new Sone if a Sone with
         * the given ID does not exist and {@code create} is {@code true}. When
         * searching for a Sone with the given IDs, local Sones are preferred.
index d87a712..3c32f71 100644 (file)
@@ -48,48 +48,8 @@ public class MemoryDatabase implements Database {
         * {@inheritDoc}
         */
        @Override
-       public boolean isLocalSone(Sone sone) throws DatabaseException {
-               Validation.begin().isNotNull("Sone", sone).check();
-               return isLocalSone(sone.getId());
-       }
-
-       /**
-        * {@inheritDoc}
-        */
-       @Override
-       public boolean isLocalSone(String id) throws DatabaseException {
-               Validation.begin().isNotNull("Sone ID", id).check();
-               synchronized (localSones) {
-                       return localSones.containsKey(id);
-               }
-       }
-
-       /**
-        * {@inheritDoc}
-        */
-       @Override
-       public boolean isRemoteSone(Sone sone) throws DatabaseException {
-               Validation.begin().isNotNull("Sone", sone).check();
-               return isRemoteSone(sone.getId());
-       }
-
-       /**
-        * {@inheritDoc}
-        */
-       @Override
-       public boolean isRemoteSone(String id) throws DatabaseException {
-               Validation.begin().isNotNull("Sone ID", id).check();
-               synchronized (remoteSones) {
-                       return remoteSones.containsKey(id);
-               }
-       }
-
-       /**
-        * {@inheritDoc}
-        */
-       @Override
        public Sone getSone(String id, boolean create) throws DatabaseException {
-               if (isLocalSone(id)) {
+               if (getLocalSone(id, false) != null) {
                        return getLocalSone(id, create);
                }
                return getRemoteSone(id, create);
@@ -131,7 +91,7 @@ public class MemoryDatabase implements Database {
                Validation.begin().isNotNull("Sone ID", id).check();
                synchronized (localSones) {
                        if (!localSones.containsKey(id) && create) {
-                               localSones.put(id, new Sone(id));
+                               localSones.put(id, new Sone(id, true));
                        }
                        return localSones.get(id);
                }
@@ -145,7 +105,7 @@ public class MemoryDatabase implements Database {
                Validation.begin().isNotNull("Sone ID", id).check();
                synchronized (remoteSones) {
                        if (!remoteSones.containsKey(id) && create) {
-                               remoteSones.put(id, new Sone(id));
+                               remoteSones.put(id, new Sone(id, false));
                        }
                        return remoteSones.get(id);
                }
@@ -156,7 +116,7 @@ public class MemoryDatabase implements Database {
         */
        @Override
        public void saveSone(Sone sone) throws DatabaseException {
-               if (isLocalSone(sone)) {
+               if (sone.isLocal()) {
                        synchronized (localSones) {
                                localSones.put(sone.getId(), sone);
                        }
@@ -173,7 +133,7 @@ public class MemoryDatabase implements Database {
         */
        @Override
        public void removeSone(Sone sone) throws DatabaseException {
-               Map<String, Sone> sones = isLocalSone(sone) ? localSones : remoteSones;
+               Map<String, Sone> sones = sone.isLocal() ? localSones : remoteSones;
                synchronized (sones) {
                        sones.remove(sone.getId());
                }
@@ -184,7 +144,7 @@ public class MemoryDatabase implements Database {
         */
        @Override
        public void removeSone(String id) throws DatabaseException {
-               Map<String, Sone> sones = isLocalSone(id) ? localSones : remoteSones;
+               Map<String, Sone> sones = ((getSone(id, false) != null) && getSone(id, false).isLocal()) ? localSones : remoteSones;
                synchronized (sones) {
                        sones.remove(id);
                }
index 54f01c8..8d929f3 100644 (file)
@@ -48,7 +48,7 @@ public class DeletePostCommand extends AbstractSoneCommand {
        @Override
        public Response execute(SimpleFieldSet parameters, Bucket data, AccessType accessType) throws FcpException {
                Post post = getPost(parameters, "Post");
-               if (!getCore().isLocalSone(post.getSone())) {
+               if (!post.getSone().isLocal()) {
                        return new ErrorResponse(401, "Not allowed.");
                }
                return new Response("PostDeleted", new SimpleFieldSetBuilder().get());
index daed26d..33374d9 100644 (file)
@@ -48,7 +48,7 @@ public class DeleteReplyCommand extends AbstractSoneCommand {
        @Override
        public Response execute(SimpleFieldSet parameters, Bucket data, AccessType accessType) throws FcpException {
                PostReply reply = getReply(parameters, "Reply");
-               if (!getCore().isLocalSone(reply.getSone())) {
+               if (!reply.getSone().isLocal()) {
                        return new ErrorResponse(401, "Not allowed.");
                }
                return new Response("ReplyDeleted", new SimpleFieldSetBuilder().get());
index 1f29b65..ceb3e22 100644 (file)
@@ -69,7 +69,7 @@ public class ProfileAccessor extends ReflectionAccessor {
                                return null;
                        }
                        Sone remoteSone = profile.getSone();
-                       if (core.isLocalSone(remoteSone)) {
+                       if (remoteSone.isLocal()) {
                                /* always show your own avatars. */
                                return avatarId;
                        }
index eac8a93..ffad018 100644 (file)
@@ -75,8 +75,6 @@ public class SoneAccessor extends ReflectionAccessor {
                Sone sone = (Sone) object;
                if (member.equals("niceName")) {
                        return getNiceName(sone);
-               } else if (member.equals("local")) {
-                       return core.isLocalSone(sone);
                } else if (member.equals("friend")) {
                        Sone currentSone = (Sone) templateContext.get("currentSone");
                        return (currentSone != null) && currentSone.hasFriend(sone.getId());
index dd0da28..cb23948 100644 (file)
@@ -207,7 +207,7 @@ public class SoneTextParser implements Parser<SoneTextParserContext> {
                                                         * don’t use create=true above, we don’t want the
                                                         * empty shell.
                                                         */
-                                                       sone = new Sone(soneId);
+                                                       sone = new Sone(soneId, false);
                                                }
                                                parts.add(new SonePart(sone));
                                                line = line.substring(50);
index 2f2b766..e175870 100644 (file)
@@ -54,7 +54,7 @@ public class DeleteAlbumPage extends SoneTemplatePage {
                        if (album == null) {
                                throw new RedirectException("invalid.html");
                        }
-                       if (!webInterface.getCore().isLocalSone(album.getSone())) {
+                       if (!album.getSone().isLocal()) {
                                throw new RedirectException("noPermission.html");
                        }
                        if (request.getHttpRequest().isPartSet("abortDelete")) {
index 3bbaf3d..69b1d27 100644 (file)
@@ -57,7 +57,7 @@ public class DeleteImagePage extends SoneTemplatePage {
                if (image == null) {
                        throw new RedirectException("invalid.html");
                }
-               if (!webInterface.getCore().isLocalSone(image.getSone())) {
+               if (!image.getSone().isLocal()) {
                        throw new RedirectException("noPermission.html");
                }
                if (request.getMethod() == Method.POST) {
index 6689061..314689e 100644 (file)
@@ -63,7 +63,7 @@ public class DeletePostPage extends SoneTemplatePage {
                        String postId = request.getHttpRequest().getPartAsStringFailsafe("post", 36);
                        String returnPage = request.getHttpRequest().getPartAsStringFailsafe("returnPage", 256);
                        Post post = webInterface.getCore().getPost(postId);
-                       if (!webInterface.getCore().isLocalSone(post.getSone())) {
+                       if (!post.getSone().isLocal()) {
                                throw new RedirectException("noPermission.html");
                        }
                        if (request.getHttpRequest().isPartSet("confirmDelete")) {
index 900acd9..b07dead 100644 (file)
@@ -56,7 +56,7 @@ public class DeleteReplyPage extends SoneTemplatePage {
                PostReply reply = webInterface.getCore().getReply(replyId);
                String returnPage = request.getHttpRequest().getPartAsStringFailsafe("returnPage", 256);
                if (request.getMethod() == Method.POST) {
-                       if (!webInterface.getCore().isLocalSone(reply.getSone())) {
+                       if (!reply.getSone().isLocal()) {
                                throw new RedirectException("noPermission.html");
                        }
                        if (request.getHttpRequest().isPartSet("confirmDelete")) {
index d028f8d..fd28e41 100644 (file)
@@ -57,7 +57,7 @@ public class EditAlbumPage extends SoneTemplatePage {
                        if (album == null) {
                                throw new RedirectException("invalid.html");
                        }
-                       if (!webInterface.getCore().isLocalSone(album.getSone())) {
+                       if (!album.getSone().isLocal()) {
                                throw new RedirectException("noPermission.html");
                        }
                        if ("true".equals(request.getHttpRequest().getPartAsStringFailsafe("moveLeft", 4))) {
index b0297a8..0207f8c 100644 (file)
@@ -60,7 +60,7 @@ public class EditImagePage extends SoneTemplatePage {
                        if (image == null) {
                                throw new RedirectException("invalid.html");
                        }
-                       if (!webInterface.getCore().isLocalSone(image.getSone())) {
+                       if (!image.getSone().isLocal()) {
                                throw new RedirectException("noPermission.html");
                        }
                        if ("true".equals(request.getHttpRequest().getPartAsStringFailsafe("moveLeft", 4))) {
index 5cc7aff..7654776 100644 (file)
@@ -731,8 +731,8 @@ public class WebInterface implements CoreListener {
        }
 
        /**
-        * Returns all {@link Core#isLocalSone(Sone) local Sone}s that are
-        * referenced by {@link SonePart}s in the given text (after parsing it using
+        * Returns all {@link Core#getLocalSones() local Sone}s that are referenced
+        * by {@link SonePart}s in the given text (after parsing it using
         * {@link SoneTextParser}).
         *
         * @param text
@@ -795,15 +795,14 @@ public class WebInterface implements CoreListener {
         */
        @Override
        public void newPostFound(Post post) {
-               boolean isLocal = getCore().isLocalSone(post.getSone());
-               if (isLocal) {
+               if (post.getSone().isLocal()) {
                        localPostNotification.add(post);
                } else {
                        newPostNotification.add(post);
                }
                if (!hasFirstStartNotification()) {
-                       notificationManager.addNotification(isLocal ? localPostNotification : newPostNotification);
-                       if (!getMentionedSones(post.getText()).isEmpty() && !isLocal) {
+                       notificationManager.addNotification(post.getSone().isLocal() ? localPostNotification : newPostNotification);
+                       if (!getMentionedSones(post.getText()).isEmpty() && !post.getSone().isLocal()) {
                                mentionNotification.add(post);
                                notificationManager.addNotification(mentionNotification);
                        }
@@ -817,15 +816,14 @@ public class WebInterface implements CoreListener {
         */
        @Override
        public void newReplyFound(PostReply reply) {
-               boolean isLocal = getCore().isLocalSone(reply.getSone());
-               if (isLocal) {
+               if (reply.getSone().isLocal()) {
                        localReplyNotification.add(reply);
                } else {
                        newReplyNotification.add(reply);
                }
                if (!hasFirstStartNotification()) {
-                       notificationManager.addNotification(isLocal ? localReplyNotification : newReplyNotification);
-                       if (!getMentionedSones(reply.getText()).isEmpty() && !isLocal && (reply.getPost().getSone() != null) && (reply.getTime() <= System.currentTimeMillis())) {
+                       notificationManager.addNotification(reply.getSone().isLocal() ? localReplyNotification : newReplyNotification);
+                       if (!getMentionedSones(reply.getText()).isEmpty() && !reply.getSone().isLocal() && (reply.getPost().getSone() != null) && (reply.getTime() <= System.currentTimeMillis())) {
                                mentionNotification.add(reply.getPost());
                                notificationManager.addNotification(mentionNotification);
                        }
index ea2310c..b822e52 100644 (file)
@@ -53,7 +53,7 @@ public class DeletePostAjaxPage extends JsonPage {
                if ((post == null) || (post.getSone() == null)) {
                        return createErrorJsonObject("invalid-post-id");
                }
-               if (!webInterface.getCore().isLocalSone(post.getSone())) {
+               if (!post.getSone().isLocal()) {
                        return createErrorJsonObject("not-authorized");
                }
                webInterface.getCore().deletePost(post);
index 0442117..6bccf0b 100644 (file)
@@ -53,7 +53,7 @@ public class DeleteReplyAjaxPage extends JsonPage {
                if (reply == null) {
                        return createErrorJsonObject("invalid-reply-id");
                }
-               if (!webInterface.getCore().isLocalSone(reply.getSone())) {
+               if (!reply.getSone().isLocal()) {
                        return createErrorJsonObject("not-authorized");
                }
                webInterface.getCore().deleteReply(reply);
index 92e1e48..0e72ea5 100644 (file)
@@ -54,7 +54,7 @@ public class EditAlbumAjaxPage extends JsonPage {
                if (album == null) {
                        return createErrorJsonObject("invalid-album-id");
                }
-               if (!webInterface.getCore().isLocalSone(album.getSone())) {
+               if (!album.getSone().isLocal()) {
                        return createErrorJsonObject("not-authorized");
                }
                if ("true".equals(request.getHttpRequest().getParam("moveLeft"))) {
index 9e04a30..b549718 100644 (file)
@@ -63,7 +63,7 @@ public class EditImageAjaxPage extends JsonPage {
                if (image == null) {
                        return createErrorJsonObject("invalid-image-id");
                }
-               if (!webInterface.getCore().isLocalSone(image.getSone())) {
+               if (!image.getSone().isLocal()) {
                        return createErrorJsonObject("not-authorized");
                }
                if ("true".equals(request.getHttpRequest().getParam("moveLeft"))) {
index 7de50fb..9b1d11d 100644 (file)
@@ -161,7 +161,7 @@ public class SoneTextParserTest extends TestCase {
                 */
                @Override
                public Sone getSone(final String soneId, boolean create) {
-                       return new Sone(soneId) {
+                       return new Sone(soneId, false) {
 
                                /**
                                 * {@inheritDoc}