*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
This commit is contained in:
mingchen
2007-07-19 20:39:33 +00:00
parent b2c6f316e1
commit ed69e84874
1032 changed files with 78 additions and 3120 deletions

View File

@@ -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;
}
}
}

View File

@@ -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);

View File

@@ -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 <Root>");
configNode = rootNode.FirstChild;
if (configNode.Name != "Config")
throw new Exception("Error: Invalid .xml File. <Root> first child should be <Config>");
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;
}
}
}