Пример #1
0
        public bool Validate(out string errorMessage)
        {
            // check various - including multiple sequence roots and duplicate sequence names
            errorMessage = "";

            foreach (ValidateTest test in Enum.GetValues(typeof(ValidateTest)))
            {
                switch (test)
                {
                case ValidateTest.FieldList:
                    if (FieldList.Count == 0)
                    {
                        errorMessage = Properties.Resources.FtMeta_Validate_MustHaveAtLeastOneField;
                    }
                    break;

                case ValidateTest.QuoteCharSameAsDelimiterChar:
                    if (QuoteChar == DelimiterChar)
                    {
                        errorMessage = Properties.Resources.FtMeta_Validate_QuoteCharAndDelimiterCharMustBeDifferent;
                    }
                    break;

                case ValidateTest.QuoteCharSameAsLineCommentChar:
                    if (QuoteChar == LineCommentChar)
                    {
                        errorMessage = Properties.Resources.FtMeta_Validate_QuoteCharAndLineCommentCharMustBeDifferent;
                    }
                    break;

                case ValidateTest.LineCommentCharSameAsDelimiterChar:
                    if (LineCommentChar == DelimiterChar)
                    {
                        errorMessage = Properties.Resources.FtMeta_Validate_LineCommentCharAndDelimiterCharMustBeDifferent;
                    }
                    break;

                case ValidateTest.SubstitutionChar:
                    if (SubstitutionsEnabled)
                    {
                        if (QuoteChar == SubstitutionChar)
                        {
                            errorMessage = Properties.Resources.FtMeta_Validate_QuoteCharAndSubstitutionCharMustBeDifferent;
                        }
                        else
                        {
                            if (DelimiterChar == SubstitutionChar)
                            {
                                errorMessage = Properties.Resources.FtMeta_Validate_DelimiterCharAndSubstitutionCharMustBeDifferent;
                            }
                            else
                            {
                                if (LineCommentChar == SubstitutionChar)
                                {
                                    errorMessage = Properties.Resources.FtMeta_Validate_LineCommentCharAndSubstitutionCharMustBeDifferent;
                                }
                                else
                                {
                                }
                            }
                        }
                    }
                    break;

                case ValidateTest.EndOfLineType:
                    switch (EndOfLineType)
                    {
                    case FtEndOfLineType.CrLf:
                    case FtEndOfLineType.Auto:
                        if (ValidateEndOfLineTypeChar(Serialization.SerializationCore.CarriageReturnChar, out errorMessage))
                        {
                            ValidateEndOfLineTypeChar(Serialization.SerializationCore.LineFeedChar, out errorMessage);
                        }
                        break;

                    case FtEndOfLineType.Char:
                        ValidateEndOfLineTypeChar(EndOfLineChar, out errorMessage);
                        break;

                    default: throw FtInternalException.Create(InternalError.FtMeta_Validate_UnsupportedEndOfLineType);
                    }
                    break;

                case ValidateTest.SequenceRoot:
                    string firstRootSequenceName;
                    string secondRootSequenceName;
                    if (SequenceList.IsMoreThanOneRoot(out firstRootSequenceName, out secondRootSequenceName))
                    {
                        errorMessage = string.Format(Properties.Resources.FtMeta_Validate_MoreThanOneRootSequence, firstRootSequenceName, secondRootSequenceName);
                    }
                    break;

                case ValidateTest.DuplicateSequenceName:
                    string duplicateSequenceName;
                    if (SequenceList.HasDuplicateName(out duplicateSequenceName))
                    {
                        errorMessage = string.Format(Properties.Resources.FtMeta_Validate_DuplicateSequenceName, duplicateSequenceName);
                    }
                    break;

                case ValidateTest.SequenceItemHasNullField:
                    for (int i = 0; i < SequenceList.Count; i++)
                    {
                        int itemIdx;
                        if (SequenceList[i].AnyItemWithNullField(out itemIdx))
                        {
                            errorMessage = string.Format(Properties.Resources.FtMeta_Validate_SequenceItemWithNullField, SequenceList[i].Name, itemIdx);
                        }
                    }
                    break;

                case ValidateTest.SequenceItemWithConstantFieldHasRedirects:
                    for (int i = 0; i < SequenceList.Count; i++)
                    {
                        int itemIdx;
                        if (SequenceList[i].AnyItemWithConstantFieldHasRedirects(out itemIdx))
                        {
                            errorMessage = string.Format(Properties.Resources.FtMeta_Validate_SequenceItemWithConstantFieldHasRedirects, SequenceList[i].Name, itemIdx);
                        }
                    }
                    break;

                default: throw FtInternalException.Create(InternalError.FtMeta_Validate_UnsupportedValidateTest);
                }

                if (errorMessage.Length != 0)
                {
                    break;
                }
            }

            return(errorMessage == "");
        }