Rich 1e2fedc518 Added private property SelectedSlave
Added DocVersionInfo property to ROFSTLookup class
Set DocVersionInfo to DocVersionInfo of ROFstInfo object in ROFSTLookup constructor
Added Reset method to ROFSTLookup class
Changed return values for ROID parameter of GetRoValue method
Changes SectionConfig class to implement IItemConfig interface
Added MasterSlave_Applicability property to IItemConfig
Changes StepConfig class to implement IItemConfig interface
Added MasterSlave_Applicability property to IItemConfig
Changed GetGroup method to support multi units
2012-12-04 22:54:41 +00:00

204 lines
5.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Serialization;
using System.Xml;
namespace VEPROMS.CSLA.Library
{
public delegate string XMLPropertiesEvent(object sender, XMLPropertiesArgs args);
[Serializable()]
public class XMLProperties
{
#region Events
public event XMLPropertiesEvent LookInAncestor;
private string OnLookInAncestor(object sender, XMLPropertiesArgs args)
{
if (LookInAncestor != null) return LookInAncestor(sender, args);
return string.Empty;
}
#endregion
private bool _AncestorLookup=false;
public bool AncestorLookup
{
get { return _AncestorLookup; }
set { _AncestorLookup = value; }
}
#region Constructors
public XMLProperties()
{
_XmlContents = new XmlDocument();
_XmlContents.LoadXml("<Config/>");
}
public XMLProperties(string xml)
{
_XmlContents = new XmlDocument();
_XmlContents.LoadXml(xml);
}
#endregion
#region BusinessMethods
[NonSerialized]
private bool _ParentLookup=false;
public bool ParentLookup
{
get { return _ParentLookup; }
set { _ParentLookup = value; }
}
[NonSerialized]
XmlDocument _XmlContents;
public XmlDocument XmlContents
{
get { return _XmlContents; }
}
private XmlNode GetGroup(string group)
{
XmlNodeList xl = _XmlContents.DocumentElement.SelectNodes(string.Format("//{0}", group));
if(xl.Count == 0)
xl = _XmlContents.DocumentElement.SelectNodes(
string.Format("//*[translate(local-name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='{0}']", group.ToLower()));
switch (xl.Count)
{
case 0: // No nodes found
return null;
case 1: // Found the node
XmlNode xn = xl[0];
if (xn.GetType() == typeof(XmlElement)) return xn;
throw new XmlPropertiesException("Retrieved {0} while looking for XmlElement //{1}", xn.GetType().ToString(), group);
default: // Found more than 1 node
throw new XmlPropertiesException("Found more than one node //{0}", group);
}
}
private XmlAttribute GetItem(XmlNode xx, string item)
{
//XmlNodeList xl = xx.SelectNodes(string.Format("@{0}", item));
XmlNodeList xl = xx.SelectNodes(
string.Format("@*[translate(local-name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='{0}']", item.ToLower()));
switch (xl.Count)
{
case 0: // No nodes found
return null;
case 1: // Found the node
XmlNode xn = xl[0];
if (xn.GetType() == typeof(XmlAttribute)) return (XmlAttribute)xn;
throw new XmlPropertiesException("Retrieved {0} while looking for XmlAttribute @{1}", xn.GetType().ToString(), item);
default: // Found more than 1 node
throw new XmlPropertiesException("Found more than one node @{0}", item);
}
}
public string ParentValue(string group, string item)
{
return OnLookInAncestor(this, new XMLPropertiesArgs(group, item, true));
}
public string this[string group, string item]
{
get
{
if (_ParentLookup)
return OnLookInAncestor(this, new XMLPropertiesArgs(group, item, AncestorLookup));
XmlNode xn = GetGroup(group);
if (xn == null) return OnLookInAncestor(this, new XMLPropertiesArgs(group, item, AncestorLookup));
XmlNode xa = GetItem(xn, item);
if (xa == null) return OnLookInAncestor(this, new XMLPropertiesArgs(group, item, AncestorLookup));
return xa.InnerText;
}
set
{
if (value == null) value = string.Empty;
XmlNode xn = GetGroup(group);
if (xn == null)
{
if (value != string.Empty)// Add Group and Item
{
xn = _XmlContents.DocumentElement.AppendChild(_XmlContents.CreateElement(group));
XmlAttribute xa = xn.Attributes.Append(_XmlContents.CreateAttribute(item));
xa.Value = value;
}
}
else
{
XmlAttribute xa = GetItem(xn, item);
if (xa == null)
{
if (value != string.Empty) // Add Item
{
xa = xn.Attributes.Append(_XmlContents.CreateAttribute(item));
xa.Value = value;
}
}
else
{
if (value != string.Empty) // Add Item
{
xa.Value = value;
}
else
{
xn.Attributes.Remove(xa);
if (xn.Attributes.Count == 0)
_XmlContents.DocumentElement.RemoveChild(xn);
}
}
}
}
}
public override string ToString()
{
if (XmlContents == null) return null;
return XmlContents.OuterXml;
}
#endregion
#region XmlPropertiesException
public class XmlPropertiesException : Exception
{
public XmlPropertiesException() : base() { ;}
public XmlPropertiesException(string message) : base(message) { ;}
public XmlPropertiesException(string messageFormat,params object [] args) : base(string.Format(messageFormat,args)) { ;}
public XmlPropertiesException(SerializationInfo info, StreamingContext context) : base(info, context) { ;}
public XmlPropertiesException(string message,Exception innerException) : base(message, innerException) { ;}
}
#endregion
}
public partial class XMLPropertiesArgs
{
#region Business Methods
private string _Group;
public string Group
{
get { return _Group; }
set { _Group = value; }
}
private string _Item;
public string Item
{
get { return _Item; }
set { _Item = value; }
}
private bool _AncestorLookup;
public bool AncestorLookup
{
get { return _AncestorLookup; }
set { _AncestorLookup = value; }
}
#endregion
#region Factory Methods
private XMLPropertiesArgs() { ;}
public XMLPropertiesArgs(string group, string item)
{
_Group=group;
_Item=item;
_AncestorLookup = false;
}
public XMLPropertiesArgs(string group, string item, bool ancestorLookup)
{
_Group = group;
_Item = item;
_AncestorLookup = ancestorLookup;
}
#endregion
}
}