/// ------------------------------------------------------------------------------------ /// <summary> /// Sets the SIL Domains and/or sub-domains to which the resource being archived relates. /// </summary> /// <param name="domains">The domains(s) and/or sub-domains. If the resource relates to /// multiple domains, "OR" them together to set all the necessary flags. It is not /// necessary to OR the sub-domains with their corresponding domains, since the /// subdomains already have the correct domain bits set.</param> /// ------------------------------------------------------------------------------------ public void SetDomains(SilDomain domains) { PreventDuplicateMetadataProperty(MetadataProperties.Domains); if (domains.HasFlag(SilDomain.AcademicTraining)) AddDomain(kAcademicTrainingAbbrev, "Academic Training"); if (domains.HasFlag(SilDomain.Anthropology)) { AddDomain(kAnthropologyAbbrev, "Anthropology"); // sub-domains if (domains.HasFlag(SilDomain.Anth_Ethnography)) AddSubDomain(kAnthropologyAbbrev, "ethnography"); if (domains.HasFlag(SilDomain.Anth_Interview)) AddSubDomain(kAnthropologyAbbrev, "interview"); if (domains.HasFlag(SilDomain.Anth_KinshipAnalysis)) AddSubDomain(kAnthropologyAbbrev, "kinship analysis"); } if (domains.HasFlag(SilDomain.ArtsandEthnomusicology)) { AddDomain(kEthnomusicologyAbbrev, "Arts and Ethnomusicology"); // sub-domains if (domains.HasFlag(SilDomain.Emus_ArtisticCommunicationProfile)) AddSubDomain(kEthnomusicologyAbbrev, "artistic communication profile"); if (domains.HasFlag(SilDomain.Emus_PerformanceCollection)) AddSubDomain(kEthnomusicologyAbbrev, "aperformance collection"); if (domains.HasFlag(SilDomain.Emus_SongCollection)) AddSubDomain(kEthnomusicologyAbbrev, "song collection"); if (domains.HasFlag(SilDomain.Emus_SummaryArtisticEventFormAnalysis)) AddSubDomain(kEthnomusicologyAbbrev, "summary artistic event form analysis"); if (domains.HasFlag(SilDomain.Emus_SummaryArtisticGenreAnalysis)) AddSubDomain(kEthnomusicologyAbbrev, "summary artistic genre analysis"); } if (domains.HasFlag(SilDomain.Communications)) AddDomain(kCommunicationsAbbrev, "Communications"); if (domains.HasFlag(SilDomain.CommunityDevelopment)) AddDomain(kCommunityDevelopmentAbbrev, "Community Development"); if (domains.HasFlag(SilDomain.Counseling)) AddDomain(kCounselingAbbrev, "Counseling"); if (domains.HasFlag(SilDomain.InternationalOrGovernmentRelations)) AddDomain(kInternationalOrGovernmentRelationsAbbrev, "International/Government Relations"); if (domains.HasFlag(SilDomain.LanguageAssessment)) { AddDomain(kLanguageAssessmentAbbrev, "Language Assessment"); // sub-domains if (domains.HasFlag(SilDomain.Lgas_SurveyArtifacts)) AddSubDomain(kLanguageAssessmentAbbrev, "survey artifacts"); if (domains.HasFlag(SilDomain.Lgas_SurveyInstrument)) AddSubDomain(kLanguageAssessmentAbbrev, "survey instrument"); if (domains.HasFlag(SilDomain.Lgas_SurveyReport)) AddSubDomain(kLanguageAssessmentAbbrev, "survey report"); if (domains.HasFlag(SilDomain.Lgas_Wordlist)) AddSubDomain(kLanguageAssessmentAbbrev, "wordlist"); } if (domains.HasFlag(SilDomain.LanguageProgramManagement)) AddDomain(kLanguageProgramManagementAbbrev, "Language Program Management"); if (domains.HasFlag(SilDomain.LanguageTechnology)) { AddDomain(kLanguageTechnologyAbbrev, "Language Technology"); // sub-domains if (domains.HasFlag(SilDomain.Ltec_ComputerTool)) AddSubDomain(kLanguageTechnologyAbbrev, "computer tool"); } if (domains.HasFlag(SilDomain.LanguageAndCultureLearning)) AddDomain(kLanguageAndCultureLearningAbbrev, "Language and Culture Learning"); if (domains.HasFlag(SilDomain.LearningAndDevelopment)) AddDomain(kLearningAndDevelopmentAbbrev, "Learning and Development"); if (domains.HasFlag(SilDomain.LibraryOrMuseumOrArchiving)) AddDomain(kLibraryOrMuseumOrArchivingAbbrev, "Library/Museum/Archiving"); if (domains.HasFlag(SilDomain.Linguistics)) { AddDomain(kLinguisticsAbbrev, "Linguistics"); // sub-domains if (domains.HasFlag(SilDomain.Ling_ComparativeDescription)) AddSubDomain(kLinguisticsAbbrev, "comparative description"); if (domains.HasFlag(SilDomain.Ling_DiscourseDescription)) AddSubDomain(kLinguisticsAbbrev, "discourse description"); if (domains.HasFlag(SilDomain.Ling_GrammaticalDescription)) AddSubDomain(kLinguisticsAbbrev, "grammatical description"); if (domains.HasFlag(SilDomain.Ling_InterlinearizedText)) AddSubDomain(kLinguisticsAbbrev, "interlinearized text"); if (domains.HasFlag(SilDomain.Ling_LanguageDocumentation)) AddSubDomain(kLinguisticsAbbrev, "language documentation"); if (domains.HasFlag(SilDomain.Ling_Lexicon)) AddSubDomain(kLinguisticsAbbrev, "lexicon"); if (domains.HasFlag(SilDomain.Ling_PhonologicalDescription)) AddSubDomain(kLinguisticsAbbrev, "phonological description"); if (domains.HasFlag(SilDomain.Ling_SemanticDescription)) AddSubDomain(kLinguisticsAbbrev, "semantic description"); if (domains.HasFlag(SilDomain.Ling_Text)) AddSubDomain(kLinguisticsAbbrev, "text (primary language data)"); } if (domains.HasFlag(SilDomain.LiteracyAndEducation)) { AddDomain(kLiteracyAndEducationAbbrev, "Literacy and Education"); // sub-domains if (domains.HasFlag(SilDomain.Ltcy_OrthographyDescription)) AddSubDomain(kLiteracyAndEducationAbbrev, "orthography description"); } if (domains.HasFlag(SilDomain.Management)) AddDomain(kManagementAbbrev, "Management, General"); if (domains.HasFlag(SilDomain.Publishing)) AddDomain(kPublishingAbbrev, "Publishing"); if (domains.HasFlag(SilDomain.ScriptureUse)) AddDomain(kScriptureUseAbbrev, "Scripture Use"); if (domains.HasFlag(SilDomain.SignLanguages)) AddDomain(kSignLanguagesAbbrev, "Sign Languages"); if (domains.HasFlag(SilDomain.Sociolinguistics)) { AddDomain(kSociolinguisticsAbbrev, "Sociolinguistics"); // sub-domains if (domains.HasFlag(SilDomain.Slng_SociolinguisticDescription)) AddSubDomain(kSociolinguisticsAbbrev, "sociolinguistic description"); } if (domains.HasFlag(SilDomain.Translation)) { AddDomain(kTranslationAbbrev, "Translation"); // sub-domains if (domains.HasFlag(SilDomain.Tran_BackTranslation)) AddSubDomain(kTranslationAbbrev, "back translation"); if (domains.HasFlag(SilDomain.Tran_BibleNames)) AddSubDomain(kTranslationAbbrev, "Bible names"); if (domains.HasFlag(SilDomain.Tran_ComprehensionCheckingQuestions)) AddSubDomain(kTranslationAbbrev, "comprehension checking questions"); if (domains.HasFlag(SilDomain.Tran_Exegesis)) AddSubDomain(kTranslationAbbrev, "exegesis"); if (domains.HasFlag(SilDomain.Tran_KeyBibleTerms)) AddSubDomain(kTranslationAbbrev, "key Bible terms"); } if (domains.HasFlag(SilDomain.VernacularMedia)) AddDomain(kVernacularMediaAbbrev, "VernacularMedia"); }
/// ------------------------------------------------------------------------------------ /// <summary> /// Gets required and optional information that describes the files being submitted in /// the RAMP package. METS = Metadata Encoding & Transmission Standard /// (see http://www.loc.gov/METS/). /// </summary> /// <param name="model">Object provided by SIL.Archiving for setting application /// specific archiving information.</param> /// <param name="fieldWorksVersion">Fieldworks version to display.</param> /// <param name="cache"></param> /// <returns>A list of JSON encoded pairs that describe the information in the RAMP /// package.</returns> /// ------------------------------------------------------------------------------------ private void AddMetsPairs(RampArchivingDlgViewModel model, string fieldWorksVersion, FdoCache cache) { IWritingSystemManager wsManager = cache.ServiceLocator.GetInstance <IWritingSystemManager>(); var wsDefaultVern = wsManager.Get(cache.DefaultVernWs); var vernIso3Code = wsDefaultVern.GetIso3Code(); model.SetScholarlyWorkType(ScholarlyWorkType.PrimaryData); // use year range for CreationDate if possible GetCreateDateRange(cache); var yearStart = m_earliest.Year; var yearEnd = m_latest.Year; if (yearEnd > yearStart) { model.SetCreationDate(yearStart, yearEnd); } else { model.SetCreationDate(m_earliest); } model.SetModifiedDate(cache.LangProject.DateModified); if (!string.IsNullOrEmpty(vernIso3Code)) { model.SetSubjectLanguage(vernIso3Code, wsDefaultVern.LanguageName); } var contentLanguages = new List <ArchivingLanguage>(); var softwareRequirements = new HashSet <string>(); bool fWsUsesKeyman = false; softwareRequirements.Add(string.Format("FieldWorks Language Explorer, Version {0} or later", fieldWorksVersion)); foreach (var ws in cache.ServiceLocator.WritingSystems.CurrentVernacularWritingSystems.Union( cache.ServiceLocator.WritingSystems.CurrentAnalysisWritingSystems).Union( cache.ServiceLocator.WritingSystems.CurrentPronunciationWritingSystems)) { var iso3Code = ws.GetIso3Code(); if (!string.IsNullOrEmpty(iso3Code)) { contentLanguages.Add(new ArchivingLanguage(iso3Code, ws.LanguageSubtag.Name)); } if (!string.IsNullOrEmpty(ws.DefaultFontName)) { softwareRequirements.Add(ws.DefaultFontName); } fWsUsesKeyman |= DoesWritingSystemUseKeyman(ws); } if (fWsUsesKeyman) { softwareRequirements.Add("Keyman"); } model.SetContentLanguages(contentLanguages); model.SetSoftwareRequirements(softwareRequirements); SilDomain domains = SilDomain.Linguistics; var cNotebookRecords = cache.LangProject.ResearchNotebookOA.AllRecords.Count(); if (cNotebookRecords > 0) { domains |= SilDomain.Anthropology; domains |= SilDomain.Anth_Ethnography; // Data notebook data is considered a (partial) ethnography. } var cLexicalEntries = cache.LangProject.LexDbOA.Entries.Count(); if (cLexicalEntries > 0) { domains |= SilDomain.Ling_Lexicon; } // Determine if there are any interlinearized texts if (cache.ServiceLocator.GetInstance <IWfiAnalysisRepository>().AllInstances().Any(a => a.OccurrencesInTexts.Any() && a.GetAgentOpinion(cache.LangProject.DefaultUserAgent) == Opinions.approves)) { domains |= SilDomain.Ling_InterlinearizedText; } var cTexts = cache.LangProject.Texts.Count(); if (cTexts > 0) { domains |= SilDomain.Ling_Text; } /* TODO: If files to include in archive includes a Lift file, set the correct schema */ //if (filesToArchive.Contains( FwFileExtensions.ksLexiconInterchangeFormat ) // model.SetSchemaConformance("LIFT"); /* TODO: If files to include in archive includes a grammar sketch, set the correct subdomain */ //if (filesToArchive.Contains(...) // domains |= SilDomain.Ling_GrammaticalDescription; model.SetDomains(domains); // get the information for DatasetExtent var datasetExtent = new StringBuilder(); const string delimiter = "; "; if (cNotebookRecords > 0) { datasetExtent.AppendLineFormat("{0} Notebook record{1}", new object[] { cNotebookRecords, (cNotebookRecords == 1) ? "" : "s" }, delimiter); } if (cLexicalEntries > 0) { datasetExtent.AppendLineFormat("{0} Lexical entr{1}", new object[] { cLexicalEntries, (cLexicalEntries == 1) ? "y" : "ies" }, delimiter); } if (cTexts > 0) { datasetExtent.AppendLineFormat("{0} Text{1}", new object[] { cTexts, (cTexts == 1) ? "" : "s" }, delimiter); } if (datasetExtent.Length > 0) { model.SetDatasetExtent(datasetExtent + "."); } }