private DokumentDIP AddDokumentData(DossierDIP dossier, IList <ICmisExtensionElement> extensions, ElasticArchiveRecord documentRecord,
                                            List <RepositoryFile> filesToIgnore)
        {
            Log.Verbose("Adding Dokument data with metadata: {extensions}", JsonConvert.SerializeObject(extensions));

            var dokument = new DokumentDIP
            {
                Titel = string.IsNullOrEmpty(documentRecord?.Title)
                    ? metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dokument/Dokument/Titel")
                    : documentRecord.Title,
                Id = metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:dokument/dokument@id"),
                Erscheinungsform =
                    Enum.TryParse(metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dokument/Dokument/Erscheinungsform"), true,
                                  out ErscheinungsformDokument ef)
                        ? ef
                        : ErscheinungsformDokument.nichtdigital,
                Registrierdatum     = metadataAccess.GetHistorischerZeitpunkt(extensions, "ARELDA:Dokument/Dokument/Registrierdatum"),
                Entstehungszeitraum = documentRecord?.CreationPeriod == null
                    ? metadataAccess.GetHistorischerZeitraum(extensions, "ARELDA:Dokument/Dokument/Entstehungszeitraum")
                    : GetEntstehungszeitraum(documentRecord.CreationPeriod),
                Klassifizierungskategorie = metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dokument/Dokument/Klassifizierungskategorie"),
                Datenschutz = bool.TryParse(metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dokument/Dokument/Datenschutz"),
                                            out var datenschutz) && datenschutz,
                Oeffentlichkeitsstatus            = metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dokument/Dokument/Oeffentlichkeitsstatus"),
                OeffentlichkeitsstatusBegruendung =
                    metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dokument/Dokument/OeffentlichkeitsstatusBegruendung"),
                SonstigeBestimmungen = metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dokument/Dokument/SonstigeBestimmungen"),
                Bemerkung            = string.IsNullOrEmpty(documentRecord?.ZusätzlicheInformationen())
                    ? metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dokument/Dokument/Bemerkung")
                    : documentRecord.ZusätzlicheInformationen(),
                DateiRef = GetFilteredDateiRef(metadataAccess.GetExtendedPropertyValues(extensions, "ARELDA:Dokument/Dokument/DateiRef"),
                                               filesToIgnore)
            };

            // Add optional data
            if (!string.IsNullOrEmpty(documentRecord?.ReferenceCode))
            {
                dokument.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Signatur", Value = documentRecord.ReferenceCode
                });
            }

            if (!string.IsNullOrEmpty(documentRecord?.Level))
            {
                dokument.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Stufe", Value = documentRecord.Level
                });
            }

            if (!string.IsNullOrEmpty(documentRecord?.FormerReferenceCode))
            {
                dokument.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Frühere Signaturen", Value = documentRecord.FormerReferenceCode
                });
            }

            if (documentRecord?.ArchiveplanContext.Count > 0)
            {
                dokument.zusatzDaten.Add(new ZusatzDatenMerkmal
                {
                    Name = "Archivplankontext", Value = JsonConvert.SerializeObject(documentRecord.ArchiveplanContext)
                });
            }

            if (!string.IsNullOrEmpty(documentRecord?.Form()))
            {
                dokument.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Form", Value = documentRecord.Form()
                });
            }

            if (!string.IsNullOrEmpty(documentRecord?.WithinInfo))
            {
                dokument.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Darin", Value = documentRecord.WithinInfo
                });
            }

            if (!string.IsNullOrEmpty(documentRecord?.Thema()))
            {
                dokument.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Thema", Value = documentRecord.Thema()
                });
            }

            if (!string.IsNullOrEmpty(documentRecord?.Format()))
            {
                dokument.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Format", Value = documentRecord.Format()
                });
            }

            if (!string.IsNullOrEmpty(documentRecord?.Urheber()))
            {
                dokument.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Urheber", Value = documentRecord.Urheber()
                });
            }

            if (!string.IsNullOrEmpty(documentRecord?.Verleger()))
            {
                dokument.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Verleger", Value = documentRecord.Verleger()
                });
            }

            if (!string.IsNullOrEmpty(documentRecord?.Abdeckung()))
            {
                dokument.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Abdeckung", Value = documentRecord.Abdeckung()
                });
            }

            if (!string.IsNullOrEmpty(documentRecord?.PrimaryDataLink))
            {
                dokument.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Identifikation digitales Magazin", Value = documentRecord.PrimaryDataLink
                });
            }

            if (documentRecord?.CreationPeriod != null)
            {
                dokument.zusatzDaten.Add(
                    new ZusatzDatenMerkmal {
                    Name = "Entstehungszeitraum Anzeigetext", Value = documentRecord.CreationPeriod.Text
                });
            }

            var reihenfolge =
                metadataAccess.GetExtendedPropertyBagValue(extensions, "ARELDA:Dokument/Dokument/Zusatzdaten/Merkmal", "ReihenfolgeAnalogesDossier");

            if (!string.IsNullOrEmpty(reihenfolge))
            {
                dokument.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "ReihenfolgeAnalogesDossier", Value = reihenfolge
                });
            }


            dossier.Dokument.Add(dokument);
            return(dokument);
        }
        private DossierDIP AddDossierData(IList <DossierDIP> dossierCollection, IList <ICmisExtensionElement> extensions,
                                          ElasticArchiveRecord dossierRecord, bool addDateiRefList, List <RepositoryFile> filesToIgnore)
        {
            Log.Verbose("Adding Dossier data with metadata: {extensions} and index record customfields {dossierRecord}",
                        JsonConvert.SerializeObject(extensions), JsonConvert.SerializeObject(dossierRecord?.CustomFields));

            var dossier = new DossierDIP
            {
                Aktenzeichen = string.IsNullOrEmpty(dossierRecord?.Aktenzeichen())
                    ? metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Aktenzeichen")
                    : dossierRecord.Aktenzeichen(),
                Zusatzmerkmal = string.IsNullOrEmpty(dossierRecord?.Zusatzmerkmal())
                    ? metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Zusatzmerkmal")
                    : dossierRecord.Zusatzmerkmal(),
                Titel = string.IsNullOrEmpty(dossierRecord?.Title)
                    ? metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Titel")
                    : dossierRecord.Title,
                Inhalt = string.IsNullOrEmpty(dossierRecord?.WithinInfo)
                    ? metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Inhalt")
                    : dossierRecord.WithinInfo,
                Id = metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:dossier/dossier@id"),
                Erscheinungsform =
                    Enum.TryParse(metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Erscheinungsform"), true,
                                  out ErscheinungsformDossier ef)
                        ? ef
                        : ErscheinungsformDossier.keineAngabe,
                Umfang = metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Umfang"),
                FederfuehrendeOrganisationseinheit =
                    metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/FederfuehrendeOrganisationseinheit"),
                Eroeffnungsdatum    = metadataAccess.GetHistorischerZeitpunkt(extensions, "ARELDA:Dossier/Dossier/Eroeffnungsdatum"),
                Abschlussdatum      = metadataAccess.GetHistorischerZeitpunkt(extensions, "ARELDA:Dossier/Dossier/Abschlussdatum"),
                Entstehungszeitraum = dossierRecord?.CreationPeriod == null
                    ? metadataAccess.GetHistorischerZeitraum(extensions, "ARELDA:Dossier/Dossier/Entstehungszeitraum")
                    : GetEntstehungszeitraum(dossierRecord.CreationPeriod),
                EntstehungszeitraumAnmerkung = string.IsNullOrEmpty(dossierRecord?.EntstehungszeitraumAnmerkung())
                    ? metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/EntstehungszeitraumAnmerkung")
                    : dossierRecord.EntstehungszeitraumAnmerkung(),
                Klassifizierungskategorie = metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Klassifizierungskategorie"),
                Datenschutz = bool.TryParse(metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Datenschutz"),
                                            out var datenschutz) && datenschutz,
                Oeffentlichkeitsstatus            = metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Oeffentlichkeitsstatus"),
                OeffentlichkeitsstatusBegruendung =
                    metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/OeffentlichkeitsstatusBegruendung"),
                SonstigeBestimmungen = metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/SonstigeBestimmungen"),
                // ToDO: In order to handle Vorgang we would need code that can handle collections. Currently we don't need that property.
                // Vorgang = metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Vorgang"),
                Bemerkung = string.IsNullOrEmpty(dossierRecord?.ZusätzlicheInformationen())
                    ? metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Bemerkung")
                    : dossierRecord.ZusätzlicheInformationen(),
                DateiRef = addDateiRefList
                    ? GetFilteredDateiRef(metadataAccess.GetExtendedPropertyValues(extensions, "ARELDA:Dossier/Dossier/DateiRef"), filesToIgnore)
                    : null
            };

            // Add optional data
            if (!string.IsNullOrEmpty(dossierRecord?.ReferenceCode))
            {
                dossier.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Signatur", Value = dossierRecord.ReferenceCode
                });
            }

            if (!string.IsNullOrEmpty(dossierRecord?.Level))
            {
                dossier.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Stufe", Value = dossierRecord.Level
                });
            }

            if (!string.IsNullOrEmpty(dossierRecord?.FormerReferenceCode))
            {
                dossier.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Frühere Signaturen", Value = dossierRecord.FormerReferenceCode
                });
            }

            if (dossierRecord?.ArchiveplanContext.Count > 0)
            {
                dossier.zusatzDaten.Add(new ZusatzDatenMerkmal
                {
                    Name = "Archivplankontext", Value = JsonConvert.SerializeObject(dossierRecord.ArchiveplanContext)
                });
            }

            if (!string.IsNullOrEmpty(dossierRecord?.Land()))
            {
                dossier.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Land", Value = dossierRecord.Land()
                });
            }

            if (!string.IsNullOrEmpty(dossierRecord?.Form()))
            {
                dossier.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Form", Value = dossierRecord.Form()
                });
            }

            if (!string.IsNullOrEmpty(dossierRecord?.FrüheresAktenzeichen()))
            {
                dossier.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Früheres Aktenzeichen", Value = dossierRecord.FrüheresAktenzeichen()
                });
            }

            if (!string.IsNullOrEmpty(dossierRecord?.PrimaryDataLink))
            {
                dossier.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Identifikation digitales Magazin", Value = dossierRecord.PrimaryDataLink
                });
            }

            if (dossierRecord?.CreationPeriod != null)
            {
                dossier.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Entstehungszeitraum Anzeigetext", Value = dossierRecord.CreationPeriod.Text
                });
            }

            var reihenfolge =
                metadataAccess.GetExtendedPropertyBagValue(extensions, "ARELDA:Dossier/Dossier/Zusatzdaten/Merkmal", "ReihenfolgeAnalogesDossier");

            if (!string.IsNullOrEmpty(reihenfolge))
            {
                dossier.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "ReihenfolgeAnalogesDossier", Value = reihenfolge
                });
            }


            dossierCollection.Add(dossier);
            return(dossier);
        }