From 399bec7d1d8310a5d94770226ff8c3dcf5bffa75 Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Fri, 8 Apr 2011 14:23:43 +0200 Subject: [PATCH] Move FCP interface to fcp subpackage. --- .../pterodactylus/sone/freenet/FcpInterface.java | 41 ------------ .../sone/freenet/fcp/FcpInterface.java | 76 ++++++++++++++++++++++ 2 files changed, 76 insertions(+), 41 deletions(-) delete mode 100644 src/main/java/net/pterodactylus/sone/freenet/FcpInterface.java create mode 100644 src/main/java/net/pterodactylus/sone/freenet/fcp/FcpInterface.java diff --git a/src/main/java/net/pterodactylus/sone/freenet/FcpInterface.java b/src/main/java/net/pterodactylus/sone/freenet/FcpInterface.java deleted file mode 100644 index 47c9276..0000000 --- a/src/main/java/net/pterodactylus/sone/freenet/FcpInterface.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * FreenetSone - FcpInterface.java - Copyright © 2011 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 - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.pterodactylus.sone.freenet; - -import freenet.pluginmanager.FredPluginFCP; -import freenet.pluginmanager.PluginReplySender; -import freenet.support.SimpleFieldSet; -import freenet.support.api.Bucket; - -/** - * Implementation of an FCP interface for other clients or plugins to - * communicate with Sone. - * - * @author David ‘Bombe’ Roden - */ -public class FcpInterface implements FredPluginFCP { - - /** - * {@inheritDoc} - */ - @Override - public void handle(PluginReplySender arg0, SimpleFieldSet arg1, Bucket arg2, int arg3) { - // TODO - } - -} diff --git a/src/main/java/net/pterodactylus/sone/freenet/fcp/FcpInterface.java b/src/main/java/net/pterodactylus/sone/freenet/fcp/FcpInterface.java new file mode 100644 index 0000000..c6af12d --- /dev/null +++ b/src/main/java/net/pterodactylus/sone/freenet/fcp/FcpInterface.java @@ -0,0 +1,76 @@ +/* + * Sone - FcpInterface.java - Copyright © 2011 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 the Free Software + * Foundation, either version 3 of the License, or (at your option) any later + * version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +package net.pterodactylus.sone.freenet.fcp; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import net.pterodactylus.sone.core.Core; +import net.pterodactylus.sone.freenet.fcp.Command.AccessType; +import net.pterodactylus.sone.freenet.fcp.Command.Reply; +import freenet.pluginmanager.PluginNotFoundException; +import freenet.pluginmanager.PluginReplySender; +import freenet.support.SimpleFieldSet; +import freenet.support.api.Bucket; + +/** + * Implementation of an FCP interface for other clients or plugins to + * communicate with Sone. + * + * @author David ‘Bombe’ Roden + */ +public class FcpInterface { + + private final Core core; + private final Map commands = Collections.synchronizedMap(new HashMap()); + + public FcpInterface(Core core) { + this.core = core; + commands.put("Version", new VersionCommand()); + commands.put("GetPostFeed", new GetPostFeedCommand(core)); + } + + public void handle(PluginReplySender pluginReplySender, SimpleFieldSet parameters, Bucket data, int accessType) { + Command command = commands.get(parameters.get("Message")); + if (command == null) { + /* TODO - return error? */ + return; + } + String identifier = parameters.get("Identifier"); + if ((identifier == null) || (identifier.length() == 0)) { + /* TODO - return error? */ + return; + } + Reply reply = command.execute(parameters, data, AccessType.values()[accessType]); + try { + SimpleFieldSet replyParameters = reply.getReplyParameters(); + replyParameters.putOverwrite("Identifier", identifier); + if (reply.hasData()) { + pluginReplySender.send(replyParameters, reply.getData()); + } else if (reply.hasBucket()) { + pluginReplySender.send(replyParameters, reply.getBucket()); + } else { + pluginReplySender.send(replyParameters); + } + } catch (PluginNotFoundException pnfe1) { + /* TODO - log */ + } + } + +} -- 2.7.4