diff --git a/PROMS/Formats/fmtall/BASEall.xml b/PROMS/Formats/fmtall/BASEall.xml index cb86c004..03e05a2a 100644 Binary files a/PROMS/Formats/fmtall/BASEall.xml and b/PROMS/Formats/fmtall/BASEall.xml differ diff --git a/PROMS/Formats/fmtall/BNPP1Newall.xml b/PROMS/Formats/fmtall/BNPP1Newall.xml index c58da4be..82e2e4eb 100644 Binary files a/PROMS/Formats/fmtall/BNPP1Newall.xml and b/PROMS/Formats/fmtall/BNPP1Newall.xml differ diff --git a/PROMS/Formats/fmtall/BNPP1all.xml b/PROMS/Formats/fmtall/BNPP1all.xml index 1e852979..2353f22c 100644 Binary files a/PROMS/Formats/fmtall/BNPP1all.xml and b/PROMS/Formats/fmtall/BNPP1all.xml differ diff --git a/PROMS/Formats/fmtall/BNPP2all.xml b/PROMS/Formats/fmtall/BNPP2all.xml index f7193fd0..2ca61c97 100644 Binary files a/PROMS/Formats/fmtall/BNPP2all.xml and b/PROMS/Formats/fmtall/BNPP2all.xml differ diff --git a/PROMS/Formats/fmtall/BNPPsamall.xml b/PROMS/Formats/fmtall/BNPPsamall.xml index 85912464..5feb6a45 100644 Binary files a/PROMS/Formats/fmtall/BNPPsamall.xml and b/PROMS/Formats/fmtall/BNPPsamall.xml differ diff --git a/PROMS/Formats/fmtall/CPBCKNHC_00all.xml b/PROMS/Formats/fmtall/CPBCKNHC_00all.xml index daa3a4ef..00ac98ef 100644 Binary files a/PROMS/Formats/fmtall/CPBCKNHC_00all.xml and b/PROMS/Formats/fmtall/CPBCKNHC_00all.xml differ diff --git a/PROMS/Formats/fmtall/CPBCKNHCall.xml b/PROMS/Formats/fmtall/CPBCKNHCall.xml index ddac1c5a..1560795a 100644 Binary files a/PROMS/Formats/fmtall/CPBCKNHCall.xml and b/PROMS/Formats/fmtall/CPBCKNHCall.xml differ diff --git a/PROMS/Formats/fmtall/CPBCK_00all.xml b/PROMS/Formats/fmtall/CPBCK_00all.xml index bb7bcd67..60ab8747 100644 Binary files a/PROMS/Formats/fmtall/CPBCK_00all.xml and b/PROMS/Formats/fmtall/CPBCK_00all.xml differ diff --git a/PROMS/Formats/fmtall/CPBCKall.xml b/PROMS/Formats/fmtall/CPBCKall.xml index d476b8b5..a4e06a16 100644 Binary files a/PROMS/Formats/fmtall/CPBCKall.xml and b/PROMS/Formats/fmtall/CPBCKall.xml differ diff --git a/PROMS/Formats/fmtall/EPTST1all.xml b/PROMS/Formats/fmtall/EPTST1all.xml index 148469dd..346cba3b 100644 Binary files a/PROMS/Formats/fmtall/EPTST1all.xml and b/PROMS/Formats/fmtall/EPTST1all.xml differ diff --git a/PROMS/Formats/fmtall/EXP2all.xml b/PROMS/Formats/fmtall/EXP2all.xml index ae69a146..ca8b1b8f 100644 Binary files a/PROMS/Formats/fmtall/EXP2all.xml and b/PROMS/Formats/fmtall/EXP2all.xml differ diff --git a/PROMS/Formats/fmtall/PROMSDemo1all.xml b/PROMS/Formats/fmtall/PROMSDemo1all.xml index fdd07f10..5cc382ba 100644 Binary files a/PROMS/Formats/fmtall/PROMSDemo1all.xml and b/PROMS/Formats/fmtall/PROMSDemo1all.xml differ diff --git a/PROMS/Formats/fmtall/PROMSDemo2all.xml b/PROMS/Formats/fmtall/PROMSDemo2all.xml index a5d4598c..e760c358 100644 Binary files a/PROMS/Formats/fmtall/PROMSDemo2all.xml and b/PROMS/Formats/fmtall/PROMSDemo2all.xml differ diff --git a/PROMS/Formats/fmtall/PROMSMan1all.xml b/PROMS/Formats/fmtall/PROMSMan1all.xml index a33d6c3d..f8ed1877 100644 Binary files a/PROMS/Formats/fmtall/PROMSMan1all.xml and b/PROMS/Formats/fmtall/PROMSMan1all.xml differ diff --git a/PROMS/Formats/fmtall/PROMSMan2all.xml b/PROMS/Formats/fmtall/PROMSMan2all.xml index 328704ca..73a74ad9 100644 Binary files a/PROMS/Formats/fmtall/PROMSMan2all.xml and b/PROMS/Formats/fmtall/PROMSMan2all.xml differ diff --git a/PROMS/Formats/fmtall/RNPAOPBCKNHCall.xml b/PROMS/Formats/fmtall/RNPAOPBCKNHCall.xml index d9537e6f..bb4b182a 100644 Binary files a/PROMS/Formats/fmtall/RNPAOPBCKNHCall.xml and b/PROMS/Formats/fmtall/RNPAOPBCKNHCall.xml differ diff --git a/PROMS/Formats/fmtall/SUMall.xml b/PROMS/Formats/fmtall/SUMall.xml index 0cfbc902..26d914b2 100644 Binary files a/PROMS/Formats/fmtall/SUMall.xml and b/PROMS/Formats/fmtall/SUMall.xml differ diff --git a/PROMS/Formats/fmtall/TUECall.xml b/PROMS/Formats/fmtall/TUECall.xml index b6297644..af1dba24 100644 Binary files a/PROMS/Formats/fmtall/TUECall.xml and b/PROMS/Formats/fmtall/TUECall.xml differ diff --git a/PROMS/Formats/fmtall/vcb1all.xml b/PROMS/Formats/fmtall/vcb1all.xml index 30d0e84b..3def1230 100644 Binary files a/PROMS/Formats/fmtall/vcb1all.xml and b/PROMS/Formats/fmtall/vcb1all.xml differ diff --git a/PROMS/Formats/fmtall/vcb2all.xml b/PROMS/Formats/fmtall/vcb2all.xml index cd54bac2..1cc36f82 100644 Binary files a/PROMS/Formats/fmtall/vcb2all.xml and b/PROMS/Formats/fmtall/vcb2all.xml differ diff --git a/PROMS/Formats/fmtall/vcbaall.xml b/PROMS/Formats/fmtall/vcbaall.xml index b6cc7325..0294a52a 100644 Binary files a/PROMS/Formats/fmtall/vcbaall.xml and b/PROMS/Formats/fmtall/vcbaall.xml differ diff --git a/PROMS/Formats/fmtall/vcbeppall.xml b/PROMS/Formats/fmtall/vcbeppall.xml index 880aee4b..93a64ac8 100644 Binary files a/PROMS/Formats/fmtall/vcbeppall.xml and b/PROMS/Formats/fmtall/vcbeppall.xml differ diff --git a/PROMS/Formats/fmtall/wst2all.xml b/PROMS/Formats/fmtall/wst2all.xml index 6ab56c91..70708e0e 100644 Binary files a/PROMS/Formats/fmtall/wst2all.xml and b/PROMS/Formats/fmtall/wst2all.xml differ diff --git a/PROMS/Formats/fmtall/wstdcsall.xml b/PROMS/Formats/fmtall/wstdcsall.xml index 52b54977..92aa7050 100644 Binary files a/PROMS/Formats/fmtall/wstdcsall.xml and b/PROMS/Formats/fmtall/wstdcsall.xml differ diff --git a/PROMS/Formats/fmtall/wstsamall.xml b/PROMS/Formats/fmtall/wstsamall.xml index 73202e14..f437a022 100644 Binary files a/PROMS/Formats/fmtall/wstsamall.xml and b/PROMS/Formats/fmtall/wstsamall.xml differ diff --git a/PROMS/VEPROMS.CSLA.Library/Format/vlnFormat.cs b/PROMS/VEPROMS.CSLA.Library/Format/vlnFormat.cs index c7676e27..6d5b0728 100644 --- a/PROMS/VEPROMS.CSLA.Library/Format/vlnFormat.cs +++ b/PROMS/VEPROMS.CSLA.Library/Format/vlnFormat.cs @@ -12,47 +12,14 @@ namespace VEPROMS.CSLA.Library private static XmlElement mydocele; public vlnFormatDocument(IFormatOrFormatInfo myFormat) { - _MyFormat = myFormat; + MyFormat = myFormat; LoadXml(MyFormat.Data); - mydocele = this.DocumentElement; + mydocele = DocumentElement; } - private IFormatOrFormatInfo _MyFormat; - public IFormatOrFormatInfo MyFormat + + public IFormatOrFormatInfo MyFormat { get; set; } + public static XmlNode LookupSingleNode(XmlNode xmlNode, string path) { - get { return _MyFormat; } - set { _MyFormat = value; } - } - public static XmlNode LookupSingleNode(XmlNode xmlNode, string path) - { - //original: - //if (xmlNode == null) return null; - //XmlNode xn = xmlNode.SelectSingleNode(path); - //if (xn != null) return xn; - //if (xmlNode.Name == "Step") xn = LookupSingleStepNode(xmlNode, path); - //if (xn != null) return xn; - //if (path.StartsWith("Font")) return LookupSingleFontNode(xmlNode, path); - //return InheritLookup(xmlNode, path); -/* RHM 20090821 - - if (path.StartsWith("Font")) - { - XmlNode xn = null; - if (xmlNode != null) - { - xn = xmlNode.SelectSingleNode(path); - // RHM 2008-12-15 - Added logic to keep looking if a blank attribute is found - if (xn != null && xn is XmlAttribute && (xn as XmlAttribute).Value != "") return xn; - //if (xn != null) return xn; - } - else - { - xmlNode = LookupSingleNode(mydocele.FirstChild, "/PlantFormat/FormatData"); - } - if (path.Contains("Font")) Console.WriteLine("vlnFormatDocument.LookupSingleNode {0},{1}", xmlNode.Name == "Step" ? "Step." + xmlNode.Attributes["Type"].Value : xmlNode.Name, path); - return LookupSingleFontNode(xmlNode, path); - } - else - { - */ if (xmlNode == null) return null; XmlNode xn = xmlNode.SelectSingleNode(path); if (xmlNode.Name == "Box") return xn; // if box, don't do inheritance. @@ -72,7 +39,6 @@ namespace VEPROMS.CSLA.Library if (xn != null) return xn; if (path.StartsWith("Font")) return LookupSingleFontNode(xmlNode, path); // Then do Font Inheritance return InheritLookup(xmlNode, path, false); -// } } public static XmlNode LookupSingleFontNode(XmlNode xmlNode, string path) { @@ -108,29 +74,15 @@ namespace VEPROMS.CSLA.Library if (xmlNode == null) return null; XmlNode xn = xmlNode.SelectSingleNode(path); - XmlNode tmpNode = xmlNode; - XmlNode tmpNode2 = xmlNode; + XmlNode tmpNode2 = xmlNode; while (xn == null) //Walk-up the format tree to find a step node { - //if (path.Contains("Font")) Console.WriteLine("vlnFormatDocument.LookupSingleStepNode -> Loop {0},{1}", xmlNode.Name == "Step" ? "Step." + xmlNode.Attributes["Type"].Value : xmlNode.Name, path); - tmpNode = xmlNode; - // RHM 20090831 Try doing a lookup of the parent. If no parent, go back to the original and do an inheritance lookup - XmlAttribute attr = xmlNode.Attributes["ParentType"]; + //if (path.Contains("Font")) Console.WriteLine("vlnFormatDocument.LookupSingleStepNode -> Loop {0},{1}", xmlNode.Name == "Step" ? "Step." + xmlNode.Attributes["Type"].Value : xmlNode.Name, path); + // RHM 20090831 Try doing a lookup of the parent. If no parent, go back to the original and do an inheritance lookup + XmlAttribute attr = xmlNode.Attributes["ParentType"]; if (attr == null || attr.Value == string.Empty) // Cannot find ParentType so do an InheritanceLookup return InheritLookup(tmpNode2, path, true); - //return InheritLookup(xmlNode, path, false); xmlNode = xmlNode.ParentNode.SelectSingleNode(string.Format("Step[@Type='{0}']", xmlNode.Attributes["ParentType"].InnerText)); - // Based upon our current data - the following conditions are never met. - //if (xmlNode == null && path.StartsWith("Font")) - //{ - // //if (path.Contains("Font")) Console.WriteLine("vlnFormatDocument.LookupSingleStepNode -> Font {0},{1}", tmpNode.Name == "Step" ? "Step." + tmpNode.Attributes["Type"].Value : tmpNode.Name, path); - // return LookupSingleFontNode(tmpNode, path); - //} - //if (xmlNode == null) - //{ - // //if (path.Contains("Font")) Console.WriteLine("vlnFormatDocument.LookupSingleStepNode -> Font {0},{1}", tmpNode2.Name == "Step" ? "Step." + tmpNode2.Attributes["Type"].Value : tmpNode2.Name, path); - // return InheritLookup(tmpNode2, path, true); - //} xn = xmlNode.SelectSingleNode(path); } return xn; @@ -145,38 +97,20 @@ namespace VEPROMS.CSLA.Library } public static string Lookup(XmlNode xmlNode, string path) { - //if (xmlNode == null) return null; XmlNode xn = LookupSingleNode(xmlNode, path); - //if (xn == null) xn = InheritLookup(xmlNode, path); - if (xn == null) return null; - return xn.InnerText; - } - //public static string StepLookup(XmlNode xmlNode, string path) - //{ - // //if (xmlNode == null) return null; - // XmlNode xn = LookupSingleStepNode(xmlNode, path); - // //if (xn == null) xn = InheritLookup(xmlNode, path); - // if (xn == null) return null; - // return xn.InnerText; - //} - public static T EnumLookup(XmlNode xmlNode, string path) + return xn?.InnerText; + } + public static T EnumLookup(XmlNode xmlNode, string path) { string str = Lookup(xmlNode,path); - if (str == null) return default(T); - return (T)Enum.Parse(typeof(T), str); - } - public static int? IntLookup(XmlNode xmlNode, string path) + return str == null ? default : (T)Enum.Parse(typeof(T), str); + } + public static int? IntLookup(XmlNode xmlNode, string path) { - //if (xmlNode == null) return null; - //XmlNode xn = LookupSingleNode(xmlNode, path); - //if (xn == null) xn = InheritLookup(xmlNode, path); - //if (xn == null) return null; - //return int.Parse(xn.InnerText); string str = Lookup(xmlNode, path); - if (str == null) return null; - return int.Parse(str); - } - public static int SiblingCount(XmlNode xmlNode) + return str == null ? null : (int?)int.Parse(str); + } + public static int SiblingCount(XmlNode xmlNode) { int retval = 0; string nodeName = xmlNode.Name; @@ -189,22 +123,32 @@ namespace VEPROMS.CSLA.Library public static string Path(XmlNode xmlNode) { // Walk the path - string parentPath = (xmlNode.ParentNode == xmlNode.OwnerDocument ? "" : Path(xmlNode.ParentNode)); + string parentPath = xmlNode.ParentNode == xmlNode.OwnerDocument ? "" : Path(xmlNode.ParentNode); // Count Siblings with the Same Name int sibCount = SiblingCount(xmlNode); return string.Format("{0}/{1}[{2}]", parentPath, xmlNode.Name, sibCount); } - public static XmlNode InheritLookup(XmlNode xmlNode, string path, bool stepLookup) + //B2026-077 – Update Format inheritance to use index id instead of position/order. + public static string PathByIndex(XmlNode xmlNode) + { + if (xmlNode.Name == "TransTypes" || xmlNode.Name == "Step") + { + string parentPath = xmlNode.ParentNode == xmlNode.OwnerDocument ? "" : Path(xmlNode.ParentNode); + string Indx = xmlNode.Attributes["Index"].Value; + return $@"{parentPath}/{xmlNode.Name}[@Index='{Indx}']"; + } + else + { + return Path(xmlNode); + } + } + public static XmlNode InheritLookup(XmlNode xmlNode, string path, bool stepLookup) { //stepLookup = false; // 8/2 change for inheritance if (xmlNode == null) return null;// No path to match - string xPath = Path(xmlNode);// Build xPath from xmlNode - if (xmlNode.Name == "TransTypes") - { - string TransIndex = xmlNode.Attributes["Index"].Value; - xPath = System.Text.RegularExpressions.Regex.Replace(xPath, @"\[[0-9]*\]$", @"[@Index='" + TransIndex + @"']"); - } - vlnFormatDocument fd = (vlnFormatDocument)(xmlNode.OwnerDocument);//First Get the vlnFormatDocument - This also ties it to a FormatInfo object + string xPath = PathByIndex(xmlNode);// Build xPath from xmlNode + + vlnFormatDocument fd = (vlnFormatDocument)xmlNode.OwnerDocument;//First Get the vlnFormatDocument - This also ties it to a FormatInfo object while(fd.MyFormat.MyIParent != null) { fd = fd.MyFormat.MyIParent.PlantFormat.XmlDoc;// Get the parents vlnFormatDocument @@ -215,8 +159,8 @@ namespace VEPROMS.CSLA.Library else xp = fd.SelectSingleNode(xPath);// Get the related node if (xp != null) { - XmlNode xn = null; - if (stepLookup) + XmlNode xn; + if (stepLookup) { //if (path.Contains("Font")) Console.WriteLine("vlnFormatItem.SelectSingleNode {0},{1}", xp.Name == "Step" ? "Step." + xp.Attributes["Type"].Value : xp.Name, path); xn = LookupSingleStepNode(xp, path); @@ -233,14 +177,14 @@ namespace VEPROMS.CSLA.Library { if (xmlNode == null) return null;// No path to match string xPath = Path(xmlNode);// Build xPath from xmlNode - vlnFormatDocument fd = (vlnFormatDocument)(xmlNode.OwnerDocument);//First Get the vlnFormatDocument - This also ties it to a FormatInfo object + vlnFormatDocument fd = (vlnFormatDocument)xmlNode.OwnerDocument;//First Get the vlnFormatDocument - This also ties it to a FormatInfo object while (fd.MyFormat.MyIParent != null) { fd = fd.MyFormat.MyIParent.PlantFormat.XmlDoc;// Get the parents vlnFormatDocument if (fd != null) { XmlNode xp = fd.SelectSingleNode(xPath);// Get the related node - if (xp != null) + if (xp != null) { XmlNodeList xl = xp.SelectNodes(path); if (xl != null && xl.Count > 0) @@ -256,100 +200,41 @@ namespace VEPROMS.CSLA.Library [TypeConverter(typeof(ExpandableObjectConverter))] public class vlnFormatItem { - public vlnFormatItem(XmlNode xmlNode) - { - _XmlNode = xmlNode; - } - public vlnFormatItem() { } - XmlNode _XmlNode; - internal XmlNode XmlNode - { - get { return _XmlNode; } - set { _XmlNode = value; } - } - private IFormatOrFormatInfo _MyFormat; + public vlnFormatItem(XmlNode xmlNode) => XmlNode = xmlNode; + public vlnFormatItem() { } + + internal XmlNode XmlNode { get; set; } + private IFormatOrFormatInfo _MyFormat; public IFormatOrFormatInfo MyFormat { get { if (_MyFormat == null) { - vlnFormatDocument doc = (XmlNode.OwnerDocument) as vlnFormatDocument; - if(doc != null) - _MyFormat = doc.MyFormat; - } + if (XmlNode.OwnerDocument is vlnFormatDocument doc) + _MyFormat = doc.MyFormat; + } return _MyFormat; } } - private IFormatOrFormatInfo _MyParentFormat; - public IFormatOrFormatInfo MyParentFormat + public IFormatOrFormatInfo MyParentFormat => MyFormat.MyIParent; + public virtual string GetPDDisplayName() => ToString(); + public virtual string GetPDName() => ToString(); + public virtual string GetPDDescription() => ToString(); + public virtual string GetPDCategory() => ToString(); + public XmlNodeList SelectNodes(string path) => vlnFormatDocument.LookupNodes(XmlNode, path); + public XmlNode SelectSingleNode(string path) { - get - { - return MyFormat.MyIParent; - } - } - public virtual string GetPDDisplayName() - { return ToString(); } - public virtual string GetPDName() - { return ToString(); } - public virtual string GetPDDescription() - { return ToString(); } - public virtual string GetPDCategory() - { return ToString(); } - public XmlNodeList SelectNodes(string path) - { - return vlnFormatDocument.LookupNodes(_XmlNode, path); - } - public XmlNode SelectSingleNode(string path) - { - //AdjustLookup(_XmlNode, path); //if(path.Contains("Font")) Console.WriteLine("vlnFormatItem.SelectSingleNode {0},{1}", _XmlNode.Name == "Step" ? "Step." + _XmlNode.Attributes["Type"].Value : _XmlNode.Name, path); - return vlnFormatDocument.LookupSingleNode(_XmlNode, path); + return vlnFormatDocument.LookupSingleNode(XmlNode, path); } - //public static string _LookUpNode; - //private static void AdjustLookup(XmlNode xmlNode,string path) - //{ - // if (xmlNode.Name == "Step") - // { - // XmlAttribute attr = xmlNode.Attributes["Type"]; - // if (attr != null) _LookUpNode = attr.Value; - // //Console.WriteLine("AdjustLookup Type = {0}/{1}", _LookUpNode, path); - // } - // else - // { - // //Console.WriteLine("AdjustLookup {0}", xmlNode.Name); - // } - //} - public XmlNode SelectSingleFontNode(string path) - { - return vlnFormatDocument.LookupSingleFontNode(_XmlNode, path); - } - public string Lookup(string path) - { - return vlnFormatDocument.Lookup(_XmlNode, path); - } - public string Lookup(string path, ref string local) - { - return (local != null? local : local = Lookup(path)); - } - //public string StepLookup(string path) - //{ - // return vlnFormatDocument.StepLookup(_XmlNode, path); - //} - public int? IntLookup(string path) - { - return vlnFormatDocument.IntLookup(_XmlNode, path); - } - public int? IntLookup(string path, ref int? local) - { - return (local != null ? local : local = IntLookup(path)); - } - public T EnumLookup(string path) - { - return vlnFormatDocument.EnumLookup(_XmlNode, path); - } - public bool LazyLoad(ref LazyLoad ll, string xPath) + public XmlNode SelectSingleFontNode(string path) => vlnFormatDocument.LookupSingleFontNode(XmlNode, path); + public string Lookup(string path) => vlnFormatDocument.Lookup(XmlNode, path); + public string Lookup(string path, ref string local) => local ?? (local = Lookup(path)); + public int? IntLookup(string path) => vlnFormatDocument.IntLookup(XmlNode, path); + public int? IntLookup(string path, ref int? local) => local != null ? local : local = IntLookup(path); + public T EnumLookup(string path) => vlnFormatDocument.EnumLookup(XmlNode, path); + public bool LazyLoad(ref LazyLoad ll, string xPath) { if (ll == null) { @@ -358,12 +243,9 @@ namespace VEPROMS.CSLA.Library } return ll.Value; } - protected static bool RetrieveBool(XmlNode xn) - { - return xn != null && xn.InnerText.ToUpper() == "TRUE"; - } - // a LaxyLoad that allows you to pass in the default setting - public bool LazyLoad(ref LazyLoad ll, string xPath, bool defaultReturn) + protected static bool RetrieveBool(XmlNode xn) => xn != null && xn.InnerText.ToUpper() == "TRUE"; + // a LazyLoad that allows you to pass in the default setting + public bool LazyLoad(ref LazyLoad ll, string xPath, bool defaultReturn) { if (ll == null) { @@ -372,12 +254,9 @@ namespace VEPROMS.CSLA.Library } return ll.Value; } - // if nothing is set for this node, then use the passed in default value - protected static bool RetrieveBool(XmlNode xn, bool defaultReturn) - { - return (xn != null) ? xn.InnerText.ToUpper() == "TRUE" : defaultReturn; - } - public string LazyLoad(ref LazyLoad ll, string xPath) + // if nothing is set for this node, then use the passed in default value + protected static bool RetrieveBool(XmlNode xn, bool defaultReturn) => (xn != null) ? xn.InnerText.ToUpper() == "TRUE" : defaultReturn; + public string LazyLoad(ref LazyLoad ll, string xPath) { if (ll == null) { @@ -386,16 +265,13 @@ namespace VEPROMS.CSLA.Library } return ll.Value; } - protected static string RetrieveString(XmlNode xn) - { - return xn != null ? xn.InnerText : null; - } - public string MyPath + protected static string RetrieveString(XmlNode xn) => xn?.InnerText; + public string MyPath { get { StringBuilder sb = new StringBuilder(); - XmlNode node = _XmlNode; + XmlNode node = XmlNode; string prefix = ""; while (node != null) { @@ -429,14 +305,13 @@ namespace VEPROMS.CSLA.Library int? value = null; if (xn != null) { - int iValue = 0; - if (!int.TryParse(xn.InnerText, out iValue)) - { - if (xn.InnerText == "") return null; - Console.WriteLine(string.Format("'{0}'\r\n'{1}'\r\n'{2}' could not be converted to int?", MyFormat.FullName, MyPath + "/" + xPath, xn.InnerText)); - throw (new Exception(string.Format("{0} = '{1}' could not be converted to int?", xPath, xn.InnerText))); - } - value = iValue; + if (!int.TryParse(xn.InnerText, out int iValue)) + { + if (xn.InnerText == "") return null; + Console.WriteLine(string.Format("'{0}'\r\n'{1}'\r\n'{2}' could not be converted to int?", MyFormat.FullName, MyPath + "/" + xPath, xn.InnerText)); + throw new Exception(string.Format("{0} = '{1}' could not be converted to int?", xPath, xn.InnerText)); + } + value = iValue; } return value; } @@ -445,13 +320,12 @@ namespace VEPROMS.CSLA.Library float? value = null; if (xn != null) { - float fValue = 0; - if (!float.TryParse(xn.InnerText, out fValue)) - { - Console.WriteLine(string.Format("'{0}'\r\n'{1}'\r\n'{2}' could not be converted to float?", MyFormat.FullName, MyPath + "/" + xPath, xn.InnerText)); - throw (new Exception(string.Format("{0} = '{1}' could not be converted to float?", xPath, xn.InnerText))); - } - value = fValue; + if (!float.TryParse(xn.InnerText, out float fValue)) + { + Console.WriteLine(string.Format("'{0}'\r\n'{1}'\r\n'{2}' could not be converted to float?", MyFormat.FullName, MyPath + "/" + xPath, xn.InnerText)); + throw new Exception(string.Format("{0} = '{1}' could not be converted to float?", xPath, xn.InnerText)); + } + value = fValue; } return value; } @@ -460,9 +334,8 @@ namespace VEPROMS.CSLA.Library { if (ll == null) { - XmlNode xn = this._XmlNode; - xn = SelectSingleNode(xPath); - if (xn == null) + XmlNode xn = SelectSingleNode(xPath); + if (xn == null) ll = new LazyLoad(null); else if (xn.Value == "")// No value specified - Use zero value if it is defined - GetName returns a null if it is not defined ll = new LazyLoad>(Enum.GetName(typeof(T), 0) != null ? (Nullable) Enum.Parse(typeof(T), "0") : null); @@ -497,17 +370,10 @@ namespace VEPROMS.CSLA.Library #region LazyLoad public class LazyLoad { - public LazyLoad(T value) - { - _Value = value; - } - private T _Value; - public T Value - { - get { return _Value; } - set { _Value = value; } - } - } + public LazyLoad(T value) => Value = value; + + public T Value { get; set; } + } #endregion #region vlnFormatList, new() public class vlnFormatList : List, ICustomTypeDescriptor @@ -522,9 +388,11 @@ namespace VEPROMS.CSLA.Library _XmlNodeList = value; foreach (XmlNode xn in _XmlNodeList) { - T tt = new T(); - tt.XmlNode = xn; - Add(tt); + T tt = new T + { + XmlNode = xn + }; + Add(tt); } } } @@ -546,7 +414,7 @@ namespace VEPROMS.CSLA.Library XmlNode node = _XmlNodeList[0]; // Get the first node in a list vlnFormatDocument doc = null; if (node != null) - doc = (node.OwnerDocument) as vlnFormatDocument; // Get the owner document as a vlnFormatDocument + doc = node.OwnerDocument as vlnFormatDocument; // Get the owner document as a vlnFormatDocument if (doc != null) _MyFormat = doc.MyFormat; // Get the Format associated with the vlnFormatDocument } @@ -557,36 +425,24 @@ namespace VEPROMS.CSLA.Library _MyFormat = value; } } - #region ICustomTypeDescriptor - public String GetClassName() - { return TypeDescriptor.GetClassName(this, true); } - public AttributeCollection GetAttributes() - { return TypeDescriptor.GetAttributes(this, true); } - public String GetComponentName() - { return TypeDescriptor.GetComponentName(this, true); } - public TypeConverter GetConverter() - { return TypeDescriptor.GetConverter(this, true); } - public EventDescriptor GetDefaultEvent() - { return TypeDescriptor.GetDefaultEvent(this, true); } - public PropertyDescriptor GetDefaultProperty() - { return TypeDescriptor.GetDefaultProperty(this, true); } - public object GetEditor(Type editorBaseType) - { return TypeDescriptor.GetEditor(this, editorBaseType, true); } - public EventDescriptorCollection GetEvents(Attribute[] attributes) - { return TypeDescriptor.GetEvents(this, attributes, true); } - public EventDescriptorCollection GetEvents() - { return TypeDescriptor.GetEvents(this, true); } - public object GetPropertyOwner(PropertyDescriptor pd) - { return this; } - public PropertyDescriptorCollection GetProperties(Attribute[] attributes) - { return GetProperties(); } - public virtual PropertyDescriptorCollection GetProperties() + #region ICustomTypeDescriptor + public string GetClassName() => TypeDescriptor.GetClassName(this, true); + public AttributeCollection GetAttributes() => TypeDescriptor.GetAttributes(this, true); + public string GetComponentName() => TypeDescriptor.GetComponentName(this, true); + public TypeConverter GetConverter() => TypeDescriptor.GetConverter(this, true); + public EventDescriptor GetDefaultEvent() => TypeDescriptor.GetDefaultEvent(this, true); + public PropertyDescriptor GetDefaultProperty() => TypeDescriptor.GetDefaultProperty(this, true); + public object GetEditor(Type editorBaseType) => TypeDescriptor.GetEditor(this, editorBaseType, true); + public EventDescriptorCollection GetEvents(Attribute[] attributes) => TypeDescriptor.GetEvents(this, attributes, true); + public EventDescriptorCollection GetEvents() => TypeDescriptor.GetEvents(this, true); + public object GetPropertyOwner(PropertyDescriptor pd) => this; + public PropertyDescriptorCollection GetProperties(Attribute[] attributes) => GetProperties(); + public virtual PropertyDescriptorCollection GetProperties() { // Create a collection object to hold property descriptors PropertyDescriptorCollection pds = new PropertyDescriptorCollection(null); - // Iterate the list - int i = 0; - for (i = 0; i < this.Count; i++) + // Iterate the list + for (int i = 0; i < Count; i++) { // Create a property descriptor for the item and add to the property descriptor collection pds.Add(new vlnPropertyDescriptor, T>(this, i)); @@ -601,13 +457,10 @@ namespace VEPROMS.CSLA.Library public class vlnIndexedFormatList : vlnFormatList, ICustomTypeDescriptor where T : vlnFormatItem,IVlnIndexedFormatItem, new() { - public vlnIndexedFormatList(XmlNodeList xmlNodeList,IFormatOrFormatInfo myFormat) : base(xmlNodeList) - { - MyFormat = myFormat; - } - public vlnIndexedFormatList() : base() { } - public virtual vlnIndexedFormatList InheritedList { get { return null; } } - public new T this[int index] + public vlnIndexedFormatList(XmlNodeList xmlNodeList, IFormatOrFormatInfo myFormat) : base(xmlNodeList) => MyFormat = myFormat; + public vlnIndexedFormatList() : base() { } + public virtual vlnIndexedFormatList InheritedList => null; + public new T this[int index] { get { @@ -620,8 +473,6 @@ namespace VEPROMS.CSLA.Library if (ttlParent != null) return ttlParent[index]; return null; - // None found - Can I find it in another format? - return null; } } public int MaxIndex @@ -657,36 +508,25 @@ namespace VEPROMS.CSLA.Library return max; } } - #region ICustomTypeDescriptor - public String GetClassName() - { return TypeDescriptor.GetClassName(this, true); } - public AttributeCollection GetAttributes() - { return TypeDescriptor.GetAttributes(this, true); } - public String GetComponentName() - { return TypeDescriptor.GetComponentName(this, true); } - public TypeConverter GetConverter() - { return TypeDescriptor.GetConverter(this, true); } - public EventDescriptor GetDefaultEvent() - { return TypeDescriptor.GetDefaultEvent(this, true); } - public PropertyDescriptor GetDefaultProperty() - { return TypeDescriptor.GetDefaultProperty(this, true); } - public object GetEditor(Type editorBaseType) - { return TypeDescriptor.GetEditor(this, editorBaseType, true); } - public EventDescriptorCollection GetEvents(Attribute[] attributes) + #region ICustomTypeDescriptor + public new string GetClassName() => TypeDescriptor.GetClassName(this, true); + public new AttributeCollection GetAttributes() => TypeDescriptor.GetAttributes(this, true); + public new string GetComponentName() => TypeDescriptor.GetComponentName(this, true); + public new TypeConverter GetConverter() => TypeDescriptor.GetConverter(this, true); + public new EventDescriptor GetDefaultEvent() => TypeDescriptor.GetDefaultEvent(this, true); + public new PropertyDescriptor GetDefaultProperty() => TypeDescriptor.GetDefaultProperty(this, true); + public new object GetEditor(Type editorBaseType) => TypeDescriptor.GetEditor(this, editorBaseType, true); + public new EventDescriptorCollection GetEvents(Attribute[] attributes) { return TypeDescriptor.GetEvents(this, attributes, true); } - public EventDescriptorCollection GetEvents() - { return TypeDescriptor.GetEvents(this, true); } - public object GetPropertyOwner(PropertyDescriptor pd) - { return this; } - public PropertyDescriptorCollection GetProperties(Attribute[] attributes) - { return GetProperties(); } - public virtual PropertyDescriptorCollection GetProperties() + public new EventDescriptorCollection GetEvents() => TypeDescriptor.GetEvents(this, true); + public new object GetPropertyOwner(PropertyDescriptor pd) => this; + public new PropertyDescriptorCollection GetProperties(Attribute[] attributes) => GetProperties(); + public new virtual PropertyDescriptorCollection GetProperties() { // Create a collection object to hold property descriptors PropertyDescriptorCollection pds = new PropertyDescriptorCollection(null); // Iterate the list - int i = 0; - for (i = 0; i < this.Count; i++) + for (int i = 0; i < Count; i++) { // Create a property descriptor for the item and add to the property descriptor collection pds.Add(new vlnPropertyDescriptor, T>(this, i)); @@ -701,14 +541,11 @@ namespace VEPROMS.CSLA.Library public class vlnNamedFormatList : vlnFormatList, ICustomTypeDescriptor where T : vlnFormatItem, IVlnNamedFormatItem, new() { - public vlnNamedFormatList(XmlNodeList xmlNodeList, IFormatOrFormatInfo myFormat) - : base(xmlNodeList) - { - MyFormat = myFormat; - } - public vlnNamedFormatList() : base() { } - public virtual vlnNamedFormatList InheritedList { get { return null; } } - public new T this[string name] + public vlnNamedFormatList(XmlNodeList xmlNodeList, IFormatOrFormatInfo myFormat) + : base(xmlNodeList) => MyFormat = myFormat; + public vlnNamedFormatList() : base() { } + public virtual vlnNamedFormatList InheritedList => null; + public T this[string name] { get { @@ -721,8 +558,6 @@ namespace VEPROMS.CSLA.Library if (ttlParent != null) return ttlParent[name]; return null; - // None found - Can I find it in another format? - return null; } } public new T this[int index] @@ -735,47 +570,27 @@ namespace VEPROMS.CSLA.Library if (ttlParent != null) return ttlParent[index]; return null; - // None found - Can I find it in another format? - return null; } } - public new int Count - { - get - { - return base.Count; - } - } - #region ICustomTypeDescriptor - public String GetClassName() - { return TypeDescriptor.GetClassName(this, true); } - public AttributeCollection GetAttributes() - { return TypeDescriptor.GetAttributes(this, true); } - public String GetComponentName() - { return TypeDescriptor.GetComponentName(this, true); } - public TypeConverter GetConverter() - { return TypeDescriptor.GetConverter(this, true); } - public EventDescriptor GetDefaultEvent() - { return TypeDescriptor.GetDefaultEvent(this, true); } - public PropertyDescriptor GetDefaultProperty() - { return TypeDescriptor.GetDefaultProperty(this, true); } - public object GetEditor(Type editorBaseType) - { return TypeDescriptor.GetEditor(this, editorBaseType, true); } - public EventDescriptorCollection GetEvents(Attribute[] attributes) - { return TypeDescriptor.GetEvents(this, attributes, true); } - public EventDescriptorCollection GetEvents() - { return TypeDescriptor.GetEvents(this, true); } - public object GetPropertyOwner(PropertyDescriptor pd) - { return this; } - public PropertyDescriptorCollection GetProperties(Attribute[] attributes) - { return GetProperties(); } - public virtual PropertyDescriptorCollection GetProperties() + public new int Count => base.Count; + #region ICustomTypeDescriptor + public new string GetClassName() => TypeDescriptor.GetClassName(this, true); + public new AttributeCollection GetAttributes() => TypeDescriptor.GetAttributes(this, true); + public new string GetComponentName() => TypeDescriptor.GetComponentName(this, true); + public new TypeConverter GetConverter() => TypeDescriptor.GetConverter(this, true); + public new EventDescriptor GetDefaultEvent() => TypeDescriptor.GetDefaultEvent(this, true); + public new PropertyDescriptor GetDefaultProperty() => TypeDescriptor.GetDefaultProperty(this, true); + public new object GetEditor(Type editorBaseType) => TypeDescriptor.GetEditor(this, editorBaseType, true); + public new EventDescriptorCollection GetEvents(Attribute[] attributes) => TypeDescriptor.GetEvents(this, attributes, true); + public new EventDescriptorCollection GetEvents() => TypeDescriptor.GetEvents(this, true); + public new object GetPropertyOwner(PropertyDescriptor pd) => this; + public new PropertyDescriptorCollection GetProperties(Attribute[] attributes) => GetProperties(); + public new virtual PropertyDescriptorCollection GetProperties() { // Create a collection object to hold property descriptors PropertyDescriptorCollection pds = new PropertyDescriptorCollection(null); // Iterate the list - int i = 0; - for (i = 0; i < this.Count; i++) + for (int i = 0; i < Count; i++) { // Create a property descriptor for the item and add to the property descriptor collection pds.Add(new vlnPropertyDescriptor, T>(this, i)); @@ -793,16 +608,16 @@ namespace VEPROMS.CSLA.Library { private string Plural(string name) { - if (name.EndsWith("y")) return name.Substring(0, name.Length - 1) + "ies"; - if (name.EndsWith("ss")) return name + "es"; - else return name + "s"; + if (name.EndsWith("y")) return $"{name.Substring(0, name.Length - 1)}ies"; + if (name.EndsWith("ss")) return $"{name}es"; + else return $"{name}s"; } public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destType) { - if (destType == typeof(string) && value is T) + if (destType == typeof(string) && value is T vart) { // Return department and department role separated by comma. - return ((T)value).Count.ToString() + " " + (((T)value).Count == 1 ? typeof(C).Name : Plural(typeof(C).Name)); + return $"{vart.Count} {(vart.Count == 1 ? typeof(C).Name : Plural(typeof(C).Name))}"; } return base.ConvertTo(context, culture, value, destType); } @@ -815,17 +630,16 @@ namespace VEPROMS.CSLA.Library { private string Plural(string name) { - if (name.EndsWith("y")) return name.Substring(0, name.Length - 1) + "ies"; - if (name.EndsWith("ss")) return name + "es"; - if (name.EndsWith("x")) return name + "es"; - else return name + "s"; - } + if (name.EndsWith("y")) return $"{name.Substring(0, name.Length - 1)}ies"; + if (name.EndsWith("ss")) return $"{name}es"; + return name.EndsWith("x") ? $"{name}es" : $"{name}s"; + } public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destType) { - if (destType == typeof(string) && value is T) + if (destType == typeof(string) && value is T vart) { // Return department and department role separated by comma. - return ((T)value).MaxIndex.ToString() + " " + (((T)value).MaxIndex == 1 ? typeof(C).Name : Plural(typeof(C).Name)); + return $"{vart.MaxIndex} {(vart.MaxIndex == 1 ? typeof(C).Name : Plural(typeof(C).Name))}"; } return base.ConvertTo(context, culture, value, destType); } @@ -837,38 +651,23 @@ namespace VEPROMS.CSLA.Library where C : vlnFormatItem, new() { protected C _Item = null; - public vlnPropertyDescriptor(T itemList, int index) - : base("#" + index.ToString(), null) - { - _Item = itemList[index]; - } - public override bool CanResetValue(object component) - { return true; } - public override Type ComponentType - { get { return _Item.GetType(); } } - public override object GetValue(object component) - { return _Item; } - public override bool IsReadOnly - { get { return true; } } - public override Type PropertyType - { get { return _Item.GetType(); } } - public override void ResetValue(object component) + public vlnPropertyDescriptor(T itemList, int index) + : base("#" + index.ToString(), null) => _Item = itemList[index]; + public override bool CanResetValue(object component) => true; + public override Type ComponentType => _Item.GetType(); + public override object GetValue(object component) => _Item; + public override bool IsReadOnly => true; + public override Type PropertyType => _Item.GetType(); + public override void ResetValue(object component) { ;} - public override bool ShouldSerializeValue(object component) - { return true; } - public override void SetValue(object component, object value) + public override bool ShouldSerializeValue(object component) => true; + public override void SetValue(object component, object value) { /*_Item = value*/;} - //public override AttributeCollection Attributes - //{ get { return new AttributeCollection(null); } } - public override string DisplayName - { get { return _Item.GetPDDisplayName(); } } - public override string Description - { get { return _Item.GetPDDescription(); } } - public override string Name - { get { return _Item.GetPDName(); } } - public override string Category - { get { return _Item.GetPDCategory(); } } - } // Class + public override string DisplayName => _Item.GetPDDisplayName(); + public override string Description => _Item.GetPDDescription(); + public override string Name => _Item.GetPDName(); + public override string Category => _Item.GetPDCategory(); + } // Class #endregion }