private void ValidateBySchema(XDocument xDoc, CheckRunDocumentType documentType, string errorMessage)
        {
            XmlSchemaSet schemas = null;

            try
            {
                switch (documentType)
                {
                case CheckRunDocumentType.CheckRunLaunch:
                {
                    schemas = DataSchemas.Instance.CheckRunLaunchSchemaSet;
                    break;
                }

                case CheckRunDocumentType.CheckRunArtifact:
                {
                    schemas = DataSchemas.Instance.CheckRunArtifactSchemaSet;
                    break;
                }

                default:
                {
                    throw new CheckInfrastructureBaseException(string.Format("{0} LoadAndValidateXml failed. The received document type enum of '{1}' is not a valid value.", errorMessage, documentType));
                }
                }

                xDoc.Validate(schemas, null);
            }
            catch (XmlSchemaException ex)
            {
                throw new CheckInfrastructureBaseException(string.Format("Validation failed with schema for '{0}'", documentType), ex);
            }
        }
        private XDocument LoadAndValidateXml(string xml, CheckRunDocumentType documentType, string errorMessage)
        {
            XDocument result = null;
            int       marker = -1;

            try
            {
                marker = 0;
                result = XDocFromString(xml);
                marker = 1;
                this.ValidateBySchema(result, documentType, errorMessage);
                marker = 2;
                this.CheckRequiredDataElements(result, documentType, errorMessage);
            }
            catch (Exception ex)
            {
                if (marker >= 0)
                {
                    string message = string.Empty;

                    switch (marker)
                    {
                    case 0:
                    {
                        message = "loading";
                        break;
                    }

                    case 1:
                    {
                        message = "validating";
                        break;
                    }

                    case 2:
                    {
                        message = "checking for specific DataElement elements";
                        break;
                    }

                    default:
                    {
                        break;
                    }
                    }

                    errorMessage += string.Format("'{0}' Failed on {1}. '{3}'. Input XML '{2}'", errorMessage, message, xml, ex);
                    throw new CheckInfrastructureBaseException(errorMessage, ex);
                }
                else
                {
                    errorMessage += string.Format("LoadAndValidateXml failed. '{0}.'", ex);
                    throw new CheckInfrastructureBaseException(errorMessage, ex);
                }
            }

            return(result);
        }
        private void CheckRequiredDataElements(XDocument xDoc, CheckRunDocumentType documentType, string errorMessage)
        {
            XElement elementWithDataChildren        = xDoc.Root.Element(DataStringConstants.ElementNames.CheckRunData);
            ReadOnlyCollection <string> listToCheck = null;

            switch (documentType)
            {
            case CheckRunDocumentType.CheckRunLaunch:
            {
                listToCheck = this.m_CrlChecklistReadOnly;
                break;
            }

            case CheckRunDocumentType.CheckRunArtifact:
            {
                listToCheck = this.m_CraChecklistReadOnly;
                break;
            }
            }

            this.VerifyDataElementsExist(elementWithDataChildren, listToCheck);
        }