private static void AddMappingNode(XmlNode parentNode, String location, Guid guid, Guid owner) { XmlNode mappingNode = parentNode.OwnerDocument.CreateNode(XmlNodeType.Element, s_mappingXmlText, null); parentNode.AppendChild(mappingNode); // Write the mapping as attributes XmlUtility.AddXmlAttribute(mappingNode, s_locationAttribute, location); XmlUtility.AddXmlAttribute(mappingNode, s_guidAttribute, XmlConvert.ToString(guid)); // For compatibility with older OMs with the same major version, persist the on-prem service owner as empty. if (ServiceInstanceTypes.TFSOnPremises == owner) { owner = Guid.Empty; } // Legacy server case: If the server did not send back ServiceOwner in the connectionData // let's just do what we used to do to not break anything. // Eventually we can remove this if-guard if (owner != Guid.Empty) { XmlUtility.AddXmlAttribute(mappingNode, s_ownerAttribute, XmlConvert.ToString(owner)); } }
/// <summary> /// Writes service definition information to the provided document in the form: /// <Services> /// <ServiceDefinition> /// <ServiceType>value</ServiceType> /// <Identifier>value</Identifier> /// <DisplayName>value</DisplayName> /// <DefaultAccessMapping>value</DefaultAccessMapping> /// <RelativePath relativeTo="value">value</RelativePath> /// <LocationMappings> /// <LocationMapping> /// <AccessMapping>value</AccessMapping> /// <Location>value</Location> /// </LocationMapping> /// . /// . /// . /// </LocationMappings> /// </ServiceDefinition> /// . /// . /// . /// </Services> /// </summary> /// <param name="documentNode">The document to write to.</param> /// <param name="serviceDefinitions">The values to write</param> public void WriteServices(XmlNode documentNode, IEnumerable <ServiceDefinition> serviceDefinitions) { XmlDocument document = documentNode.OwnerDocument; XmlNode servicesNode = document.CreateNode(XmlNodeType.Element, s_services, null); documentNode.AppendChild(servicesNode); foreach (ServiceDefinition definition in serviceDefinitions) { XmlNode serviceDefinitionNode = document.CreateNode(XmlNodeType.Element, s_serviceDefinition, null); servicesNode.AppendChild(serviceDefinitionNode); XmlNode serviceTypeNode = document.CreateNode(XmlNodeType.Element, s_serviceType, null); serviceDefinitionNode.AppendChild(serviceTypeNode); serviceTypeNode.InnerText = definition.ServiceType; XmlNode identifierNode = document.CreateNode(XmlNodeType.Element, s_identifier, null); serviceDefinitionNode.AppendChild(identifierNode); identifierNode.InnerText = XmlConvert.ToString(definition.Identifier); if (definition.DisplayName != null) { XmlNode displayNameNode = document.CreateNode(XmlNodeType.Element, s_displayName, null); serviceDefinitionNode.AppendChild(displayNameNode); displayNameNode.InnerText = definition.DisplayName; } if (definition.Description != null) { XmlNode descriptionNode = document.CreateNode(XmlNodeType.Element, s_description, null); serviceDefinitionNode.AppendChild(descriptionNode); descriptionNode.InnerText = definition.Description; } XmlNode relativePathNode = document.CreateNode(XmlNodeType.Element, s_relativePath, null); serviceDefinitionNode.AppendChild(relativePathNode); relativePathNode.InnerText = definition.RelativePath; XmlUtility.AddXmlAttribute(relativePathNode, s_relativeTo, definition.RelativeToSetting.ToString()); XmlNode parentServiceTypeNode = document.CreateNode(XmlNodeType.Element, s_parentServiceType, null); serviceDefinitionNode.AppendChild(parentServiceTypeNode); parentServiceTypeNode.InnerText = definition.ParentServiceType; XmlNode parentIdentifierNode = document.CreateNode(XmlNodeType.Element, s_parentIdentifier, null); serviceDefinitionNode.AppendChild(parentIdentifierNode); parentIdentifierNode.InnerText = XmlConvert.ToString(definition.ParentIdentifier); if (definition.RelativeToSetting == RelativeToSetting.FullyQualified) { XmlNode locationMappingsNode = document.CreateNode(XmlNodeType.Element, s_locationMappings, null); serviceDefinitionNode.AppendChild(locationMappingsNode); foreach (LocationMapping mapping in definition.LocationMappings) { XmlNode locationMappingNode = document.CreateNode(XmlNodeType.Element, s_locationMapping, null); locationMappingsNode.AppendChild(locationMappingNode); XmlNode accessMappingNode = document.CreateNode(XmlNodeType.Element, s_accessMapping, null); locationMappingNode.AppendChild(accessMappingNode); accessMappingNode.InnerText = mapping.AccessMappingMoniker; XmlNode locationNode = document.CreateNode(XmlNodeType.Element, s_location, null); locationMappingNode.AppendChild(locationNode); locationNode.InnerText = mapping.Location; } } if (definition.ResourceVersion > 0) { XmlNode resourceVersionNode = document.CreateNode(XmlNodeType.Element, s_resourceVersion, null); serviceDefinitionNode.AppendChild(resourceVersionNode); resourceVersionNode.InnerText = XmlConvert.ToString(definition.ResourceVersion); } if (definition.MinVersionString != null) { XmlNode minVersionNode = document.CreateNode(XmlNodeType.Element, s_minVersion, null); serviceDefinitionNode.AppendChild(minVersionNode); minVersionNode.InnerText = definition.MinVersionString; } if (definition.MaxVersionString != null) { XmlNode maxVersionNode = document.CreateNode(XmlNodeType.Element, s_maxVersion, null); serviceDefinitionNode.AppendChild(maxVersionNode); maxVersionNode.InnerText = definition.MaxVersionString; } if (definition.ReleasedVersionString != null) { XmlNode releasedVersionNode = document.CreateNode(XmlNodeType.Element, s_releasedVersion, null); serviceDefinitionNode.AppendChild(releasedVersionNode); releasedVersionNode.InnerText = definition.ReleasedVersionString; } } }