From ed69e84874b710c2cc3b8af94dd00cf725cf6d03 Mon Sep 17 00:00:00 2001 From: mingchen Date: Thu, 19 Jul 2007 20:39:33 +0000 Subject: *Moved XmlConfiguration to its own project *Made it possible to load a configuration interface by DLL *Deleted the 1024 config files until they are updated --- .../General/Configuration/ConfigurationMember.cs | 52 +++++++-- .../Configuration/Interfaces/IGenericConfig.cs | 3 +- .../General/Configuration/XmlConfiguration.cs | 123 --------------------- 3 files changed, 43 insertions(+), 135 deletions(-) delete mode 100644 OpenSim/Framework/General/Configuration/XmlConfiguration.cs (limited to 'OpenSim/Framework/General') diff --git a/OpenSim/Framework/General/Configuration/ConfigurationMember.cs b/OpenSim/Framework/General/Configuration/ConfigurationMember.cs index e93a576..4546683 100644 --- a/OpenSim/Framework/General/Configuration/ConfigurationMember.cs +++ b/OpenSim/Framework/General/Configuration/ConfigurationMember.cs @@ -1,4 +1,5 @@ using System; +using System.Reflection; using System.Collections; using System.Collections.Generic; using System.Text; @@ -7,6 +8,7 @@ using System.Net; using libsecondlife; using OpenSim.Framework.Console; +using OpenSim.Framework.Configuration.Interfaces; namespace OpenSim.Framework.Configuration { @@ -22,12 +24,14 @@ namespace OpenSim.Framework.Configuration private ConfigurationOptionsLoad loadFunction; private ConfigurationOptionResult resultFunction; + private IGenericConfig configurationPlugin = null; public ConfigurationMember(string configuration_filename, string configuration_description, ConfigurationOptionsLoad load_function, ConfigurationOptionResult result_function) { this.configurationFilename = configuration_filename; this.configurationDescription = configuration_description; this.loadFunction = load_function; this.resultFunction = result_function; + this.configurationPlugin = this.LoadConfigDll("OpenSim.Framework.Configuration.XML.dll"); } public void setConfigurationFilename(string filename) @@ -91,18 +95,19 @@ namespace OpenSim.Framework.Configuration } bool useFile = true; - XmlConfiguration xmlConfig = null; - if (configurationFilename.Trim() != "") + if (configurationPlugin == null) { - xmlConfig = new XmlConfiguration(configurationFilename); - + MainLog.Instance.Error("Configuration Plugin NOT LOADED!"); + return; } - if(xmlConfig != null) + if (configurationFilename.Trim() != "") { - xmlConfig.LoadData(); + configurationPlugin.SetFileName(configurationFilename); + configurationPlugin.LoadData(); useFile = true; } + else { MainLog.Instance.Notice("XML Configuration Filename is not valid; will not save to the file."); @@ -124,7 +129,7 @@ namespace OpenSim.Framework.Configuration { if (!ignoreNextFromConfig) { - attribute = xmlConfig.GetAttribute(configOption.configurationKey); + attribute = configurationPlugin.GetAttribute(configOption.configurationKey); } else { @@ -304,7 +309,7 @@ namespace OpenSim.Framework.Configuration { if (useFile) { - xmlConfig.SetAttribute(configOption.configurationKey, console_result); + configurationPlugin.SetAttribute(configOption.configurationKey, console_result); } @@ -333,9 +338,34 @@ namespace OpenSim.Framework.Configuration if(useFile) { - xmlConfig.Commit(); - xmlConfig.Close(); + configurationPlugin.Commit(); + configurationPlugin.Close(); } - } + } + + private IGenericConfig LoadConfigDll(string dllName) + { + Assembly pluginAssembly = Assembly.LoadFrom(dllName); + IGenericConfig plug = null; + + foreach (Type pluginType in pluginAssembly.GetTypes()) + { + if (pluginType.IsPublic) + { + if (!pluginType.IsAbstract) + { + Type typeInterface = pluginType.GetInterface("IGenericConfig", true); + + if (typeInterface != null) + { + plug = (IGenericConfig)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); + } + } + } + } + + pluginAssembly = null; + return plug; + } } } diff --git a/OpenSim/Framework/General/Configuration/Interfaces/IGenericConfig.cs b/OpenSim/Framework/General/Configuration/Interfaces/IGenericConfig.cs index 2c379dd..5a5a20e 100644 --- a/OpenSim/Framework/General/Configuration/Interfaces/IGenericConfig.cs +++ b/OpenSim/Framework/General/Configuration/Interfaces/IGenericConfig.cs @@ -25,10 +25,11 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ -namespace OpenSim.Framework.Interfaces +namespace OpenSim.Framework.Configuration.Interfaces { public interface IGenericConfig { + void SetFileName(string fileName); void LoadData(); string GetAttribute(string attributeName); bool SetAttribute(string attributeName, string attributeValue); diff --git a/OpenSim/Framework/General/Configuration/XmlConfiguration.cs b/OpenSim/Framework/General/Configuration/XmlConfiguration.cs deleted file mode 100644 index e1f3816..0000000 --- a/OpenSim/Framework/General/Configuration/XmlConfiguration.cs +++ /dev/null @@ -1,123 +0,0 @@ -/* -* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.IO; -using System.Xml; - -using OpenSim.Framework.Interfaces; - -namespace OpenSim.Framework.Configuration -{ - public class XmlConfiguration : IGenericConfig - { - private XmlDocument doc; - private XmlNode rootNode; - private XmlNode configNode; - private string fileName; - private bool createdFile = false; - - public XmlConfiguration(string filename) - { - fileName = filename; - } - - public void LoadData() - { - doc = new XmlDocument(); - - if (File.Exists(fileName)) - { - XmlTextReader reader = new XmlTextReader(fileName); - reader.WhitespaceHandling = WhitespaceHandling.None; - doc.Load(reader); - reader.Close(); - } - else - { - createdFile = true; - rootNode = doc.CreateNode(XmlNodeType.Element, "Root", ""); - doc.AppendChild(rootNode); - configNode = doc.CreateNode(XmlNodeType.Element, "Config", ""); - rootNode.AppendChild(configNode); - } - - - rootNode = doc.FirstChild; - if (rootNode.Name != "Root") - throw new Exception("Error: Invalid .xml File. Missing "); - - configNode = rootNode.FirstChild; - if (configNode.Name != "Config") - throw new Exception("Error: Invalid .xml File. first child should be "); - - if (createdFile) - { - this.Commit(); - } - } - - public string GetAttribute(string attributeName) - { - string result = null; - if (configNode.Attributes[attributeName] != null) - { - result = ((XmlAttribute)configNode.Attributes.GetNamedItem(attributeName)).Value; - } - return result; - } - - public bool SetAttribute(string attributeName, string attributeValue) - { - if (configNode.Attributes[attributeName] != null) - { - ((XmlAttribute)configNode.Attributes.GetNamedItem(attributeName)).Value = attributeValue; - } - else - { - XmlAttribute attri; - attri = doc.CreateAttribute(attributeName); - attri.Value = attributeValue; - configNode.Attributes.Append(attri); - } - return true; - } - - public void Commit() - { - doc.Save(fileName); - } - - public void Close() - { - configNode = null; - rootNode = null; - doc = null; - } - - } -} -- cgit v1.1