Merge branch 'release-0.9.7'
[Sone.git] / src / main / java / net / pterodactylus / sone / freenet / fcp / Command.java
index faa10db..17f8370 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Sone - Command.java - Copyright © 2011 David Roden
+ * Sone - Command.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
@@ -17,8 +17,8 @@
 
 package net.pterodactylus.sone.freenet.fcp;
 
+import net.pterodactylus.sone.freenet.SimpleFieldSetBuilder;
 import freenet.support.SimpleFieldSet;
-import freenet.support.api.Bucket;
 
 /**
  * Implementation of an FCP interface for other clients or plugins to
@@ -34,15 +34,11 @@ public interface Command {
         *
         * @param parameters
         *            The parameters of the comand
-        * @param data
-        *            The data of the command (may be {@code null})
-        * @param accessType
-        *            The access type
         * @return A reply to send back to the plugin
         * @throws FcpException
         *             if an error processing the parameters occurs
         */
-       public Response execute(SimpleFieldSet parameters, Bucket data, AccessType accessType) throws FcpException;
+       public Response execute(SimpleFieldSet parameters) throws FcpException;
 
        /**
         * The access type of the request.
@@ -69,63 +65,23 @@ public interface Command {
         */
        public static class Response {
 
+               /** The message name of the reponse. */
+               private final String messageName;
+
                /** The reply parameters. */
                private final SimpleFieldSet replyParameters;
 
-               /** The reply data, may be {@code null}. */
-               private final byte[] data;
-
-               /** The data bucket, may be {@code null}. */
-               private final Bucket bucket;
-
-               /**
-                * Creates a new reply with the given parameters.
-                *
-                * @param replyParameters
-                *            The reply parameters
-                */
-               public Response(SimpleFieldSet replyParameters) {
-                       this(replyParameters, null, null);
-               }
-
-               /**
-                * Creates a new reply with the given parameters.
-                *
-                * @param replyParameters
-                *            The reply parameters
-                * @param data
-                *            The data of the reply (may be {@code null})
-                */
-               public Response(SimpleFieldSet replyParameters, byte[] data) {
-                       this(replyParameters, data, null);
-               }
-
-               /**
-                * Creates a new reply with the given parameters.
-                *
-                * @param replyParameters
-                *            The reply parameters
-                * @param bucket
-                *            The bucket of the reply (may be {@code null})
-                */
-               public Response(SimpleFieldSet replyParameters, Bucket bucket) {
-                       this(replyParameters, null, bucket);
-               }
-
                /**
                 * Creates a new reply with the given parameters.
                 *
+                * @param messageName
+                *            The message name
                 * @param replyParameters
                 *            The reply parameters
-                * @param data
-                *            The data of the reply (may be {@code null})
-                * @param bucket
-                *            The bucket of the reply (may be {@code null})
                 */
-               private Response(SimpleFieldSet replyParameters, byte[] data, Bucket bucket) {
+               public Response(String messageName, SimpleFieldSet replyParameters) {
+                       this.messageName = messageName;
                        this.replyParameters = replyParameters;
-                       this.data = data;
-                       this.bucket = bucket;
                }
 
                /**
@@ -134,46 +90,39 @@ public interface Command {
                 * @return The reply parameters
                 */
                public SimpleFieldSet getReplyParameters() {
-                       return replyParameters;
+                       return new SimpleFieldSetBuilder(replyParameters).put("Message", messageName).get();
                }
 
-               /**
-                * Returns whether the reply has reply data.
-                *
-                * @see #getData()
-                * @return {@code true} if this reply has data, {@code false} otherwise
-                */
-               public boolean hasData() {
-                       return data != null;
-               }
+       }
 
-               /**
-                * Returns the data of the reply.
-                *
-                * @return The data of the reply
-                */
-               public byte[] getData() {
-                       return data;
-               }
+       /**
+        * Response implementation that can return an error message and an optional
+        * error code.
+        *
+        * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+        */
+       public class ErrorResponse extends Response {
 
                /**
-                * Returns whether the reply has a data bucket.
+                * Creates a new error response with the given message.
                 *
-                * @see #getBucket()
-                * @return {@code true} if the reply has a data bucket, {@code false}
-                *         otherwise
+                * @param message
+                *            The error message
                 */
-               public boolean hasBucket() {
-                       return bucket != null;
+               public ErrorResponse(String message) {
+                       super("Error", new SimpleFieldSetBuilder().put("ErrorMessage", message).get());
                }
 
                /**
-                * Returns the data bucket of the reply.
+                * Creates a new error response with the given code and message.
                 *
-                * @return The data bucket of the reply
+                * @param code
+                *            The error code
+                * @param message
+                *            The error message
                 */
-               public Bucket getBucket() {
-                       return bucket;
+               public ErrorResponse(int code, String message) {
+                       super("Error", new SimpleFieldSetBuilder().put("ErrorMessage", message).put("ErrorCode", code).get());
                }
 
        }