/// <summary> /// Convert a list of WebSpeciesFact instances /// to a SpeciesFactList. /// </summary> /// <param name="userContext"> /// Information about the user that makes this method call. /// </param> /// <param name="webSpeciesFacts">List of WebSpeciesFact instances.</param> /// <returns>List of SpeciesFact instances.</returns> protected override SpeciesFactList GetSpeciesFacts( IUserContext userContext, List <WebSpeciesFact> webSpeciesFacts) { SpeciesFactList speciesFacts; FactorList factors = CoreData.FactorManager.GetFactors(userContext); IndividualCategoryList individualCategories = CoreData.FactorManager.GetIndividualCategories(userContext); PeriodList periods = CoreData.FactorManager.GetPeriods(userContext); speciesFacts = null; if (webSpeciesFacts.IsNotEmpty()) { speciesFacts = new SpeciesFactList(); foreach (WebSpeciesFact webSpeciesFact in webSpeciesFacts) { if (webSpeciesFact.QualityId <= (int)SpeciesFactQualityId.Acceptable) { speciesFacts.Add(GetSpeciesFact(webSpeciesFact, factors, individualCategories, periods)); } // else: Bad quality, do not use this species fact. } } return(speciesFacts); }
/// <summary> /// Method that returns a filtered version of this species fact list. /// The filtering is done on individual categories. /// </summary> /// <param name="individualCategories">Individual categories for the requested species facts.</param> /// <returns>A filtered species fact list.</returns> public SpeciesFactList GetSpeciesFacts(IndividualCategoryList individualCategories) { if (individualCategories == null) { throw new ArgumentException("CategoryList is null", "individualCategories"); } SpeciesFactList filteredList = new SpeciesFactList(); if (this.IsNotEmpty()) { foreach (ISpeciesFact fact in this) { foreach (IIndividualCategory category in individualCategories) { if (fact.IndividualCategory.Id == category.Id) { filteredList.Add(fact); break; } } } } return(filteredList); }
/// <summary> /// Convert a list of WebSpeciesFact instances /// to a SpeciesFactList. /// </summary> /// <param name="userContext"> /// Information about the user that makes this method call. /// </param> /// <param name="webSpeciesFacts">List of WebSpeciesFact instances.</param> /// <returns>List of SpeciesFact instances.</returns> protected virtual SpeciesFactList GetSpeciesFacts(IUserContext userContext, List <WebSpeciesFact> webSpeciesFacts) { SpeciesFactList speciesFacts; FactorList factors = CoreData.FactorManager.GetFactors(userContext); IndividualCategoryList individualCategories = CoreData.FactorManager.GetIndividualCategories(userContext); PeriodList periods = CoreData.FactorManager.GetPeriods(userContext); ReferenceList references; SpeciesFactQualityList speciesFactQualities = CoreData.SpeciesFactManager.GetSpeciesFactQualities(userContext); List <Int32> referenceIds, taxonIds; TaxonList taxa; speciesFacts = null; if (webSpeciesFacts.IsNotEmpty()) { referenceIds = GetReferenceIds(webSpeciesFacts); references = CoreData.ReferenceManager.GetReferences(userContext, referenceIds); taxonIds = GetTaxonIds(webSpeciesFacts); taxa = CoreData.TaxonManager.GetTaxa(userContext, taxonIds); speciesFacts = new SpeciesFactList(); foreach (WebSpeciesFact webSpeciesFact in webSpeciesFacts) { speciesFacts.Add(GetSpeciesFact(userContext, webSpeciesFact, factors, individualCategories, periods, references, speciesFactQualities, taxa)); } } return(speciesFacts); }
/// <summary> /// Set individual categories for specified locale. /// </summary> /// <param name="individualCategories">Individual categories.</param> /// <param name="locale">Locale.</param> protected override void SetIndividualCategories(IndividualCategoryList individualCategories, ILocale locale) { lock (IndividualCategories) { IndividualCategories[locale.ISOCode] = individualCategories; } }
/// <summary> /// Add individual category to search criteria. /// </summary> /// <param name="individualCategory">The individual category.</param> public void Add(IIndividualCategory individualCategory) { if (IndividualCategories.IsNull()) { IndividualCategories = new IndividualCategoryList(); } IndividualCategories.Add(individualCategory); }
/// <summary> /// Remove individual categories from current species fact data set scope. /// The species facts in the data set are updated /// to the new species fact data set scope. /// </summary> /// <param name="userContext"> /// Information about the user that makes this method call. /// </param> /// <param name="selection">Changed scope of the data set.</param> public virtual void RemoveSelection(IUserContext userContext, IndividualCategoryList selection) { ISpeciesFactDataSetSelection newSelection; newSelection = new SpeciesFactDataSetSelection(); newSelection.IndividualCategories.Merge(selection); RemoveSelection(userContext, newSelection); }
/// <summary> /// Create a species fact data set selection instance. /// </summary> public SpeciesFactDataSetSelection() { _factors = new FactorList(true); _hosts = new TaxonList(true); _individualCategories = new IndividualCategoryList(true); _periods = new PeriodList(true); _references = new ReferenceList(true); _taxa = new TaxonList(true); }
/// <summary> /// Get individual categories for specified locale. /// </summary> /// <param name="locale">Locale.</param> /// <returns>Individual categories for specified locale.</returns> protected virtual IndividualCategoryList GetIndividualCategories(ILocale locale) { IndividualCategoryList individualCategories = null; if (IndividualCategories.ContainsKey(locale.ISOCode)) { individualCategories = (IndividualCategoryList)(IndividualCategories[locale.ISOCode]); } return(individualCategories); }
/// <summary> /// Default constructor /// </summary> public SpeciesFactSearchCriteria() { FactorDataTypes = new FactorDataTypeList(); Factors = new FactorList(); FieldSearchCriteria = new SpeciesFactFieldSearchCriteriaList(); Hosts = new TaxonList(); IndividualCategories = new IndividualCategoryList(); Periods = new PeriodList(); References = new ReferenceList(); Taxa = new TaxonList(); }
/// <summary> /// Create a species fact data set instance. /// </summary> public SpeciesFactDataSet() { Factors = new FactorList(true); Hosts = new TaxonList(true); IndividualCategories = new IndividualCategoryList(true); Periods = new PeriodList(true); References = new ReferenceList(true); _selection = new SpeciesFactDataSetSelection(); _selectionCopy = new SpeciesFactDataSetSelection(); SpeciesFacts = new SpeciesFactList(); Taxa = new TaxonList(true); }
/// <summary> /// Get individual categories for specified locale. /// </summary> /// <param name="locale">Locale.</param> /// <returns>Individual categories for specified locale.</returns> protected override IndividualCategoryList GetIndividualCategories(ILocale locale) { IndividualCategoryList individualCategories = null; lock (IndividualCategories) { if (IndividualCategories.ContainsKey(locale.ISOCode)) { individualCategories = (IndividualCategoryList)(IndividualCategories[locale.ISOCode]); } } return(individualCategories); }
/// <summary> /// Remove factors, hosts, individual categories, periods or /// taxa from current species fact data set scope. /// The species facts in the data set are updated /// to the new species fact data set scope. /// </summary> /// <param name="userContext"> /// Information about the user that makes this method call. /// </param> /// <param name="selection">Changed scope of the data set.</param> public virtual void RemoveSelection(IUserContext userContext, ISpeciesFactDataSetSelection selection) { FactorList factors; IndividualCategoryList individualCategories; PeriodList periods; ReferenceList references; TaxonList hosts, taxa; // Check arguments. selection.CheckNotNull("selection"); // Update selection with existing scope. factors = new FactorList(); factors.Merge(_selection.Factors); factors.Remove(selection.Factors); selection.Factors = factors; hosts = new TaxonList(); hosts.Merge(_selection.Hosts); hosts.Remove(selection.Hosts); selection.Hosts = hosts; individualCategories = new IndividualCategoryList(); individualCategories.Merge(_selection.IndividualCategories); individualCategories.Remove(selection.IndividualCategories); selection.IndividualCategories = individualCategories; periods = new PeriodList(); periods.Merge(_selection.Periods); periods.Remove(selection.Periods); selection.Periods = periods; references = new ReferenceList(); references.Merge(_selection.References); references.Remove(selection.References); selection.References = references; taxa = new TaxonList(); taxa.Merge(_selection.Taxa); taxa.Remove(selection.Taxa); selection.Taxa = taxa; // Update species fact data set. UpdateSelection(userContext, selection); }
/// <summary> /// Read rows from the excel xml format. /// Overridden by each class that inherits this class. /// </summary> /// <param name="userContext"> /// Information about the user that makes this method call. /// </param> /// <param name='xmlDoc'>The xml document that the row node will be read from.</param> /// <param name="nsmgr">Namespacemanager containing all namespaces used by the excel compatible xml format</param> protected override void ReadExcelXmlRows(IUserContext userContext, XmlDocument xmlDoc, XmlNamespaceManager nsmgr) { IndividualCategoryList individualCategories; XmlNode dataNode; XmlNodeList rowNodes; rowNodes = xmlDoc.SelectNodes("/ss:Workbook/ss:Worksheet/ss:Table/ss:Row", nsmgr); individualCategories = new IndividualCategoryList(); foreach (XmlNode rowNode in rowNodes) { dataNode = rowNode.SelectSingleNode("ss:Cell/ss:Data", nsmgr); individualCategories.Add(CoreData.FactorManager.GetIndividualCategory(userContext, dataNode.InnerText.WebParseInt32())); } IndividualCategories = individualCategories; }
/// <summary> /// Convert a list of WebIndividualCategory instances /// to a IndividualCategoryList. /// </summary> /// <param name="userContext"> /// Information about the user that makes this method call. /// </param> /// <param name="webIndividualCategories">List of WebIndividualCategory instances.</param> /// <returns>Individual categories.</returns> private IndividualCategoryList GetIndividualCategories(IUserContext userContext, List <WebIndividualCategory> webIndividualCategories) { IndividualCategoryList individualCategories; individualCategories = null; if (webIndividualCategories.IsNotEmpty()) { individualCategories = new IndividualCategoryList(); foreach (WebIndividualCategory webIndividualCategory in webIndividualCategories) { individualCategories.Add(GetIndividualCategory(userContext, webIndividualCategory)); } individualCategories.Sort(); } return(individualCategories); }
/// <summary> /// Reset species fact data set to no species facts. /// This method is used when species fact data set selection /// does not contain both factors and taxa. /// </summary> /// <param name="selection"> /// Scope of the data set is defined by this /// species fact data set selection. /// </param> private void Reset(ISpeciesFactDataSetSelection selection) { Factors = new FactorList(true); Factors.Merge(selection.Factors); Hosts = new TaxonList(true); Hosts.Merge(selection.Hosts); IndividualCategories = new IndividualCategoryList(true); IndividualCategories.Merge(selection.IndividualCategories); Periods = new PeriodList(true); Periods.Merge(selection.Periods); References = new ReferenceList(true); References.Merge(selection.References); SpeciesFacts = new SpeciesFactList(true); Taxa = new TaxonList(); Taxa.Merge(selection.Taxa); // Save selection information. _selection = (ISpeciesFactDataSetSelection)(selection.Clone()); _selectionCopy = (ISpeciesFactDataSetSelection)(selection.Clone()); }
public void RemoveSelectionIndividualCategories() { FactorList factors; IFactor factor1, factor2; IndividualCategoryList individualCategories1, individualCategories2; Int32 speciesFactCount; ITaxon taxon1, taxon2; TaxonList taxa; factor1 = CoreData.FactorManager.GetFactor(GetUserContext(), FactorId.SwedishHistory); factor2 = CoreData.FactorManager.GetFactor(GetUserContext(), FactorId.SwedishOccurrence); taxon1 = CoreData.TaxonManager.GetTaxon(GetUserContext(), TaxonId.DrumGrasshopper); taxon2 = CoreData.TaxonManager.GetTaxon(GetUserContext(), TaxonId.Wolverine); factors = new FactorList(); factors.Add(factor1); factors.Add(factor2); taxa = new TaxonList(); taxa.Add(taxon1); taxa.Add(taxon2); GetDataSet(true).AddSelection(GetUserContext(), factors); GetDataSet().AddSelectionTaxa(GetUserContext(), taxa); individualCategories1 = CoreData.FactorManager.GetIndividualCategories(GetUserContext()); GetDataSet().AddSelection(GetUserContext(), individualCategories1); Assert.IsFalse(GetDataSet().Factors.IsEmpty()); Assert.IsFalse(GetDataSet().SpeciesFacts.IsEmpty()); speciesFactCount = GetDataSet().SpeciesFacts.Count; individualCategories2 = new IndividualCategoryList(); individualCategories2.Add(individualCategories1[1]); individualCategories2.Add(individualCategories1[2]); GetDataSet().RemoveSelection(GetUserContext(), individualCategories2); Assert.IsTrue(speciesFactCount > GetDataSet().SpeciesFacts.Count); individualCategories2 = null; GetDataSet().RemoveSelection(GetUserContext(), individualCategories2); }
/// <summary> /// Set individual categories for specified locale. /// </summary> /// <param name="individualCategories">Individual categories.</param> /// <param name="locale">Locale.</param> protected virtual void SetIndividualCategories(IndividualCategoryList individualCategories, ILocale locale) { IndividualCategories[locale.ISOCode] = individualCategories; }
/// <summary> /// Convert a WebSpeciesFact instance into /// an ISpeciesFact instance. /// </summary> /// <param name="webSpeciesFact">A WebSpeciesFact instance.</param> /// <param name="factors">List of factors.</param> /// <param name="individualCategories">List of individual categories.</param> /// <param name="periods">List of periods.</param> /// <returns>An ISpeciesFact instance.</returns> private ISpeciesFact GetSpeciesFact( WebSpeciesFact webSpeciesFact, FactorList factors, IndividualCategoryList individualCategories, PeriodList periods) { IFactor factor; IPeriod period; ISpeciesFact speciesFact; ITaxon host, taxon; factor = factors.Get(webSpeciesFact.FactorId); if (webSpeciesFact.IsHostSpecified) { host = new Data.Taxon(); host.Id = webSpeciesFact.HostId; } else { if (factor.IsTaxonomic) { host = new Data.Taxon { Id = (int)TaxonId.Life }; } else { host = null; } } if (webSpeciesFact.IsPeriodSpecified) { period = periods.Get(webSpeciesFact.PeriodId); } else { period = null; } taxon = new Data.Taxon(); taxon.Id = webSpeciesFact.TaxonId; speciesFact = new SpeciesFact( webSpeciesFact.Id, taxon, individualCategories.Get(webSpeciesFact.IndividualCategoryId), factor, host, period, webSpeciesFact.FieldValue1, webSpeciesFact.IsFieldValue1Specified, webSpeciesFact.FieldValue2, webSpeciesFact.IsFieldValue2Specified, webSpeciesFact.FieldValue3, webSpeciesFact.IsFieldValue3Specified, webSpeciesFact.FieldValue4, webSpeciesFact.IsFieldValue4Specified, webSpeciesFact.FieldValue5, webSpeciesFact.IsFieldValue5Specified, null, null, webSpeciesFact.ModifiedBy, webSpeciesFact.ModifiedDate); return(speciesFact); }
/// <summary> /// Convert a WebSpeciesFact instance into /// an ISpeciesFact instance. /// </summary> /// <param name="userContext"> /// Information about the user that makes this method call. /// </param> /// <param name="webSpeciesFact">A WebSpeciesFact instance.</param> /// <param name="factors">List of factors.</param> /// <param name="individualCategories">List of individual categories.</param> /// <param name="periods">List of periods.</param> /// <param name="references">List of references.</param> /// <param name="speciesFactQualities">List of species fact qualities.</param> /// <param name="taxa">Taxa that are used in the species facts.</param> /// <returns>An ISpeciesFact instance.</returns> private ISpeciesFact GetSpeciesFact(IUserContext userContext, WebSpeciesFact webSpeciesFact, FactorList factors, IndividualCategoryList individualCategories, PeriodList periods, ReferenceList references, SpeciesFactQualityList speciesFactQualities, TaxonList taxa) { IFactor factor; IPeriod period; ISpeciesFact speciesFact; ITaxon host, taxon; factor = factors.Get(webSpeciesFact.FactorId); if (webSpeciesFact.IsHostSpecified) { #if EXAMINE_PROBLEM if (!(taxa.Contains(webSpeciesFact.HostId))) { throw new Exception("Host with id = " + webSpeciesFact.HostId + " is not in taxon list." + webSpeciesFact.GetString()); } #endif host = taxa.Get(webSpeciesFact.HostId); } else { if (factor.IsTaxonomic) { host = CoreData.TaxonManager.GetTaxon(userContext, 0); } else { host = null; } } if (webSpeciesFact.IsPeriodSpecified) { #if EXAMINE_PROBLEM if (!(periods.Contains(webSpeciesFact.PeriodId))) { throw new Exception("Period with id = " + webSpeciesFact.PeriodId + " is not in period list." + webSpeciesFact.GetString()); } #endif period = periods.Get(webSpeciesFact.PeriodId); } else { period = null; } #if EXAMINE_PROBLEM if (!(taxa.Contains(webSpeciesFact.TaxonId))) { throw new Exception("Taxon with id = " + webSpeciesFact.TaxonId + " is not in taxon list." + webSpeciesFact.GetString()); } #endif taxon = taxa.Get(webSpeciesFact.TaxonId); #if EXAMINE_PROBLEM if (!(individualCategories.Contains(webSpeciesFact.IndividualCategoryId))) { throw new Exception("Individual category with id = " + webSpeciesFact.IndividualCategoryId + " is not in individual category list." + webSpeciesFact.GetString()); } if (!(speciesFactQualities.Contains(webSpeciesFact.QualityId))) { throw new Exception("Quality with id = " + webSpeciesFact.QualityId + " is not in quality list." + webSpeciesFact.GetString()); } if (!(references.Contains(webSpeciesFact.ReferenceId))) { throw new Exception("Reference with id = " + webSpeciesFact.ReferenceId + " is not in reference list." + webSpeciesFact.GetString()); } #endif speciesFact = CoreData.SpeciesFactManager.GetSpeciesFact(userContext, webSpeciesFact.Id, taxon, individualCategories.Get(webSpeciesFact.IndividualCategoryId), factor, host, period, webSpeciesFact.FieldValue1, webSpeciesFact.IsFieldValue1Specified, webSpeciesFact.FieldValue2, webSpeciesFact.IsFieldValue2Specified, webSpeciesFact.FieldValue3, webSpeciesFact.IsFieldValue3Specified, webSpeciesFact.FieldValue4, webSpeciesFact.IsFieldValue4Specified, webSpeciesFact.FieldValue5, webSpeciesFact.IsFieldValue5Specified, speciesFactQualities.Get(webSpeciesFact.QualityId), references.Get(webSpeciesFact.ReferenceId), webSpeciesFact.ModifiedBy, webSpeciesFact.ModifiedDate); return(speciesFact); }
/// <summary> /// Update information about which factors, hosts, /// individual categories, periods, references and taxa /// that are used in the species facts. /// </summary> /// <param name="userContext"> /// Information about the user that makes this method call. /// </param> /// <param name="selection"> /// Scope of the data set is defined by this /// species fact data set selection. /// </param> /// <param name="speciesFacts">Species facts.</param> private void UpdateScope(IUserContext userContext, ISpeciesFactDataSetSelection selection, SpeciesFactList speciesFacts) { Factors = new FactorList(true); Factors.AddRange(selection.Factors); Hosts = new TaxonList(true); Hosts.AddRange(selection.Hosts); IndividualCategories = new IndividualCategoryList(true); IndividualCategories.AddRange(selection.IndividualCategories); Periods = new PeriodList(true); Periods.AddRange(selection.Periods); References = new ReferenceList(true); Taxa = new TaxonList(true); Taxa.AddRange(selection.Taxa); if (speciesFacts.IsNotEmpty()) { foreach (ISpeciesFact speciesFact in speciesFacts) { Factors.Merge(speciesFact.Factor); if (speciesFact.HasHost) { Hosts.Merge(speciesFact.Host); } IndividualCategories.Merge(speciesFact.IndividualCategory); if (speciesFact.HasPeriod) { Periods.Merge(speciesFact.Period); } if (speciesFact.HasReference) { References.Merge(speciesFact.Reference); } Taxa.Merge(speciesFact.Taxon); } } // Set default values if no values are entered. if (Hosts.IsEmpty()) { Hosts.Add(CoreData.TaxonManager.GetTaxon(userContext, TaxonId.Life)); } if (IndividualCategories.IsEmpty()) { IndividualCategories.Add(CoreData.FactorManager.GetDefaultIndividualCategory(userContext)); } if (Periods.IsEmpty()) { Periods.AddRange(CoreData.FactorManager.GetPeriods(userContext)); } // Sort all lists. Factors.Sort(); Hosts.Sort(); IndividualCategories.Sort(); Periods.Sort(); References.Sort(); Taxa.Sort(); }
/// <summary> /// Method that returns a filtered version of this species fact list. The filtering is done on several parameters. /// </summary> /// <param name="individualCategories">Individual categories for the requested species facts.</param> /// <param name="periods">Periods for the requested species facts.</param> /// <param name="hosts">Hosts for the requested species facts.</param> /// <param name="taxa">Taxa for the requested species facts.</param> /// <param name="factors">Factors for the requested species facts.</param> /// <returns>A species fact list.</returns> public SpeciesFactList GetSpeciesFacts(IndividualCategoryList individualCategories, PeriodList periods, TaxonList hosts, TaxonList taxa, FactorList factors) { SpeciesFactList filteredList = new SpeciesFactList(); if (this.IsNotEmpty()) { foreach (ISpeciesFact fact in this) { bool go = true; if (fact.IndividualCategory != null) { if ((individualCategories != null) && (individualCategories.Count > 0)) { if (!individualCategories.Exists(fact.IndividualCategory)) { go = false; } } } if (go) { if (fact.Period != null) { if ((periods != null) && (periods.Count > 0)) { if (!periods.Exists(fact.Period)) { go = false; } } } } if (go) { if (fact.Host != null) { // For the time being we only accept species facts that dont have a host. go = false; //if ((hosts != null) && (hosts.Count > 0)) //{ // if (!hosts.Exists(fact.Host)) // go = false; //} } } if (go) { if (fact.Taxon != null) { if ((taxa != null) && (taxa.Count > 0)) { if (!taxa.Exists(fact.Taxon)) { go = false; } } } } if (go) { if (fact.Factor != null) { if ((factors != null) && (factors.Count > 0)) { if (!factors.Exists(fact.Factor)) { go = false; } } } } if (go) { filteredList.Add(fact); } } } return(filteredList); }