/// <summary>
        /// Požádá o vygenerování BibTeX záznamu publikace a tento záznam vypíše.
        /// </summary>
        public void PrintBibtexEntry()
        {
            Publication     publication     = publicationModel.GetPublicationById(publicationId);
            PublicationType publicationType = PublicationType.GetTypeByName(
                publicationTypes, publication.Type);

            publicationType.Dialog.PrintSpecificBibtexEntry(publication);
        }
        /// <summary>
        /// Požádá o vygenerování citace publikace podle ISO normy a tuto citaci vypíše.
        /// </summary>
        public void PrintIsoCitation()
        {
            Publication     publication     = publicationModel.GetPublicationById(publicationId);
            PublicationType publicationType = PublicationType.GetTypeByName(
                publicationTypes, publication.Type);

            publicationType.Dialog.PrintSpecificIsoCitation(publication);
        }
        /// <summary>
        /// Po potvrzení požádá o odstranění publikace.
        /// </summary>
        public void DeletePublication()
        {
            if (!ReadYesNoAnswer("Opravdu chcete publikaci s ID {0} odstranit?"))
            {
                return;
            }

            Publication     publication     = publicationModel.GetPublicationById(publicationId);
            PublicationType publicationType = PublicationType.GetTypeByName(
                publicationTypes, publication.Type);

            publicationType.Dialog.DeleteSpecificBibliography(publicationId);
            WriteLine("Publikace s ID {0} byla úspěšně odstraněna.", publicationId);
            ExitMenu();
        }
        /// <summary>
        /// Přijme a vypíše bibliografické údaje o publikaci.
        /// </summary>
        public void GetBibliography()
        {
            Publication publication = publicationModel.GetPublicationById(publicationId);

            WriteLine("--- Výpis údajů publikace s ID {0} ---", publicationId);
            WriteLine("Klíč pro uložení BibTeX záznamu: " + publication.Entry);
            Write("Autoři: ");
            WriteAuthors(publication.Author);
            WriteLine("Název publikace: " + publication.Title);
            WriteLine("Rok vydání: " + publication.Year);
            PublicationType publicationType = PublicationType.GetTypeByName(
                publicationTypes, publication.Type);

            WriteLine("Typ publikace: " + publicationType.Description);
            publicationType.Dialog.GetSpecificBibliography(publication);
        }
        /// <summary>
        /// Vypíše seznam publikací pokud bylo dokončeno přidávání filtrů.
        /// </summary>
        public void PrintFilteredPublicationList()
        {
            WriteLine("Seznam publikací:");
            WriteLine("ID\tBibTeX klíč\tTyp\tNázev\tRok\tAutoři");
            List <Publication> publications = publicationModel.GetPublications(
                authorFilter, yearFilter, publicationTypeFilter);

            foreach (Publication publication in publications)
            {
                Write($"{publication.Id}\t{publication.Entry}\t{PublicationType.GetTypeByName(publicationTypes, publication.Type).Description}\t{publication.Title}\t{publication.Year}\t");
                WriteAuthors(publication.Author);
            }

            authorFilter.Clear();
            yearFilter.Clear();
            publicationTypeFilter.Clear();
        }
        /// <summary>
        /// Požádá o vytvoření HTML dokumentu pro umístění publikace na webové stránky.
        /// </summary>
        public void PrintHtmlDocument()
        {
            Publication     publication     = publicationModel.GetPublicationById(publicationId);
            PublicationType publicationType = PublicationType.GetTypeByName(
                publicationTypes, publication.Type);

            WriteLine("Zadejte cestu k souboru se šablonou pro vytvoření HTML dokumentu "
                      + "nebo ponechte prázdný řádek pro použití výchozí šablony pro daný typ publikace:");
            string templatePath = ReadLine();

            WriteLine("Zadejte cestu k výstupnímu souboru exportovaného dokumentu ve formátu HTML "
                      + "nebo ponechte prázdný řádek pro výpis HTML dokumentu na obrazovku:");
            string htmlPath = ReadLine();

            publicationType.Dialog.PrintSpecificHtmlDocument(
                publication, templatePath, htmlPath);
        }
        /// <summary>
        /// Načte od uživatele nové bibliografické údaje o publikaci a zažádá o úpravu údajů v záznamu.
        /// </summary>
        public void UpdateBibliography()
        {
            Publication publication = new Publication();

            WriteLine("Zadejte nový název BibTeX záznamu publikace:");
            string entry = ReadLine().Trim();

            if (!string.IsNullOrEmpty(entry))
            {
                publication.Entry = entry;
            }

            List <Author> authors = null;

            if (ReadYesNoAnswer("Chcete nastavit nový seznam autorů?"))
            {
                WriteLine("Zadejte křestní jméno nového autora NEBO "
                          + "číslo představující ID již použitého autora:");
                authors = ReadAuthorList(authorModel,
                                         "Zadejte křestní jméno dalšího nového autora NEBO "
                                         + "číslo představující ID již použitého autora NEBO "
                                         + "potvrďte hotový seznam autorů klávesou ENTER (tj. vložením prázdného řádku):",
                                         "Zadejte příjmení nového autora:");
            }

            WriteLine("Zadejte nový skutečný název publikace:");
            string title = ReadLine().Trim();

            if (!string.IsNullOrEmpty(title))
            {
                publication.Title = title;
            }

            WriteLine("Zadejte nový rok vydání publikace:");

            int year;

            if (int.TryParse(ReadLine(), out year))
            {
                publication.Year = year;
            }

            if (ReadYesNoAnswer("Chcete upravit text publikace?"))
            {
                WriteLine("Zadejte cestu k textovému souboru publikace pro import textu "
                          + "nebo prázdný řádek pro zadání z konzole: (pouze pro testovací účely)");

                string path = ReadLine().Trim();
                if (string.IsNullOrEmpty(path))
                {
                    WriteLine("Vložte text publikace: (\\n pro nový řádek)");
                    publication.Text = ReadLine().Replace("\\n", Environment.NewLine);;
                }
                else
                {
                    using (var reader = new StreamReader(path))
                    {
                        publication.Text = reader.ReadToEnd();
                    }
                }
            }

            // předání načítání údajů dialogu pro zvolený typ publikace
            PublicationType.GetTypeByName(publicationTypes, publicationModel.GetPublicationById(publicationId).Type)
            .Dialog.UpdateSpecificBibliography(publicationId, publication, authors);
            WriteLine("Publikace s ID {0} byla úspěšně upravena.", publicationId);
        }