From 440726250cc2a523463f575b682a6ddb6242408c Mon Sep 17 00:00:00 2001 From: BlueWall Date: Sat, 6 Oct 2012 11:48:21 -0400 Subject: Added parts to manage repositories and plugin management This is working - more testing to follow, then soem documentation --- OpenSim/Server/Base/CommandManager.cs | 353 ++++++++++++++++++++++++++++++++++ 1 file changed, 353 insertions(+) create mode 100644 OpenSim/Server/Base/CommandManager.cs (limited to 'OpenSim/Server/Base/CommandManager.cs') diff --git a/OpenSim/Server/Base/CommandManager.cs b/OpenSim/Server/Base/CommandManager.cs new file mode 100644 index 0000000..45652b3 --- /dev/null +++ b/OpenSim/Server/Base/CommandManager.cs @@ -0,0 +1,353 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +using System; +using System.Text; +using System.Linq; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using Mono.Addins; +using Mono.Addins.Setup; +using Mono.Addins.Description; +using OpenSim.Framework; + +namespace OpenSim.Server.Base +{ + public class CommandManager + { + protected AddinRegistry PluginRegistry; + protected PluginManager PluginManager; + + public CommandManager(AddinRegistry registry) + { + PluginRegistry = registry; + PluginManager = new PluginManager(PluginRegistry); + AddManagementCommands(); + } + + private void AddManagementCommands() + { + // add plugin + MainConsole.Instance.Commands.AddCommand("Plugin", true, + "plugin add", "plugin add \"plugin index\"", + "Install plugin from repository.", + HandleConsoleInstallPlugin); + + // remove plugin + MainConsole.Instance.Commands.AddCommand("Plugin", true, + "plugin remove", "plugin remove \"plugin index\"", + "Remove plugin from repository", + HandleConsoleUnInstallPlugin); + + // list installed plugins + MainConsole.Instance.Commands.AddCommand("Plugin", true, + "plugin list installed", + "plugin list installed","List install plugins", + HandleConsoleListInstalledPlugin); + + // list plugins available from registered repositories + MainConsole.Instance.Commands.AddCommand("Plugin", true, + "plugin list available", + "plugin list available","List available plugins", + HandleConsoleListAvailablePlugin); + // List available updates + MainConsole.Instance.Commands.AddCommand("Plugin", true, + "plugin updates", "plugin updates","List availble updates", + HandleConsoleListUpdates); + + // Update plugin + MainConsole.Instance.Commands.AddCommand("Plugin", true, + "plugin update", "plugin update \"plugin index\"","Update the plugin", + HandleConsoleUpdatePlugin); + + // Add repository + MainConsole.Instance.Commands.AddCommand("Repository", true, + "repo add", "repo add \"url\"","Add repository", + HandleConsoleAddRepo); + + // Refresh repo + MainConsole.Instance.Commands.AddCommand("Repository", true, + "repo refresh", "repo refresh \"url\"", "Sync with a registered repository", + HandleConsoleGetRepo); + + // Remove repository from registry + MainConsole.Instance.Commands.AddCommand("Repository", true, + "repo remove", + "repo remove \"[url | index]\"", + "Remove repository from registry", + HandleConsoleRemoveRepo); + + // Enable repo + MainConsole.Instance.Commands.AddCommand("Repository", true, + "repo enable", "repo enable \"[url | index]\"", + "Enable registered repository", + HandleConsoleEnableRepo); + + // Disable repo + MainConsole.Instance.Commands.AddCommand("Repository", true, + "repo disable", "repo disable\"[url | index]\"", + "Disable registered repository", + HandleConsoleDisableRepo); + + // List registered repositories + MainConsole.Instance.Commands.AddCommand("Repository", true, + "repo list", "repo list", + "List registered repositories", + HandleConsoleListRepos); + + // * + MainConsole.Instance.Commands.AddCommand("Plugin", true, + "plugin info", "plugin info \"plugin index\"","Show detailed information for plugin", + HandleConsoleShowAddinInfo); + + // Plugin disable + MainConsole.Instance.Commands.AddCommand("Plugin", true, + "plugin disable", "plugin disable \"plugin index\"", + "Disable a plugin", + HandleConsoleDisablePlugin); + + // Enable plugin + MainConsole.Instance.Commands.AddCommand("Plugin", true, + "plugin enable", "plugin enable \"plugin index\"", + "Enable the selected plugin plugin", + HandleConsoleEnablePlugin); + } + + #region console handlers + // Handle our console commands + // + // Install plugin from registered repository + /// + /// Handles the console install plugin command. Attempts to install the selected plugin + /// and + /// + /// + /// Module. + /// + /// + /// Cmd. + /// + private void HandleConsoleInstallPlugin(string module, string[] cmd) + { + Dictionary result = new Dictionary(); + + if (cmd.Length == 3) + { + int ndx = Convert.ToInt16(cmd[2]); + if (PluginManager.InstallPlugin(ndx, out result) == true) + { + ArrayList s = new ArrayList(); + s.AddRange(result.Keys); + s.Sort(); + + var list = result.Keys.ToList(); + list.Sort(); + foreach (var k in list) + { + Dictionary plugin = (Dictionary)result[k]; + bool enabled = (bool)plugin["enabled"]; + MainConsole.Instance.OutputFormat("{0}) {1} {2} rev. {3}", + k, + enabled == true ? "[ ]" : "[X]", + plugin["name"], plugin["version"]); + } + } + } + return; + } + + // Remove installed plugin + private void HandleConsoleUnInstallPlugin(string module, string[] cmd) + { + if (cmd.Length == 3) + { + int ndx = Convert.ToInt16(cmd[2]); + PluginManager.UnInstall(ndx); + } + return; + } + + // List installed plugins + private void HandleConsoleListInstalledPlugin(string module, string[] cmd) + { + Dictionary result = new Dictionary(); + PluginManager.ListInstalledAddins(out result); + + ArrayList s = new ArrayList(); + s.AddRange(result.Keys); + s.Sort(); + + var list = result.Keys.ToList(); + list.Sort(); + foreach (var k in list) + { + Dictionary plugin = (Dictionary)result[k]; + bool enabled = (bool)plugin["enabled"]; + MainConsole.Instance.OutputFormat("{0}) {1} {2} rev. {3}", + k, + enabled == true ? "[ ]" : "[X]", + plugin["name"], plugin["version"]); + } + return; + } + + // List available plugins on registered repositories + private void HandleConsoleListAvailablePlugin(string module, string[] cmd) + { + Dictionary result = new Dictionary(); + PluginManager.ListAvailable(out result); + + var list = result.Keys.ToList(); + list.Sort(); + foreach (var k in list) + { + // name, version, repository + Dictionary plugin = (Dictionary)result[k]; + MainConsole.Instance.OutputFormat("{0}) {1} rev. {2} {3}", + k, + plugin["name"], + plugin["version"], + plugin["repository"]); + } + return; + } + + // List available updates **not ready + private void HandleConsoleListUpdates(string module, string[] cmd) + { + PluginManager.ListUpdates(); + return; + } + + // Update plugin **not ready + private void HandleConsoleUpdatePlugin(string module, string[] cmd) + { + MainConsole.Instance.Output(PluginManager.Update()); + return; + } + + // Register repository + private void HandleConsoleAddRepo(string module, string[] cmd) + { + if ( cmd.Length == 3) + { + PluginManager.AddRepository(cmd[2]); + } + return; + } + + // Get repository status **not working + private void HandleConsoleGetRepo(string module, string[] cmd) + { + PluginManager.GetRepository(); + return; + } + + // Remove registered repository + private void HandleConsoleRemoveRepo(string module, string[] cmd) + { + if (cmd.Length == 3) + PluginManager.RemoveRepository(cmd); + return; + } + + // Enable repository + private void HandleConsoleEnableRepo(string module, string[] cmd) + { + PluginManager.EnableRepository(cmd); + return; + } + + // Disable repository + private void HandleConsoleDisableRepo(string module, string[] cmd) + { + PluginManager.DisableRepository(cmd); + return; + } + + // List repositories + private void HandleConsoleListRepos(string module, string[] cmd) + { + Dictionary result = new Dictionary(); + PluginManager.ListRepositories(out result); + + var list = result.Keys.ToList(); + list.Sort(); + foreach (var k in list) + { + Dictionary repo = (Dictionary)result[k]; + bool enabled = (bool)repo["enabled"]; + MainConsole.Instance.OutputFormat("{0}) {1} {2}", + k, + enabled == true ? "[ ]" : "[X]", + repo["name"], repo["url"]); + } + + return; + } + + // Show description information + private void HandleConsoleShowAddinInfo(string module, string[] cmd) + { + if (cmd.Length >= 3) + { + + Dictionary result = new Dictionary(); + + int ndx = Convert.ToInt16(cmd[2]); + PluginManager.AddinInfo(ndx, out result); + + MainConsole.Instance.OutputFormat("Name: {0}\nURL: {1}\nFile: {2}\nAuthor: {3}\nCategory: {4}\nDesc: {5}", + result["name"], + result["url"], + result["file_name"], + result["author"], + result["category"], + result["description"]); + + return; + } + } + + // Disable plugin + private void HandleConsoleDisablePlugin(string module, string[] cmd) + { + PluginManager.DisablePlugin(cmd); + return; + } + + // Enable plugin + private void HandleConsoleEnablePlugin(string module, string[] cmd) + { + PluginManager.EnablePlugin(cmd); + return; + } + #endregion + } +} \ No newline at end of file -- cgit v1.1