/** The Sone core. */
private final Core core;
+ /** Whether this command needs write access. */
+ private final boolean writeAccess;
+
/**
* Creates a new abstract Sone FCP command.
*
* The Sone core
*/
protected AbstractSoneCommand(Core core) {
+ this(core, false);
+ }
+
+ /**
+ * Creates a new abstract Sone FCP command.
+ *
+ * @param core
+ * The Sone core
+ * @param writeAccess
+ * {@code true} if this command requires write access,
+ * {@code false} otherwise
+ */
+ protected AbstractSoneCommand(Core core, boolean writeAccess) {
this.core = core;
+ this.writeAccess = writeAccess;
}
//
return core;
}
+ /**
+ * Returns whether this command requires write access.
+ *
+ * @return {@code true} if this command require write access, {@code false}
+ * otherwise
+ */
+ public boolean requiresWriteAccess() {
+ return writeAccess;
+ }
+
//
// PROTECTED METHODS
//
/**
+ * Encodes text in a way that makes it possible for the text to be stored in
+ * a {@link SimpleFieldSet}. Backslashes, CR, and LF are prepended with a
+ * backslash.
+ *
+ * @param text
+ * The text to encode
+ * @return The encoded text
+ */
+ protected String encodeString(String text) {
+ return text.replaceAll("\\\\", "\\\\").replaceAll("\n", "\\\\n").replaceAll("\r", "\\\\r");
+ }
+
+ /**
* Returns a Sone whose ID is a parameter in the given simple field set.
*
* @param simpleFieldSet
* or if the Sone ID is invalid
*/
protected Sone getSone(SimpleFieldSet simpleFieldSet, String parameterName, boolean localOnly) throws FcpException {
- try {
- String soneId = simpleFieldSet.getString(parameterName);
- Sone sone = localOnly ? core.getLocalSone(soneId, false) : core.getSone(soneId, false);
- if (sone == null) {
- throw new FcpException("Could not load Sone from “" + soneId + "”.");
- }
- return sone;
- } catch (FSParseException fspe1) {
- throw new FcpException("Could not load Sone ID from “" + parameterName + "”.", fspe1);
+ return getSone(simpleFieldSet, parameterName, localOnly, true);
+ }
+
+ /**
+ * Returns a Sone whose ID is a parameter in the given simple field set.
+ *
+ * @param simpleFieldSet
+ * The simple field set containing the ID of the Sone
+ * @param parameterName
+ * The name under which the Sone ID is stored in the simple field
+ * set
+ * @param localOnly
+ * {@code true} to only return local Sones, {@code false} to
+ * return any Sones
+ * @param mandatory
+ * {@code true} if a valid Sone ID is required, {@code false}
+ * otherwise
+ * @return The Sone, or {@code null} if {@code mandatory} is {@code false}
+ * and the Sone ID is invalid
+ * @throws FcpException
+ * if there is no Sone ID stored under the given parameter name,
+ * or if {@code mandatory} is {@code true} and the Sone ID is
+ * invalid
+ */
+ protected Sone getSone(SimpleFieldSet simpleFieldSet, String parameterName, boolean localOnly, boolean mandatory) throws FcpException {
+ String soneId = simpleFieldSet.get(parameterName);
+ if (mandatory && (soneId == null)) {
+ throw new FcpException("Could not load Sone ID from “" + parameterName + "”.");
}
+ Sone sone = localOnly ? core.getLocalSone(soneId, false) : core.getSone(soneId, false);
+ if (mandatory && (sone == null)) {
+ throw new FcpException("Could not load Sone from “" + soneId + "”.");
+ }
+ return sone;
}
/**
postBuilder.put(prefix + "Recipient", post.getRecipient().getId());
}
postBuilder.put(prefix + "Time", post.getTime());
- postBuilder.put(prefix + "Text", post.getText());
+ postBuilder.put(prefix + "Text", encodeString(post.getText()));
postBuilder.put(encodeLikes(core.getLikes(post), prefix + "Likes."));
if (includeReplies) {
replyBuilder.put(replyPrefix + "ID", reply.getId());
replyBuilder.put(replyPrefix + "Sone", reply.getSone().getId());
replyBuilder.put(replyPrefix + "Time", reply.getTime());
- replyBuilder.put(replyPrefix + "Text", reply.getText());
+ replyBuilder.put(replyPrefix + "Text", encodeString(reply.getText()));
}
return replyBuilder.get();
return likesBuilder.get();
}
+ //
+ // OBJECT METHODS
+ //
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String toString() {
+ return getClass().getName() + "[writeAccess=" + writeAccess + "]";
+ }
+
}