From 96e4cdd1c5a2dc719afbf1f1cc14a3c62e93f432 Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Fri, 8 Apr 2011 17:13:43 +0200 Subject: [PATCH] Add prefixes to all encoding methods, add method to encode a single Post. --- .../sone/fcp/AbstractSoneCommand.java | 59 +++++++++++++++++----- .../sone/fcp/GetLocalSonesCommand.java | 2 +- .../pterodactylus/sone/fcp/GetPostFeedCommand.java | 4 +- .../pterodactylus/sone/fcp/GetPostsCommand.java | 4 +- 4 files changed, 51 insertions(+), 18 deletions(-) diff --git a/src/main/java/net/pterodactylus/sone/fcp/AbstractSoneCommand.java b/src/main/java/net/pterodactylus/sone/fcp/AbstractSoneCommand.java index ba3bc88..4f53321 100644 --- a/src/main/java/net/pterodactylus/sone/fcp/AbstractSoneCommand.java +++ b/src/main/java/net/pterodactylus/sone/fcp/AbstractSoneCommand.java @@ -18,6 +18,7 @@ package net.pterodactylus.sone.fcp; import java.util.Collection; +import java.util.List; import net.pterodactylus.sone.core.Core; import net.pterodactylus.sone.data.Post; @@ -127,15 +128,18 @@ public abstract class AbstractSoneCommand extends AbstractCommand { * * @param sones * The Sones to encode + * @param prefix + * The prefix for the field names (may be empty but not + * {@code null}) * @return The simple field set containing the given Sones */ - protected SimpleFieldSet encodeSones(Collection sones) { + protected SimpleFieldSet encodeSones(Collection sones, String prefix) { SimpleFieldSetBuilder soneBuilder = new SimpleFieldSetBuilder(); int soneIndex = 0; - soneBuilder.put("Sones.Count", sones.size()); + soneBuilder.put(prefix + "Count", sones.size()); for (Sone sone : sones) { - String sonePrefix = "Sones." + soneIndex++; + String sonePrefix = prefix + soneIndex++; soneBuilder.put(sonePrefix + ".ID", sone.getId()); soneBuilder.put(sonePrefix + ".Name", sone.getName()); soneBuilder.put(sonePrefix + ".NiceName", SoneAccessor.getNiceName(sone)); @@ -146,29 +150,58 @@ public abstract class AbstractSoneCommand extends AbstractCommand { } /** + * 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) { + SimpleFieldSetBuilder postBuilder = new SimpleFieldSetBuilder(); + + postBuilder.put(prefix + "ID", post.getId()); + postBuilder.put(prefix + "Sone", post.getSone().getId()); + if (post.getRecipient() != null) { + postBuilder.put(prefix + "Recipient", post.getRecipient().getId()); + } + postBuilder.put(prefix + "Time", post.getTime()); + postBuilder.put(prefix + "Text", post.getText()); + + if (includeReplies) { + List replies = core.getReplies(post); + postBuilder.put(encodeReplies(replies, 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 */ - public SimpleFieldSet encodePosts(Collection posts, boolean includeReplies) { + public SimpleFieldSet encodePosts(Collection posts, String prefix, boolean includeReplies) { SimpleFieldSetBuilder postBuilder = new SimpleFieldSetBuilder(); int postIndex = 0; - postBuilder.put("Posts.Count", posts.size()); + postBuilder.put(prefix + "Count", posts.size()); for (Post post : posts) { - String postPrefix = "Posts." + postIndex++; - postBuilder.put(postPrefix + ".ID", post.getId()); - postBuilder.put(postPrefix + ".Sone", post.getSone().getId()); - if (post.getRecipient() != null) { - postBuilder.put(postPrefix + ".Recipient", post.getRecipient().getId()); - } - postBuilder.put(postPrefix + ".Time", post.getTime()); - postBuilder.put(postPrefix + ".Text", post.getText()); + String postPrefix = prefix + postIndex++; + postBuilder.put(encodePost(post, postPrefix + ".", includeReplies)); if (includeReplies) { postBuilder.put(encodeReplies(Filters.filteredList(core.getReplies(post), Reply.FUTURE_REPLIES_FILTER), postPrefix + ".")); } diff --git a/src/main/java/net/pterodactylus/sone/fcp/GetLocalSonesCommand.java b/src/main/java/net/pterodactylus/sone/fcp/GetLocalSonesCommand.java index 1054f76..718dd89 100644 --- a/src/main/java/net/pterodactylus/sone/fcp/GetLocalSonesCommand.java +++ b/src/main/java/net/pterodactylus/sone/fcp/GetLocalSonesCommand.java @@ -45,7 +45,7 @@ public class GetLocalSonesCommand extends AbstractSoneCommand { */ @Override public Response execute(SimpleFieldSet parameters, Bucket data, AccessType accessType) throws FcpException { - return new Response(encodeSones(getCore().getLocalSones())); + return new Response(encodeSones(getCore().getLocalSones(), "LocalSones.")); } } diff --git a/src/main/java/net/pterodactylus/sone/fcp/GetPostFeedCommand.java b/src/main/java/net/pterodactylus/sone/fcp/GetPostFeedCommand.java index f1ff9a8..895c1c6 100644 --- a/src/main/java/net/pterodactylus/sone/fcp/GetPostFeedCommand.java +++ b/src/main/java/net/pterodactylus/sone/fcp/GetPostFeedCommand.java @@ -73,10 +73,10 @@ public class GetPostFeedCommand extends AbstractSoneCommand { Collections.sort(sortedPosts, Post.TIME_COMPARATOR); if (sortedPosts.size() < startPost) { - return new Response(encodePosts(Collections. emptyList(), false)); + return new Response(encodePosts(Collections. emptyList(), "Posts.", false)); } - return new Response(encodePosts(sortedPosts.subList(startPost, (maxPosts == -1) ? sortedPosts.size() : Math.min(startPost + maxPosts, sortedPosts.size())), true)); + return new Response(encodePosts(sortedPosts.subList(startPost, (maxPosts == -1) ? sortedPosts.size() : Math.min(startPost + maxPosts, sortedPosts.size())), "Posts.", true)); } } diff --git a/src/main/java/net/pterodactylus/sone/fcp/GetPostsCommand.java b/src/main/java/net/pterodactylus/sone/fcp/GetPostsCommand.java index 16006fc..0a02a89 100644 --- a/src/main/java/net/pterodactylus/sone/fcp/GetPostsCommand.java +++ b/src/main/java/net/pterodactylus/sone/fcp/GetPostsCommand.java @@ -55,9 +55,9 @@ public class GetPostsCommand extends AbstractSoneCommand { int maxPosts = getInt(parameters, "MaxPosts", -1); List posts = sone.getPosts(); if (posts.size() < startPost) { - return new Response(encodePosts(Collections. emptyList(), false)); + return new Response(encodePosts(Collections. emptyList(), "Posts.", false)); } - return new Response(encodePosts(sone.getPosts().subList(startPost, (maxPosts == -1) ? posts.size() : Math.min(startPost + maxPosts, posts.size())), true)); + return new Response(encodePosts(sone.getPosts().subList(startPost, (maxPosts == -1) ? posts.size() : Math.min(startPost + maxPosts, posts.size())), "Posts.", true)); } } -- 2.7.4