X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Ffcp%2FAbstractSoneCommand.java;h=23f63a330fd32cf86da62c133c9d2098c1271e9d;hp=d71ffc4481125a6327909a0b4199d4b841023dbe;hb=62573c314957b1851f4fbe693b8746686caa940a;hpb=60fda3f6fd8cd72151338c831f509dd8d9d0f9ff diff --git a/src/main/java/net/pterodactylus/sone/fcp/AbstractSoneCommand.java b/src/main/java/net/pterodactylus/sone/fcp/AbstractSoneCommand.java index d71ffc4..23f63a3 100644 --- a/src/main/java/net/pterodactylus/sone/fcp/AbstractSoneCommand.java +++ b/src/main/java/net/pterodactylus/sone/fcp/AbstractSoneCommand.java @@ -1,5 +1,5 @@ /* - * Sone - AbstractSoneCommand.java - Copyright © 2011–2013 David Roden + * Sone - AbstractSoneCommand.java - Copyright © 2011–2016 David Roden * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,7 +25,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; @@ -33,17 +32,14 @@ import net.pterodactylus.sone.freenet.fcp.Command; import net.pterodactylus.sone.freenet.fcp.FcpException; import net.pterodactylus.sone.template.SoneAccessor; -import com.google.common.base.Optional; -import com.google.common.collect.Collections2; - import freenet.node.FSParseException; import freenet.support.SimpleFieldSet; +import com.google.common.base.Optional; + /** * Abstract base implementation of a {@link Command} with Sone-related helper * methods. - * - * @author David ‘Bombe’ Roden */ public abstract class AbstractSoneCommand extends AbstractCommand { @@ -114,7 +110,7 @@ public abstract class AbstractSoneCommand extends AbstractCommand { * @return The encoded text */ protected static String encodeString(String text) { - return text.replaceAll("\\\\", "\\\\").replaceAll("\n", "\\\\n").replaceAll("\r", "\\\\r"); + return text.replaceAll("\\\\", "\\\\\\\\").replaceAll("\n", "\\\\n").replaceAll("\r", "\\\\r"); } /** @@ -163,11 +159,11 @@ public abstract class AbstractSoneCommand extends AbstractCommand { if (mandatory && (soneId == null)) { throw new FcpException("Could not load Sone ID from “" + parameterName + "”."); } - Optional sone = core.getSone(soneId); - if ((mandatory && !sone.isPresent()) || (mandatory && sone.isPresent() && (localOnly && !sone.get().isLocal()))) { + Sone sone = core.getSone(soneId); + if ((mandatory && (sone == null)) || ((sone != null) && localOnly && !sone.isLocal())) { throw new FcpException("Could not load Sone from “" + soneId + "”."); } - return sone; + return Optional.fromNullable(sone); } /** @@ -186,11 +182,11 @@ public abstract class AbstractSoneCommand extends AbstractCommand { protected Post getPost(SimpleFieldSet simpleFieldSet, String parameterName) throws FcpException { try { String postId = simpleFieldSet.getString(parameterName); - Optional post = core.getPost(postId); - if (!post.isPresent()) { + Post post = core.getPost(postId); + if (post == null) { throw new FcpException("Could not load post from “" + postId + "”."); } - return post.get(); + return post; } catch (FSParseException fspe1) { throw new FcpException("Could not post ID from “" + parameterName + "”.", fspe1); } @@ -212,11 +208,11 @@ public abstract class AbstractSoneCommand extends AbstractCommand { protected PostReply getReply(SimpleFieldSet simpleFieldSet, String parameterName) throws FcpException { try { String replyId = simpleFieldSet.getString(parameterName); - Optional reply = core.getPostReply(replyId); - if (!reply.isPresent()) { + PostReply reply = core.getPostReply(replyId); + if (reply == null) { throw new FcpException("Could not load reply from “" + replyId + "”."); } - return reply.get(); + return reply; } catch (FSParseException fspe1) { throw new FcpException("Could not reply ID from “" + parameterName + "”.", fspe1); } @@ -239,6 +235,7 @@ public abstract class AbstractSoneCommand extends AbstractCommand { protected static SimpleFieldSet encodeSone(Sone sone, String prefix, Optional localSone) { SimpleFieldSetBuilder soneBuilder = new SimpleFieldSetBuilder(); + soneBuilder.put(prefix + "ID", sone.getId()); soneBuilder.put(prefix + "Name", sone.getName()); soneBuilder.put(prefix + "NiceName", SoneAccessor.getNiceName(sone)); soneBuilder.put(prefix + "LastUpdated", sone.getTime()); @@ -274,10 +271,7 @@ public abstract class AbstractSoneCommand extends AbstractCommand { soneBuilder.put(prefix + "Count", sones.size()); for (Sone sone : sones) { String sonePrefix = prefix + soneIndex++ + "."; - soneBuilder.put(sonePrefix + "ID", sone.getId()); - soneBuilder.put(sonePrefix + "Name", sone.getName()); - soneBuilder.put(sonePrefix + "NiceName", SoneAccessor.getNiceName(sone)); - soneBuilder.put(sonePrefix + "Time", sone.getTime()); + soneBuilder.put(encodeSone(sone, sonePrefix, Optional.absent())); } return soneBuilder.get(); @@ -337,9 +331,6 @@ public abstract class AbstractSoneCommand extends AbstractCommand { for (Post post : posts) { String postPrefix = prefix + postIndex++; postBuilder.put(encodePost(post, postPrefix + ".", includeReplies)); - if (includeReplies) { - postBuilder.put(encodeReplies(Collections2.filter(core.getReplies(post.getId()), Reply.FUTURE_REPLY_FILTER), postPrefix + ".")); - } } return postBuilder.get(); @@ -355,7 +346,7 @@ public abstract class AbstractSoneCommand extends AbstractCommand { * {@code null}) * @return The simple field set containing the replies */ - protected static SimpleFieldSet encodeReplies(Collection replies, String prefix) { + protected SimpleFieldSet encodeReplies(Collection replies, String prefix) { SimpleFieldSetBuilder replyBuilder = new SimpleFieldSetBuilder(); int replyIndex = 0; @@ -366,6 +357,7 @@ public abstract class AbstractSoneCommand extends AbstractCommand { replyBuilder.put(replyPrefix + "Sone", reply.getSone().getId()); replyBuilder.put(replyPrefix + "Time", reply.getTime()); replyBuilder.put(replyPrefix + "Text", encodeString(reply.getText())); + replyBuilder.put(encodeLikes(core.getLikes(reply), replyPrefix + "Likes.")); } return replyBuilder.get();