Move retrieval of post likes from Core to Post.
[Sone.git] / src / main / java / net / pterodactylus / sone / fcp / AbstractSoneCommand.java
index 6890589..baa3129 100644 (file)
@@ -18,6 +18,7 @@
 package net.pterodactylus.sone.fcp;
 
 import static com.google.common.collect.FluentIterable.from;
+import static net.pterodactylus.sone.data.Reply.FUTURE_REPLY_FILTER;
 
 import java.util.Collection;
 import java.util.List;
@@ -27,7 +28,6 @@ import net.pterodactylus.sone.data.Post;
 import net.pterodactylus.sone.data.PostReply;
 import net.pterodactylus.sone.data.Profile;
 import net.pterodactylus.sone.data.Profile.Field;
-import net.pterodactylus.sone.data.Reply;
 import net.pterodactylus.sone.data.Sone;
 import net.pterodactylus.sone.freenet.SimpleFieldSetBuilder;
 import net.pterodactylus.sone.freenet.fcp.AbstractCommand;
@@ -119,8 +119,8 @@ public abstract class AbstractSoneCommand extends AbstractCommand {
        }
 
        protected Optional<Sone> getOptionalSone(SimpleFieldSet simpleFieldSet, String parameterName) throws FcpException {
-               String soneId = getMandatoryParameter(simpleFieldSet, parameterName);
-               return core.getSone(soneId);
+               String soneId = getString(simpleFieldSet, parameterName, null);
+               return (soneId == null) ? Optional.<Sone>absent() : core.getSone(soneId);
        }
 
        protected Sone getMandatoryLocalSone(SimpleFieldSet simpleFieldSet, String parameterName) throws FcpException {
@@ -266,20 +266,20 @@ public abstract class AbstractSoneCommand extends AbstractCommand {
                return soneBuilder.get();
        }
 
-       /**
-        * Creates a simple field set from the given post.
-        *
-        * @param post
-        *            The post to encode
-        * @param prefix
-        *            The prefix for the field names (may be empty but not
-        *            {@code null})
-        * @param includeReplies
-        *            {@code true} to include replies, {@code false} to not include
-        *            replies
-        * @return The simple field set containing the post
-        */
-       protected SimpleFieldSet encodePost(Post post, String prefix, boolean includeReplies) {
+       protected SimpleFieldSet encodePost(Post post, String prefix) {
+               return createPostBuilderFromPost(post, prefix).get();
+       }
+
+       protected SimpleFieldSet encodePostWithReplies(Post post, String prefix) {
+               SimpleFieldSetBuilder postBuilder = createPostBuilderFromPost(post, prefix);
+
+               List<PostReply> replies = from(post.getReplies()).filter(FUTURE_REPLY_FILTER).toList();
+               postBuilder.put(encodeReplies(replies, prefix));
+
+               return postBuilder.get();
+       }
+
+       private SimpleFieldSetBuilder createPostBuilderFromPost(Post post, String prefix) {
                SimpleFieldSetBuilder postBuilder = new SimpleFieldSetBuilder();
 
                postBuilder.put(prefix + "ID", post.getId());
@@ -289,40 +289,37 @@ public abstract class AbstractSoneCommand extends AbstractCommand {
                }
                postBuilder.put(prefix + "Time", post.getTime());
                postBuilder.put(prefix + "Text", encodeString(post.getText()));
-               postBuilder.put(encodeLikes(core.getLikes(post), prefix + "Likes."));
+               postBuilder.put(encodeLikes(post.getLikes(), prefix + "Likes."));
 
-               if (includeReplies) {
-                       List<PostReply> replies = post.getReplies();
-                       postBuilder.put(encodeReplies(replies, prefix));
-               }
+               return postBuilder;
+       }
+
+       protected SimpleFieldSet encodePosts(Collection<? extends Post> posts, String prefix) {
+               SimpleFieldSetBuilder postBuilder = createPostBuilderFromPosts(posts, prefix);
 
                return postBuilder.get();
        }
 
-       /**
-        * Creates a simple field set from the given collection of posts.
-        *
-        * @param posts
-        *            The posts to encode
-        * @param prefix
-        *            The prefix for the field names (may be empty but not
-        *            {@code null})
-        * @param includeReplies
-        *            {@code true} to include the replies, {@code false} to not
-        *            include the replies
-        * @return The simple field set containing the posts
-        */
-       protected SimpleFieldSet encodePosts(Collection<? extends Post> posts, String prefix, boolean includeReplies) {
+       private SimpleFieldSetBuilder createPostBuilderFromPosts(Collection<? extends Post> posts, String prefix) {
                SimpleFieldSetBuilder postBuilder = new SimpleFieldSetBuilder();
 
                int postIndex = 0;
                postBuilder.put(prefix + "Count", posts.size());
                for (Post post : posts) {
                        String postPrefix = prefix + postIndex++;
-                       postBuilder.put(encodePost(post, postPrefix + ".", includeReplies));
-                       if (includeReplies) {
-                               postBuilder.put(encodeReplies(from(post.getReplies()).filter(Reply.FUTURE_REPLY_FILTER).toList(), postPrefix + "."));
-                       }
+                       postBuilder.put(encodePost(post, postPrefix + "."));
+               }
+
+               return postBuilder;
+       }
+
+       protected SimpleFieldSet encodePostsWithReplies(Collection<? extends Post> posts, String prefix) {
+               SimpleFieldSetBuilder postBuilder = createPostBuilderFromPosts(posts, prefix);
+
+               int postIndex = 0;
+               for (Post post : posts) {
+                       String postPrefix = prefix + postIndex++;
+                       postBuilder.put(encodeReplies(from(post.getReplies()).filter(FUTURE_REPLY_FILTER).toList(), postPrefix + "."));
                }
 
                return postBuilder.get();