Return replies to old post ID in compatibility mode
[Sone.git] / src / main / java / net / pterodactylus / sone / core / Core.java
index b4a94e4..e56eede 100644 (file)
@@ -73,6 +73,7 @@ import net.pterodactylus.sone.data.Sone.ShowCustomAvatars;
 import net.pterodactylus.sone.data.Sone.SoneStatus;
 import net.pterodactylus.sone.data.TemporaryImage;
 import net.pterodactylus.sone.database.AlbumBuilder;
+import net.pterodactylus.sone.database.AlbumProvider;
 import net.pterodactylus.sone.database.Database;
 import net.pterodactylus.sone.database.DatabaseException;
 import net.pterodactylus.sone.database.ImageBuilder;
@@ -102,8 +103,11 @@ import com.google.common.base.Optional;
 import com.google.common.base.Predicate;
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.HashMultimap;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableList.Builder;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.Multimaps;
+import com.google.common.collect.Ordering;
 import com.google.common.eventbus.EventBus;
 import com.google.common.eventbus.Subscribe;
 import com.google.inject.Inject;
@@ -115,7 +119,7 @@ import com.google.inject.Singleton;
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
 @Singleton
-public class Core extends AbstractService implements SoneProvider, PostProvider, PostReplyProvider {
+public class Core extends AbstractService implements SoneProvider, PostProvider, PostReplyProvider, AlbumProvider {
 
        /** The logger. */
        private static final Logger logger = getLogger(Core.class.getName());
@@ -488,7 +492,14 @@ public class Core extends AbstractService implements SoneProvider, PostProvider,
         */
        @Override
        public List<PostReply> getReplies(final String postId) {
-               return database.getReplies(postId);
+               Builder<PostReply> postReplies = ImmutableList.<PostReply>builder().addAll(database.getReplies(postId));
+               if (isCompatibilityMode(CompatibilityMode.oldElementIds)) {
+                       Optional<Post> post = getPost(postId);
+                       if (post.isPresent()) {
+                               postReplies.addAll(database.getReplies(post.get().getInternalId()));
+                       }
+               }
+               return Ordering.from(Reply.TIME_COMPARATOR).sortedCopy(postReplies.build());
        }
 
        /**
@@ -559,8 +570,8 @@ public class Core extends AbstractService implements SoneProvider, PostProvider,
         * @return The album with the given ID, or {@code null} if no album with the
         *         given ID exists
         */
-       public Album getAlbum(String albumId) {
-               return database.getAlbum(albumId).orNull();
+       public Optional<Album> getAlbum(String albumId) {
+               return database.getAlbum(albumId);
        }
 
        public ImageBuilder imageBuilder() {