Beispiel #1
0
        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;
                }
            }
        }