/// <summary>
        /// Проверить адрес сервиса Ario.
        /// </summary>
        /// <returns>Тип и текст ошибки, если она была обнаружена.</returns>
        public virtual Structures.SmartProcessingSetting.SettingsValidationMessage ValidateArioUrl()
        {
            // Проверка, что адрес Ario не "кривой".
            if (!System.Uri.IsWellFormedUriString(_obj.ArioUrl, UriKind.Absolute))
            {
                return(SettingsValidationMessageStructure.Create(MessageTypes.Error, SmartProcessingSettings.Resources.InvalidArioUrl));
            }

            if (!Docflow.PublicFunctions.SmartProcessingSetting.Remote.CheckConnection(_obj))
            {
                return(SettingsValidationMessageStructure.Create(MessageTypes.SoftError, SmartProcessingSettings.Resources.ArioConnectionError));
            }

            return(null);
        }
        /// <summary>
        /// Проверить классификаторы.
        /// </summary>
        /// <returns>Тип и текст ошибки, если она была обнаружена.</returns>
        public virtual Structures.SmartProcessingSetting.SettingsValidationMessage ValidateClassifiers()
        {
            if (!_obj.FirstPageClassifierId.HasValue || !_obj.TypeClassifierId.HasValue)
            {
                return(SettingsValidationMessageStructure.Create(MessageTypes.SoftError, SmartProcessingSettings.Resources.SetCorrectClassifiers));
            }

            var arioClassifiersExist = Functions.SmartProcessingSetting.Remote.IsArioClassifiersExist(_obj);

            if (!arioClassifiersExist)
            {
                return(SettingsValidationMessageStructure.Create(MessageTypes.SoftError, SmartProcessingSettings.Resources.SetCorrectClassifiers));
            }

            if (_obj.FirstPageClassifierId.Value == _obj.TypeClassifierId.Value)
            {
                return(SettingsValidationMessageStructure.Create(MessageTypes.Warning, SmartProcessingSettings.Resources.SetCorrectClassifiers));
            }

            return(null);
        }
        public static Docflow.Structures.SmartProcessingSetting.SettingsValidationMessage SetSettings(string arioUrl,
                                                                                                      string lowerConfidenceLimit,
                                                                                                      string upperConfidenceLimit,
                                                                                                      string firstPageClassifierName,
                                                                                                      string typeClassifierName)
        {
            var smartProcessingSettings = Functions.SmartProcessingSetting.GetSettings();

            // Адрес.
            smartProcessingSettings.ArioUrl = arioUrl;
            var arioUrlValidationMessage = Functions.SmartProcessingSetting.ValidateArioUrl(smartProcessingSettings);

            if (arioUrlValidationMessage != null)
            {
                return(arioUrlValidationMessage);
            }

            // Проверка корректности логина и пароля.
            var loginResult = Functions.SmartProcessingSetting.Login(smartProcessingSettings,
                                                                     smartProcessingSettings.Password,
                                                                     true);

            if (!string.IsNullOrEmpty(loginResult.Error))
            {
                return(SettingsValidationMessageStructure.Create(MessageTypes.Error, loginResult.Error));
            }

            // Границы.
            int lowerLimit;
            int upperLimit;

            smartProcessingSettings.LowerConfidenceLimit = int.TryParse(lowerConfidenceLimit, out lowerLimit) ? lowerLimit : -1;
            smartProcessingSettings.UpperConfidenceLimit = int.TryParse(upperConfidenceLimit, out upperLimit) ? upperLimit : -1;
            var confidenceLimitsValidationMessage = Functions.SmartProcessingSetting.ValidateConfidenceLimits(smartProcessingSettings);

            if (confidenceLimitsValidationMessage != null)
            {
                return(confidenceLimitsValidationMessage);
            }

            // Классификаторы.
            var classifiers         = Functions.SmartProcessingSetting.GetArioClassifiers(smartProcessingSettings);
            var firstPageClassifier = classifiers.Where(a => a.Name == firstPageClassifierName).FirstOrDefault();
            var typeClassifier      = classifiers.Where(a => a.Name == typeClassifierName).FirstOrDefault();

            if (firstPageClassifier == null || typeClassifier == null)
            {
                return(SettingsValidationMessageStructure.Create(MessageTypes.Error,
                                                                 SmartProcessingSettings.Resources.SetCorrectClassifiers));
            }

            smartProcessingSettings.FirstPageClassifierName = firstPageClassifier.Name;
            smartProcessingSettings.FirstPageClassifierId   = firstPageClassifier.Id;
            smartProcessingSettings.TypeClassifierName      = typeClassifier.Name;
            smartProcessingSettings.TypeClassifierId        = typeClassifier.Id;

            smartProcessingSettings.Save();

            // Предупредить, что выбраны одинаковые классификаторы.
            if (firstPageClassifierName == typeClassifierName)
            {
                return(SettingsValidationMessageStructure.Create(MessageTypes.Warning,
                                                                 SmartProcessingSettings.Resources.SetCorrectClassifiers));
            }
            return(null);
        }