public static void CheckSearchRoot(List <string> path, string name, ConfigurationSettings settings) { if (path.Count > 0) { string nname = path[0]; ResolvedName resolved = ResolveName(nname, name, settings); if (resolved == null) { if (nname != name) { path.Insert(0, name); } } else { if (String.IsNullOrWhiteSpace(resolved.ChildName)) { nname = String.Format("{0}{1}", resolved.Name, resolved.Abbr); } else if (!String.IsNullOrWhiteSpace(resolved.ChildName)) { if (resolved.Abbr != '\0') { nname = String.Format("{0}{1}{2}", resolved.Name, resolved.Abbr, resolved.ChildName); } } path[0] = nname; } } }
/// <summary> /// Resolve the search string for the specified abbreviation tag /// </summary> /// <param name="name">Search string</param> /// <param name="nodeName">Config node name</param> /// <param name="abbr">Abbreviation tag</param> /// <returns>Resolved name</returns> private static ResolvedName ResolveName(string name, string nodeName, char abbr, ConfigurationSettings settings) { ResolvedName resolved = new ResolvedName(); switch (abbr) { case ConfigAttributesNode.NODE_ABBREVIATION: resolved.AbbrReplacement = settings.AttributesNodeName; break; case ConfigParametersNode.NODE_ABBREVIATION: resolved.AbbrReplacement = settings.ParametersNodeName; break; case ConfigPropertiesNode.NODE_ABBREVIATION: resolved.AbbrReplacement = settings.PropertiesNodeName; break; case ConfigListNode <ConfigValueNode> .NODE_ABBREVIATION: resolved.AbbrReplacement = ConfigListNode <ConfigValueNode> .NODE_NAME; break; } resolved.Abbr = abbr; string[] parts = name.Split(abbr); string nname = parts[0]; string cname = parts[1]; if (String.IsNullOrWhiteSpace(nname) || (nname.Length == 1 && nname[0] == ConfigurationSettings.NODE_SEARCH_WILDCARD)) { resolved.Name = nodeName; } else { resolved.Name = nname; } if (!String.IsNullOrWhiteSpace(cname)) { resolved.ChildName = cname; } else { resolved.ChildName = null; } return(resolved); }
/// <summary> /// Resolve the specified name for search. /// </summary> /// <param name="name">Search node name</param> /// <param name="nodeName">Config Node name.</param> /// <returns>Resolved name or NULL</returns> public static ResolvedName ResolveName(string name, string nodeName, ConfigurationSettings settings) { if (name.Contains(ConfigAttributesNode.NODE_ABBREVIATION)) { return(ResolveName(name, nodeName, ConfigAttributesNode.NODE_ABBREVIATION, settings)); } else if (name.Contains(ConfigParametersNode.NODE_ABBREVIATION)) { return(ResolveName(name, nodeName, ConfigParametersNode.NODE_ABBREVIATION, settings)); } else if (name.Contains(ConfigPropertiesNode.NODE_ABBREVIATION)) { return(ResolveName(name, nodeName, ConfigPropertiesNode.NODE_ABBREVIATION, settings)); } else if (name.Contains(ConfigListNode <ConfigValueNode> .NODE_ABBREVIATION)) { return(ResolveName(name, nodeName, ConfigListNode <ConfigValueNode> .NODE_ABBREVIATION, settings)); } else if (ARRAY_INDEX_RE.IsMatch(name)) { MatchCollection mc = ARRAY_INDEX_RE.Matches(name); if (mc != null && mc.Count > 0 && mc[0].Groups != null && mc[0].Groups.Count > 1) { ResolvedName resolved = new ResolvedName(); resolved.AbbrReplacement = ConfigListNode <ConfigValueNode> .NODE_NAME; resolved.Name = mc[0].Groups[1].Value; resolved.ChildName = mc[0].Groups[2].Value; return(resolved); } } else if (name.Length == 1 && name[0] == ConfigurationSettings.NODE_SEARCH_WILDCARD) { ResolvedName resolved = new ResolvedName(); resolved.Name = nodeName; resolved.AbbrReplacement = null; resolved.ChildName = null; return(resolved); } return(null); }