Ejemplo n.º 1
0
        private void _applyButton_Click
        (
            object sender,
            EventArgs e
        )
        {
            AuthorInfo ethalon = _propertyGrid.SelectedObject as AuthorInfo;

            if (ReferenceEquals(ethalon, null))
            {
                WriteLine("Не задан эталон");
                return;
            }
            string familyName = ethalon.FamilyName;

            if (string.IsNullOrEmpty(familyName))
            {
                WriteLine("Эталон пуст");
                return;
            }
            TermData[] terms = _termDataBindingSource.DataSource as TermData[];
            if (ArrayUtility.IsNullOrEmpty(terms))
            {
                WriteLine("Нет записей для коррекции");
                return;
            }
            string[] selectedTerms = terms
                                     .Where(term => term.Selected)
                                     .Select(term => term.Text)
                                     .ToArray();
            if (ArrayUtility.IsNullOrEmpty(selectedTerms))
            {
                WriteLine("Нет записей для коррекции");
                return;
            }

            StringBuilder query = new StringBuilder();
            bool          first = true;

            foreach (string term in selectedTerms)
            {
                if (!first)
                {
                    query.Append(" + ");
                }
                query.AppendFormat
                (
                    "\"{0}{1}\"",
                    Prefix,
                    term
                );

                first = false;
            }

            try
            {
                Provider = GetProvider();
                Controller.Run
                (
                    () =>
                {
                    int[] found = Provider.Search(query.ToString());
                    WriteLine
                    (
                        "Отобрано для коррекции: {0}",
                        found.Length
                    );
                    foreach (int mfn in found)
                    {
                        MarcRecord record
                            = Provider.ReadRecord(mfn);
                        if (!ReferenceEquals(record, null))
                        {
                            AuthorInfo[] authors
                                = AuthorInfo.ParseRecord
                                  (
                                      record,
                                      AuthorInfo.AllKnownTags
                                  );
                            AuthorInfo[] selected = authors.Where
                                                    (
                                a => a.FamilyName
                                .SameString(familyName)
                                                    )
                                                    .ToArray();
                            if (selected.Length == 0)
                            {
                                WriteLine
                                (
                                    "MFN {0} пропущен",
                                    mfn
                                );
                            }
                            else
                            {
                                foreach (AuthorInfo theAuthor in selected)
                                {
                                    WriteLine
                                    (
                                        "MFN {0}: {1}",
                                        mfn,
                                        theAuthor.Field
                                    );
                                    ethalon.ApplyToField
                                    (
                                        theAuthor.Field
                                        .ThrowIfNull("theAuthor.Field")
                                    );
                                }
                                Provider.WriteRecord(record);
                            }
                        }
                    }
                }
                );
            }
            finally
            {
                ReleaseProvider();
            }

            _keyBox_ButtonClick(sender, e);
            WriteLine("Обработка завершена");
        }