2 * Sone - Command.java - Copyright © 2011–2016 David Roden
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 package net.pterodactylus.sone.freenet.fcp;
20 import net.pterodactylus.sone.freenet.SimpleFieldSetBuilder;
21 import freenet.support.SimpleFieldSet;
24 * Implementation of an FCP interface for other clients or plugins to
25 * communicate with Sone.
27 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
29 public interface Command {
32 * Executes the command, returning a reply that will be sent back to the
36 * The parameters of the comand
37 * @return A reply to send back to the plugin
38 * @throws FcpException
39 * if an error processing the parameters occurs
41 public Response execute(SimpleFieldSet parameters) throws FcpException;
44 * The access type of the request.
46 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
48 public static enum AccessType {
50 /** Access from another plugin. */
53 /** Access via restricted FCP. */
56 /** Access via FCP with full access. */
62 * Interface for command replies.
64 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
66 public static class Response {
68 /** The message name of the reponse. */
69 private final String messageName;
71 /** The reply parameters. */
72 private final SimpleFieldSet replyParameters;
75 * Creates a new reply with the given parameters.
79 * @param replyParameters
80 * The reply parameters
82 public Response(String messageName, SimpleFieldSet replyParameters) {
83 this.messageName = messageName;
84 this.replyParameters = replyParameters;
88 * Returns the reply parameters.
90 * @return The reply parameters
92 public SimpleFieldSet getReplyParameters() {
93 return new SimpleFieldSetBuilder(replyParameters).put("Message", messageName).get();
99 * Response implementation that can return an error message and an optional
102 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
104 public class ErrorResponse extends Response {
107 * Creates a new error response with the given message.
112 public ErrorResponse(String message) {
113 super("Error", new SimpleFieldSetBuilder().put("ErrorMessage", message).get());
117 * Creates a new error response with the given code and message.
124 public ErrorResponse(int code, String message) {
125 super("Error", new SimpleFieldSetBuilder().put("ErrorMessage", message).put("ErrorCode", code).get());