/// <summary> /// Get all species facts that are needed to initialize /// properties in class TaxonListInformation. /// </summary> /// <param name="taxa">The taxa.</param> /// <returns>Taxon list information about specified taxa.</returns> private SpeciesFactList GetSpeciesFacts(IEnumerable <ITaxon> taxa) { ISpeciesFactSearchCriteria searchCriteria = new SpeciesFactSearchCriteria(); searchCriteria.Factors = new FactorList(); FactorList landscapeFactors = CoreData.FactorManager.GetFactorTree(mContext, FactorId.LandscapeFactors).GetAllLeafFactors(); searchCriteria.Factors.AddRange(landscapeFactors); IFactor redlistCategoryFactor = CoreData.FactorManager.GetFactor(mContext, FactorId.RedlistCategory); searchCriteria.Factors.Add(redlistCategoryFactor); IFactor redlistTaxonTypeFactor = CoreData.FactorManager.GetFactor(mContext, FactorId.Redlist_TaxonType); searchCriteria.Factors.Add(redlistTaxonTypeFactor); IFactor redlistOrganismLabel1 = CoreData.FactorManager.GetFactor(mContext, FactorId.Redlist_OrganismLabel1); searchCriteria.Factors.Add(redlistOrganismLabel1); IFactor redlistCriteriaFactor = CoreData.FactorManager.GetFactor(mContext, FactorId.RedlistCriteriaString); searchCriteria.Factors.Add(redlistCriteriaFactor); searchCriteria.IndividualCategories = new IndividualCategoryList { CoreData.FactorManager.GetDefaultIndividualCategory(mContext) }; searchCriteria.Periods = new PeriodList { CoreData.FactorManager.GetCurrentRedListPeriod(mContext) }; searchCriteria.Taxa = new TaxonList(); searchCriteria.Taxa.AddRange(taxa); ISpeciesFactDataSource speciesFactDataSource = new RedListSpeciesFactDataSource(); SpeciesFactList speciesFacts = speciesFactDataSource.GetSpeciesFacts(mContext, searchCriteria); return(speciesFacts); }
/// <summary> /// Get swedish occurrence type species facts. /// </summary> private void GetSwedishOccurrenceSpeciesFactsToCache() { ISpeciesFactSearchCriteria searchCriteria = new SpeciesFactSearchCriteria(); searchCriteria.Factors = new FactorList(); IFactor factor = CoreData.FactorManager.GetFactor(mContext, FactorId.SwedishOccurrence); searchCriteria.Factors.Add(factor); searchCriteria.IndividualCategories = new IndividualCategoryList { CoreData.FactorManager.GetDefaultIndividualCategory(mContext) }; ISpeciesFactDataSource speciesFactDataSource = new RedListSpeciesFactDataSource(); SpeciesFactList speciesFacts = speciesFactDataSource.GetSpeciesFacts(mContext, searchCriteria); if (speciesFacts.IsNotEmpty()) { foreach (ISpeciesFact speciesFact in speciesFacts) { if (TaxonInformationCache.TaxonInformation.ContainsKey(speciesFact.Taxon.Id)) { TaxonInformationCache.TaxonInformation[speciesFact.Taxon.Id].SetSpeciesFact(speciesFact); } } } }
/// <summary> /// Get landscape type species facts. /// </summary> private void GetLandscapeTypeSpeciesFactsToCache() { ISpeciesFactSearchCriteria searchCriteria = new SpeciesFactSearchCriteria(); searchCriteria.Factors = new FactorList(); FactorList factors = CoreData.FactorManager.GetFactorTree(mContext, FactorId.LandscapeFactors).GetAllLeafFactors(); searchCriteria.Factors.AddRange(factors); searchCriteria.IndividualCategories = new IndividualCategoryList { CoreData.FactorManager.GetDefaultIndividualCategory(mContext) }; ISpeciesFactDataSource speciesFactDataSource = new RedListSpeciesFactDataSource(); SpeciesFactList speciesFacts = speciesFactDataSource.GetSpeciesFacts(mContext, searchCriteria); if (speciesFacts.IsNotEmpty()) { foreach (ISpeciesFact speciesFact in speciesFacts) { if (TaxonInformationCache.TaxonInformation.ContainsKey(speciesFact.Taxon.Id)) { TaxonInformationCache.TaxonInformation[speciesFact.Taxon.Id].SetSpeciesFact(speciesFact); } } } }
/// <summary> /// Initiate the cache with species fact information. /// </summary> /// <param name="userContext">The user context.</param> public void Init(IUserContext userContext) { FactorList factors; ISpeciesFactDataSource speciesFactDataSource; ISpeciesFactSearchCriteria searchCriteria; SpeciesFactList speciesFacts; speciesFactDataSource = new RedListSpeciesFactDataSource(); searchCriteria = new SpeciesFactSearchCriteria(); searchCriteria.IndividualCategories = new IndividualCategoryList(); searchCriteria.IndividualCategories.Add(CoreData.FactorManager.GetDefaultIndividualCategory(userContext)); searchCriteria.Periods = new PeriodList(); searchCriteria.Periods.Add(CoreData.FactorManager.GetCurrentRedListPeriod(userContext)); factors = GetFactors(userContext); searchCriteria.Factors = new FactorList(); searchCriteria.Factors.AddRange(factors); speciesFacts = speciesFactDataSource.GetSpeciesFacts(userContext, searchCriteria); foreach (ISpeciesFact speciesFact in speciesFacts) { if (speciesFact.IsRedlistCategorySpecified()) { if (speciesFact.Field1.EnumValue.KeyText.IsEmpty()) { var ex = new Exception("Must be an error in the database for speciesFact.Field1.EnumValue.KeyText taxon =" + speciesFact.Taxon.Id); throw ex; } if (speciesFact.Field1.EnumValue.KeyInt != null) { mCategories[(RedListCategory)speciesFact.Field1.EnumValue.KeyInt.Value].Add(new TaxonIdImplementation(speciesFact.Taxon.Id)); } } } foreach (var category in mCategories.Keys) { foreach (var taxon in mCategories[category]) { if (mTaxonIdCategories.ContainsKey(taxon.Id)) { throw new Exception(); } mTaxonIdCategories.Add(taxon.Id, category); } } }
/// <summary> /// Get previouly red list categories species facts. /// </summary> private void GetRedListOldCategorySpeciesFactsToCache() { ISpeciesFactSearchCriteria searchCriteria = new SpeciesFactSearchCriteria(); searchCriteria.Factors = new FactorList(); IFactor factor = CoreData.FactorManager.GetFactor(mContext, FactorId.RedlistCategory); searchCriteria.Factors.Add(factor); searchCriteria.IndividualCategories = new IndividualCategoryList { CoreData.FactorManager.GetDefaultIndividualCategory(mContext) }; PeriodList periodsList = CoreData.FactorManager.GetPublicPeriods(mContext); IPeriod currentPeriod = CoreData.FactorManager.GetCurrentRedListPeriod(mContext); var oldPeriods = new PeriodList(); foreach (IPeriod period in periodsList) { if (period.Id != currentPeriod.Id) { oldPeriods.Add(period); } } searchCriteria.Periods = oldPeriods; ISpeciesFactDataSource speciesFactDataSource = new RedListSpeciesFactDataSource(); SpeciesFactList speciesFacts = speciesFactDataSource.GetSpeciesFacts(mContext, searchCriteria); if (speciesFacts.IsNotEmpty()) { foreach (ISpeciesFact speciesFact in speciesFacts) { if (TaxonInformationCache.TaxonInformation.ContainsKey(speciesFact.Taxon.Id)) { TaxonInformationCache.TaxonInformation[speciesFact.Taxon.Id].SetSpeciesFact(speciesFact, currentPeriod); } } } }