Sage.SageContext.ProcessContextSwitchNode C# (CSharp) Method

ProcessContextSwitchNode() private method

private ProcessContextSwitchNode ( SageContext context, XmlNode switchNode ) : XmlNode
context SageContext
switchNode System.Xml.XmlNode
return System.Xml.XmlNode
        internal static XmlNode ProcessContextSwitchNode(SageContext context, XmlNode switchNode)
        {
            if (switchNode.SelectSingleElement("ancestor::sage:literal", XmlNamespaces.Manager) != null)
                return switchNode;

            XmlElement switchElem = (XmlElement) switchNode;

            string propName = switchElem.GetAttribute("property");
            string key = switchElem.GetAttribute("key");

            if (string.IsNullOrEmpty(propName))
            {
                log.ErrorFormat("The switch node in document '{0}' is missing the required property attribute",
                    switchNode.OwnerDocument.BaseURI);

                return switchNode;
            }

            string propValue = SageContext.GetContextProperty(context, propName, key);

            int caseNum = 0;
            bool caseFound = false;
            XmlDocumentFragment result = switchNode.OwnerDocument.CreateDocumentFragment();

            foreach (XmlElement caseNode in switchNode.SelectNodes("context:case", XmlNamespaces.Manager))
            {
                string testValue = caseNode.GetAttribute("test");
                if (string.IsNullOrEmpty(testValue))
                {
                    log.WarnFormat(
                        "The case node with index {0} of switch node '{1}' in document '{2}' didn't specify a test condition.",
                            caseNum, propName, switchNode.OwnerDocument.BaseURI);

                    continue;
                }

                if (testValue.Equals(propValue, StringComparison.InvariantCultureIgnoreCase))
                {
                    foreach (XmlNode node in caseNode.SelectNodes("node()"))
                        result.AppendChild(context.ProcessNode(node));

                    caseFound = true;
                    break;
                }

                caseNum += 1;
            }

            if (!caseFound)
            {
                XmlNode defaultNode = switchNode.SelectSingleNode("context:default", XmlNamespaces.Manager);
                if (defaultNode != null)
                {
                    foreach (XmlNode node in defaultNode.SelectNodes("node()"))
                        result.AppendChild(context.ProcessNode(node));
                }
            }

            return result;
        }